import BaseModel from "@/base/BaseModel.js" class UserModel extends BaseModel { /** * @returns {UserModel} */ static getInstance() { return super.getInstance() } constructor() { super() } get tableName() { return "users" } get searchableFields() { return ["username", "email", "name"] } get filterableFields() { return ["role", "status"] } // 特定业务方法 async findByUsername(username) { return this.findFirst({ username }) } async findByEmail(email) { return this.findFirst({ email }) } // 重写create方法添加验证 async create(data) { // 验证唯一性 if (data.username) { const existingUser = await this.findByUsername(data.username) if (existingUser) { throw new Error("用户名已存在") } } if (data.email) { const existingEmail = await this.findByEmail(data.email) if (existingEmail) { throw new Error("邮箱已存在") } } return super.create(data) } // 重写update方法添加验证 async update(id, data) { console.log(id, data); // 验证唯一性(排除当前用户) if (data.username) { const existingUser = await this.findFirst({ username: data.username }) if (existingUser && existingUser.id !== parseInt(id)) { throw new Error("用户名已存在") } } if (data.email) { const existingEmail = await this.findFirst({ email: data.email }) if (existingEmail && existingEmail.id !== parseInt(id)) { throw new Error("邮箱已存在") } } return super.update(id, data) } // 用户状态管理 async activate(id) { return this.update(id, { status: "active" }) } async deactivate(id) { return this.update(id, { status: "inactive" }) } // 按角色查找用户 async findByRole(role) { return this.findWhere({ role }) } // 获取用户统计 async getUserStats() { const total = await this.count() const active = await this.count({ status: "active" }) const inactive = await this.count({ status: "inactive" }) return { total, active, inactive, } } } export default UserModel export { UserModel }