import { Body, Controller, Get, HttpCode, HttpStatus, 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, UUIDParam, Whitelist, } from '../../decorators'; import { VehicleNotFoundException } from '../../exceptions'; import { CreateVehicleNameDto } from './dtos/create-vehicle-name.dto'; import { VehicleNamePageOptionsDto } from './dtos/get-vehicle-name-page.dto'; import { UpdateVehicleNameDto } from './dtos/update-vehicle-name.dto'; import { VehicleNameDto } from './dtos/vehicle-name.dto'; import { VehicleNameService } from './vehicle-name.service'; @Controller('vehicle-name') @ApiTags('vehicle-name') export class VehicleNameController { constructor(private vehicleNameService: VehicleNameService) {} @Get() @Whitelist() @Auth([RoleType.ADMIN, RoleType.USER]) @HttpCode(HttpStatus.OK) @ApiPageOkResponse({ type: VehicleNameDto, description: 'Get vehicle name list', }) async getSector( @Query() query: VehicleNamePageOptionsDto, ): Promise<PageDto<VehicleNameDto>> { return this.vehicleNameService.findMany(query); } @Post() @Whitelist() @Auth([RoleType.ADMIN]) @HttpCode(HttpStatus.OK) @ApiOkResponse() async createPublicHoliday( @Body() body: CreateVehicleNameDto, ): Promise<VehicleNameDto> { const vehicleNameEntity = await this.vehicleNameService.createVehicleName(body); return vehicleNameEntity.toDto(); } @Patch(':id') @Whitelist() @Auth([RoleType.ADMIN]) @HttpCode(HttpStatus.OK) @ApiOkResponse() async updatePublicHoliday( @UUIDParam('id') id: Uuid, @Body() body: UpdateVehicleNameDto, ): Promise<VehicleNameDto> { const toPatchEntity = await this.vehicleNameService.findOne({ id, }); if (!toPatchEntity) { throw new VehicleNotFoundException(); } const vehicleNameEntity = await this.vehicleNameService.updateVehicleName( toPatchEntity, body, ); return vehicleNameEntity.toDto(); } }