package handler import ( "net/http" "github.com/gin-gonic/gin" "zeromesh/internal/service" ) type AuthHandler struct { authService *service.AuthService } func NewAuthHandler(authService *service.AuthService) *AuthHandler { return &AuthHandler{authService: authService} } type loginReq struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } type registerReq struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } func (h *AuthHandler) Login(c *gin.Context) { var req loginReq if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } token, user, err := h.authService.Login(req.Username, req.Password) if err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{ "token": token, "user": user, }) } func (h *AuthHandler) Register(c *gin.Context) { var req registerReq if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } user, token, err := h.authService.Register(req.Username, req.Password) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{ "token": token, "user": user, }) } func (h *AuthHandler) InitAdmin(c *gin.Context) { var req registerReq if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } user, token, err := h.authService.InitAdmin(req.Username, req.Password) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{ "token": token, "user": user, }) } func (h *AuthHandler) CheckAdmin(c *gin.Context) { exists, err := h.authService.CheckAdmin() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"admin_exists": exists}) }