125 lines
2.6 KiB
Go
125 lines
2.6 KiB
Go
package handler
|
|
|
|
import (
|
|
"nebula/internal/api/response"
|
|
"nebula/internal/auth"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type AuthHandler struct {
|
|
service *auth.AuthService
|
|
}
|
|
|
|
func NewAuthHandler(service *auth.AuthService) *AuthHandler {
|
|
return &AuthHandler{service: service}
|
|
}
|
|
|
|
// Register 用户注册
|
|
// POST /api/auth/register
|
|
func (h *AuthHandler) Register(c *gin.Context) {
|
|
var req auth.RegisterRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
response.FailBadRequest(c, err.Error())
|
|
return
|
|
}
|
|
|
|
user, tokens, err := h.service.Register(req)
|
|
if err != nil {
|
|
response.FailServer(c, err.Error())
|
|
return
|
|
}
|
|
|
|
response.Ok(c, gin.H{
|
|
"user": user,
|
|
"tokens": tokens,
|
|
})
|
|
}
|
|
|
|
// Login 用户登录
|
|
// POST /api/auth/login
|
|
func (h *AuthHandler) Login(c *gin.Context) {
|
|
var req auth.LoginRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
response.FailBadRequest(c, err.Error())
|
|
return
|
|
}
|
|
|
|
user, tokens, err := h.service.Login(req)
|
|
if err != nil {
|
|
response.Fail(c, 401, err.Error())
|
|
return
|
|
}
|
|
|
|
response.Ok(c, gin.H{
|
|
"user": user,
|
|
"tokens": tokens,
|
|
})
|
|
}
|
|
|
|
// RefreshToken 刷新访问令牌
|
|
// POST /api/auth/refresh
|
|
func (h *AuthHandler) RefreshToken(c *gin.Context) {
|
|
var req auth.RefreshTokenRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
response.FailBadRequest(c, err.Error())
|
|
return
|
|
}
|
|
|
|
tokens, err := h.service.RefreshToken(req)
|
|
if err != nil {
|
|
response.Fail(c, 401, err.Error())
|
|
return
|
|
}
|
|
|
|
response.Ok(c, tokens)
|
|
}
|
|
|
|
// GetProfile 获取当前用户信息
|
|
// GET /api/auth/profile
|
|
func (h *AuthHandler) GetProfile(c *gin.Context) {
|
|
userID, exists := auth.GetCurrentUserID(c)
|
|
if !exists {
|
|
response.Fail(c, 401, "unauthorized")
|
|
return
|
|
}
|
|
|
|
user, err := h.service.GetUserByID(userID)
|
|
if err != nil {
|
|
response.FailServer(c, err.Error())
|
|
return
|
|
}
|
|
|
|
response.Ok(c, user)
|
|
}
|
|
|
|
// ChangePasswordRequest 修改密码请求
|
|
type ChangePasswordRequest struct {
|
|
OldPassword string `json:"oldPassword" binding:"required"`
|
|
NewPassword string `json:"newPassword" binding:"required,min=6"`
|
|
}
|
|
|
|
// ChangePassword 修改密码
|
|
// POST /api/auth/change-password
|
|
func (h *AuthHandler) ChangePassword(c *gin.Context) {
|
|
userID, exists := auth.GetCurrentUserID(c)
|
|
if !exists {
|
|
response.Fail(c, 401, "unauthorized")
|
|
return
|
|
}
|
|
|
|
var req ChangePasswordRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
response.FailBadRequest(c, err.Error())
|
|
return
|
|
}
|
|
|
|
err := h.service.ChangePassword(userID, req.OldPassword, req.NewPassword)
|
|
if err != nil {
|
|
response.FailServer(c, err.Error())
|
|
return
|
|
}
|
|
|
|
response.OkMsg(c, "password changed successfully")
|
|
}
|