74 lines
2.7 KiB
TypeScript
74 lines
2.7 KiB
TypeScript
import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards, Query } from '@nestjs/common';
|
|
import { ApiTags, ApiBearerAuth, ApiOperation, ApiBody } from '@nestjs/swagger';
|
|
import { InvoiceService } from './invoice.service';
|
|
import { CreateInvoiceDto } from './dto/create-invoice.dto';
|
|
import { UpdateInvoiceDto } from './dto/update-invoice.dto';
|
|
import { AdminAuthGuard } from '../auth/guards/adminAuth.guard';
|
|
import { Permissions } from 'src/common/decorators/permissions.decorator';
|
|
import { PermissionEnum } from 'src/common/enums/permission.enum';
|
|
import { AuthGuard } from '../auth/guards/auth.guard';
|
|
import { FindInvoicesDto } from './dto/find-invoices.dto';
|
|
import { UserId } from 'src/common/decorators';
|
|
|
|
@Controller()
|
|
@ApiTags('invoice')
|
|
@ApiBearerAuth()
|
|
export class InvoiceController {
|
|
constructor(private readonly invoiceService: InvoiceService) { }
|
|
|
|
@Get('public/invoice')
|
|
@UseGuards(AuthGuard)
|
|
@ApiOperation({ summary: 'Get all invoices with pagination and filters' })
|
|
findAll(@Query() dto: FindInvoicesDto, @UserId() userId: string) {
|
|
return this.invoiceService.findAll(userId, dto);
|
|
}
|
|
|
|
@Get('public/invoice/:id')
|
|
@UseGuards(AuthGuard)
|
|
@ApiOperation({ summary: 'Get one invoice by id' })
|
|
findOne(@Param('id') id: string,@UserId() userId: string) {
|
|
return this.invoiceService.findOne(id,userId);
|
|
}
|
|
|
|
@Get('public/invoice/item/:id')
|
|
@UseGuards(AuthGuard)
|
|
@ApiOperation({ summary: 'Confirm invoice item by id' })
|
|
confirmInvoiceItem(@Param('id') id: string,@UserId() userId: string) {
|
|
return this.invoiceService.confirmInvoiceItem(id,userId);
|
|
}
|
|
|
|
//------------------- Admin Routes-------------
|
|
@Post('admin/invoice')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.CREATE_INVOICE)
|
|
@ApiOperation({ summary: 'Create a new invoice (admin)' })
|
|
@ApiBody({ type: CreateInvoiceDto })
|
|
create(@Body() dto: CreateInvoiceDto) {
|
|
return this.invoiceService.create(dto);
|
|
}
|
|
|
|
@Get('admin/invoice')
|
|
@UseGuards(AdminAuthGuard)
|
|
@ApiOperation({ summary: 'Get all invoices with pagination and filters' })
|
|
findAllAsAdmin(@Query() dto: FindInvoicesDto) {
|
|
return this.invoiceService.findAllAsAdmin(dto);
|
|
}
|
|
|
|
@Patch('admin/invoice/:id')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.UPDATE_INVOICE)
|
|
@ApiOperation({ summary: 'Update an invoice (admin)' })
|
|
@ApiBody({ type: UpdateInvoiceDto })
|
|
update(@Param('id') id: string, @Body() updateInvoiceDto: UpdateInvoiceDto) {
|
|
return this.invoiceService.update(id, updateInvoiceDto);
|
|
}
|
|
|
|
@Delete('admin/invoice/:id')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.DELETE_INVOICE)
|
|
@ApiOperation({ summary: 'Remove an invoice (admin)' })
|
|
remove(@Param('id') id: string) {
|
|
return this.invoiceService.remove(id);
|
|
}
|
|
}
|