110 lines
2.3 KiB
Go
110 lines
2.3 KiB
Go
package impl
|
|
|
|
import (
|
|
"context"
|
|
|
|
"122.51.31.227/go-course/go18/devcloud/mcenter/apps/user"
|
|
"github.com/infraboard/mcube/v2/exception"
|
|
"github.com/infraboard/mcube/v2/ioc/config/datasource"
|
|
"github.com/infraboard/mcube/v2/types"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// 创建用户
|
|
func (i *UserServiceImpl) CreateUser(
|
|
ctx context.Context,
|
|
req *user.CreateUserRequest) (
|
|
*user.User, error) {
|
|
// 1. 校验用户参数
|
|
if err := req.Validate(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 2. 生成一个User对象(ORM对象)
|
|
ins := user.NewUser(req)
|
|
|
|
if err := datasource.DBFromCtx(ctx).
|
|
Create(ins).
|
|
Error; err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 4. 返回结果
|
|
return ins, nil
|
|
}
|
|
|
|
// 删除用户
|
|
func (i *UserServiceImpl) DeleteUser(
|
|
ctx context.Context,
|
|
req *user.DeleteUserRequest,
|
|
) (*user.User, error) {
|
|
u, err := i.DescribeUser(ctx,
|
|
user.NewDescribeUserRequestById(req.Id))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return u, datasource.DBFromCtx(ctx).
|
|
Where("id = ?", req.Id).
|
|
Delete(&user.User{}).
|
|
Error
|
|
}
|
|
|
|
// 查询用户列表
|
|
func (i *UserServiceImpl) QueryUser(
|
|
ctx context.Context,
|
|
req *user.QueryUserRequest) (
|
|
*types.Set[*user.User], error) {
|
|
set := types.New[*user.User]()
|
|
|
|
query := datasource.DBFromCtx(ctx).Model(&user.User{})
|
|
|
|
// 查询总量
|
|
err := query.Count(&set.Total).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = query.
|
|
Order("created_at desc").
|
|
Offset(int(req.ComputeOffset())).
|
|
Limit(int(req.PageSize)).
|
|
Find(&set.Items).
|
|
Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return set, nil
|
|
}
|
|
|
|
// 查询用户详情
|
|
func (i *UserServiceImpl) DescribeUser(
|
|
ctx context.Context,
|
|
req *user.DescribeUserRequest) (
|
|
*user.User, error) {
|
|
|
|
query := datasource.DBFromCtx(ctx)
|
|
|
|
// 1. 构造我们的查询条件
|
|
switch req.DescribeBy {
|
|
case user.DESCRIBE_BY_ID:
|
|
query = query.Where("id = ?", req.DescribeValue)
|
|
case user.DESCRIBE_BY_USERNAME:
|
|
query = query.Where("user_name = ?", req.DescribeValue)
|
|
}
|
|
|
|
// SELECT * FROM `users` WHERE username = 'admin' ORDER BY `users`.`id` LIMIT 1
|
|
ins := &user.User{}
|
|
if err := query.First(ins).Error; err != nil {
|
|
if err == gorm.ErrRecordNotFound {
|
|
return nil, exception.NewNotFound("user %s not found", req.DescribeValue)
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
// 数据库里面存储的就是Hash
|
|
ins.SetIsHashed()
|
|
return ins, nil
|
|
}
|