1 Star 0 Fork 0

姜春 / vlog

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
user.go 4.00 KB
一键复制 编辑 原始数据 按行查看 历史
姜春 提交于 2024-01-19 14:25 . 添加删除用户功能
package impl
import (
"context"
"gitee.com/baicaijc/vblog/apps/user"
)
// 实现 user.Service
// 怎么判断这个服务有没有实现这个接口喃?
// &UserServiceImpl{} 是会分配内存, 怎么才能不分配内存,var _ user.Service = &UserServiceImpl{}
// nil 如何声明 *UserServiceImpl 的 nil
// (*UserServiceImpl)(nil) ---> int8的1 转换成int32的1 --> (int32)(1)
// nil 就是一个*UserServiceImpl的空指针
var _ user.Service = (*UserServiceImpl)(nil) // 如果结构体没有实现interface的方法就报错,限制用的结构体必须实现接口的方法
// 用户创建
func (i *UserServiceImpl) CreateUser(
ctx context.Context,
in *user.CreateUserRequest) (
*user.User, error) {
// 1. 校验用户参数请求
if err := in.Validate(); err != nil {
return nil, err
}
// // 2. 创建用户实例对象
u := user.NewUser(in)
// 3. 把对象持久化(放到数据库里)
// orm: orm 需要定义这个对象 存在在那个表里, 以及struct和数据库里表字段的映射关系
// object --> row
// INSERT INTO `users` (`created_at`,`updated_at`,`username`,`password`,`role`,`label`) VALUES (1705130308,1705130308,'admin','123456','1','{}') RETURNING `id`
// 比如 create user, 4秒的时候 请求还没返回, 用户就取消了请求, 后端会因为请求退出而结束吗?
// 程序里 并没有中断数据库操作的能力, 通过WithContext携带上ctx
if err := i.db.WithContext(ctx).Create(u).Error; err != nil {
return nil, err
}
// 4. 返回创建好的对象
return u, nil
}
// 查询用户列表, 对象列表 [{}]
func (i *UserServiceImpl) QueryUser(
ctx context.Context,
in *user.QueryUserRequest) (
*user.UserSet, error) {
// 去数据库查找
query := i.db.WithContext(ctx).Model(&user.User{})
// 构造条件 where username = ""
if in.Username != "" {
// query 会生成一个新的语句, 不会修改query对象本身
query = query.Where("username = ?", in.Username)
}
set := user.NewUserSet()
// 统计当前有多个
// select COUNT(*) from uers where ....
err := query.
Count(&set.Total).
Error
if err != nil {
return nil, err
}
// 做真正的分页查询: sql LIMIT offset,limit
// LIMIT 20,20 这个是查询的第2页
// 使用Find把多行数据查询出来, 使用[]User 来接收返回
err = query.
Limit(in.Limit()).
Offset(in.Offset()).
Find(&set.Items).
Error
if err != nil {
return nil, err
}
return set, nil
}
// 查询用户详情, 通过Id查询,
func (i *UserServiceImpl) DescribeUser(
ctx context.Context,
in *user.DescribeUserRequest) (
*user.User, error) {
// 去数据库查找
query := i.db.WithContext(ctx).Model(&user.User{}).Where("id = ?", in.UserId)
// 准备一个对象 接收数据库的返回
u := user.NewUser(user.NewCreateUserRequest())
if err := query.First(u).Error; err != nil {
return nil, err
}
return u, nil
}
// 修改用户
func (i *UserServiceImpl) UpdateUser(
ctx context.Context,
in *user.UpdateUserRequest) (
*user.User, error) {
// 先去数据库查找要修改的用户
query := i.db.WithContext(ctx).Model(&user.User{}).Where("id = ?", in.UserId)
u := user.NewUser(user.NewCreateUserRequest())
if err := query.First(u).Error; err != nil {
return nil, err
}
// password hash
in.HashPassword()
// 更新用户, 先查后改
u.Username = in.Username
u.Password = in.Password
u.Role = in.Role
i.db.Save(&u)
return u, nil
}
// 删除用户
func (i *UserServiceImpl) DeleteUser(
ctx context.Context,
in *user.DeleteUserRequest) (
*user.User, error) {
// 根据id去数据库查找用户
query := i.db.WithContext(ctx).Model(&user.User{}).Where("id = ?", in.UserId)
// 准备一个对象 接收数据库的返回,用于展示删除的用户信息
u := user.NewUser(user.NewCreateUserRequest())
if err := query.First(u).Error; err != nil {
return nil, err
}
// 删除用户
i.db.Delete(&u)
return u, nil
}
Go
1
https://gitee.com/baicaijc/vblog.git
git@gitee.com:baicaijc/vblog.git
baicaijc
vblog
vlog
8e0b234b9a26

搜索帮助

53164aa7 5694891 3bd8fe86 5694891