import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, UseGuards } from "@nestjs/common"; import { ExpensesService } from "../services/expenses.service"; import { CreateExpenseDto } from "../dtos/create-expense"; import { Expenses } from "@prisma/client"; import { Roles as RoleEnum } from '.prisma/client'; import { UpdateExpenseDto } from "../dtos/update-expense"; import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from "@nestjs/swagger"; import { RolesAllowed } from "src/common/decorators/roles.decorators"; import { ExpenseEntity } from "../dtos/swagger-entities/expenses.entity"; @ApiTags('Expenses') @ApiBearerAuth('access-token') // @UseGuards() @Controller('Expenses') export class ExpensesController { constructor(private readonly expensesService: ExpensesService) {} @Post() @RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.EMPLOYEE, RoleEnum.HR, RoleEnum.SUPERVISOR) @ApiOperation({ summary: 'Create expense' }) @ApiResponse({ status: 201, description: 'Expense created',type: ExpenseEntity }) @ApiResponse({ status: 400, description: 'Incomplete task or invalid data' }) create(@Body() dto: CreateExpenseDto): Promise { return this.expensesService.create(dto); } @Get() @RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.EMPLOYEE, RoleEnum.HR, RoleEnum.SUPERVISOR) @ApiOperation({ summary: 'Find all expenses' }) @ApiResponse({ status: 201, description: 'List of expenses found',type: ExpenseEntity, isArray: true }) @ApiResponse({ status: 400, description: 'List of expenses not found' }) findAll(): Promise { return this.expensesService.findAll(); } @Get(':id') @RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.EMPLOYEE, RoleEnum.HR, RoleEnum.SUPERVISOR) @ApiOperation({ summary: 'Find expense' }) @ApiResponse({ status: 201, description: 'Expense found',type: ExpenseEntity }) @ApiResponse({ status: 400, description: 'Expense not found' }) findOne(@Param('id', ParseIntPipe) id: number): Promise { return this.expensesService.findOne(id); } @Patch(':id') @RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.EMPLOYEE, RoleEnum.HR, RoleEnum.SUPERVISOR) @ApiOperation({ summary: 'Expense shift' }) @ApiResponse({ status: 201, description: 'Expense updated',type: ExpenseEntity }) @ApiResponse({ status: 400, description: 'Expense not found' }) update(@Param('id', ParseIntPipe) id: number, @Body() dto: UpdateExpenseDto) { return this.expensesService.update(id,dto); } @Delete(':id') @RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.EMPLOYEE, RoleEnum.HR, RoleEnum.SUPERVISOR) @ApiOperation({ summary: 'Delete expense' }) @ApiResponse({ status: 201, description: 'Expense deleted',type: ExpenseEntity }) @ApiResponse({ status: 400, description: 'Expense not found' }) remove(@Param('id', ParseIntPipe) id: number): Promise { return this.expensesService.remove(id); } }