diff --git a/src/adapters/postgres/attendance-adapter.ts b/src/adapters/postgres/attendance-adapter.ts index 12e5c362..054f3028 100644 --- a/src/adapters/postgres/attendance-adapter.ts +++ b/src/adapters/postgres/attendance-adapter.ts @@ -110,15 +110,13 @@ export class PostgresAttendanceService { // Process the data to calculate counts based on facets const tree = await this.facetedSearch({ data: attendanceList, facets: facetFields }); - // const result = Object.entries(tree).map(([key, value]) => ({ [key]: value })); - let result = []; + let result = {}; // Process the data to calculate counts based on facets for (const facet of facetFields) { const { field } = facet; const tree = await this.facetedSearch({ data: attendanceList, facets: [facet] }); - const formattedData = Object.entries(tree[field]).map(([key, value]) => ({ [key]: value })); - result.push({ [field]: formattedData }); // Modified the structure here + result[field] = tree[field]; } diff --git a/src/attendance/attendance.controller.ts b/src/attendance/attendance.controller.ts index b7eae755..ca226b9a 100644 --- a/src/attendance/attendance.controller.ts +++ b/src/attendance/attendance.controller.ts @@ -174,46 +174,4 @@ export class AttendanceController { return response.status(result.statusCode).json(result); } - @Post("/average-report") - @ApiBasicAuth("access-token") - @ApiOkResponse({ description: "Average attendance Report" }) - @ApiBadRequestResponse({ description: "Bad Request" }) - @ApiInternalServerErrorResponse({ description: "Internal Server error" }) - @ApiBody({ type: AttendanceStatsDto }) - @SerializeOptions({ - strategy: "excludeAll", - }) - @UsePipes(ValidationPipe) - public async report( - @Headers() headers, - @Req() request: Request, - @Res() response: Response, - @Body() attendanceStatsDto: AttendanceStatsDto - ) { - let tenantid = headers["tenantid"]; - - const result = await this.attendaceAdapter.buildAttenceAdapter().attendanceReport( - attendanceStatsDto - ); - return response.status(result.statusCode).json(result); - } - - /** No longer required in Shiksha 2.0 */ - /* - @Get("usersegment/:attendance") - @UseInterceptors(ClassSerializerInterceptor) - // @ApiBasicAuth("access-token") - @ApiOkResponse({ description: " Ok." }) - @ApiForbiddenResponse({ description: "Forbidden" }) - @ApiQuery({ name: "groupId", required: false }) - @ApiQuery({ name: "date" }) - public async userSegment( - @Query("groupId") groupId: string, - @Param("attendance") attendance: string, - @Query("date") date: string, - @Req() request: Request - ) { - return await this.service.userSegment(groupId, attendance, date, request); - } - */ } diff --git a/src/attendance/dto/attendance-search.dto.ts b/src/attendance/dto/attendance-search.dto.ts index 7a3b5bee..2fc18850 100644 --- a/src/attendance/dto/attendance-search.dto.ts +++ b/src/attendance/dto/attendance-search.dto.ts @@ -6,10 +6,25 @@ import { CohortMembersDto } from "src/cohortMembers/dto/cohortMembers.dto"; import { Type } from "class-transformer"; + + @ValidatorConstraint({ name: 'isNotAfterFromDate', async: false }) +export class IsFromDateBeforeToDateConstraint implements ValidatorConstraintInterface { + validate(fromDate: Date, args: ValidationArguments) { + const toDate = args.object[args.constraints[0]]; + const res = isSameDay(fromDate, toDate) || isBefore(fromDate, toDate); + return res + } + + defaultMessage(args: ValidationArguments) { + return 'From Date must be before or equal to To Date'; + } +} + export class AttendanceFiltersDto { @ApiPropertyOptional({default:"yyyy-mm-dd"}) @IsOptional() @Matches(/^\d{4}-\d{2}-\d{2}$/, { message: 'Please provide a valid date in the format yyyy-mm-dd' }) + @Validate(IsFromDateBeforeToDateConstraint, ['toDate']) fromDate?: Date; @ApiPropertyOptional({default:"yyyy-mm-dd"})