penisularhr / src / modules / vehicle / vehicle-name.controller.ts
vehicle-name.controller.ts
Raw
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();
  }
}