| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- 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})
- }
- }
|