50 lines
932 B
Go
50 lines
932 B
Go
package handlers
|
|
|
|
import (
|
|
"errors"
|
|
q "platform/web/queries"
|
|
"platform/web/services"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// region GetUserByToken
|
|
|
|
type GetUserByTokenReq struct {
|
|
Token string `json:"token" validate:"required"`
|
|
}
|
|
|
|
// GetUserByToken 通过token获取用户信息
|
|
func GetUserByToken(c *fiber.Ctx) error {
|
|
|
|
// 解析请求参数
|
|
req := new(GetUserByTokenReq)
|
|
if err := c.BodyParser(req); err != nil {
|
|
return err
|
|
}
|
|
|
|
// 查询会话信息
|
|
session, err := services.Session.Find(c.Context(), req.Token)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 查询用户信息
|
|
user, err := q.User.Debug().
|
|
Omit(q.User.Password, q.User.DeletedAt).
|
|
Where(q.User.ID.Eq(session.Payload.Id)).
|
|
Take()
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return fiber.NewError(fiber.StatusNotFound, "用户不存在")
|
|
}
|
|
return err
|
|
}
|
|
|
|
// 返回用户信息
|
|
return c.JSON(user)
|
|
}
|
|
|
|
// endregion
|