Jelajahi Sumber

fix: 修复统一广告模块路由注册路径重复问题

问题:server包注册时添加了 /api/v1/advertisements 前缀,而模块内部聚合路由已经包含 /advertisements,导致路径重复为 /api/v1/advertisements/advertisements

修复:
- 将注册方式从 api.route('/api/v1/advertisements', unifiedAdvertisementRoutes) 改为 api.route('/api/v1', unifiedAdvertisementRoutes)
- 聚合路由已包含 /advertisements 和 /advertisement-types,只需注册 /api/v1 前缀
- 更新集成测试导入和客户端使用

🤖 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 2 minggu lalu
induk
melakukan
1a95b3d2a4

+ 3 - 4
packages/server/src/index.ts

@@ -254,8 +254,8 @@ 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)
 // 统一广告模块 - 用户端路由(保持API路径兼容)
-export const advertisementApiRoutes = api.route('/api/v1/advertisements', unifiedAdvertisementRoutes)
-export const advertisementTypeApiRoutes = api.route('/api/v1/advertisement-types', unifiedAdvertisementTypeRoutes)
+// 聚合路由已包含 /advertisements 和 /advertisement-types,所以注册 /api/v1 前缀即可
+export const unifiedAdvertisementApiRoutes = api.route('/api/v1', unifiedAdvertisementRoutes)
 // 统一广告模块 - 管理员路由(新增,租户后台使用)
 export const adminUnifiedAdvertisementApiRoutes = api.route('/api/v1/admin/unified-advertisements', unifiedAdvertisementAdminRoutes)
 export const adminUnifiedAdvertisementTypeApiRoutes = api.route('/api/v1/admin/unified-advertisement-types', unifiedAdvertisementTypeAdminRoutes)
@@ -288,8 +288,7 @@ export type AuthRoutes = typeof authRoutes
 export type UserRoutes = typeof userRoutes
 export type FileRoutes = typeof fileApiRoutes
 export type RoleRoutes = typeof roleRoutes
-export type AdvertisementRoutes = typeof advertisementApiRoutes
-export type AdvertisementTypeRoutes = typeof advertisementTypeApiRoutes
+export type AdvertisementRoutes = typeof unifiedAdvertisementApiRoutes
 export type GoodsCategoryRoutes = typeof goodsCategoryApiRoutes
 export type GoodsRoutes = typeof goodsApiRoutes
 export type SupplierRoutes = typeof supplierApiRoutes

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

@@ -6,15 +6,15 @@ import {
 } from '../utils/integration-test-db';
 import { UserEntityMt, UserServiceMt } from '@d8d/user-module-mt';
 // 导入server包的api以确保数据源初始化,同时获取统一广告路由的类型
-import { adminUnifiedAdvertisementApiRoutes, adminUnifiedAdvertisementTypeApiRoutes, advertisementApiRoutes, advertisementTypeApiRoutes } from '../../src/api';
+import { adminUnifiedAdvertisementApiRoutes, adminUnifiedAdvertisementTypeApiRoutes, unifiedAdvertisementApiRoutes } from '../../src/api';
 import { AuthService } from '@d8d/auth-module-mt';
 import { UnifiedAdvertisement, UnifiedAdvertisementType } from '@d8d/unified-advertisements-module';
 
 describe('统一广告管理员权限集成测试', () => {
   let adminClient: ReturnType<typeof testClient<typeof adminUnifiedAdvertisementApiRoutes>>['api']['v1']['admin']['unified-advertisements'];
   let adminTypeClient: ReturnType<typeof testClient<typeof adminUnifiedAdvertisementTypeApiRoutes>>['api']['v1']['admin']['unified-advertisement-types'];
-  let userClient: ReturnType<typeof testClient<typeof advertisementApiRoutes>>['api']['v1']['advertisements'];
-  let userTypeClient: ReturnType<typeof testClient<typeof advertisementTypeApiRoutes>>['api']['v1']['advertisement-types'];
+  let userClient: ReturnType<typeof testClient<typeof unifiedAdvertisementApiRoutes>>['api']['v1']['advertisements'];
+  let userTypeClient: ReturnType<typeof testClient<typeof unifiedAdvertisementApiRoutes>>['api']['v1']['advertisement-types'];
   let authService: AuthService;
   let userService: UserServiceMt;
   let superAdminToken: string;
@@ -34,8 +34,8 @@ describe('统一广告管理员权限集成测试', () => {
     // 创建测试客户端 - 使用server包注册后的路由
     adminClient = testClient(adminUnifiedAdvertisementApiRoutes).api.v1.admin['unified-advertisements'];
     adminTypeClient = testClient(adminUnifiedAdvertisementTypeApiRoutes).api.v1.admin['unified-advertisement-types'];
-    userClient = testClient(advertisementApiRoutes).api.v1.advertisements;
-    userTypeClient = testClient(advertisementTypeApiRoutes).api.v1['advertisement-types'];
+    userClient = testClient(unifiedAdvertisementApiRoutes).api.v1.advertisements;
+    userTypeClient = testClient(unifiedAdvertisementApiRoutes).api.v1['advertisement-types'];
 
     // 获取数据源
     const dataSource = await IntegrationTestDatabase.getDataSource();