package handler import ( "net/http" "github.com/gin-gonic/gin" "github.com/wangjia/jiu/backend/internal/service" "github.com/wangjia/jiu/backend/internal/util" ) type AuthHandler struct { svc *service.AuthService } func NewAuthHandler(svc *service.AuthService) *AuthHandler { return &AuthHandler{svc: svc} } // Login POST /api/v1/auth/login func (h *AuthHandler) Login(c *gin.Context) { var req struct { ShopCode string `json:"shop_code" binding:"required"` Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } pair, user, err := h.svc.Login(req.ShopCode, req.Username, req.Password) if err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{ "data": gin.H{ "access_token": pair.AccessToken, "refresh_token": pair.RefreshToken, "expires_in": pair.ExpiresIn, "shop_id": pair.ShopID, "user": gin.H{ "id": user.ID, "username": user.Username, "real_name": user.RealName, "role": user.Role, }, }, }) } // Register POST /api/v1/public/register func (h *AuthHandler) Register(c *gin.Context) { var req service.RegisterInput if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } result, err := h.svc.Register(req) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } util.RespondSuccess(c, result) } // Refresh POST /api/v1/auth/refresh func (h *AuthHandler) Refresh(c *gin.Context) { var req struct { RefreshToken string `json:"refresh_token" binding:"required"` } if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } pair, err := h.svc.RefreshTokens(req.RefreshToken) if err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": err.Error()}) return } util.RespondSuccess(c, pair) }