import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, UseGuards } from "@nestjs/common"; import { ExpenseCodesService } from "../services/expense-codes.service"; import { ApiTags, ApiBearerAuth, ApiOperation, ApiResponse } from "@nestjs/swagger"; import { JwtAuthGuard } from "src/modules/authentication/guards/jwt-auth.guard"; import { ExpenseCodes } from "@prisma/client"; import { Roles as RoleEnum } from '.prisma/client'; import { RolesAllowed } from "src/common/decorators/roles.decorators"; import { CreateExpenseCodeDto } from "../dtos/create-expense-code"; import { ExpenseCodesEntity } from "../dtos/swagger-entities/expense-codes.entity"; import { UpdateExpenseCodeDto } from "../dtos/update-expense-code"; @ApiTags('Expense Codes') @ApiBearerAuth('access-token') @UseGuards(JwtAuthGuard) @Controller('expense-codes') export class ExpenseCodesController { constructor(private readonly expenseCodesService: ExpenseCodesService) {} @Post() @RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.HR) @ApiOperation({ summary: 'Create expense code' }) @ApiResponse({ status: 201, description: 'Expense code created',type: ExpenseCodesEntity }) @ApiResponse({ status: 400, description: 'Incomplete task or invalid data' }) create(@Body()dto: CreateExpenseCodeDto): Promise { return this.expenseCodesService.create(dto); } @Get() @RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.HR) @ApiOperation({ summary: 'Find all expense codes' }) @ApiResponse({ status: 201, description: 'List of expense codes found',type: ExpenseCodesEntity, isArray: true }) @ApiResponse({ status: 400, description: 'List of expense codes not found' }) findAll(): Promise { return this.expenseCodesService.findAll(); } @Get(':id') @RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.HR) @ApiOperation({ summary: 'Find expense code' }) @ApiResponse({ status: 201, description: 'Expense code found',type: ExpenseCodesEntity }) @ApiResponse({ status: 400, description: 'Expense code not found' }) findOne(@Param('id', ParseIntPipe) id: number): Promise { return this.expenseCodesService.findOne(id); } @Patch(':id') @RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.HR) @ApiOperation({ summary: 'Update expense code' }) @ApiResponse({ status: 201, description: 'Expense code updated',type: ExpenseCodesEntity }) @ApiResponse({ status: 400, description: 'Expense code not found' }) update(@Param('id', ParseIntPipe) id: number, @Body() dto: UpdateExpenseCodeDto): Promise { return this.expenseCodesService.update(id,dto); } @Delete(':id') @RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.HR) @ApiOperation({ summary: 'Delete expense code' }) @ApiResponse({ status: 201, description: 'Expense code deleted',type: ExpenseCodesEntity }) @ApiResponse({ status: 400, description: 'Expense code not found' }) remove(@Param('id', ParseIntPipe)id: number): Promise { return this.expenseCodesService.remove(id); } }