101 lines
2.2 KiB
Go
101 lines
2.2 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)
|
||
|
|
}
|
||
|
|
|
||
|
|
// 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)
|
||
|
|
}
|