permission

This commit is contained in:
2026-02-04 20:43:28 +03:30
parent 14eeba4cfd
commit d4ae03fa4f
24 changed files with 175 additions and 110 deletions
@@ -15,6 +15,8 @@ import { UpdateOrderAsAdminDto } from '../dto/update-order.dto';
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
import { CreatePrintFormDto } from '../dto/create-print-form.dto';
import { FindOrderItemsDto } from '../dto/find-order-items.dto';
import { Permissions } from 'src/common/decorators/permissions.decorator';
import { PermissionEnum } from 'src/common/enums/permission.enum';
@ApiTags('orders')
@ApiBearerAuth()
@@ -94,6 +96,7 @@ export class OrderController {
@Post('admin/orders')
@UseGuards(AdminAuthGuard)
@Permissions(PermissionEnum.CREATE_ORDER)
@ApiOperation({ summary: 'create order ' })
createOrderAsAdmin(@AdminId() adminId: string, @Body() body: CreateOrderAsAdminDto) {
return this.orderService.createOrderAsAdmin(adminId, body);
@@ -101,17 +104,18 @@ export class OrderController {
@Get('admin/orders/request')
@UseGuards(AdminAuthGuard)
@Permissions(PermissionEnum.VIEW_All_REQUEST_ORDERS)
@ApiOperation({ summary: 'Get all order requests with pagination and filters' })
findOrderRequestAsAdmin(@Query() dto: FindOrdersDto) {
return this.orderService.findOrderRequestsAsAdmin(dto);
}
// this route permission is handled inside service
@Get('admin/orders/invoiced')
@UseGuards(AdminAuthGuard)
@ApiOperation({ summary: 'Get all invoiced orders with pagination and filters' })
findInvoicedOrdersAsAdmin(@Query() dto: FindOrdersDto) {
return this.orderService.findOrderRequestsAsAdmin(dto);
findInvoicedOrdersAsAdmin(@Query() dto: FindOrdersDto, @AdminId() adminId: string) {
return this.orderService.findInvoicedOrdersAsAdmin(adminId, dto);
}
@Get('admin/orders/:id')
@@ -123,6 +127,7 @@ export class OrderController {
@Get('admin/orders/item/print')
@UseGuards(AdminAuthGuard)
@Permissions(PermissionEnum.VIEW_All_ORDERS)
@ApiOperation({ summary: 'get print orders' })
getPrintOrders(@Body() dto: FindOrderItemsDto) {
return this.orderService.findPrintOrderItemsAsAdmin(dto);
@@ -135,19 +140,6 @@ export class OrderController {
return this.orderService.findOrderItemOrFailByItemId(+itemId);
}
@Get('admin/orders/item/:id/print')
@UseGuards(AdminAuthGuard)
@ApiOperation({ summary: 'create order item print' })
createOrderItemPrint(@Param('id') itemId: string) {
// return this.orderService.findOrderItemOrFailByItemId(+itemId);
}
// @Patch('admin/orders/:orderId')
// @UseGuards(AdminAuthGuard)
// @ApiOperation({ summary: 'Update Order ' })
// updateOrder(@Param('orderId') orderId: string, @Body() dto: UpdateOrderAsAdminDto) {
// return this.orderService.updateOrderAsAdmin(orderId, dto);
// }
@Patch('admin/orders/:orderId')
@UseGuards(AdminAuthGuard)
@ApiOperation({ summary: 'Update Order ' })
@@ -157,6 +149,7 @@ export class OrderController {
@Patch('admin/orders/:id/item/:itemId/print')
@UseGuards(AdminAuthGuard)
@Permissions(PermissionEnum.CREATE_ORDER_PRINT)
@ApiOperation({ summary: 'Create Print form for order item' })
createPrintForm(@Param('id') id: string, @Param('itemId') itemId: string, @Body() dto: CreatePrintFormDto) {
return this.orderService.createPrintForm(id, +itemId, dto);
@@ -2,7 +2,7 @@ import { Injectable, Logger } from '@nestjs/common';
import { OnEvent } from '@nestjs/event-emitter';
import { AdminRepository } from 'src/modules/admin/repositories/admin.repository';
import { OrderCreatedEvent, OrderStatusChangedEvent } from '../events/order.events';
import { Permission } from 'src/common/enums/permission.enum';
import { PermissionEnum } from 'src/common/enums/permission.enum';
import { NotifEvent } from 'src/modules/notification/interfaces/notification.interface';
import { NotificationService } from 'src/modules/notification/services/notification.service';
import { ConfigService } from '@nestjs/config';
+21 -3
View File
@@ -30,8 +30,9 @@ import { AdminService } from 'src/modules/admin/providers/admin.service';
import { OrderItem } from '../entities/order-item.entity';
import { UpdateOrderAsAdminDto } from '../dto/update-order.dto';
import { CreatePrintFormDto } from '../dto/create-print-form.dto';
import { Product } from 'src/modules/product/entities/product.entity';
import { FindOrderItemsDto } from '../dto/find-order-items.dto';
import { PermissionService } from 'src/modules/roles/providers/permissions.service';
import { PermissionEnum } from 'src/common/enums/permission.enum';
@Injectable()
@@ -51,6 +52,7 @@ export class OrderService {
private readonly eventEmitter: EventEmitter2,
private readonly adminRepository: AdminRepository,
private readonly paymentRepository: PaymentRepository,
private readonly permissionService: PermissionService,
) { }
async createOrderAsAdmin(adminId: string, dto: CreateOrderAsAdminDto) {
@@ -83,6 +85,7 @@ export class OrderService {
// return updateOrder
}
//TODO : clean
async updateOrderAsAdmin2(orderId: string, dto: UpdateOrderAsAdminDto) {
const order = await this.findOrderOrFail(orderId)
@@ -291,8 +294,23 @@ export class OrderService {
return orders
}
async findInvoicedOrdersAsAdmin(dto: FindOrdersDto) {
const orders = await this.orderRepository.findAllPaginated({ ...dto, isInvoiced: true, })
async findInvoicedOrdersAsAdmin(adminId: string, dto: FindOrdersDto) {
const canSeeAll = await this.adminService.hasPermission(adminId, PermissionEnum.VIEW_All_INVOICED_ORDERS)
let canSeeAsigned = false
if (!canSeeAll) {
canSeeAsigned = await this.adminService.hasPermission(adminId, PermissionEnum.VIEW_MY_ASSIGNED_INVOICED_REQUESTS)
}
if (!canSeeAsigned && !canSeeAll) {
throw new BadRequestException("You dont have Permission")
}
let designerId = canSeeAll ? undefined : adminId
const orders = await this.orderRepository.findAllPaginated({ ...dto, isInvoiced: true, designerId })
return orders
}
@@ -10,6 +10,7 @@ import { FindOrdersDto } from '../dto/find-orders.dto';
class FindOrdersOpts extends FindOrdersDto {
userId?: string;
isInvoiced?: boolean;
designerId?: string
};
@Injectable()
@@ -29,7 +30,8 @@ export class OrderRepository extends EntityRepository<Order> {
userId,
from,
to,
isInvoiced
isInvoiced,
designerId
} = opts;
const offset = (page - 1) * limit;
@@ -60,11 +62,14 @@ export class OrderRepository extends EntityRepository<Order> {
if (isInvoiced != undefined) {
if (isInvoiced == true) {
where.invoicedAt = { $not: null }
}else{
} else {
where.invoicedAt = null
}
}
if (designerId) {
where.items = { $some: { designer: { id: designerId } } }
}
// Filter by date range
if (from || to) {
where.createdAt = {};