feat(backend): 新增商品属性字典表(产地/保质期/储存方式/描述文档)
- model/product_attr.go: 新增 4 张字典表 struct(TenantBase 范式)
- model/product.go: Product 增加 4 个可空外键 + belongs-to 关联
- handler/product_attr.go: 4 组 16 个 CRUD handler(shop_id 隔离)
- handler/product.go: FindOrCreate/Update 支持写入 4 个属性 ID
- handler/public.go: Preload 4 表 + 三级回退介绍 + 默认话术常量
- router/router.go: /product-options/{origins,shelf-lives,storages,description-docs} 路由
- main.go: AutoMigrate 注册 4 个新 model
- testutil/setup.go: SQLite 测试库补齐新列与新表
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -27,6 +27,7 @@ func Setup(r *gin.Engine, db *gorm.DB) {
|
||||
importH := handler.NewImportHandler(db)
|
||||
userH := handler.NewUserHandler(db)
|
||||
productOptH := handler.NewProductOptionHandler(db)
|
||||
productAttrH := handler.NewProductAttrHandler(db)
|
||||
productImageH := handler.NewProductImageHandler(db)
|
||||
financeH := handler.NewFinanceHandler(db)
|
||||
numberRuleH := handler.NewNumberRuleHandler(db)
|
||||
@@ -217,6 +218,27 @@ func Setup(r *gin.Engine, db *gorm.DB) {
|
||||
opts.POST("/specs", productOptH.CreateSpec)
|
||||
opts.PUT("/specs/:id", productOptH.UpdateSpec)
|
||||
opts.DELETE("/specs/:id", productOptH.DeleteSpec)
|
||||
|
||||
// 商品属性字典(产地/保质期/储存方式/描述文档)
|
||||
opts.GET("/origins", productAttrH.ListOrigins)
|
||||
opts.POST("/origins", productAttrH.CreateOrigin)
|
||||
opts.PUT("/origins/:id", productAttrH.UpdateOrigin)
|
||||
opts.DELETE("/origins/:id", productAttrH.DeleteOrigin)
|
||||
|
||||
opts.GET("/shelf-lives", productAttrH.ListShelfLives)
|
||||
opts.POST("/shelf-lives", productAttrH.CreateShelfLife)
|
||||
opts.PUT("/shelf-lives/:id", productAttrH.UpdateShelfLife)
|
||||
opts.DELETE("/shelf-lives/:id", productAttrH.DeleteShelfLife)
|
||||
|
||||
opts.GET("/storages", productAttrH.ListStorages)
|
||||
opts.POST("/storages", productAttrH.CreateStorage)
|
||||
opts.PUT("/storages/:id", productAttrH.UpdateStorage)
|
||||
opts.DELETE("/storages/:id", productAttrH.DeleteStorage)
|
||||
|
||||
opts.GET("/description-docs", productAttrH.ListDescriptionDocs)
|
||||
opts.POST("/description-docs", productAttrH.CreateDescriptionDoc)
|
||||
opts.PUT("/description-docs/:id", productAttrH.UpdateDescriptionDoc)
|
||||
opts.DELETE("/description-docs/:id", productAttrH.DeleteDescriptionDoc)
|
||||
}
|
||||
|
||||
// 超级管理员专属
|
||||
|
||||
Reference in New Issue
Block a user