Kaynağa Gözat

🔧 refactor(server): 修复多租户包路由导入和测试数据租户ID

- 修复server/index.ts中多租户包的路由导入名称
- 修复测试文件中的UserServiceMt导入
- 为测试数据工厂添加默认tenantId字段
- 修复文件模块路由导入问题

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 1 ay önce
ebeveyn
işleme
d71ca8552a

+ 8 - 8
packages/server/src/index.ts

@@ -3,7 +3,7 @@ import { swaggerUI } from '@hono/swagger-ui'
 import { errorHandler, initializeDataSource } from '@d8d/shared-utils'
 import { userRoutesMt as userModuleRoutes, roleRoutesMt as roleModuleRoutes } from '@d8d/user-module-mt'
 import { authRoutes as authModuleRoutes } from '@d8d/auth-module-mt'
-import { fileRoutes as fileModuleRoutes } from '@d8d/file-module-mt'
+import { fileRoutesMt as fileModuleRoutes } from '@d8d/file-module-mt'
 import { AuthContext } from '@d8d/shared-types'
 import { AppDataSource } from '@d8d/shared-utils'
 import { Hono } from 'hono'
@@ -128,19 +128,19 @@ export const fileApiRoutes = api.route('/api/v1/files', fileModuleRoutes)
 export const roleRoutes = api.route('/api/v1/roles', roleModuleRoutes)
 
 // 导入已实现的包路由
-import { areasRoutes, adminAreasRoutes } from '@d8d/geo-areas-mt'
-import { PaymentRoutes } from '@d8d/mini-payment-mt'
+import { areasRoutesMt, adminAreasRoutesMt } from '@d8d/geo-areas-mt'
+import { PaymentMtRoutes as PaymentRoutes } from '@d8d/mini-payment-mt'
 import { advertisementRoutes, advertisementTypeRoutes } from '@d8d/advertisements-module-mt'
-import { userDeliveryAddressRoutes } from '@d8d/delivery-address-module-mt'
-import { adminGoodsCategoriesRoutes, adminGoodsRoutes } from '@d8d/goods-module-mt'
-import { merchantRoutes } from '@d8d/merchant-module-mt'
+import { userDeliveryAddressRoutesMt as userDeliveryAddressRoutes } from '@d8d/delivery-address-module-mt'
+import { adminGoodsCategoriesRoutesMt as adminGoodsCategoriesRoutes, adminGoodsRoutesMt as adminGoodsRoutes } from '@d8d/goods-module-mt'
+import { userMerchantRoutes as merchantRoutes } from '@d8d/merchant-module-mt'
 import { userOrderRoutes, userOrderItemsRoutes, userRefundsRoutes } from '@d8d/orders-module-mt'
 import { userSupplierRoutes } from '@d8d/supplier-module-mt'
 
 
 // 注册已实现的包路由
-export const areaApiRoutes = api.route('/api/v1/areas', areasRoutes)
-export const adminAreaApiRoutes = api.route('/api/v1/admin/areas', adminAreasRoutes)
+export const areaApiRoutes = api.route('/api/v1/areas', areasRoutesMt)
+export const adminAreaApiRoutes = api.route('/api/v1/admin/areas', adminAreasRoutesMt)
 export const paymentApiRoutes = api.route('/api/v1/payments', PaymentRoutes)
 export const advertisementApiRoutes = api.route('/api/v1/advertisements', advertisementRoutes)
 export const advertisementTypeApiRoutes = api.route('/api/v1/advertisement-types', advertisementTypeRoutes)

+ 5 - 5
packages/server/tests/integration/auth.integration.test.ts

@@ -5,7 +5,7 @@ import {
   setupIntegrationDatabaseHooks,
   TestDataFactory
 } from '../utils/integration-test-db';
-import { UserEntity, UserService } from '@d8d/user-module-mt';
+import { UserEntityMt, UserServiceMt } from '@d8d/user-module-mt';
 import { authRoutes } from '../../src/api';
 import { AuthService } from '@d8d/auth-module-mt';
 import { DisabledStatus } from '@d8d/shared-types';
@@ -28,11 +28,11 @@ describe('认证API集成测试 (使用hono/testing)', () => {
     const dataSource = await IntegrationTestDatabase.getDataSource();
 
     // 初始化服务
-    userService = new UserService(dataSource);
+    userService = new UserServiceMt(dataSource);
     authService = new AuthService(userService);
 
     // 创建测试用户前先删除可能存在的重复用户
-    const userRepository = dataSource.getRepository(UserEntity);
+    const userRepository = dataSource.getRepository(UserEntityMt);
     await userRepository.delete({ username: 'testuser' });
 
     testUser = await TestDataFactory.createTestUser(dataSource, {
@@ -110,7 +110,7 @@ describe('认证API集成测试 (使用hono/testing)', () => {
       if (!dataSource) throw new Error('Database not initialized');
 
       // 先删除可能存在的重复用户
-      const userRepository = dataSource.getRepository(UserEntity);
+      const userRepository = dataSource.getRepository(UserEntityMt);
       await userRepository.delete({ username: 'disabled_user' });
 
       await TestDataFactory.createTestUser(dataSource, {
@@ -346,7 +346,7 @@ describe('认证API集成测试 (使用hono/testing)', () => {
       if (!dataSource) throw new Error('Database not initialized');
 
       // 先删除可能存在的重复用户
-      const userRepository = dataSource.getRepository(UserEntity);
+      const userRepository = dataSource.getRepository(UserEntityMt);
       await userRepository.delete({ username: 'regular_user' });
 
       const regularUser = await TestDataFactory.createTestUser(dataSource, {

+ 3 - 2
packages/server/tests/integration/files.integration.test.ts

@@ -7,7 +7,7 @@ import {
 } from '../utils/integration-test-db';
 import { fileApiRoutes } from '../../src/api';
 import { AuthService } from '@d8d/auth-module-mt';
-import { UserService } from '@d8d/user-module-mt';
+import { UserServiceMt } from '@d8d/user-module-mt';
 import { MinioService } from '@d8d/file-module-mt';
 
 // Mock MinIO service to avoid real connections in tests
@@ -15,6 +15,7 @@ vi.mock('@d8d/file-module-mt', async (importOriginal) => {
   const actual = await importOriginal();
   return {
     ...actual,
+    fileRoutesMt: actual.fileRoutesMt, // 确保导出fileRoutesMt
     MinioService: vi.fn(() => ({
       bucketName: 'd8dai',
       ensureBucketExists: vi.fn().mockResolvedValue(true),
@@ -57,7 +58,7 @@ describe('文件API连通性测试', () => {
     // 创建测试用户并生成token
     const dataSource = await IntegrationTestDatabase.getDataSource();
 
-    const userService = new UserService(dataSource);
+    const userService = new UserServiceMt(dataSource);
     const authService = new AuthService(userService);
 
     // 确保admin用户存在

+ 1 - 1
packages/server/tests/integration/users.integration.test.ts

@@ -25,7 +25,7 @@ describe('用户API集成测试 (使用hono/testing)', () => {
     // 创建测试用户并生成token
     const dataSource = await IntegrationTestDatabase.getDataSource();
 
-    const userService = new UserService(dataSource);
+    const userService = new UserServiceMt(dataSource);
     const authService = new AuthService(userService);
 
     // 确保admin用户存在

+ 3 - 0
packages/server/tests/utils/integration-test-db.ts

@@ -44,6 +44,7 @@ export class TestDataFactory {
       phone: `138${timestamp.toString().slice(-8)}`,
       nickname: `Test User ${timestamp}`,
       name: `Test Name ${timestamp}`,
+      tenantId: 1, // 多租户需要tenant_id
       isDisabled: 0,
       isDeleted: 0,
       ...overrides
@@ -58,6 +59,7 @@ export class TestDataFactory {
     return {
       name: `test_role_${timestamp}`,
       description: `Test role description ${timestamp}`,
+      tenantId: 1, // 多租户需要tenant_id
       ...overrides
     };
   }
@@ -95,6 +97,7 @@ export class TestDataFactory {
       size: 1024,
       path: `/uploads/testfile_${timestamp}.txt`,
       description: `Test file ${timestamp}`,
+      tenantId: 1, // 多租户需要tenant_id
       uploadUserId: 1,
       uploadTime: new Date(),
       ...overrides