ZOD-309-child-transaction-history-parent-→-child-transfers

This commit is contained in:
Abdalhamid Alhamad
2025-10-16 12:25:16 +03:00
parent f6fa74897a
commit 15621124ad
13 changed files with 331 additions and 22 deletions

View File

@ -11,7 +11,7 @@ import {
Query,
UseGuards,
} from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { ApiBearerAuth, ApiTags, ApiQuery } from '@nestjs/swagger';
import { Roles } from '~/auth/enums';
import { IJwtPayload } from '~/auth/interfaces';
import { AllowedRoles, AuthenticatedUser, Public } from '~/common/decorators';
@ -33,6 +33,7 @@ import {
TransferToJuniorResponseDto,
} from '../dtos/response';
import { WeeklySummaryResponseDto } from '../dtos/response/weekly-summary.response.dto';
import { JuniorHomeResponseDto, PagedChildTransfersResponseDto } from '~/card/dtos/responses';
import { JuniorService } from '../services';
@Controller('juniors')
@ -157,4 +158,37 @@ export class JuniorController {
const summary = await this.juniorService.getWeeklySummary(juniorId, user.sub);
return ResponseFactory.data(summary);
}
@Get(':juniorId/home')
@UseGuards(RolesGuard)
@AllowedRoles(Roles.JUNIOR, Roles.GUARDIAN)
@ApiQuery({ name: 'size', required: false, type: Number, example: 5 })
@ApiDataResponse(JuniorHomeResponseDto)
async getJuniorHome(
@Param('juniorId', CustomParseUUIDPipe) juniorId: string,
@AuthenticatedUser() user: IJwtPayload,
@Query('size') size?: number,
) {
const limit = Math.max(1, Math.min(Number(size) || 5, 20));
const res = await this.juniorService.getJuniorHome(juniorId, user.sub, limit);
return ResponseFactory.data(res);
}
@Get(':juniorId/transfers')
@UseGuards(RolesGuard)
@AllowedRoles(Roles.JUNIOR, Roles.GUARDIAN)
@ApiQuery({ name: 'page', required: false, type: Number, example: 1 })
@ApiQuery({ name: 'size', required: false, type: Number, example: 10 })
@ApiDataResponse(PagedChildTransfersResponseDto)
async getJuniorTransfers(
@Param('juniorId', CustomParseUUIDPipe) juniorId: string,
@AuthenticatedUser() user: IJwtPayload,
@Query('page') page?: number,
@Query('size') size?: number,
) {
const pageNum = Math.max(1, Number(page) || 1);
const pageSize = Math.max(1, Math.min(Number(size) || 10, 50));
const res = await this.juniorService.getJuniorTransfers(juniorId, user.sub, pageNum, pageSize);
return ResponseFactory.data(res);
}
}