populate field in print

This commit is contained in:
2026-02-02 11:14:05 +03:30
parent 2412aba355
commit 0ec84772d5
7 changed files with 56 additions and 27 deletions
+5 -3
View File
@@ -4,7 +4,8 @@ export enum Permission {
MANAGE_CATEGORIES = 'manage_categories', MANAGE_CATEGORIES = 'manage_categories',
// Order Management // Order Management
VIEW_ORDERS = 'view_orders', VIEW_All_ORDERS = 'view_all_orders',
VIEW_MY_ASSIGNED_ORDERS='view_my_assigned_orders',
CREATE_ORDER = 'create_order', CREATE_ORDER = 'create_order',
UPDATE_ORDER = 'update_order', UPDATE_ORDER = 'update_order',
ASSIGN_DESIGNER = 'assign_designer', ASSIGN_DESIGNER = 'assign_designer',
@@ -38,7 +39,7 @@ export const PermissionTitles: Record<Permission, string> = {
[Permission.CREATE_ORDER]: 'ایجاد سفارش جدید', [Permission.CREATE_ORDER]: 'ایجاد سفارش جدید',
[Permission.UPDATE_ORDER]: 'ویرایش سفارش ', [Permission.UPDATE_ORDER]: 'ویرایش سفارش ',
[Permission.VIEW_ORDERS]: "مشاهده سفارش ها", [Permission.VIEW_All_ORDERS]: "مشاهده همه سفارش ها",
[Permission.ASSIGN_DESIGNER]: "اضافه کردن طراح به سفارش", [Permission.ASSIGN_DESIGNER]: "اضافه کردن طراح به سفارش",
[Permission.CHANGE_ORDER_STATUS]: "تغییر وضعیت سفارش", [Permission.CHANGE_ORDER_STATUS]: "تغییر وضعیت سفارش",
[Permission.REMOVE_ORDER]: "حذف سفارش", [Permission.REMOVE_ORDER]: "حذف سفارش",
@@ -49,5 +50,6 @@ export const PermissionTitles: Record<Permission, string> = {
[Permission.MANAGE_PAYMENTS]: 'مدیریت پرداخت‌ها', [Permission.MANAGE_PAYMENTS]: 'مدیریت پرداخت‌ها',
[Permission.MANAGE_SETTINGS]: 'مدیریت تنظیمات', [Permission.MANAGE_SETTINGS]: 'مدیریت تنظیمات',
[Permission.MANAGE_FORM_BUILDER]: "مدیریت فرم بیلدر", [Permission.MANAGE_FORM_BUILDER]: "مدیریت فرم بیلدر",
[Permission.MANAGE_PRINT]: 'مدیریت فرم پرینت' [Permission.MANAGE_PRINT]: 'مدیریت فرم پرینت',
[Permission.VIEW_MY_ASSIGNED_ORDERS]: "مشاهده سفارشات اساین شده به من",
}; };
+15 -15
View File
@@ -70,25 +70,25 @@ export class AdminAuthGuard implements CanActivate {
return true; return true;
} }
//TODO : admin permissions must get it from cache //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)) { // if (!adminPermission || !Array.isArray(adminPermission)) {
this.logger.error('No permissions found', { adminId: payload.adminId }); // this.logger.error('No permissions found', { adminId: payload.adminId });
throw new ForbiddenException('No permissions found'); // 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) { // if (!hasPermission) {
this.logger.warn('Insufficient permissions', { // this.logger.warn('Insufficient permissions', {
adminId: payload.adminId, // adminId: payload.adminId,
required: requiredPermissions, // required: requiredPermissions,
has: adminPermission, // has: adminPermission,
}); // });
throw new ForbiddenException('You are not authorized to access this resource'); // throw new ForbiddenException('You are not authorized to access this resource');
} // }
return true; return true;
} catch (err) { } catch (err) {
@@ -21,6 +21,8 @@ import { CreatePrintFormDto } from '../dto/create-print-form.dto';
export class OrderController { export class OrderController {
constructor(private readonly orderService: OrderService) { } constructor(private readonly orderService: OrderService) { }
// ================== Public ===================
@Post('public/orders') @Post('public/orders')
@UseGuards(AuthGuard) @UseGuards(AuthGuard)
@ApiOperation({ summary: 'create order ' }) @ApiOperation({ summary: 'create order ' })
+2 -2
View File
@@ -10,8 +10,8 @@ export class Print extends BaseEntity {
// @OneToMany(() => Field, (attrValue) => attrValue.entityId, { cascade: [Cascade.PERSIST, Cascade.REMOVE] }) // @OneToMany(() => Field, (attrValue) => attrValue.entityId, { cascade: [Cascade.PERSIST, Cascade.REMOVE] })
// fields = new Collection<Field>(this) // fields = new Collection<Field>(this)
@Property({ type: 'json', nullable: true }) // @Property({ type: 'json', nullable: true })
fields?: string[] // fields?: string[]
@Property() @Property()
title: string; title: string;
+6
View File
@@ -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[];
}
+7 -4
View File
@@ -1,12 +1,12 @@
import { Module } from '@nestjs/common'; import { forwardRef, Module } from '@nestjs/common';
import { PrintService } from './provider/print.service'; import { PrintService } from './provider/print.service';
import { PrintController } from './controller/print.controller'; import { PrintController } from './controller/print.controller';
import { MikroOrmModule } from '@mikro-orm/nestjs'; import { MikroOrmModule } from '@mikro-orm/nestjs';
import { Print } from './entities/print.entity'; import { Print } from './entities/print.entity';
import { PrintRepository } from './repository/print.repository'; import { PrintRepository } from './repository/print.repository';
import { JwtModule } from '@nestjs/jwt'; import { JwtModule } from '@nestjs/jwt';
import { RolesModule } from '../roles/roles.module'; import { RolesModule } from '../roles/roles.module';
import { FormBuilderModule } from '../form-builder/form-builder.module';
@Module({ @Module({
@@ -15,7 +15,10 @@ import { RolesModule } from '../roles/roles.module';
PrintRepository], PrintRepository],
exports: [PrintService, exports: [PrintService,
PrintRepository], PrintRepository],
imports: [MikroOrmModule.forFeature([Print]), imports: [
RolesModule, JwtModule.register({})] forwardRef(()=>FormBuilderModule),
MikroOrmModule.forFeature([Print]),
RolesModule, JwtModule.register({}),
]
}) })
export class PrintModule { } export class PrintModule { }
+19 -3
View File
@@ -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 { EntityManager } from '@mikro-orm/postgresql';
import { RequiredEntityData } from '@mikro-orm/core'; import { RequiredEntityData } from '@mikro-orm/core';
import { PrintRepository } from '../repository/print.repository'; import { PrintRepository } from '../repository/print.repository';
import { CreateSectionDto } from '../dto/create-section.dto'; import { CreateSectionDto } from '../dto/create-section.dto';
import { Print } from '../entities/print.entity'; import { Print } from '../entities/print.entity';
import { UpdateSectionDto } from '../dto/update-section.dto'; import { UpdateSectionDto } from '../dto/update-section.dto';
import { FieldService } from 'src/modules/form-builder/provider/field.service';
import { PrintWithFields } from '../interface/print';
@Injectable() @Injectable()
@@ -12,6 +14,8 @@ export class PrintService {
constructor( constructor(
private readonly printRepository: PrintRepository, private readonly printRepository: PrintRepository,
@Inject(forwardRef(()=>FieldService))
private readonly fieldService: FieldService,
private readonly em: EntityManager, private readonly em: EntityManager,
) { } ) { }
@@ -42,8 +46,20 @@ export class PrintService {
} }
findAll() { // Todo : its not good way
return this.printRepository.findAll(); async findAll(): Promise<PrintWithFields[]> {
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;
} }