Files
jiu/backend/internal/handler/number_rule.go
T
wangjia 75e3b934bc
Deploy / build-windows (push) Failing after 9s
Deploy / build-linux-web (push) Successful in 51s
Deploy / release-deploy (push) Has been skipped
chore: release v1.0.3
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 22:39:04 +08:00

87 lines
2.0 KiB
Go

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"
)
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)
}
}
c.JSON(http.StatusOK, gin.H{"data": 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
}
c.JSON(http.StatusOK, gin.H{"data": rule})
}