package handler import ( "net/http" "github.com/gin-gonic/gin" "gorm.io/gorm" "github.com/wangjia/jiu/backend/internal/middleware" "github.com/wangjia/jiu/backend/internal/model" "github.com/wangjia/jiu/backend/internal/util" ) type NumberRuleHandler struct { db *gorm.DB } func NewNumberRuleHandler(db *gorm.DB) *NumberRuleHandler { return &NumberRuleHandler{db: db} } var defaultRules = []struct { Type string Prefix string DateFormat string }{ {"stock_in", "RK", "YYYYMMDD"}, {"stock_out", "CK", "YYYYMMDD"}, {"inventory_check", "PD", "YYYYMMDD"}, {"product", "SP", "YYYYMMDD"}, } // List GET /api/v1/number-rules func (h *NumberRuleHandler) List(c *gin.Context) { shopID := middleware.GetShopID(c) rules := make([]model.NumberRule, 0) h.db.Where("shop_id = ?", shopID).Order("id").Find(&rules) if len(rules) == 0 { for _, d := range defaultRules { r := model.NumberRule{ShopID: shopID, Type: d.Type, Prefix: d.Prefix, DateFormat: d.DateFormat} h.db.Create(&r) rules = append(rules, r) } } util.RespondSuccess(c, rules) } // Update PUT /api/v1/number-rules/:id func (h *NumberRuleHandler) Update(c *gin.Context) { shopID := middleware.GetShopID(c) id := c.Param("id") var rule model.NumberRule if err := h.db.Where("id = ? AND shop_id = ?", id, shopID).First(&rule).Error; err != nil { c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) return } var req struct { Prefix string `json:"prefix"` CurrentNo *int `json:"current_no"` DateFormat string `json:"date_format"` } if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } updates := map[string]any{} if req.Prefix != "" { updates["prefix"] = req.Prefix } if req.CurrentNo != nil { updates["current_no"] = *req.CurrentNo } if req.DateFormat != "" { updates["date_format"] = req.DateFormat } if err := h.db.Model(&rule).Updates(updates).Error; err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } util.RespondSuccess(c, rule) }