// Package controller 提供HTTP请求处理层 // 负责参数绑定、校验, 调用Service层, 返回响应 package controller import ( "seeyon-filesystem/dto" "seeyon-filesystem/middleware" "seeyon-filesystem/service" "seeyon-filesystem/utils" "github.com/gin-gonic/gin" ) // AuthController 认证控制器 type AuthController struct { authService *service.AuthService } // NewAuthController 创建认证控制器实例 func NewAuthController() *AuthController { return &AuthController{ authService: service.NewAuthService(), } } // Login 用户登录 // POST /api/auth/login func (c *AuthController) Login(ctx *gin.Context) { var req dto.LoginRequest if err := ctx.ShouldBindJSON(&req); err != nil { utils.BadRequest(ctx, "参数错误: "+err.Error()) return } resp, err := c.authService.Login(&req) if err != nil { utils.Unauthorized(ctx, err.Error()) return } utils.Success(ctx, resp) } // AppLogin 应用登录(用户名+appId) // POST /api/auth/app-login func (c *AuthController) AppLogin(ctx *gin.Context) { var req dto.AppLoginRequest if err := ctx.ShouldBindJSON(&req); err != nil { utils.BadRequest(ctx, "参数错误: "+err.Error()) return } resp, err := c.authService.AppLogin(&req) if err != nil { utils.Unauthorized(ctx, err.Error()) return } utils.Success(ctx, resp) } // Register 用户注册 // POST /api/auth/register func (c *AuthController) Register(ctx *gin.Context) { var req dto.RegisterRequest if err := ctx.ShouldBindJSON(&req); err != nil { utils.BadRequest(ctx, "参数错误: "+err.Error()) return } if err := c.authService.Register(&req); err != nil { utils.BadRequest(ctx, err.Error()) return } utils.SuccessWithMessage(ctx, "注册成功", nil) } // GetProfile 获取当前用户信息 // GET /api/auth/profile func (c *AuthController) GetProfile(ctx *gin.Context) { userID := middleware.GetCurrentUserID(ctx) if userID == 0 { utils.Unauthorized(ctx, "未登录") return } role, _ := ctx.Get("role") utils.Success(ctx, gin.H{ "user_id": userID, "username": middleware.GetCurrentUsername(ctx), "role": role, }) } // ChangePassword 修改密码 // PUT /api/auth/password func (c *AuthController) ChangePassword(ctx *gin.Context) { userID := middleware.GetCurrentUserID(ctx) if userID == 0 { utils.Unauthorized(ctx, "未登录") return } var req dto.ChangePasswordRequest if err := ctx.ShouldBindJSON(&req); err != nil { utils.BadRequest(ctx, "参数错误: "+err.Error()) return } if err := c.authService.ChangePassword(userID, &req); err != nil { utils.BadRequest(ctx, err.Error()) return } utils.SuccessWithMessage(ctx, "密码修改成功", nil) } // Logout 退出登录 // POST /api/auth/logout func (c *AuthController) Logout(ctx *gin.Context) { userID := middleware.GetCurrentUserID(ctx) token := ctx.GetHeader("token") if token == "" { authHeader := ctx.GetHeader("Authorization") if len(authHeader) > 7 && authHeader[:7] == "Bearer " { token = authHeader[7:] } } if userID > 0 && token != "" { c.authService.Logout(userID, token) } utils.SuccessWithMessage(ctx, "已退出登录", nil) } // GetSessions 获取当前用户的登录会话列表 // GET /api/auth/sessions func (c *AuthController) GetSessions(ctx *gin.Context) { userID := middleware.GetCurrentUserID(ctx) if userID == 0 { utils.Unauthorized(ctx, "未登录") return } sessions := c.authService.GetSessions(userID) utils.Success(ctx, sessions) }