Files
negareh-api/src/modules/invoice/invoice.controller.ts
T
2026-02-21 12:39:57 +03:30

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);
}
}