From 834c8e644b2816f1171d69040bb3adc5da66e10e Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Thu, 6 Nov 2025 11:58:48 +0330 Subject: [PATCH] fix : prohibit return / cancel order --- src/common/enums/message.enum.ts | 1 + src/modules/cancel/cancel.service.ts | 13 +++++++++++-- src/modules/return/return.service.ts | 14 ++++++++++++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/common/enums/message.enum.ts b/src/common/enums/message.enum.ts index 4589d03..090b233 100644 --- a/src/common/enums/message.enum.ts +++ b/src/common/enums/message.enum.ts @@ -258,6 +258,7 @@ export const enum OrderMessage { ItemAlreadyReceived = "سفارش شما قبلا تحویل گرفته شده است", ItemNotShipped = "سفارش هنوز ارسال نشده است", CancelCompleted = "فرآیند لغو کالا تکمیل شد", + NotAllowed = "انجام این عملیات مجاز نیست", } export const enum TicketMessage { diff --git a/src/modules/cancel/cancel.service.ts b/src/modules/cancel/cancel.service.ts index 8eb61f9..3c740a3 100644 --- a/src/modules/cancel/cancel.service.ts +++ b/src/modules/cancel/cancel.service.ts @@ -5,13 +5,13 @@ import { CancelOrderItemRepo, CancelOrderRepo, CancelReasonRepo } from "./cancel import { CancelOrderDTO, CompeleteCancelOrderDTO, CreateCancelDTO } from "./DTO/cancel.dto"; import { CancelReasonDTO } from "./DTO/cancelReason.dto"; import { CommonMessage, OrderMessage } from "../../common/enums/message.enum"; -import { OrderItemsStatus } from "../../common/enums/order.enum"; +import { OrderItemsStatus, OrdersStatus } from "../../common/enums/order.enum"; import { AdminCancelsQueries } from "../../common/types/query.type"; import { BadRequestError } from "../../core/app/app.errors"; import { IOCTYPES } from "../../IOC/ioc.types"; import { OrderItemRefEnum, ReasonRefEnum } from "../fine/models/fine.model"; import { FineRepo } from "../fine/repository/fine.repository"; -import { OrderItemRepo } from "../order/order.repository"; +import { OrderItemRepo, OrderRepository } from "../order/order.repository"; import { CancellerRefEnum, CancelStatusEnum } from "./models/cancel.model"; import { StatusEnum } from "../../common/enums/status.enum"; import { FineRuleRepo } from "../fine/repository/fineRule.repository"; @@ -26,6 +26,7 @@ class CancelService { @inject(IOCTYPES.FineRuleRepo) private fineRuleRepo: FineRuleRepo; @inject(IOCTYPES.FineRepo) private fineRepo: FineRepo; @inject(IOCTYPES.NotificationService) notificationService: NotificationService; + @inject(IOCTYPES.OrderService) orderRepository: OrderRepository; //####################################################### @@ -59,6 +60,14 @@ class CancelService { const session = await startSession(); session.startTransaction(); try { + const { orderId } = createCancelDto; + const order = await this.orderRepository.findById(orderId); + if (!order) { + throw new BadRequestError(OrderMessage.NotFound); + } + if (order.orderStatus != OrdersStatus.process_by_seller) { + throw new BadRequestError(OrderMessage.NotAllowed); + } // create Cancel Order let total_cancel_price = 0; const cancelOrder = await this.cancelOrderRepo.model.create( diff --git a/src/modules/return/return.service.ts b/src/modules/return/return.service.ts index 4a5183a..7e179fc 100644 --- a/src/modules/return/return.service.ts +++ b/src/modules/return/return.service.ts @@ -6,7 +6,7 @@ import { ReasonDTO, UpdateReasonDTO } from "./DTO/returnReason.dto"; import { ReturnOrderItemRepo, ReturnOrderRepo, ReturnReasonRepo } from "./return.repository"; import { PaginationDTO } from "../../common/dto/pagination.dto"; import { CommonMessage, OrderMessage, ShopMessage, UserMessage } from "../../common/enums/message.enum"; -import { OrderItemsStatus } from "../../common/enums/order.enum"; +import { OrderItemsStatus, OrdersStatus } from "../../common/enums/order.enum"; import { StatusEnum } from "../../common/enums/status.enum"; import { BadRequestError } from "../../core/app/app.errors"; import { IOCTYPES } from "../../IOC/ioc.types"; @@ -14,7 +14,7 @@ import { paginationUtils } from "../../utils/pagination.utils"; import { SMS } from "../../utils/sms.service"; import { FineRuleRepo } from "../fine/repository/fineRule.repository"; import { NotificationService } from "../notification/notification.service"; -import { OrderItemRepo } from "../order/order.repository"; +import { OrderItemRepo, OrderRepository } from "../order/order.repository"; import { ShopRepo } from "../shop/shop.repository"; import { UserRepository } from "../user/user.repository"; @@ -28,6 +28,7 @@ class ReturnService { @inject(IOCTYPES.NotificationService) private notificationService: NotificationService; @inject(IOCTYPES.ShopRepo) private shopRepo: ShopRepo; @inject(IOCTYPES.UserRepository) private userRepository: UserRepository; + @inject(IOCTYPES.OrderRepository) private orderRepository: OrderRepository; //####################################################### @@ -70,6 +71,15 @@ class ReturnService { try { const user = await this.userRepository.findById(userId); if (!user) throw new BadRequestError(UserMessage.UserNotFound); + const { orderId } = returnDto; + const order = await this.orderRepository.findById(orderId); + if (!order) { + throw new BadRequestError(OrderMessage.NotFound); + } + if (order.orderStatus != OrdersStatus.shipped) { + throw new BadRequestError(OrderMessage.NotAllowed); + } + // create ReturnOrder let total_return_price = 0; const returnOrder = await this.returnOrderRepo.model.create([{ user: userId, order: returnDto.orderId }], { session });