fix : prohibit return / cancel order

This commit is contained in:
morteza-mortezai
2025-11-06 11:58:48 +03:30
parent 8685f78aaf
commit 834c8e644b
3 changed files with 24 additions and 4 deletions
+1
View File
@@ -258,6 +258,7 @@ export const enum OrderMessage {
ItemAlreadyReceived = "سفارش شما قبلا تحویل گرفته شده است",
ItemNotShipped = "سفارش هنوز ارسال نشده است",
CancelCompleted = "فرآیند لغو کالا تکمیل شد",
NotAllowed = "انجام این عملیات مجاز نیست",
}
export const enum TicketMessage {
+11 -2
View File
@@ -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(
+12 -2
View File
@@ -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 });