package dao import ( "context" "cms-api/internal/model" ) // GetByAccount 根据账号获取用户 func (dao *UserDao) GetByAccount(ctx context.Context, account string) (*model.User, error) { var user *model.User err := dao.Ctx(ctx).Where(dao.Columns().Account, account).Scan(&user) if err != nil { return nil, err } return user, nil } // GetByEmail 根据邮箱获取用户 func (dao *UserDao) GetByEmail(ctx context.Context, email string) (*model.User, error) { var user *model.User err := dao.Ctx(ctx).Where(dao.Columns().Email, email).Scan(&user) if err != nil { return nil, err } return user, nil } // GetById 根据ID获取用户 func (dao *UserDao) GetById(ctx context.Context, id int) (*model.User, error) { var user *model.User err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Scan(&user) if err != nil { return nil, err } return user, nil } // List 获取用户列表 func (dao *UserDao) List(ctx context.Context, req *model.UserListRequest) ([]*model.User, int, error) { var ( users []*model.User total int db = dao.Ctx(ctx) ) // 添加查询条件 if req.RoleId > 0 { db = db.Where(dao.Columns().RoleId, req.RoleId) } if req.Status >= 0 { db = db.Where(dao.Columns().Status, req.Status) } if req.Keyword != "" { db = db.Where(dao.Columns().Account+" LIKE ? OR "+dao.Columns().NickName+" LIKE ? OR "+dao.Columns().Email+" LIKE ?", "%"+req.Keyword+"%", "%"+req.Keyword+"%", "%"+req.Keyword+"%") } // 获取总数 count, err := db.Count() if err != nil { return nil, 0, err } total = count // 分页查询 offset := (req.Page - 1) * req.PageSize err = db.Order(dao.Columns().CreatedAt + " DESC"). Limit(req.PageSize). Offset(offset). Scan(&users) if err != nil { return nil, 0, err } return users, total, nil } // Create 创建用户 func (dao *UserDao) Create(ctx context.Context, user *model.User) (int64, error) { result, err := dao.Ctx(ctx).Data(user).Insert() if err != nil { return 0, err } id, err := result.LastInsertId() if err != nil { return 0, err } return id, nil } // Update 更新用户 func (dao *UserDao) Update(ctx context.Context, id int, data interface{}) error { _, err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Data(data).Update() return err } // Delete 删除用户 func (dao *UserDao) Delete(ctx context.Context, id int) error { _, err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Delete() return err } // UpdateStatus 更新用户状态 func (dao *UserDao) UpdateStatus(ctx context.Context, id int, status int) error { _, err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Data(map[string]interface{}{ dao.Columns().Status: status, }).Update() return err } // GetCount 获取用户总数 func (dao *UserDao) GetCount(ctx context.Context) (int, error) { count, err := dao.Ctx(ctx).Count() return count, err } // GetCountByStatus 根据状态获取用户数 func (dao *UserDao) GetCountByStatus(ctx context.Context, status int) (int, error) { count, err := dao.Ctx(ctx).Where(dao.Columns().Status, status).Count() return count, err }