init: 初始化项目
This commit is contained in:
124
internal/api/handler/auth.go
Normal file
124
internal/api/handler/auth.go
Normal file
@@ -0,0 +1,124 @@
|
||||
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")
|
||||
}
|
||||
Reference in New Issue
Block a user