targo-backend/src/modules/expense-codes/controllers/expense-codes.controller.ts
2025-07-24 09:55:29 -04:00

64 lines
3.1 KiB
TypeScript

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<ExpenseCodes> {
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<ExpenseCodes[]> {
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<ExpenseCodes> {
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<ExpenseCodes> {
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<ExpenseCodes> {
return this.expenseCodesService.remove(id);
}
}