diff --git a/src/common/enums/permission.enum.ts b/src/common/enums/permission.enum.ts index da07249..306055b 100644 --- a/src/common/enums/permission.enum.ts +++ b/src/common/enums/permission.enum.ts @@ -10,7 +10,7 @@ export enum PermissionEnum { // invoice VIEW_INVOICES = 'view_invoices', - CREATE_INVOICE = 'create_invoice', + CREATE_INVOICE = 'create_invoice', UPDATE_INVOICE = 'update_invoice', DELETE_INVOICE = 'delete_invoice', @@ -39,8 +39,8 @@ export enum PermissionEnum { MANAGE_SETTINGS = 'manage_settings', - CREATE_PRINT = 'create_print', - VIEW_PRINT = 'view_print', + CREATE_PRINT_FORM = 'create_print_form', + VIEW_PRINT_FORM = 'view_print_form', MANAGE_LEARNINGS = 'manage_learnings', MANAGE_CRITICISMS = 'manage_criticisms', @@ -69,24 +69,24 @@ export const PermissionTitles: Record = { [PermissionEnum.MANAGE_PAYMENTS]: 'مدیریت پرداخت‌ها', [PermissionEnum.MANAGE_SETTINGS]: 'مدیریت تنظیمات', [PermissionEnum.VIEW_REQUESTS]: "مشاهده همه درخواست سفارش ها", - [PermissionEnum.DELETE_REQUEST]: "", - [PermissionEnum.UPDATE_REQUEST]: "", - [PermissionEnum.VIEW_INVOICES]: "", - [PermissionEnum.CREATE_INVOICE]: "", - [PermissionEnum.UPDATE_INVOICE]: "", - [PermissionEnum.DELETE_INVOICE]: "", - [PermissionEnum.DELETE_ORDER]: "", - [PermissionEnum.CREATE_PRINT]: "ایجاد فرم چاپ برای سفارش", - [PermissionEnum.VIEW_PRINT]: "مدیریت فرم چاپ", + [PermissionEnum.DELETE_REQUEST]: "حدف درخواست سفارش", + [PermissionEnum.UPDATE_REQUEST]: "ویرایش درخواست سفارش", + [PermissionEnum.VIEW_INVOICES]: "مشاهده همه فاکتورها", + [PermissionEnum.CREATE_INVOICE]: "ایجاد فاکتور جدید", + [PermissionEnum.UPDATE_INVOICE]: "ویرایش فاکتور", + [PermissionEnum.DELETE_INVOICE]: "حدف فاکتور", + [PermissionEnum.DELETE_ORDER]: "حدف سفارش", + [PermissionEnum.CREATE_PRINT_FORM]: "ایجاد فرم چاپ جدید برای سفارش", + [PermissionEnum.VIEW_PRINT_FORM]: "مشاهده همه فرم های چاپ", [PermissionEnum.MANAGE_LEARNINGS]: "مدیریت آموزش‌ها", [PermissionEnum.MANAGE_CRITICISMS]: "مدیریت انتقادها و پیشنهادها", - [PermissionEnum.MANAGE_ANNOUNCEMENTS]: "مدیریت اطلاعیه‌ها", - [PermissionEnum.MANAGE_TICKETS]: "مدیریت تیکت‌ها", - [PermissionEnum.NEW_REQUEST_NOTIFICATION]: "", - [PermissionEnum.NEW_PAYMENT_NOTIFICATION]: "", - [PermissionEnum.CREATE_USER]: "", - [PermissionEnum.UPDATE_USER]: "", - [PermissionEnum.DELETE_USER]: "", - [PermissionEnum.VIEW_USERS]: "", - [PermissionEnum.NEW_TICKET_NOTIFICATION]: "" + [PermissionEnum.MANAGE_ANNOUNCEMENTS]: "مدیریت اعلان‌ها", + [PermissionEnum.MANAGE_TICKETS]: "مدیریت تیکت ها", + [PermissionEnum.CREATE_USER]: "ایجاد کاربر جدید", + [PermissionEnum.UPDATE_USER]: "ویرایش کاربر", + [PermissionEnum.DELETE_USER]: "حدف کاربر", + [PermissionEnum.VIEW_USERS]: "مشاهده همه کاربران", + [PermissionEnum.NEW_REQUEST_NOTIFICATION]: "اعلان جدید برای درخواست سفارش", + [PermissionEnum.NEW_PAYMENT_NOTIFICATION]: "اعلان جدید برای پرداخت", + [PermissionEnum.NEW_TICKET_NOTIFICATION]: "اعلان جدید برای تیکت", }; diff --git a/src/modules/admin/providers/admin.service.ts b/src/modules/admin/providers/admin.service.ts index 73f48e0..14fc858 100644 --- a/src/modules/admin/providers/admin.service.ts +++ b/src/modules/admin/providers/admin.service.ts @@ -137,7 +137,7 @@ export class AdminService { return admins } - async hasPermissions(adminId: string, permissionNames: PermissionEnum[]): Promise { + async ownedPermissions(adminId: string, permissionNames: PermissionEnum[]): Promise { if (permissionNames.length === 0) return [] const admin = await this.adminRepository.findOne( diff --git a/src/modules/order/controllers/order.controller.ts b/src/modules/order/controllers/order.controller.ts index ee274ab..16df8ff 100644 --- a/src/modules/order/controllers/order.controller.ts +++ b/src/modules/order/controllers/order.controller.ts @@ -55,7 +55,7 @@ export class OrderController { // Permission handled inside service @Get('admin/orders') @UseGuards(AdminAuthGuard) - @Permissions(PermissionEnum.VIEW_ORDERS) + // @Permissions(PermissionEnum.VIEW_ORDERS) @ApiOperation({ summary: 'Get all orders with pagination and filters' }) findAllAsAdmin(@Query() dto: FindOrdersDto, @AdminId() adminId: string) { return this.orderService.findOrdersAsAdmin(adminId, dto); @@ -106,7 +106,7 @@ export class OrderController { @Post('admin/orders/:orderId/print') @UseGuards(AdminAuthGuard) - @Permissions(PermissionEnum.CREATE_PRINT) + @Permissions(PermissionEnum.CREATE_PRINT_FORM) @ApiOperation({ summary: 'Create order print' }) @ApiOkResponse({ description: 'Order print created or updated' }) createPrint(@Param('orderId') orderId: string, @Body() body: CreateOrderPrintDto) { @@ -115,7 +115,7 @@ export class OrderController { @Get('admin/orders/:orderId/print') @UseGuards(AdminAuthGuard) - @Permissions(PermissionEnum.VIEW_PRINT) + @Permissions(PermissionEnum.VIEW_PRINT_FORM) @ApiOperation({ summary: 'Get order print' }) @ApiOkResponse({ description: 'Order print details' }) getPrint(@Param('orderId') orderId: string) { diff --git a/src/modules/order/providers/order.service.ts b/src/modules/order/providers/order.service.ts index 010c03b..2a6f636 100644 --- a/src/modules/order/providers/order.service.ts +++ b/src/modules/order/providers/order.service.ts @@ -130,18 +130,17 @@ export class OrderService { } async findOrdersAsAdmin(adminId: string, dto: FindOrdersDto): Promise> { - const permissions = await this.adminService.hasPermissions(adminId, + const permissions = await this.adminService.ownedPermissions(adminId, [PermissionEnum.VIEW_ORDERS, PermissionEnum.VIEW_ASSIGNED_ORDERS]) - + if (permissions.includes(PermissionEnum.VIEW_ORDERS)) { return this.orderRepository.findAllPaginated(dto) } else if (permissions.includes(PermissionEnum.VIEW_ASSIGNED_ORDERS)) { - - return this.orderRepository.findAllPaginated({ + return this.orderRepository.findAllPaginated({ + ...dto, designerId: adminId, - ...dto }) } else { @@ -208,7 +207,7 @@ export class OrderService { async updateStatus(orderId: string, adminId: string, dto: UpdateStatusDto): Promise { - const permissions = await this.adminService.hasPermissions(adminId, + const permissions = await this.adminService.ownedPermissions(adminId, [PermissionEnum.VIEW_ORDERS, PermissionEnum.VIEW_ASSIGNED_ORDERS]) if (permissions.includes(PermissionEnum.VIEW_ORDERS)) { diff --git a/src/modules/order/repositories/order.repository.ts b/src/modules/order/repositories/order.repository.ts index 4740cec..93c367d 100644 --- a/src/modules/order/repositories/order.repository.ts +++ b/src/modules/order/repositories/order.repository.ts @@ -6,11 +6,6 @@ import { PaginatedResult } from 'src/common/interfaces/pagination.interface'; import { OrderStatusEnum } from '../interface/order.interface'; import { FindOrdersDto } from '../dto/find-orders.dto'; - -// class FindOrdersOpts extends FindOrdersDto { -// adminId?: string; -// }; - @Injectable() export class OrderRepository extends EntityRepository { constructor(readonly em: EntityManager) { @@ -76,7 +71,6 @@ export class OrderRepository extends EntityRepository { } } - // Search by order number or user information if (search) { const searchPattern = `%${search}%`; @@ -103,31 +97,7 @@ export class OrderRepository extends EntityRepository { populate: ['user', 'product', 'designer'], }); - // Collect all (orderId, productId) pairs for efficient review lookup - // const orderproductPairs: Array<{ orderId: string; productId: bigint }> = []; - // for (const order of data) { - // for (const item of order.items.getItems()) { - // if (item.product?.id) { - // orderproductPairs.push({ orderId: order.id, productId: item.product.id }); - // } - // } - // } - - - - // Map reviewIds to products - // for (const order of data) { - // for (const item of order.items.getItems()) { - // if (item.product) { - // const key = `${order.id}-${item.product.id}`; - // // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - // const product = item.product as any; - // // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - - // } - // } - // } - + const totalPages = Math.ceil(total / limit); return { diff --git a/src/modules/print-form/controller/print-form.controller.ts b/src/modules/print-form/controller/print-form.controller.ts index 3aca54f..ede67bd 100644 --- a/src/modules/print-form/controller/print-form.controller.ts +++ b/src/modules/print-form/controller/print-form.controller.ts @@ -20,7 +20,7 @@ export class PrintFormController { /*================================ Section ========================== */ @Post('section') - @Permissions(PermissionEnum.VIEW_PRINT) + @Permissions(PermissionEnum.VIEW_PRINT_FORM) @ApiOperation({ summary: 'Create section' }) create(@Body() dto: CreateSectionDto) { return this.printFormService.create(dto); @@ -28,27 +28,27 @@ export class PrintFormController { @Get('section') @ApiOperation({ summary: 'find all section' }) - @Permissions(PermissionEnum.VIEW_PRINT) + @Permissions(PermissionEnum.VIEW_PRINT_FORM) findAll() { return this.printFormService.findAll(); } @Get('section/:id') @ApiOperation({ summary: 'Find one section' }) - @Permissions(PermissionEnum.VIEW_PRINT) + @Permissions(PermissionEnum.VIEW_PRINT_FORM) findOne(@Param('id') id: string) { return this.printFormService.finOrFail(id); } @Patch('section/:id') - @Permissions(PermissionEnum.VIEW_PRINT) + @Permissions(PermissionEnum.VIEW_PRINT_FORM) @ApiOperation({ summary: 'Update section' }) update(@Param('id') id: string, @Body() dto: UpdateSectionDto) { return this.printFormService.update(id, dto); } @Delete('section/:id') - @Permissions(PermissionEnum.VIEW_PRINT) + @Permissions(PermissionEnum.VIEW_PRINT_FORM) @ApiOperation({ summary: 'Remove section' }) remove(@Param('id') id: string) { return this.printFormService.remove(id); @@ -56,7 +56,7 @@ export class PrintFormController { /// front end must send form with its selected fields @Post('pdf') - @Permissions(PermissionEnum.VIEW_PRINT) + @Permissions(PermissionEnum.VIEW_PRINT_FORM) @ApiOperation({ summary: 'Create Pdf' }) async createPDf(@Body() dto: CreateSectionDto, @Res() res: FastifyReply) { const html = `