package handler import ( "net/http" "strings" "memora-api/internal/request" "memora-api/internal/service" "github.com/gin-gonic/gin" ) type AuthHandler struct { authService *service.AuthService } func NewAuthHandler(authService *service.AuthService) *AuthHandler { return &AuthHandler{authService: authService} } func (h *AuthHandler) Register(c *gin.Context) { var req request.RegisterRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } user, err := h.authService.Register(req) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"data": gin.H{"id": user.ID, "email": user.Email, "name": user.Name}}) } func (h *AuthHandler) Login(c *gin.Context) { var req request.LoginRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } token, user, err := h.authService.Login(req) if err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"data": gin.H{"token": token, "user": gin.H{"id": user.ID, "email": user.Email, "name": user.Name}}}) } func (h *AuthHandler) Me(c *gin.Context) { authHeader := c.GetHeader("Authorization") if !strings.HasPrefix(authHeader, "Bearer ") { c.JSON(http.StatusUnauthorized, gin.H{"error": "未登录"}) return } token := strings.TrimPrefix(authHeader, "Bearer ") uid, err := service.ParseToken(token) if err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": "登录已失效"}) return } c.JSON(http.StatusOK, gin.H{"data": gin.H{"user_id": uid}}) }