2025-05-31 12:03:22 +08:00

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
}