You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
3.9 KiB
143 lines
3.9 KiB
package user
|
|
|
|
import (
|
|
"context"
|
|
"gf_demo_02/api/user/v1"
|
|
"gf_demo_02/internal/model/entity"
|
|
"gf_demo_02/internal/service"
|
|
"github.com/gogf/gf/v2/database/gdb"
|
|
"github.com/gogf/gf/v2/errors/gcode"
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
"golang.org/x/crypto/bcrypt"
|
|
"strings"
|
|
)
|
|
|
|
type sUser struct {
|
|
}
|
|
|
|
func init() {
|
|
service.RegisterUser(&sUser{})
|
|
}
|
|
|
|
func (u *sUser) GetUser(cond g.Map) (user *entity.User, err error) {
|
|
model := g.Model("user")
|
|
if cond["id"] != nil && gconv.Uint(cond["id"]) != 0 {
|
|
model = model.Where("id", cond["id"])
|
|
} else if cond["name"] != nil && gconv.String(cond["name"]) != "" {
|
|
model = model.Where("name", cond["name"])
|
|
} else {
|
|
return nil, gerror.NewCode(gcode.New(88, "缺少查询条件", nil))
|
|
}
|
|
err = model.Scan(&user)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if user == nil {
|
|
return nil, gerror.NewCode(gcode.New(483, "用户不存在!", nil))
|
|
}
|
|
return user, nil
|
|
}
|
|
|
|
func (*sUser) GetUserList(ctx context.Context) (users []entity.User, err error) {
|
|
all, err := g.DB().Model("user").All()
|
|
if err != nil {
|
|
return nil, gerror.NewCode(gcode.New(599, "数据库error", nil))
|
|
}
|
|
err = all.Structs(&users)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return users, nil
|
|
}
|
|
|
|
func (*sUser) AddUser(ctx context.Context, req *user.EditUserReq) error {
|
|
u := entity.User{
|
|
Id: req.Id,
|
|
Name: req.Name,
|
|
Pass: req.Pass,
|
|
Property: req.Property,
|
|
}
|
|
one, _ := g.Model("user").Where("name", req.Name).One()
|
|
if one != nil {
|
|
return gerror.NewCode(gcode.New(480, "用户名重复", nil))
|
|
}
|
|
if len(req.Pass) < 6 {
|
|
return gerror.NewCode(gcode.New(481, "密码过短,至少6位", nil))
|
|
}
|
|
password, err := bcrypt.GenerateFromPassword([]byte(u.Pass), 10)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
u.Pass = string(password)
|
|
return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
|
_, err = tx.Model("user").Insert(u)
|
|
return err
|
|
})
|
|
}
|
|
|
|
func (*sUser) UpdateUser(ctx context.Context, req *user.EditUserReq) error {
|
|
u := entity.User{
|
|
Id: req.Id,
|
|
Name: req.Name,
|
|
Pass: req.Pass,
|
|
Property: req.Property,
|
|
}
|
|
one, _ := g.Model("user").Where("id", req.Id).One()
|
|
if one == nil {
|
|
return gerror.NewCode(gcode.New(483, "用户不存在!", nil))
|
|
}
|
|
one, _ = g.Model("user").Where("name", req.Name).WhereNot("id", u.Id).One()
|
|
if one != nil {
|
|
return gerror.NewCode(gcode.New(480, "用户名重复", nil))
|
|
}
|
|
if len(req.Pass) < 6 && req.Pass != "" {
|
|
return gerror.NewCode(gcode.New(481, "密码过短,至少6位", nil))
|
|
}
|
|
if req.Pass != "" {
|
|
password, err := bcrypt.GenerateFromPassword([]byte(u.Pass), 10)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
u.Pass = string(password)
|
|
}
|
|
return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
|
model := tx.Model("user").OmitEmptyData()
|
|
result, err := model.Where("id", u.Id).Update(u)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if affected, err := result.RowsAffected(); affected < 1 || err != nil {
|
|
return gerror.NewCode(gcode.New(500, "服务器错误", nil))
|
|
}
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func (*sUser) DeleteUser(ctx context.Context, req *user.DeleteUserReq) error {
|
|
one, _ := g.DB().Model("user").Where("id", req.Id).One()
|
|
if one == nil {
|
|
return gerror.NewCode(gcode.New(483, "用户不存在!", nil))
|
|
}
|
|
tokenStr := g.RequestFromCtx(ctx).GetCtxVar("Authorization").String()
|
|
tokenStr = strings.TrimSpace(tokenStr)
|
|
tokenStr = strings.TrimPrefix(tokenStr, "Bearer ")
|
|
return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
|
_, err := tx.Model("user").Where("id", req.Id).Delete()
|
|
return err
|
|
})
|
|
}
|
|
|
|
func (*sUser) SearchUser(ctx context.Context, keyword string) ([]entity.User, error) {
|
|
all, err := g.Model("user").WhereLike("name", "%"+keyword+"%").All()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
users := make([]entity.User, 0)
|
|
err = all.Structs(&users)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return users, nil
|
|
}
|