healthapp
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

141 lines
3.5 KiB

package handler
import (
"health-ai/internal/api/middleware"
"health-ai/internal/service"
"health-ai/pkg/response"
"github.com/gin-gonic/gin"
)
type AuthHandler struct {
authService *service.AuthService
}
func NewAuthHandler() *AuthHandler {
return &AuthHandler{
authService: service.NewAuthService(),
}
}
// Register 用户注册
// @Summary 用户注册
// @Tags 认证
// @Accept json
// @Produce json
// @Param request body service.RegisterRequest true "注册信息"
// @Success 200 {object} response.Response{data=service.AuthResponse}
// @Router /api/auth/register [post]
func (h *AuthHandler) Register(c *gin.Context) {
var req service.RegisterRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.BadRequest(c, "参数错误: "+err.Error())
return
}
result, err := h.authService.Register(&req)
if err != nil {
response.Error(c, 400, err.Error())
return
}
response.Success(c, result)
}
// Login 用户登录
// @Summary 用户登录
// @Tags 认证
// @Accept json
// @Produce json
// @Param request body service.LoginRequest true "登录信息"
// @Success 200 {object} response.Response{data=service.AuthResponse}
// @Router /api/auth/login [post]
func (h *AuthHandler) Login(c *gin.Context) {
var req service.LoginRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.BadRequest(c, "参数错误: "+err.Error())
return
}
result, err := h.authService.Login(&req)
if err != nil {
response.Error(c, 400, err.Error())
return
}
response.Success(c, result)
}
// RefreshToken 刷新Token
// @Summary 刷新Token
// @Tags 认证
// @Accept json
// @Produce json
// @Param Authorization header string true "Bearer Token"
// @Success 200 {object} response.Response{data=map[string]string}
// @Router /api/auth/refresh [post]
func (h *AuthHandler) RefreshToken(c *gin.Context) {
// 从header获取旧token
oldToken := c.GetHeader("Authorization")
if len(oldToken) > 7 {
oldToken = oldToken[7:] // 去掉 "Bearer "
}
newToken, err := h.authService.RefreshToken(oldToken)
if err != nil {
response.Unauthorized(c, "Token刷新失败")
return
}
response.Success(c, gin.H{"token": newToken})
}
// GetUserInfo 获取当前用户信息
// @Summary 获取当前用户信息
// @Tags 用户
// @Accept json
// @Produce json
// @Param Authorization header string true "Bearer Token"
// @Success 200 {object} response.Response{data=service.UserInfoResponse}
// @Router /api/user/profile [get]
func (h *AuthHandler) GetUserInfo(c *gin.Context) {
userID := middleware.GetUserID(c)
result, err := h.authService.GetUserInfo(userID)
if err != nil {
response.Error(c, 400, err.Error())
return
}
response.Success(c, result)
}
// UpdateProfile 更新用户资料
// @Summary 更新用户资料
// @Tags 用户
// @Accept json
// @Produce json
// @Param Authorization header string true "Bearer Token"
// @Param request body UpdateProfileRequest true "更新信息"
// @Success 200 {object} response.Response
// @Router /api/user/profile [put]
func (h *AuthHandler) UpdateProfile(c *gin.Context) {
userID := middleware.GetUserID(c)
var req UpdateProfileRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.BadRequest(c, "参数错误: "+err.Error())
return
}
if err := h.authService.UpdateProfile(userID, req.Nickname, req.Avatar); err != nil {
response.Error(c, 400, err.Error())
return
}
response.SuccessWithMessage(c, "更新成功", nil)
}
// UpdateProfileRequest 更新资料请求
type UpdateProfileRequest struct {
Nickname string `json:"nickname"`
Avatar string `json:"avatar"`
}