Merge pull request #55 from Danakcorp/mrtz

fix : prohibit return / cancel order
This commit is contained in:
morteza-mortezai
2025-11-06 12:00:01 +03:30
committed by GitHub
3 changed files with 24 additions and 4 deletions
+1
View File
@@ -258,6 +258,7 @@ export const enum OrderMessage {
ItemAlreadyReceived = "سفارش شما قبلا تحویل گرفته شده است", ItemAlreadyReceived = "سفارش شما قبلا تحویل گرفته شده است",
ItemNotShipped = "سفارش هنوز ارسال نشده است", ItemNotShipped = "سفارش هنوز ارسال نشده است",
CancelCompleted = "فرآیند لغو کالا تکمیل شد", CancelCompleted = "فرآیند لغو کالا تکمیل شد",
NotAllowed = "انجام این عملیات مجاز نیست",
} }
export const enum TicketMessage { 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 { CancelOrderDTO, CompeleteCancelOrderDTO, CreateCancelDTO } from "./DTO/cancel.dto";
import { CancelReasonDTO } from "./DTO/cancelReason.dto"; import { CancelReasonDTO } from "./DTO/cancelReason.dto";
import { CommonMessage, OrderMessage } from "../../common/enums/message.enum"; 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 { AdminCancelsQueries } from "../../common/types/query.type";
import { BadRequestError } from "../../core/app/app.errors"; import { BadRequestError } from "../../core/app/app.errors";
import { IOCTYPES } from "../../IOC/ioc.types"; import { IOCTYPES } from "../../IOC/ioc.types";
import { OrderItemRefEnum, ReasonRefEnum } from "../fine/models/fine.model"; import { OrderItemRefEnum, ReasonRefEnum } from "../fine/models/fine.model";
import { FineRepo } from "../fine/repository/fine.repository"; 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 { CancellerRefEnum, CancelStatusEnum } from "./models/cancel.model";
import { StatusEnum } from "../../common/enums/status.enum"; import { StatusEnum } from "../../common/enums/status.enum";
import { FineRuleRepo } from "../fine/repository/fineRule.repository"; import { FineRuleRepo } from "../fine/repository/fineRule.repository";
@@ -26,6 +26,7 @@ class CancelService {
@inject(IOCTYPES.FineRuleRepo) private fineRuleRepo: FineRuleRepo; @inject(IOCTYPES.FineRuleRepo) private fineRuleRepo: FineRuleRepo;
@inject(IOCTYPES.FineRepo) private fineRepo: FineRepo; @inject(IOCTYPES.FineRepo) private fineRepo: FineRepo;
@inject(IOCTYPES.NotificationService) notificationService: NotificationService; @inject(IOCTYPES.NotificationService) notificationService: NotificationService;
@inject(IOCTYPES.OrderService) orderRepository: OrderRepository;
//####################################################### //#######################################################
@@ -59,6 +60,14 @@ class CancelService {
const session = await startSession(); const session = await startSession();
session.startTransaction(); session.startTransaction();
try { 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 // create Cancel Order
let total_cancel_price = 0; let total_cancel_price = 0;
const cancelOrder = await this.cancelOrderRepo.model.create( 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 { ReturnOrderItemRepo, ReturnOrderRepo, ReturnReasonRepo } from "./return.repository";
import { PaginationDTO } from "../../common/dto/pagination.dto"; import { PaginationDTO } from "../../common/dto/pagination.dto";
import { CommonMessage, OrderMessage, ShopMessage, UserMessage } from "../../common/enums/message.enum"; 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 { StatusEnum } from "../../common/enums/status.enum";
import { BadRequestError } from "../../core/app/app.errors"; import { BadRequestError } from "../../core/app/app.errors";
import { IOCTYPES } from "../../IOC/ioc.types"; import { IOCTYPES } from "../../IOC/ioc.types";
@@ -14,7 +14,7 @@ import { paginationUtils } from "../../utils/pagination.utils";
import { SMS } from "../../utils/sms.service"; import { SMS } from "../../utils/sms.service";
import { FineRuleRepo } from "../fine/repository/fineRule.repository"; import { FineRuleRepo } from "../fine/repository/fineRule.repository";
import { NotificationService } from "../notification/notification.service"; 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 { ShopRepo } from "../shop/shop.repository";
import { UserRepository } from "../user/user.repository"; import { UserRepository } from "../user/user.repository";
@@ -28,6 +28,7 @@ class ReturnService {
@inject(IOCTYPES.NotificationService) private notificationService: NotificationService; @inject(IOCTYPES.NotificationService) private notificationService: NotificationService;
@inject(IOCTYPES.ShopRepo) private shopRepo: ShopRepo; @inject(IOCTYPES.ShopRepo) private shopRepo: ShopRepo;
@inject(IOCTYPES.UserRepository) private userRepository: UserRepository; @inject(IOCTYPES.UserRepository) private userRepository: UserRepository;
@inject(IOCTYPES.OrderRepository) private orderRepository: OrderRepository;
//####################################################### //#######################################################
@@ -70,6 +71,15 @@ class ReturnService {
try { try {
const user = await this.userRepository.findById(userId); const user = await this.userRepository.findById(userId);
if (!user) throw new BadRequestError(UserMessage.UserNotFound); 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 // create ReturnOrder
let total_return_price = 0; let total_return_price = 0;
const returnOrder = await this.returnOrderRepo.model.create([{ user: userId, order: returnDto.orderId }], { session }); const returnOrder = await this.returnOrderRepo.model.create([{ user: userId, order: returnDto.orderId }], { session });