package dal import ( "eai_agentplatform/backend/internal/model" ) // User 用户仓库。 type UserDAO struct{ *QueryBuilder } // List 获取用户列表(分页)。 func (r UserDAO) List(page, pageSize int, role, status string) []model.User { q := r.Type(&model.User{}) if role != "" { q = q.Where("role = ?", role) } if status != "" { q = q.Where("status = ?", status) } offset := (page - 1) * pageSize var items []model.User if q.Order("id ASC").Limit(pageSize).Offset(offset).Find(&items) { return items } return nil } // Total 统计用户总数。 func (r UserDAO) Total(role, status string) int64 { q := r.Inner().Model(&model.User{}) if role != "" { q = q.Where("role = ?", role) } if status != "" { q = q.Where("status = ?", status) } var c int64 q.Count(&c) return c } // ListEmployees 取 role=employee 的用户(id 升序)。 // // status 语义刻意写成显式档位,避免与列表接口的「空=active」约定混淆: // // "active" → 仅在职(部门成员数、部门学情统计用这份口径) // "" → 不限状态(管理端全员视图,含已停用) // 其它 → 按该状态过滤 func (r UserDAO) ListEmployees(status string) []model.User { q := r.Type(&model.User{}).Where("role = ?", "employee") if status != "" { q = q.Where("status = ?", status) } var items []model.User if q.Order("id ASC").Find(&items) { return items } return nil } // CountActiveByDepartment 统计归属某部门的在职员工数(按 user.department 字符串匹配)。 func (r UserDAO) CountActiveByDepartment(name string) int64 { var c int64 r.Inner().Model(&model.User{}). Where("department = ? AND status = ?", name, "active").Count(&c) return c } // RenameDepartment 部门改名后同步员工归属字符串。 // // 部门是字典表、用户以字符串归属,改字典名必须回写 user.department, // 否则按部门统计与展示会当场对不上。 // 用 Updates(而非 UpdateColumn)是为了让 GORM 照常带上 updated_at, // 与原实现 `Model(&User{}).Where(...).Update("department", ...)` 的行为一致。 func (r UserDAO) RenameDepartment(oldName, newName string) bool { return r.Type(&model.User{}).Where("department = ?", oldName). Updates(map[string]any{"department": newName}) } // GetByID 按 ID 获取。 func (r UserDAO) GetByID(id uint) (model.User, bool) { var u model.User if r.Type(&u).Where("id = ?", id).First(&u) { return u, true } return model.User{}, false } // GetByUsername 按用户名获取。 func (r UserDAO) GetByUsername(username string) (model.User, bool) { var u model.User if r.Type(&u).Where("username = ?", username).First(&u) { return u, true } return model.User{}, false } // GetByEmail 按邮箱获取。 func (r UserDAO) GetByEmail(email string) (model.User, bool) { var u model.User if r.Type(&u).Where("email = ?", email).First(&u) { return u, true } return model.User{}, false } // Insert 创建用户。 func (r UserDAO) Insert(u *model.User) bool { return r.QueryBuilder.Insert(u) } // Update 更新用户。 func (r UserDAO) Update(u *model.User) bool { return r.Save(u) } // UpdateStatus 更新状态。 func (r UserDAO) UpdateStatus(id uint, status string) bool { return r.Type(&model.User{}).Where("id = ?", id).UpdateColumn("status", status) }