mirror of
https://github.com/xinliangnote/go-gin-api.git
synced 2024-04-21 12:31:46 +00:00
181 lines
4.9 KiB
Go
181 lines
4.9 KiB
Go
package user_handler
|
|
|
|
import (
|
|
"github.com/xinliangnote/go-gin-api/configs"
|
|
"github.com/xinliangnote/go-gin-api/internal/api/code"
|
|
"github.com/xinliangnote/go-gin-api/internal/api/model/user_model"
|
|
"github.com/xinliangnote/go-gin-api/internal/api/repository/cache_repo"
|
|
"github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo"
|
|
"github.com/xinliangnote/go-gin-api/internal/api/service/user_service"
|
|
"github.com/xinliangnote/go-gin-api/internal/pkg/core"
|
|
"github.com/xinliangnote/go-gin-api/pkg/token"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
var _ UserDemo = (*userDemo)(nil)
|
|
|
|
type UserDemo interface {
|
|
// i 为了避免被其他包实现
|
|
i()
|
|
// 创建用户
|
|
Create() core.HandlerFunc
|
|
// 通过用户主键ID更新用户昵称
|
|
UpdateNickNameByID() core.HandlerFunc
|
|
// 用户登录
|
|
Login() core.HandlerFunc
|
|
// 用户详情
|
|
Detail() core.HandlerFunc
|
|
}
|
|
|
|
type userDemo struct {
|
|
logger *zap.Logger
|
|
userService user_service.UserService
|
|
}
|
|
|
|
func NewUserDemo(logger *zap.Logger, db db_repo.Repo, cache cache_repo.Repo) UserDemo {
|
|
return &userDemo{
|
|
logger: logger,
|
|
userService: user_service.NewUserService(db, cache),
|
|
}
|
|
}
|
|
|
|
func (u *userDemo) i() {}
|
|
|
|
// 创建用户
|
|
// @Summary 创建用户
|
|
// @Description 创建用户
|
|
// @Tags Demo
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param RequestInfo body user_model.CreateRequest true "请求信息"
|
|
// @Success 200 {object} user_model.CreateResponse "返回信息"
|
|
// @Router /user/create [post]
|
|
func (u *userDemo) Create() core.HandlerFunc {
|
|
return func(c core.Context) {
|
|
req := new(user_model.CreateRequest)
|
|
res := new(user_model.CreateResponse)
|
|
if err := c.ShouldBindJSON(req); err != nil {
|
|
u.logger.Error("[user] should bind json err", zap.Error(err))
|
|
c.AbortWithError(code.ErrParamBind)
|
|
return
|
|
}
|
|
|
|
id, err := u.userService.Create(c, req)
|
|
if err != nil {
|
|
u.logger.Error("[user] Create err", zap.Error(err))
|
|
c.AbortWithError(code.ErrUserCreate)
|
|
return
|
|
}
|
|
|
|
res.Id = id
|
|
c.SetPayload(code.OK.WithData(res))
|
|
}
|
|
}
|
|
|
|
// 更新用户名称
|
|
// @Summary 更新用户名称
|
|
// @Description 更新用户名称
|
|
// @Tags Demo
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param RequestInfo body user_model.UpdateNickNameByIDRequest true "请求信息"
|
|
// @Success 200 {object} user_model.UpdateNickNameByIDResponse "返回信息"
|
|
// @Router /user/update [post]
|
|
func (u *userDemo) UpdateNickNameByID() core.HandlerFunc {
|
|
return func(c core.Context) {
|
|
req := new(user_model.UpdateNickNameByIDRequest)
|
|
res := new(user_model.UpdateNickNameByIDResponse)
|
|
if err := c.ShouldBindJSON(req); err != nil {
|
|
u.logger.Error("[user] should bind json err", zap.Error(err))
|
|
c.AbortWithError(code.ErrParamBind)
|
|
return
|
|
}
|
|
|
|
err := u.userService.UpdateNickNameByID(c, req.Id, req.NickName)
|
|
if err != nil {
|
|
u.logger.Error("[user] UpdateNickNameByID err", zap.Error(err))
|
|
c.AbortWithError(code.ErrUserUpdate)
|
|
return
|
|
}
|
|
|
|
res.Id = req.Id
|
|
c.SetPayload(code.OK.WithData(res))
|
|
}
|
|
}
|
|
|
|
// 用户登录
|
|
// @Summary 用户登录
|
|
// @Description 用户登录
|
|
// @Tags Demo
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param RequestInfo body user_model.LoginRequest true "请求信息"
|
|
// @Success 200 {object} user_model.LoginResponse "返回信息"
|
|
// @Router /user/login [post]
|
|
func (u *userDemo) Login() core.HandlerFunc {
|
|
return func(c core.Context) {
|
|
req := new(user_model.LoginRequest)
|
|
res := new(user_model.LoginResponse)
|
|
if err := c.ShouldBindJSON(req); err != nil {
|
|
u.logger.Error("should bind json err", zap.Error(err))
|
|
c.AbortWithError(code.ErrParamBind)
|
|
return
|
|
}
|
|
|
|
cfg := configs.Get().JWT
|
|
tokenString, err := token.New(cfg.Secret).Sign(req.UserID, req.UserName)
|
|
if err != nil {
|
|
u.logger.Error("token sign err", zap.Error(err))
|
|
c.AbortWithError(code.ErrAuthorization)
|
|
return
|
|
}
|
|
|
|
claims, err := token.New(cfg.Secret).Parse(tokenString)
|
|
if err != nil {
|
|
u.logger.Error("token parse err", zap.Error(err))
|
|
c.AbortWithError(code.ErrAuthorization)
|
|
return
|
|
}
|
|
|
|
res.Authorization = tokenString
|
|
res.ExpireTime = claims.ExpiresAt
|
|
|
|
c.SetPayload(code.OK.WithData(res))
|
|
}
|
|
}
|
|
|
|
// 用户详情
|
|
// @Summary 用户详情
|
|
// @Description 用户详情
|
|
// @Tags Demo
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param username path string true "用户名"
|
|
// @Success 200 {object} user_model.DetailResponse "返回信息"
|
|
// @Router /user/info/{username} [get]
|
|
func (u *userDemo) Detail() core.HandlerFunc {
|
|
return func(c core.Context) {
|
|
req := new(user_model.DetailRequest)
|
|
res := new(user_model.DetailResponse)
|
|
if err := c.ShouldBindURI(req); err != nil {
|
|
u.logger.Error("should bind uri err", zap.Error(err))
|
|
c.AbortWithError(code.ErrParamBind)
|
|
return
|
|
}
|
|
|
|
user, err := u.userService.GetUserByUserName(c, req.UserName)
|
|
if err != nil {
|
|
u.logger.Error("[user] GetUserByUserName err", zap.Error(err))
|
|
c.AbortWithError(code.ErrUserSearch)
|
|
return
|
|
}
|
|
|
|
res.Id = user.Id
|
|
res.UserName = user.UserName
|
|
res.NickName = user.NickName
|
|
res.Mobile = user.Mobile
|
|
c.SetPayload(code.OK.WithData(res))
|
|
}
|
|
}
|