Преглед изворни кода

优化支付服务中的订单类型映射逻辑,重命名订单类型为更简洁的形式,同时更新相关方法以使用新的映射结构。

wuyi пре 3 месеци
родитељ
комит
5c895dd243
2 измењених фајлова са 35 додато и 29 уклоњено
  1. 7 7
      src/entities/income-records.entity.ts
  2. 28 22
      src/services/payment.service.ts

+ 7 - 7
src/entities/income-records.entity.ts

@@ -7,13 +7,13 @@ export enum IncomeType {
 
 export enum OrderType {
   SINGLE_TIP = 'single_tip',
-  HOURLY_MEMBER = 'hourly_member',
-  DAILY_MEMBER = 'daily_member',
-  WEEKLY_MEMBER = 'weekly_member',
-  MONTHLY_MEMBER = 'monthly_member',
-  QUARTERLY_MEMBER = 'quarterly_member',
-  YEARLY_MEMBER = 'yearly_member',
-  LIFETIME_MEMBER = 'lifetime_member'
+  HOURLY = 'hourly',
+  DAILY = 'daily',
+  WEEKLY = 'weekly',
+  MONTHLY = 'monthly',
+  QUARTERLY = 'quarterly',
+  YEARLY = 'yearly',
+  LIFETIME = 'lifetime'
 }
 
 @Entity()

+ 28 - 22
src/services/payment.service.ts

@@ -29,6 +29,28 @@ export class PaymentService {
   private userService: UserService
   private teamService: TeamService
 
+  private static readonly ORDER_TYPE_TO_VIP_LEVEL_MAP: Record<OrderType, VipLevel> = {
+    [OrderType.SINGLE_TIP]: VipLevel.FREE,
+    [OrderType.HOURLY]: VipLevel.HOURLY,
+    [OrderType.DAILY]: VipLevel.DAILY,
+    [OrderType.WEEKLY]: VipLevel.WEEKLY,
+    [OrderType.MONTHLY]: VipLevel.MONTHLY,
+    [OrderType.QUARTERLY]: VipLevel.QUARTERLY,
+    [OrderType.YEARLY]: VipLevel.YEARLY,
+    [OrderType.LIFETIME]: VipLevel.LIFETIME
+  } as const
+
+  private static readonly STRING_TO_ORDER_TYPE_MAP: Record<string, OrderType> = {
+    single: OrderType.SINGLE_TIP,
+    hourly: OrderType.HOURLY,
+    daily: OrderType.DAILY,
+    weekly: OrderType.WEEKLY,
+    monthly: OrderType.MONTHLY,
+    quarterly: OrderType.QUARTERLY,
+    yearly: OrderType.YEARLY,
+    lifetime: OrderType.LIFETIME
+  } as const
+
   constructor(app: FastifyInstance) {
     this.app = app
     this.url = app.config.PAYMENT_URL
@@ -254,32 +276,16 @@ export class PaymentService {
   }
 
   private getVipLevelByOrderType(orderType: OrderType): VipLevel {
-    const orderTypeMap: Record<OrderType, VipLevel> = {
-      [OrderType.SINGLE_TIP]: VipLevel.FREE,
-      [OrderType.HOURLY_MEMBER]: VipLevel.HOURLY,
-      [OrderType.DAILY_MEMBER]: VipLevel.DAILY,
-      [OrderType.WEEKLY_MEMBER]: VipLevel.WEEKLY,
-      [OrderType.MONTHLY_MEMBER]: VipLevel.MONTHLY,
-      [OrderType.QUARTERLY_MEMBER]: VipLevel.QUARTERLY,
-      [OrderType.YEARLY_MEMBER]: VipLevel.YEARLY,
-      [OrderType.LIFETIME_MEMBER]: VipLevel.LIFETIME
-    }
-
-    return orderTypeMap[orderType] || VipLevel.FREE
+    return PaymentService.ORDER_TYPE_TO_VIP_LEVEL_MAP[orderType] ?? VipLevel.FREE
   }
 
   private getOrderTypeByType(type: string): OrderType {
-    const orderTypeMap: Record<string, OrderType> = {
-      single: OrderType.SINGLE_TIP,
-      hourly: OrderType.HOURLY_MEMBER,
-      daily: OrderType.DAILY_MEMBER,
-      weekly: OrderType.WEEKLY_MEMBER,
-      monthly: OrderType.MONTHLY_MEMBER,
-      quarterly: OrderType.QUARTERLY_MEMBER,
-      yearly: OrderType.YEARLY_MEMBER,
-      lifetime: OrderType.LIFETIME_MEMBER
+    if (!type || typeof type !== 'string') {
+      this.app.log.warn(`Invalid type parameter: ${type}, using default SINGLE_TIP`)
+      return OrderType.SINGLE_TIP
     }
 
-    return orderTypeMap[type] || OrderType.SINGLE_TIP
+    const normalizedType = type.toLowerCase().trim()
+    return PaymentService.STRING_TO_ORDER_TYPE_MAP[normalizedType] ?? OrderType.SINGLE_TIP
   }
 }