From baf526265036190927ce4119f42186dcdb4b663e Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Sun, 22 Feb 2026 10:27:52 +0330 Subject: [PATCH] order print --- src/modules/order/dto/create-order.dto.ts | 13 ++----------- src/modules/order/dto/update-order.dto.ts | 15 ++++----------- src/modules/order/entities/order.entity.ts | 9 ++++++--- src/modules/order/entities/print.entity.ts | 18 ++++++++++++++++++ src/modules/order/order.module.ts | 3 ++- src/modules/order/providers/order.service.ts | 4 ++-- 6 files changed, 34 insertions(+), 28 deletions(-) create mode 100644 src/modules/order/entities/print.entity.ts diff --git a/src/modules/order/dto/create-order.dto.ts b/src/modules/order/dto/create-order.dto.ts index 65cfa86..c245e6a 100644 --- a/src/modules/order/dto/create-order.dto.ts +++ b/src/modules/order/dto/create-order.dto.ts @@ -43,16 +43,7 @@ export class CreateOrderAsAdminDto { @IsOptional() @IsArray() attachments: IAttachment[]; + + } -export class CreateOrderItemDtoAsAdmin { - @ApiProperty() - @IsString() - @IsNotEmpty() - productId: string; - - @ApiPropertyOptional() - @IsOptional() - @IsInt() - quantity?: number; -} diff --git a/src/modules/order/dto/update-order.dto.ts b/src/modules/order/dto/update-order.dto.ts index 5f6fe87..a23692b 100644 --- a/src/modules/order/dto/update-order.dto.ts +++ b/src/modules/order/dto/update-order.dto.ts @@ -1,15 +1,8 @@ -import { ApiProperty, ApiPropertyOptional, PartialType } from '@nestjs/swagger'; -import { CreateOrderAsAdminDto, CreateOrderItemDtoAsAdmin } from './create-order.dto'; -import { IsOptional, IsString } from 'class-validator'; +import { PartialType } from '@nestjs/swagger'; +import { CreateOrderAsAdminDto } from './create-order.dto'; + -export class UpdateOrCreateOrderItem extends CreateOrderItemDtoAsAdmin { - @ApiProperty() - @IsString() - id: string; -} export class UpdateOrderAsAdminDto extends PartialType(CreateOrderAsAdminDto) { - @ApiPropertyOptional({ type: [UpdateOrCreateOrderItem] }) - @IsOptional() - items?: UpdateOrCreateOrderItem[]; + } \ No newline at end of file diff --git a/src/modules/order/entities/order.entity.ts b/src/modules/order/entities/order.entity.ts index 589bd2a..49a4419 100644 --- a/src/modules/order/entities/order.entity.ts +++ b/src/modules/order/entities/order.entity.ts @@ -6,6 +6,7 @@ import { Enum, PrimaryKey, OptionalProps, + OneToOne } from '@mikro-orm/core'; import { User } from '../../user/entities/user.entity'; import { ulid } from 'ulid'; @@ -13,9 +14,9 @@ import { Admin } from 'src/modules/admin/entities/admin.entity'; import { BaseEntity } from 'src/common/entities/base.entity'; import { IAttachment, OrderStatusEnum } from '../interface/order.interface'; import { InvoiceItem } from 'src/modules/invoice/entities/invoice-item.entity'; -import { IField } from 'src/modules/request/interface/request.interface'; import { Product } from 'src/modules/product/entities/product.entity'; import { Category } from 'src/modules/product/entities/category.entity'; +import { OrderPrint } from './print.entity'; @Entity({ tableName: 'orders' }) @Index({ properties: ['user'] }) @@ -28,6 +29,10 @@ export class Order extends BaseEntity { @ManyToOne(() => Product, { nullable: true }) product?: Product | null; + + @OneToOne(() => OrderPrint, (orderPrint) => orderPrint.order, { owner: true, nullable: true }) + print?: OrderPrint | null + @PrimaryKey({ type: 'string', columnType: 'char(26)' }) id: string = ulid() @@ -52,8 +57,6 @@ export class Order extends BaseEntity { }) orderNumber: number; - @Property({ type: 'json', nullable: true }) - attributes?: IField[] // print form selected attributes @Enum(() => OrderStatusEnum) status: OrderStatusEnum = OrderStatusEnum.CREATED; diff --git a/src/modules/order/entities/print.entity.ts b/src/modules/order/entities/print.entity.ts new file mode 100644 index 0000000..bd887d5 --- /dev/null +++ b/src/modules/order/entities/print.entity.ts @@ -0,0 +1,18 @@ +import { Entity, Property, OptionalProps, OneToOne } from '@mikro-orm/core'; +import { BaseEntity } from 'src/common/entities/base.entity'; +import { IField } from 'src/modules/request/interface/request.interface'; +import { Order } from './order.entity'; + + +@Entity({ tableName: 'prints' }) +export class OrderPrint extends BaseEntity { + [OptionalProps]?: 'createdAt' | 'deletedAt' + + @Property({ type: 'json', nullable: true }) + attributes?: IField[] + + + @OneToOne(() => Order, (order) => order.print, { mappedBy: 'print' }) + order!: Order + +} diff --git a/src/modules/order/order.module.ts b/src/modules/order/order.module.ts index ddb799f..cc47e37 100644 --- a/src/modules/order/order.module.ts +++ b/src/modules/order/order.module.ts @@ -3,6 +3,7 @@ import { MikroOrmModule } from '@mikro-orm/nestjs'; import { OrderService } from './providers/order.service'; import { OrderController } from './controllers/order.controller'; import { Order } from './entities/order.entity'; +import { OrderPrint } from './entities/print.entity'; import { AuthModule } from '../auth/auth.module'; import { PaymentModule } from '../payment/payments.module'; import { JwtModule } from '@nestjs/jwt'; @@ -18,7 +19,7 @@ import { TicketModule } from '../ticket/ticket.module'; @Module({ imports: [ - MikroOrmModule.forFeature([Order]), + MikroOrmModule.forFeature([Order, OrderPrint]), AuthModule, forwardRef(() => PaymentModule), JwtModule, diff --git a/src/modules/order/providers/order.service.ts b/src/modules/order/providers/order.service.ts index 3a4e79b..a4acedb 100644 --- a/src/modules/order/providers/order.service.ts +++ b/src/modules/order/providers/order.service.ts @@ -5,7 +5,6 @@ import { FindOrdersDto } from '../dto/find-orders.dto'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { CreateOrderAsAdminDto, - CreateOrderItemDtoAsAdmin, } from '../dto/create-order.dto'; import { UserService } from 'src/modules/user/providers/user.service'; import { OrderStatusEnum } from '../interface/order.interface'; @@ -101,7 +100,8 @@ export class OrderService { status: OrderStatusEnum.CREATED, estimatedDays: dto.estimatedDays, invoiceItem, - attachments: dto.attachments + attachments: dto.attachments, + }); await this.em.persistAndFlush(order);