import { Controller, Get, Query, UseGuards } from '@nestjs/common'; import { ApiBearerAuth, ApiTags, ApiQuery } from '@nestjs/swagger'; import { Roles } from '~/auth/enums'; import { IJwtPayload } from '~/auth/interfaces'; import { AllowedRoles, AuthenticatedUser } from '~/common/decorators'; import { AccessTokenGuard, RolesGuard } from '~/common/guards'; import { ApiDataResponse, ApiLangRequestHeader } from '~/core/decorators'; import { ResponseFactory } from '~/core/utils'; import { ParentHomeResponseDto, PagedParentTransfersResponseDto } from '~/card/dtos/responses'; import { GuardianTransactionsService } from '../services'; @Controller('guardians/me') @ApiTags('Guardians') @ApiBearerAuth() @ApiLangRequestHeader() @UseGuards(AccessTokenGuard, RolesGuard) @AllowedRoles(Roles.GUARDIAN) export class GuardianTransactionsController { constructor(private readonly guardianTxService: GuardianTransactionsService) {} @Get('home') @ApiQuery({ name: 'size', required: false, type: Number, example: 5 }) @ApiDataResponse(ParentHomeResponseDto) async getHome( @AuthenticatedUser() user: IJwtPayload, @Query('size') size?: number, ) { const limit = Math.max(1, Math.min(Number(size) || 5, 20)); const res = await this.guardianTxService.getHome(user.sub, limit); return ResponseFactory.data(res); } @Get('transfers') @ApiQuery({ name: 'page', required: false, type: Number, example: 1 }) @ApiQuery({ name: 'size', required: false, type: Number, example: 10 }) @ApiDataResponse(PagedParentTransfersResponseDto) async getTransfers( @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.guardianTxService.getTransfers(user.sub, pageNum, pageSize); return ResponseFactory.data(res); } }