Переглянути джерело

✨ feat(goods-module-mt): add user goods category routes

- create new userGoodsCategoriesRoutesMt route file with read-only CRUD operations
- add authentication middleware for user goods category routes
- export and register user goods category routes in module index
- update server routing to use user goods category routes for /api/v1/goods-categories
- move admin goods category routes to /api/v1/admin/goods-categories
- update admin client API initialization to use new admin goods category endpoint

✨ feat(server): update goods category route registration

- import user goods category routes from goods module
- register user goods category routes at /api/v1/goods-categories
- register admin goods category routes at /api/v1/admin/goods-categories
- import public goods routes from goods module

📝 docs(web): update admin API client initialization path

- update goodsCategoryClientManager to use new admin goods category endpoint /api/v1/admin/goods-categories
yourname 1 місяць тому
батько
коміт
4f34da5b51

+ 2 - 0
packages/goods-module-mt/src/index.mt.ts

@@ -7,6 +7,7 @@ export * from './types/index.mt';
 // 导出路由
 import { adminGoodsRoutesMt } from './routes/admin-goods-routes.mt';
 import { adminGoodsCategoriesRoutesMt } from './routes/admin-goods-categories.mt';
+import { userGoodsCategoriesRoutesMt } from './routes/user-goods-categories.mt';
 import { userGoodsRoutesMt } from './routes/user-goods-routes.mt';
 import { publicGoodsRoutesMt } from './routes/public-goods-routes.mt';
 import { publicGoodsRandomRoutesMt } from './routes/public-goods-random.mt';
@@ -14,6 +15,7 @@ import { publicGoodsRandomRoutesMt } from './routes/public-goods-random.mt';
 export {
   adminGoodsRoutesMt,
   adminGoodsCategoriesRoutesMt,
+  userGoodsCategoriesRoutesMt,
   userGoodsRoutesMt,
   publicGoodsRoutesMt,
   publicGoodsRandomRoutesMt

+ 1 - 0
packages/goods-module-mt/src/routes/index.mt.ts

@@ -1,4 +1,5 @@
 export * from './admin-goods-categories.mt';
+export * from './user-goods-categories.mt';
 export * from './public-goods-random.mt';
 export * from './user-goods-routes.mt';
 export * from './admin-goods-routes.mt';

+ 26 - 0
packages/goods-module-mt/src/routes/user-goods-categories.mt.ts

@@ -0,0 +1,26 @@
+import { createCrudRoutes } from '@d8d/shared-crud';
+import { OpenAPIHono } from '@hono/zod-openapi';
+import { GoodsCategoryMt } from '../entities/goods-category.entity.mt';
+import { GoodsCategorySchema, CreateGoodsCategoryDto, UpdateGoodsCategoryDto } from '../schemas/goods-category.schema.mt';
+import { authMiddleware } from '@d8d/auth-module-mt';
+
+// 创建基础CRUD路由
+export const userGoodsCategoriesRoutesMt = createCrudRoutes({
+  entity: GoodsCategoryMt,
+  createSchema: CreateGoodsCategoryDto,
+  updateSchema: UpdateGoodsCategoryDto,
+  getSchema: GoodsCategorySchema,
+  listSchema: GoodsCategorySchema,
+  searchFields: ['name'],
+  relations: ['imageFile.uploadUser'],
+  middleware: [authMiddleware],
+  readOnly: true,
+  userTracking: {
+    createdByField: 'createdBy',
+    updatedByField: 'updatedBy'
+  },
+  tenantOptions: {
+    enabled: true,
+    tenantIdField: 'tenantId'
+  }
+});

+ 9 - 2
packages/server/src/index.ts

@@ -136,7 +136,13 @@ 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 { userDeliveryAddressRoutesMt as userDeliveryAddressRoutes, adminDeliveryAddressRoutesMt as adminDeliveryAddressRoutes } from '@d8d/delivery-address-module-mt'
-import { adminGoodsCategoriesRoutesMt as adminGoodsCategoriesRoutes, adminGoodsRoutesMt as adminGoodsRoutes } from '@d8d/goods-module-mt'
+import { 
+  adminGoodsCategoriesRoutesMt as adminGoodsCategoriesRoutes, 
+  adminGoodsRoutesMt as adminGoodsRoutes,
+  userGoodsCategoriesRoutesMt,
+  publicGoodsRoutesMt,
+  publicGoodsRandomRoutesMt
+} from '@d8d/goods-module-mt'
 import { userMerchantRoutes as merchantRoutes } from '@d8d/merchant-module-mt'
 import { 
   userOrderRoutes, 
@@ -153,7 +159,8 @@ export const advertisementApiRoutes = api.route('/api/v1/advertisements', advert
 export const advertisementTypeApiRoutes = api.route('/api/v1/advertisement-types', advertisementTypeRoutes)
 export const deliveryAddressApiRoutes = api.route('/api/v1/delivery-addresses', userDeliveryAddressRoutes)
 export const adminDeliveryAddressApiRoutes = api.route('/api/v1/admin/delivery-addresses', adminDeliveryAddressRoutes)
-export const goodsCategoryApiRoutes = api.route('/api/v1/goods-categories', adminGoodsCategoriesRoutes)
+export const goodsCategoryApiRoutes = api.route('/api/v1/goods-categories', userGoodsCategoriesRoutesMt)
+export const adminGoodsCategoryApiRoutes = api.route('/api/v1/admin/goods-categories', adminGoodsCategoriesRoutes)
 export const goodsApiRoutes = api.route('/api/v1/goods', adminGoodsRoutes)
 export const merchantApiRoutes = api.route('/api/v1/merchants', merchantRoutes)
 export const orderApiRoutes = api.route('/api/v1/orders', userOrderRoutes)

+ 1 - 1
web/src/client/admin/api_init.ts

@@ -24,7 +24,7 @@ merchantClientManager.init('/api/v1/merchants');
 orderClientManager.init('/api/v1/admin/orders');
 advertisementTypeClientManager.init('/api/v1/advertisement-types');
 goodsClientManager.init('/api/v1/goods');
-goodsCategoryClientManager.init('/api/v1/goods-categories');
+goodsCategoryClientManager.init('/api/v1/admin/goods-categories');
 deliveryAddressClientManager.init('/api/v1/admin/delivery-addresses');
 advertisementClientManager.init('/api/v1/advertisements');
 systemConfigClientManager.init('/api/v1/admin/system-configs');