mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-08-25 13:49:40 +00:00
74 lines
2.6 KiB
TypeScript
74 lines
2.6 KiB
TypeScript
import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Post, Query, UseGuards } from '@nestjs/common';
|
|
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
|
|
import { Roles } from '~/auth/enums';
|
|
import { IJwtPayload } from '~/auth/interfaces';
|
|
import { AllowedRoles, AuthenticatedUser } from '~/common/decorators';
|
|
import { RolesGuard } from '~/common/guards';
|
|
import { ApiDataPageResponse, ApiDataResponse, ApiLangRequestHeader } from '~/core/decorators';
|
|
import { PageOptionsRequestDto } from '~/core/dtos';
|
|
import { CustomParseUUIDPipe } from '~/core/pipes';
|
|
import { ResponseFactory } from '~/core/utils';
|
|
import { CreateAllowanceRequestDto } from '../dtos/request';
|
|
import { AllowanceResponseDto } from '../dtos/response';
|
|
import { AllowancesService } from '../services';
|
|
|
|
@Controller('allowances')
|
|
@ApiTags('Allowances')
|
|
@ApiBearerAuth()
|
|
@ApiLangRequestHeader()
|
|
export class AllowancesController {
|
|
constructor(private readonly allowancesService: AllowancesService) {}
|
|
|
|
@Post()
|
|
@UseGuards(RolesGuard)
|
|
@AllowedRoles(Roles.GUARDIAN)
|
|
@ApiDataResponse(AllowanceResponseDto)
|
|
async createAllowance(@AuthenticatedUser() { sub }: IJwtPayload, @Body() body: CreateAllowanceRequestDto) {
|
|
const allowance = await this.allowancesService.createAllowance(sub, body);
|
|
|
|
return ResponseFactory.data(new AllowanceResponseDto(allowance));
|
|
}
|
|
|
|
@Get()
|
|
@UseGuards(RolesGuard)
|
|
@AllowedRoles(Roles.GUARDIAN)
|
|
@ApiDataPageResponse(AllowanceResponseDto)
|
|
async findAllowances(@AuthenticatedUser() { sub }: IJwtPayload, @Query() query: PageOptionsRequestDto) {
|
|
const [allowances, itemCount] = await this.allowancesService.findAllowances(sub, query);
|
|
|
|
return ResponseFactory.dataPage(
|
|
allowances.map((allowance) => new AllowanceResponseDto(allowance)),
|
|
{
|
|
itemCount,
|
|
page: query.page,
|
|
size: query.size,
|
|
},
|
|
);
|
|
}
|
|
|
|
@Get(':allowanceId')
|
|
@UseGuards(RolesGuard)
|
|
@AllowedRoles(Roles.GUARDIAN)
|
|
@ApiDataResponse(AllowanceResponseDto)
|
|
async findAllowanceById(
|
|
@AuthenticatedUser() { sub }: IJwtPayload,
|
|
@Param('allowanceId', CustomParseUUIDPipe) allowanceId: string,
|
|
) {
|
|
const allowance = await this.allowancesService.findAllowanceById(allowanceId, sub);
|
|
|
|
return ResponseFactory.data(new AllowanceResponseDto(allowance));
|
|
}
|
|
|
|
@Delete(':allowanceId')
|
|
@UseGuards(RolesGuard)
|
|
@AllowedRoles(Roles.GUARDIAN)
|
|
@ApiDataResponse(AllowanceResponseDto)
|
|
@HttpCode(HttpStatus.NO_CONTENT)
|
|
deleteAllowance(
|
|
@AuthenticatedUser() { sub }: IJwtPayload,
|
|
@Param('allowanceId', CustomParseUUIDPipe) allowanceId: string,
|
|
) {
|
|
return this.allowancesService.deleteAllowance(sub, allowanceId);
|
|
}
|
|
}
|