package controller import ( "errors" "net/http" "woord-core-service/model" "github.com/gin-gonic/gin" "gorm.io/gorm" ) type RegisterRequest struct { Name string `form:"name" binding:"required"` Password string `form:"password" binding:"required"` } type RegisterResponse struct { UserID uint `json:"id"` } // 注册 func Register(c *gin.Context) { var request RegisterRequest if err := c.ShouldBind(&request); err != nil { respondError(c, http.StatusBadRequest, err) return } user := &model.User{Name: request.Name, Password: request.Password} if err := model.CreateUser(user); err != nil { if errors.Is(err, model.ErrUserNameAlreadyExists) { respondError(c, http.StatusConflict, err) } else { respondUnknownError(c, err) } } else { respondOK(c, &RegisterResponse{UserID: user.ID}) } } type LoginRequest struct { Name string `form:"name" binding:"required"` Password string `form:"password" binding:"required"` } type LoginResponse struct { UserID uint `json:"id"` Token string `json:"token"` } // 登录 func Login(c *gin.Context) { var request LoginRequest if err := c.ShouldBind(&request); err != nil { respondError(c, http.StatusBadRequest, err) return } user := &model.User{Name: request.Name, Password: request.Password} if err := model.AuthenticateUser(user); err != nil { if errors.Is(err, model.ErrWrongUserNameOrPassword) { respondError(c, http.StatusUnauthorized, err) } else { respondUnknownError(c, err) } } else if token, err := newToken(user.ID); err != nil { respondUnknownError(c, err) } else { respondOK(c, &LoginResponse{UserID: user.ID, Token: token}) } } type GetCurrentUserResponse struct { UserID uint `json:"id"` UserName string `json:"name"` } // 获取当前用户 func GetCurrentUser(c *gin.Context) { user := &model.User{Model: gorm.Model{ID: c.MustGet(AuthUserKey).(uint)}} if err := model.GetUser(user); err != nil { if errors.Is(err, model.ErrUserNotFound) { respondError(c, http.StatusNotFound, err) } else { respondUnknownError(c, err) } } else { respondOK(c, &GetCurrentUserResponse{UserID: user.ID, UserName: user.Name}) } }