63 lines
3.0 KiB
TypeScript
63 lines
3.0 KiB
TypeScript
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<Expenses> {
|
|
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<Expenses[]> {
|
|
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 <Expenses> {
|
|
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<Expenses> {
|
|
return this.expensesService.remove(id);
|
|
}
|
|
|
|
} |