Files
SeeyonFileSystem/server/controller/auth_controller.go
2026-07-10 17:33:33 +08:00

119 lines
2.6 KiB
Go

// 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)
}