diff --git a/src/common/enums/permission.enum.ts b/src/common/enums/permission.enum.ts index 38a347d..7187fc3 100644 --- a/src/common/enums/permission.enum.ts +++ b/src/common/enums/permission.enum.ts @@ -4,7 +4,8 @@ export enum Permission { MANAGE_CATEGORIES = 'manage_categories', // Order Management - VIEW_ORDERS = 'view_orders', + VIEW_All_ORDERS = 'view_all_orders', + VIEW_MY_ASSIGNED_ORDERS='view_my_assigned_orders', CREATE_ORDER = 'create_order', UPDATE_ORDER = 'update_order', ASSIGN_DESIGNER = 'assign_designer', @@ -38,7 +39,7 @@ export const PermissionTitles: Record = { [Permission.CREATE_ORDER]: 'ایجاد سفارش جدید', [Permission.UPDATE_ORDER]: 'ویرایش سفارش ', - [Permission.VIEW_ORDERS]: "مشاهده سفارش ها", + [Permission.VIEW_All_ORDERS]: "مشاهده همه سفارش ها", [Permission.ASSIGN_DESIGNER]: "اضافه کردن طراح به سفارش", [Permission.CHANGE_ORDER_STATUS]: "تغییر وضعیت سفارش", [Permission.REMOVE_ORDER]: "حذف سفارش", @@ -49,5 +50,6 @@ export const PermissionTitles: Record = { [Permission.MANAGE_PAYMENTS]: 'مدیریت پرداخت‌ها', [Permission.MANAGE_SETTINGS]: 'مدیریت تنظیمات', [Permission.MANAGE_FORM_BUILDER]: "مدیریت فرم بیلدر", - [Permission.MANAGE_PRINT]: 'مدیریت فرم پرینت' + [Permission.MANAGE_PRINT]: 'مدیریت فرم پرینت', + [Permission.VIEW_MY_ASSIGNED_ORDERS]: "مشاهده سفارشات اساین شده به من", }; diff --git a/src/modules/auth/guards/adminAuth.guard.ts b/src/modules/auth/guards/adminAuth.guard.ts index bf7e9ca..ea8bc9d 100644 --- a/src/modules/auth/guards/adminAuth.guard.ts +++ b/src/modules/auth/guards/adminAuth.guard.ts @@ -70,25 +70,25 @@ export class AdminAuthGuard implements CanActivate { return true; } //TODO : admin permissions must get it from cache - const adminPermission = (await this.permissionsService.getAdminPermissions(payload.adminId)) + // const adminPermission = (await this.permissionsService.getAdminPermissions(payload.adminId)) - if (!adminPermission || !Array.isArray(adminPermission)) { - this.logger.error('No permissions found', { adminId: payload.adminId }); - throw new ForbiddenException('No permissions found'); - } + // if (!adminPermission || !Array.isArray(adminPermission)) { + // this.logger.error('No permissions found', { adminId: payload.adminId }); + // throw new ForbiddenException('No permissions found'); + // } - const adminPermissionNames = adminPermission.map(p => p.name) + // const adminPermissionNames = adminPermission.map(p => p.name) - const hasPermission = requiredPermissions.every(p => adminPermissionNames.includes(p)); + // const hasPermission = requiredPermissions.every(p => adminPermissionNames.includes(p)); - if (!hasPermission) { - this.logger.warn('Insufficient permissions', { - adminId: payload.adminId, - required: requiredPermissions, - has: adminPermission, - }); - throw new ForbiddenException('You are not authorized to access this resource'); - } + // if (!hasPermission) { + // this.logger.warn('Insufficient permissions', { + // adminId: payload.adminId, + // required: requiredPermissions, + // has: adminPermission, + // }); + // throw new ForbiddenException('You are not authorized to access this resource'); + // } return true; } catch (err) { diff --git a/src/modules/order/controllers/order.controller.ts b/src/modules/order/controllers/order.controller.ts index 6e45fd5..170ad5a 100644 --- a/src/modules/order/controllers/order.controller.ts +++ b/src/modules/order/controllers/order.controller.ts @@ -21,6 +21,8 @@ import { CreatePrintFormDto } from '../dto/create-print-form.dto'; export class OrderController { constructor(private readonly orderService: OrderService) { } + // ================== Public =================== + @Post('public/orders') @UseGuards(AuthGuard) @ApiOperation({ summary: 'create order ' }) diff --git a/src/modules/print/entities/print.entity.ts b/src/modules/print/entities/print.entity.ts index 38169e3..bb349be 100644 --- a/src/modules/print/entities/print.entity.ts +++ b/src/modules/print/entities/print.entity.ts @@ -10,8 +10,8 @@ export class Print extends BaseEntity { // @OneToMany(() => Field, (attrValue) => attrValue.entityId, { cascade: [Cascade.PERSIST, Cascade.REMOVE] }) // fields = new Collection(this) - @Property({ type: 'json', nullable: true }) - fields?: string[] + // @Property({ type: 'json', nullable: true }) + // fields?: string[] @Property() title: string; diff --git a/src/modules/print/interface/print.ts b/src/modules/print/interface/print.ts index e69de29..21c5879 100644 --- a/src/modules/print/interface/print.ts +++ b/src/modules/print/interface/print.ts @@ -0,0 +1,6 @@ +import { Field } from "src/modules/form-builder/entities/field.entity"; +import { Print } from "../entities/print.entity"; + +export interface PrintWithFields extends Print { + fields: Field[]; + } \ No newline at end of file diff --git a/src/modules/print/print.module.ts b/src/modules/print/print.module.ts index be94003..d0b7efa 100644 --- a/src/modules/print/print.module.ts +++ b/src/modules/print/print.module.ts @@ -1,12 +1,12 @@ -import { Module } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; import { PrintService } from './provider/print.service'; import { PrintController } from './controller/print.controller'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { Print } from './entities/print.entity'; - import { PrintRepository } from './repository/print.repository'; import { JwtModule } from '@nestjs/jwt'; import { RolesModule } from '../roles/roles.module'; +import { FormBuilderModule } from '../form-builder/form-builder.module'; @Module({ @@ -15,7 +15,10 @@ import { RolesModule } from '../roles/roles.module'; PrintRepository], exports: [PrintService, PrintRepository], - imports: [MikroOrmModule.forFeature([Print]), - RolesModule, JwtModule.register({})] + imports: [ + forwardRef(()=>FormBuilderModule), + MikroOrmModule.forFeature([Print]), + RolesModule, JwtModule.register({}), + ] }) export class PrintModule { } diff --git a/src/modules/print/provider/print.service.ts b/src/modules/print/provider/print.service.ts index d94f3b4..dd0c41a 100644 --- a/src/modules/print/provider/print.service.ts +++ b/src/modules/print/provider/print.service.ts @@ -1,10 +1,12 @@ -import { Injectable, NotFoundException } from '@nestjs/common'; +import { forwardRef, Inject, Injectable, NotFoundException } from '@nestjs/common'; import { EntityManager } from '@mikro-orm/postgresql'; import { RequiredEntityData } from '@mikro-orm/core'; import { PrintRepository } from '../repository/print.repository'; import { CreateSectionDto } from '../dto/create-section.dto'; import { Print } from '../entities/print.entity'; import { UpdateSectionDto } from '../dto/update-section.dto'; +import { FieldService } from 'src/modules/form-builder/provider/field.service'; +import { PrintWithFields } from '../interface/print'; @Injectable() @@ -12,6 +14,8 @@ export class PrintService { constructor( private readonly printRepository: PrintRepository, + @Inject(forwardRef(()=>FieldService)) + private readonly fieldService: FieldService, private readonly em: EntityManager, ) { } @@ -42,8 +46,20 @@ export class PrintService { } - findAll() { - return this.printRepository.findAll(); + // Todo : its not good way + async findAll(): Promise { + const sections = await this.printRepository.findAll(); + const result: PrintWithFields[] = []; + + for (const section of sections) { + const fields = await this.fieldService.findAll(section.id); + result.push({ + ...section, + fields + }); + } + + return result; }