modify status

This commit is contained in:
2026-06-28 10:43:22 +03:30
parent 9b24061b92
commit 9e8a1d4c93
7 changed files with 114 additions and 18 deletions
+82 -12
View File
@@ -2824,17 +2824,6 @@
"default": "false",
"mappedType": "boolean"
},
"price": {
"name": "price",
"type": "numeric(10,0)",
"unsigned": false,
"autoincrement": false,
"primary": false,
"nullable": true,
"precision": 10,
"scale": 0,
"mappedType": "decimal"
},
"max_purchase_quantity": {
"name": "max_purchase_quantity",
"type": "int",
@@ -2844,6 +2833,71 @@
"nullable": true,
"default": "null",
"mappedType": "integer"
},
"min_purchase_quantity": {
"name": "min_purchase_quantity",
"type": "int",
"unsigned": false,
"autoincrement": false,
"primary": false,
"nullable": true,
"default": "null",
"mappedType": "integer"
},
"pricing_type": {
"name": "pricing_type",
"type": "text",
"unsigned": false,
"autoincrement": false,
"primary": false,
"nullable": false,
"default": "'fixed'",
"enumItems": [
"fixed",
"variable"
],
"mappedType": "enum"
},
"purchase_unit": {
"name": "purchase_unit",
"type": "text",
"unsigned": false,
"autoincrement": false,
"primary": false,
"nullable": false,
"default": "'number'",
"enumItems": [
"number",
"kilogram",
"gram",
"centimeter",
"meter",
"milliliter",
"liter"
],
"mappedType": "enum"
},
"purchase_pitch": {
"name": "purchase_pitch",
"type": "numeric(10,3)",
"unsigned": false,
"autoincrement": false,
"primary": false,
"nullable": true,
"precision": 10,
"scale": 3,
"default": "null",
"mappedType": "decimal"
},
"need_admin_acceptance": {
"name": "need_admin_acceptance",
"type": "boolean",
"unsigned": false,
"autoincrement": false,
"primary": false,
"nullable": false,
"default": "false",
"mappedType": "boolean"
}
},
"name": "products",
@@ -3842,7 +3896,8 @@
"deliveredToRecepient",
"shipped",
"completed",
"canceled"
"canceled",
"needConfirmation"
],
"mappedType": "enum"
},
@@ -5209,6 +5264,21 @@
"precision": 10,
"scale": 0,
"mappedType": "decimal"
},
"status": {
"name": "status",
"type": "text",
"unsigned": false,
"autoincrement": false,
"primary": false,
"nullable": false,
"default": "'normal'",
"enumItems": [
"normal",
"needConfirmation",
"confirmed"
],
"mappedType": "enum"
}
},
"name": "order_items",
@@ -0,0 +1,23 @@
import { Migration } from '@mikro-orm/migrations';
export class Migration20260628071208 extends Migration {
override async up(): Promise<void> {
this.addSql(`alter table "orders" drop constraint if exists "orders_status_check";`);
this.addSql(`alter table "products" add column "min_purchase_quantity" int null, add column "pricing_type" text check ("pricing_type" in ('fixed', 'variable')) not null default 'fixed', add column "purchase_unit" text check ("purchase_unit" in ('number', 'kilogram', 'gram', 'centimeter', 'meter', 'milliliter', 'liter')) not null default 'number', add column "purchase_pitch" numeric(10,3) null, add column "need_admin_acceptance" boolean not null default false;`);
this.addSql(`alter table "orders" add constraint "orders_status_check" check("status" in ('pendingPayment', 'paid', 'preparing', 'deliveredToRecepient', 'shipped', 'completed', 'canceled', 'needConfirmation'));`);
this.addSql(`alter table "order_items" add column "status" text check ("status" in ('normal', 'needConfirmation', 'confirmed')) not null default 'normal';`);
}
override async down(): Promise<void> {
this.addSql(`alter table "orders" drop constraint if exists "orders_status_check";`);
this.addSql(`alter table "products" add column "price" numeric(10,0) null;`);
this.addSql(`alter table "orders" add constraint "orders_status_check" check("status" in ('pendingPayment', 'paid', 'preparing', 'deliveredToRecepient', 'shipped', 'completed', 'canceled'));`);
}
}
+2 -1
View File
@@ -52,8 +52,9 @@ export class AuthService {
const key = isAdmin ? this.adminOtpKey(slug, normalizedPhone) : this.userOtpKey(slug, normalizedPhone);
await this.cacheService.set(key, code, this.OTP_EXPIRATION_TIME);
await this.smsService.sendotp(normalizedPhone, code);
// await this.smsService.sendotp(normalizedPhone, code);
console.log('code', code);
return { code: null };
}
@@ -21,7 +21,6 @@ export enum OrderStatus {
COMPLETED = 'completed',
CANCELED = 'canceled',
NEED_CONFIRMATION = 'needConfirmation',
CONFIRMED = 'confirmed',
}
export interface OrderCouponDetail {
@@ -39,6 +39,7 @@ export class OrderListeners {
[OrderStatus.SHIPPED]: 'ارسال شده',
[OrderStatus.COMPLETED]: 'تکمیل شده',
[OrderStatus.CANCELED]: 'لغو شده',
[OrderStatus.NEED_CONFIRMATION]: 'به تایید نیاز دارد',
};
return statusMap[status] || status;
}
@@ -7,16 +7,14 @@ import { Shop } from '../../shops/entities/shop.entity';
import { Variant } from '../../products/entities/variant.entity';
import { CartService } from '../../cart/providers/cart.service';
import { OrderStatus, OrderUserAddress } from '../interface/order.interface';
import { PaymentMethodEnum, PaymentStatusEnum } from '../../payments/interface/payment';
import { PaymentMethodEnum } from '../../payments/interface/payment';
import { Cart } from '../../cart/interfaces/cart.interface';
import { PaymentMethod } from '../../payments/entities/payment-method.entity';
import { PaymentsService } from '../../payments/services/payments.service';
import { DeliveryMethodEnum } from '../../delivery/interface/delivery';
import { Delivery } from '../../delivery/entities/delivery.entity';
import { OrderRepository } from '../repositories/order.repository';
import { FindOrdersDto } from '../dto/find-orders.dto';
import { PaginatedResult } from 'src/common/interfaces/pagination.interface';
import { Payment } from 'src/modules/payments/entities/payment.entity';
import { StatusTransitionRef } from '../interface/order.interface';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { OrderCreatedEvent, OrderStatusChangedEvent } from '../events/order.events';
@@ -43,6 +41,7 @@ export class OrdersService {
private readonly logger = new Logger(OrdersService.name);
private static readonly STATUS_TRANSITIONS: Record<OrderStatus, readonly OrderStatus[]> = {
[OrderStatus.NEED_CONFIRMATION]: [ OrderStatus.CANCELED, OrderStatus.PENDING_PAYMENT],
[OrderStatus.PENDING_PAYMENT]: [OrderStatus.PAID, OrderStatus.CANCELED, OrderStatus.PREPARING],
[OrderStatus.PAID]: [OrderStatus.PREPARING, OrderStatus.CANCELED],
[OrderStatus.PREPARING]: [OrderStatus.SHIPPED, OrderStatus.DELIVERED_TO_RECEPIENT, OrderStatus.CANCELED],
@@ -59,7 +58,6 @@ export class OrdersService {
private readonly shopService: ShopService,
private readonly deliveryService: DeliveryService,
private readonly paymentMethodService: PaymentMethodService,
private readonly paymentsService: PaymentsService,
private readonly eventEmitter: EventEmitter2,
private readonly userService: UserService,
) { }
@@ -34,6 +34,10 @@ export class PaymentsService {
return { paymentUrl: null };
}
if (ctx.order.status === OrderStatus.NEED_CONFIRMATION) {
throw new BadRequestException('سفارش به تایید نیاز دارد');
}
switch (ctx.method) {
case PaymentMethodEnum.Cash:
await this.handleCashPayment(ctx);