import { Body, Controller, Get, HttpCode, HttpStatus, Param, Patch, Post, Query, } from '@nestjs/common'; import { ApiOkResponse, ApiTags } from '@nestjs/swagger'; import { type PageDto } from '../../common/dto/page.dto'; import { RoleType } from '../../constants'; import { ApiPageOkResponse, Auth, Whitelist } from '../../decorators'; import { BlockNotFoundException } from '../../exceptions'; import { BlockService } from './block.service'; import { BlockDto } from './dtos/block.dto'; import { CreateBlockDto } from './dtos/create-block.dto'; import { BlockPageOptionsDto } from './dtos/get-block-page.dto'; import { UpdateBlockDto } from './dtos/update-block.dto'; @Controller('block') @ApiTags('block') export class BlockController { constructor(private blockService: BlockService) {} @Get() @Whitelist() @Auth([RoleType.ADMIN, RoleType.USER]) @HttpCode(HttpStatus.OK) @ApiPageOkResponse({ type: BlockDto, description: 'Get public holidays list', }) async getPublicHoliday( @Query() query: BlockPageOptionsDto, ): Promise<PageDto<BlockDto>> { return this.blockService.findMany(query); } @Post() @Whitelist() @Auth([RoleType.ADMIN]) @HttpCode(HttpStatus.OK) @ApiOkResponse() async createPublicHoliday(@Body() body: CreateBlockDto): Promise<BlockDto> { const blockEntity = await this.blockService.createBlock(body); return blockEntity.toDto(); } @Patch(':id') @Whitelist() @Auth([RoleType.ADMIN]) @HttpCode(HttpStatus.OK) @ApiOkResponse() async updatePublicHoliday( @Param('id') id: Uuid, @Body() body: UpdateBlockDto, ): Promise<BlockDto> { const toPatchEntity = await this.blockService.findOne({ id, }); if (!toPatchEntity) { throw new BlockNotFoundException(); } const blockEntity = await this.blockService.updateblock( toPatchEntity, body, ); return blockEntity.toDto(); } }