From 130618adb595e7749dcbddba918fcd87b0334497 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Thu, 2 Jul 2026 22:42:24 +0330 Subject: [PATCH] remove relation between request and invoice --- src/modules/invoice/entities/invoice.entity.ts | 5 ++--- src/modules/invoice/invoice.service.ts | 12 +++++------- .../invoice/repositories/invoice.repository.ts | 4 ++-- src/modules/request/entities/request.entity.ts | 4 ---- .../request/repositories/request.repository.ts | 2 +- src/modules/request/request.service.ts | 2 +- 6 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/modules/invoice/entities/invoice.entity.ts b/src/modules/invoice/entities/invoice.entity.ts index dcb46bf..c2d7668 100644 --- a/src/modules/invoice/entities/invoice.entity.ts +++ b/src/modules/invoice/entities/invoice.entity.ts @@ -17,7 +17,6 @@ import { ulid } from 'ulid'; import { BaseEntity } from 'src/common/entities/base.entity'; import { InvoiceConfirmStatusEnum } from '../enum/invoice-confirm-status.enum'; import { InvoiceItem } from './invoice-item.entity'; -import { Request } from 'src/modules/request/entities/request.entity'; import { IAttachment } from 'src/modules/order/interface/order.interface'; @@ -32,8 +31,8 @@ export class Invoice extends BaseEntity { @ManyToOne(() => User) user!: User; - @ManyToOne(() => Request, { nullable: true }) - request?: Request; + @Property({ type: 'string', columnType: 'char(26)', nullable: true }) + requestId?: string; @OneToMany(() => Payment, payment => payment.invoice, { cascade: [Cascade.ALL], diff --git a/src/modules/invoice/invoice.service.ts b/src/modules/invoice/invoice.service.ts index 36123f0..30818bc 100644 --- a/src/modules/invoice/invoice.service.ts +++ b/src/modules/invoice/invoice.service.ts @@ -58,7 +58,6 @@ export class InvoiceService { async create(dto: CreateInvoiceDto) { let user: User; - let request: Request | undefined; if (dto.requestId) { const requestEntity = await this.em.findOne( @@ -71,14 +70,13 @@ export class InvoiceService { } const existingInvoice = await this.em.findOne(Invoice, { - request: { id: dto.requestId }, + requestId: dto.requestId, }); if (existingInvoice) { throw new BadRequestException('An invoice already exists for this request'); } user = requestEntity.user; - request = requestEntity; } else if (dto.userId) { user = await this.em.findOneOrFail(User, { id: dto.userId }); } else { @@ -95,7 +93,7 @@ export class InvoiceService { const invoice = await this.em.transactional(async (em) => { const invoice = em.create(Invoice, { user, - ...(request && { request }), + ...(dto.requestId && { requestId: dto.requestId }), enableTax, approvalDeadline, discount: 0, @@ -183,7 +181,7 @@ export class InvoiceService { const invoice = await this.em.findOne( Invoice, { id, user: { id: userId } }, - { populate: ['user', 'request', 'items', 'items.product'] }, + { populate: ['user', 'items', 'items.product'] }, ); if (!invoice) { throw new NotFoundException('Invoice not found'); @@ -195,7 +193,7 @@ export class InvoiceService { const invoice = await this.em.findOne( Invoice, { id }, - { populate: ['user', 'request', 'items', 'items.product'] }, + { populate: ['user', 'items', 'items.product'] }, ); if (!invoice) { throw new NotFoundException('Invoice not found'); @@ -351,7 +349,7 @@ export class InvoiceService { const invoice = await this.em.findOne( Invoice, { id }, - { populate: ['user', 'request', 'items', 'items.product'] }, + { populate: ['user', 'items', 'items.product'] }, ); if (!invoice) { throw new NotFoundException('Invoice not found'); diff --git a/src/modules/invoice/repositories/invoice.repository.ts b/src/modules/invoice/repositories/invoice.repository.ts index d21af1f..dc0c553 100644 --- a/src/modules/invoice/repositories/invoice.repository.ts +++ b/src/modules/invoice/repositories/invoice.repository.ts @@ -39,7 +39,7 @@ export class InvoiceRepository extends EntityRepository { } if (requestId) { - where.request = { id: requestId }; + where.requestId = requestId; } if (typeof enableTax === 'boolean') { @@ -80,7 +80,7 @@ export class InvoiceRepository extends EntityRepository { limit, offset, orderBy: { [orderBy]: order.toLowerCase() as 'asc' | 'desc' }, - populate: ['user', 'request', 'items', 'items.product'], + populate: ['user', 'items', 'items.product'], }); const totalPages = Math.ceil(total / limit); diff --git a/src/modules/request/entities/request.entity.ts b/src/modules/request/entities/request.entity.ts index 7e0b400..74b2b46 100644 --- a/src/modules/request/entities/request.entity.ts +++ b/src/modules/request/entities/request.entity.ts @@ -13,7 +13,6 @@ import { User } from '../../user/entities/user.entity'; import { ulid } from 'ulid'; import { BaseEntity } from 'src/common/entities/base.entity'; import { RequestItem } from './request-item.entity'; -import { Invoice } from 'src/modules/invoice/entities/invoice.entity'; @Entity({ tableName: 'requests' }) @Index({ properties: ['user'] }) @@ -27,9 +26,6 @@ export class Request extends BaseEntity { @ManyToOne(() => User) user!: User; - @OneToMany(()=>Invoice, invoice => invoice.request) - invoices = new Collection(this); - @OneToMany(() => RequestItem, item => item.request, { cascade: [Cascade.ALL], orphanRemoval: true, diff --git a/src/modules/request/repositories/request.repository.ts b/src/modules/request/repositories/request.repository.ts index c76418e..7f6d129 100644 --- a/src/modules/request/repositories/request.repository.ts +++ b/src/modules/request/repositories/request.repository.ts @@ -65,7 +65,7 @@ export class RequestRepository extends EntityRepository { limit, offset, orderBy: { [orderBy]: order.toLowerCase() as 'asc' | 'desc' }, - populate: ['items', 'items.product', 'user','invoices'], + populate: ['items', 'items.product', 'user'], }); const totalPages = Math.ceil(total / limit); diff --git a/src/modules/request/request.service.ts b/src/modules/request/request.service.ts index 285fe5e..86b848e 100644 --- a/src/modules/request/request.service.ts +++ b/src/modules/request/request.service.ts @@ -221,7 +221,7 @@ export class RequestService { private async hardDeleteRequest(id: string, em: EntityManager) { await this.chatService.deleteChatsByRefId(id, em); - await em.nativeUpdate(Invoice, { request: { id } }, { request: null }); + await em.nativeUpdate(Invoice, { requestId: id }, { requestId: null }); await em.nativeDelete(RequestItem, { request: { id } }); await em.nativeDelete(Request, { id }); }