| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- package user
- import (
- "UserManager/internal/dao"
- "UserManager/internal/model"
- "UserManager/internal/service"
- "context"
- "github.com/gogf/gf/v2/crypto/gmd5"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/util/guid"
- )
- type sUser struct{}
- func init() { service.RegisterUser(New()) }
- func New() *sUser { return &sUser{} }
- // Register 业务:唯一性校验 + 加密密码 + 插入
- func (s *sUser) Register(ctx context.Context, in model.UserRegisterInput) error {
- // 账号是否已存在
- count, err := dao.User.Ctx(ctx).Where("passport", in.Passport).Count()
- if err != nil {
- return err
- }
- if count > 0 {
- return gerror.New("账号已存在")
- }
- // 写入
- _, err = dao.User.Ctx(ctx).Data(g.Map{
- "passport": in.Passport,
- "password": gmd5.MustEncryptString(in.Password),
- "nickname": in.Nickname,
- }).Insert()
- return err
- }
- // GetList 获取用户列表
- func (s *sUser) GetList(ctx context.Context, in model.UserListInput) (out *model.UserListOutput, err error) {
- out = &model.UserListOutput{
- Page: in.Page,
- }
- m := dao.User.Ctx(ctx)
- // 条件查询
- if in.Passport != "" {
- m = m.WhereLike("passport", "%"+in.Passport+"%")
- }
- if in.Nickname != "" {
- m = m.WhereLike("nickname", "%"+in.Nickname+"%")
- }
- // 获取总数
- out.Total, err = m.Count()
- if err != nil {
- return nil, err
- }
- // 分页查询
- err = m.Page(in.Page, in.PageSize).Scan(&out.List)
- if err != nil {
- return nil, err
- }
- return out, nil
- }
- // GetByPassport 根据账号获取用户信息
- func (s *sUser) GetByPassport(ctx context.Context, passport string) (out *model.UserOutput, err error) {
- err = dao.User.Ctx(ctx).Where("passport", passport).Scan(&out)
- return out, err
- }
- // Login 用户登录
- func (s *sUser) Login(ctx context.Context, in model.UserLoginInput) (out *model.UserLoginOutput, err error) {
- // 1. 根据账号查询用户
- var user *model.UserOutput
- err = dao.User.Ctx(ctx).Where("passport", in.Passport).Scan(&user)
- if err != nil {
- return nil, gerror.New("登录失败,请稍后重试") // 不返回具体错误
- }
- // 2. 用户不存在
- if user == nil {
- return nil, gerror.New("账号或密码错误") // 模糊错误信息
- }
- // 3. 验证密码
- encryptedPassword := gmd5.MustEncryptString(in.Password)
- correctPassword, err := dao.User.Ctx(ctx).
- Where("passport", in.Passport).
- Where("password", encryptedPassword).
- Count()
- if err != nil {
- return nil, gerror.New("登录失败,请稍后重试")
- }
- if correctPassword == 0 {
- return nil, gerror.New("账号或密码错误") // 模糊错误信息
- }
- // 4. 生成token
- token := guid.S()
- // 5. 返回登录结果
- out = &model.UserLoginOutput{
- Token: token,
- UserInfo: user,
- }
- return out, nil
- }
|