From 64d6d1e39133f99c3837b11670c44bb95237da6b Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Sat, 24 Jan 2026 15:39:15 +0330 Subject: [PATCH] print module --- src/app.module.ts | 2 ++ src/modules/print/dto/create-print.dto.ts | 1 + src/modules/print/dto/update-print.dto.ts | 4 +++ .../print/entities/field-option.entity.ts | 19 +++++++++++ src/modules/print/entities/field.entity.ts | 29 ++++++++++++++++ src/modules/print/entities/section.entity.ts | 19 +++++++++++ src/modules/print/interface/print.ts | 9 +++++ src/modules/print/print.controller.ts | 34 +++++++++++++++++++ src/modules/print/print.module.ts | 14 ++++++++ src/modules/print/print.service.ts | 26 ++++++++++++++ 10 files changed, 157 insertions(+) create mode 100644 src/modules/print/dto/create-print.dto.ts create mode 100644 src/modules/print/dto/update-print.dto.ts create mode 100644 src/modules/print/entities/field-option.entity.ts create mode 100644 src/modules/print/entities/field.entity.ts create mode 100644 src/modules/print/entities/section.entity.ts create mode 100644 src/modules/print/interface/print.ts create mode 100644 src/modules/print/print.controller.ts create mode 100644 src/modules/print/print.module.ts create mode 100644 src/modules/print/print.service.ts diff --git a/src/app.module.ts b/src/app.module.ts index b262e41..68ea853 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -16,6 +16,7 @@ import { OrderModule } from './modules/order/order.module'; import { NotificationsModule } from './modules/notification/notifications.module'; import { EventEmitterModule } from '@nestjs/event-emitter'; import { CacheModule } from '@nestjs/cache-manager'; +import { PrintModule } from './modules/print/print.module'; @Module({ imports: [ @@ -39,6 +40,7 @@ import { CacheModule } from '@nestjs/cache-manager'; OrderModule, NotificationsModule, EventEmitterModule.forRoot(), + PrintModule, ], controllers: [], providers: [], diff --git a/src/modules/print/dto/create-print.dto.ts b/src/modules/print/dto/create-print.dto.ts new file mode 100644 index 0000000..c6a88f7 --- /dev/null +++ b/src/modules/print/dto/create-print.dto.ts @@ -0,0 +1 @@ +export class CreatePrintDto {} diff --git a/src/modules/print/dto/update-print.dto.ts b/src/modules/print/dto/update-print.dto.ts new file mode 100644 index 0000000..f5bfabd --- /dev/null +++ b/src/modules/print/dto/update-print.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreatePrintDto } from './create-print.dto'; + +export class UpdatePrintDto extends PartialType(CreatePrintDto) {} diff --git a/src/modules/print/entities/field-option.entity.ts b/src/modules/print/entities/field-option.entity.ts new file mode 100644 index 0000000..e2e81a2 --- /dev/null +++ b/src/modules/print/entities/field-option.entity.ts @@ -0,0 +1,19 @@ +import { Entity, Property, ManyToOne, PrimaryKey, Unique } from '@mikro-orm/core'; +import { BaseEntity } from '../../../common/entities/base.entity'; +import { Field } from './field.entity'; + +@Entity({ tableName: 'field_option' }) +export class FieldOption extends BaseEntity { + @PrimaryKey({ autoincrement: true, type: 'bigint' }) + id: bigint; + + @Property() + value: string; + + @ManyToOne(() => Field) + field: Field; + + @Property({ type: 'int', nullable: true }) + order?: number; + +} diff --git a/src/modules/print/entities/field.entity.ts b/src/modules/print/entities/field.entity.ts new file mode 100644 index 0000000..dbe589d --- /dev/null +++ b/src/modules/print/entities/field.entity.ts @@ -0,0 +1,29 @@ +import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'; +import { FieldOption } from './field-option.entity'; +import { FieldType } from '../interface/print'; +import { Section } from './section.entity'; + + +@Entity({ tableName: 'field' }) +export class Field { + @PrimaryKey({ type: 'bigint', autoincrement: true }) + id: bigint + + @OneToMany(() => FieldOption, (attrValue) => attrValue.field) + options = new Collection(this) + + @ManyToOne(() => Section) + section: Section + + @Property() + name: string; + + @Enum(() => FieldType) + type: FieldType; + + @Property({ type: 'boolean', default: false }) + isRequired: boolean = false; + + @Property({ type: 'int', nullable: true }) + order?: number; +} diff --git a/src/modules/print/entities/section.entity.ts b/src/modules/print/entities/section.entity.ts new file mode 100644 index 0000000..a97b516 --- /dev/null +++ b/src/modules/print/entities/section.entity.ts @@ -0,0 +1,19 @@ +import { Cascade, Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'; +import { Field } from './field.entity'; + + +@Entity({ tableName: 'section' }) +export class Section { + @PrimaryKey({ type: 'bigint', autoincrement: true }) + id: bigint + + @OneToMany(() => Field, (attrValue) => attrValue.section, { cascade: [Cascade.PERSIST, Cascade.REMOVE] }) + Fields = new Collection(this) + + @Property() + title: string; + + + @Property({ type: 'int', nullable: true }) + order?: number; +} diff --git a/src/modules/print/interface/print.ts b/src/modules/print/interface/print.ts new file mode 100644 index 0000000..5a34c25 --- /dev/null +++ b/src/modules/print/interface/print.ts @@ -0,0 +1,9 @@ +export enum FieldType { + text = 'text', + textarea = 'textarea', + number = 'number', + select = 'select', + radio = 'radio', + checkbox = 'checkbox', + date = 'date', +} \ No newline at end of file diff --git a/src/modules/print/print.controller.ts b/src/modules/print/print.controller.ts new file mode 100644 index 0000000..8df3a73 --- /dev/null +++ b/src/modules/print/print.controller.ts @@ -0,0 +1,34 @@ +import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'; +import { PrintService } from './print.service'; +import { CreatePrintDto } from './dto/create-print.dto'; +import { UpdatePrintDto } from './dto/update-print.dto'; + +@Controller('print') +export class PrintController { + constructor(private readonly printService: PrintService) {} + + @Post() + create(@Body() createPrintDto: CreatePrintDto) { + return this.printService.create(createPrintDto); + } + + @Get() + findAll() { + return this.printService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string) { + return this.printService.findOne(+id); + } + + @Patch(':id') + update(@Param('id') id: string, @Body() updatePrintDto: UpdatePrintDto) { + return this.printService.update(+id, updatePrintDto); + } + + @Delete(':id') + remove(@Param('id') id: string) { + return this.printService.remove(+id); + } +} diff --git a/src/modules/print/print.module.ts b/src/modules/print/print.module.ts new file mode 100644 index 0000000..0e14a13 --- /dev/null +++ b/src/modules/print/print.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { PrintService } from './print.service'; +import { PrintController } from './print.controller'; +import { MikroOrmModule } from '@mikro-orm/nestjs'; +import { Field } from './entities/field.entity'; +import { Section } from './entities/section.entity'; +import { FieldOption } from './entities/field-option.entity'; + +@Module({ + controllers: [PrintController], + providers: [PrintService], + imports: [MikroOrmModule.forFeature([Field, Section, FieldOption])] +}) +export class PrintModule { } diff --git a/src/modules/print/print.service.ts b/src/modules/print/print.service.ts new file mode 100644 index 0000000..6df60e6 --- /dev/null +++ b/src/modules/print/print.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@nestjs/common'; +import { CreatePrintDto } from './dto/create-print.dto'; +import { UpdatePrintDto } from './dto/update-print.dto'; + +@Injectable() +export class PrintService { + create(createPrintDto: CreatePrintDto) { + return 'This action adds a new print'; + } + + findAll() { + return `This action returns all print`; + } + + findOne(id: number) { + return `This action returns a #${id} print`; + } + + update(id: number, updatePrintDto: UpdatePrintDto) { + return `This action updates a #${id} print`; + } + + remove(id: number) { + return `This action removes a #${id} print`; + } +}