فهرست منبع

✨ feat(order): 增强订单创建功能和测试工厂

- 添加订单创建响应格式验证,确保API输出符合规范
- 扩展订单创建响应参数,新增success状态和message字段
- 完善测试工厂,添加商品分类创建方法并关联商品分类ID

♻️ refactor(order): 优化订单服务返回结构

- 修改createOrder方法返回类型,增加success和message字段
- 在订单创建成功时返回明确的成功状态和消息
yourname 1 ماه پیش
والد
کامیت
358d527733

+ 5 - 2
packages/orders-module-mt/src/routes/user/create-order.mt.ts

@@ -1,6 +1,6 @@
 import { createRoute, OpenAPIHono } from '@hono/zod-openapi';
 import { authMiddleware } from '@d8d/auth-module-mt';
-import { AppDataSource } from '@d8d/shared-utils';
+import { AppDataSource, parseWithAwait } from '@d8d/shared-utils';
 import { AuthContext } from '@d8d/shared-types';
 import { OrderMtService } from '../../services';
 import { CreateOrderRequestDto, CreateOrderResponseDto } from '../../schemas/create-order.schema';
@@ -46,7 +46,10 @@ const createOrderRoutes = new OpenAPIHono<AuthContext>()
         const orderService = new OrderMtService(AppDataSource);
         const result = await orderService.createOrder(data, user.id, user.tenantId);
 
-        return c.json(result, 201);
+        // 验证响应格式
+        const validatedResult = await parseWithAwait(CreateOrderResponseDto, result);
+
+        return c.json(validatedResult, 201);
       } catch (error) {
         console.error('创建订单失败:', error);
         return c.json(

+ 5 - 1
packages/orders-module-mt/src/services/order.mt.service.ts

@@ -28,10 +28,12 @@ export class OrderMtService extends GenericCrudService<OrderMt> {
    * @returns 创建的订单信息
    */
   async createOrder(data: CreateOrderRequest, userId: number, tenantId: number): Promise<{
+    success: boolean;
     orderId: number;
     orderNo: string;
     amount: number;
     payAmount: number;
+    message: string;
   }> {
     const queryRunner = this.dataSource.createQueryRunner();
     await queryRunner.connect();
@@ -152,10 +154,12 @@ export class OrderMtService extends GenericCrudService<OrderMt> {
       await queryRunner.commitTransaction();
 
       return {
+        success: true,
         orderId: savedOrder.id,
         orderNo: savedOrder.orderNo,
         amount: savedOrder.amount,
-        payAmount: savedOrder.payAmount
+        payAmount: savedOrder.payAmount,
+        message: '订单创建成功'
       };
 
     } catch (error) {

+ 23 - 1
packages/orders-module-mt/tests/factories/orders-test-factory.ts

@@ -4,7 +4,7 @@ import { SupplierMt } from '@d8d/supplier-module-mt';
 import { MerchantMt } from '@d8d/merchant-module-mt';
 import { DeliveryAddressMt } from '@d8d/delivery-address-module-mt';
 import { FileMt } from '@d8d/file-module-mt';
-import { GoodsMt } from '@d8d/goods-module-mt';
+import { GoodsMt, GoodsCategoryMt } from '@d8d/goods-module-mt';
 import { AreaEntityMt } from '@d8d/geo-areas-mt';
 import { OrderMt, OrderGoodsMt, OrderRefundMt } from '../../src/entities/index';
 
@@ -127,6 +127,22 @@ export class OrdersTestFactory {
     return await addressRepository.save(address);
   }
 
+  /**
+   * 创建测试商品分类
+   */
+  async createTestGoodsCategory(overrides: Partial<GoodsCategoryMt> = {}): Promise<GoodsCategoryMt> {
+    const categoryRepository = this.dataSource.getRepository(GoodsCategoryMt);
+    const tenantId = overrides.tenantId || 1;
+
+    const category = categoryRepository.create({
+      tenantId,
+      name: `测试分类_${Math.floor(Math.random() * 100000)}`,
+      sort: 1,
+      ...overrides
+    });
+    return await categoryRepository.save(category);
+  }
+
   /**
    * 创建测试商品
    */
@@ -134,6 +150,9 @@ export class OrdersTestFactory {
     const goodsRepository = this.dataSource.getRepository(GoodsMt);
     const tenantId = overrides.tenantId || 1;
 
+    // 创建测试商品分类
+    const testCategory = await this.createTestGoodsCategory({ tenantId });
+
     const goods = goodsRepository.create({
       tenantId,
       name: `测试商品_${Math.floor(Math.random() * 100000)}`,
@@ -144,6 +163,9 @@ export class OrdersTestFactory {
       stock: 100,
       lowestBuy: 1,
       createdBy,
+      categoryId1: testCategory.id, // 使用真实创建的分类ID
+      categoryId2: testCategory.id,
+      categoryId3: testCategory.id,
       ...overrides
     });
     return await goodsRepository.save(goods);