You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
4.3 KiB
168 lines
4.3 KiB
const prisma = require("../utils/prisma");
|
|
|
|
/**
|
|
* @typedef {Object} DeptUser
|
|
* @property {number} id
|
|
* @property {number} deptId
|
|
* @property {number} userId
|
|
* @property {Date} createdAt
|
|
* @property {Date} updatedAt
|
|
*/
|
|
|
|
const DeptUsers = {
|
|
writable: ["deptId", "userId"],
|
|
validations: {
|
|
deptId: (newValue) => {
|
|
const num = Number(newValue);
|
|
if (isNaN(num)) {
|
|
throw new Error("Dept ID must be a number");
|
|
}
|
|
return num;
|
|
},
|
|
userId: (newValue) => {
|
|
const num = Number(newValue);
|
|
if (isNaN(num)) {
|
|
throw new Error("User ID must be a number");
|
|
}
|
|
return num;
|
|
},
|
|
},
|
|
castColumnValue: function (key, value) {
|
|
switch (key) {
|
|
case "deptId":
|
|
case "userId":
|
|
return Number(value);
|
|
default:
|
|
return value;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 创建组织机构用户关联
|
|
* @param {Object} data - 组织机构用户数据
|
|
* @returns {Promise<{ deptUser: DeptUser | null, error: string | null }>}
|
|
*/
|
|
create: async function (data) {
|
|
console.log("55555555555555555", data);
|
|
try {
|
|
const validatedData = {};
|
|
for (const key of this.writable) {
|
|
if (data[key] !== undefined) {
|
|
if (this.validations[key]) {
|
|
validatedData[key] = this.validations[key](data[key]);
|
|
} else {
|
|
validatedData[key] = this.castColumnValue(key, data[key]);
|
|
}
|
|
}
|
|
}
|
|
|
|
const deptUser = await prisma.dept_users.create({
|
|
data: {
|
|
...validatedData,
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
},
|
|
});
|
|
|
|
return { deptUser, error: null };
|
|
} catch (error) {
|
|
console.error("FAILED TO CREATE DEPT USER.", error.message);
|
|
return { deptUser: null, error: error.message };
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 更新组织机构用户关联
|
|
* @param {number} id - 关联 ID
|
|
* @param {Object} updates - 更新的字段
|
|
* @returns {Promise<{ success: boolean, error: string | null, deptUser: DeptUser | null }>}
|
|
*/
|
|
update: async function (id, updates = {}) {
|
|
try {
|
|
if (!id) throw new Error("No ID provided for update");
|
|
|
|
const currentDeptUser = await prisma.dept_users.findUnique({
|
|
where: { id },
|
|
});
|
|
if (!currentDeptUser) throw new Error("Dept user not found");
|
|
|
|
const validatedUpdates = {};
|
|
for (const key of this.writable) {
|
|
if (updates[key] !== undefined) {
|
|
if (this.validations[key]) {
|
|
validatedUpdates[key] = this.validations[key](updates[key]);
|
|
} else {
|
|
validatedUpdates[key] = this.castColumnValue(key, updates[key]);
|
|
}
|
|
}
|
|
}
|
|
|
|
validatedUpdates.updatedAt = new Date();
|
|
|
|
const updatedDeptUser = await prisma.dept_users.update({
|
|
where: { id },
|
|
data: validatedUpdates,
|
|
});
|
|
|
|
return { success: true, error: null, deptUser: updatedDeptUser };
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
return { success: false, error: error.message, deptUser: null };
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 获取组织机构用户关联
|
|
* @param {Object} clause - 查询条件
|
|
* @returns {Promise<{ deptUser: DeptUser | null }>}
|
|
*/
|
|
get: async function (clause = {}) {
|
|
try {
|
|
const deptUser = await prisma.dept_users.findFirst({
|
|
where: clause,
|
|
});
|
|
return deptUser ? { deptUser } : null;
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
return null;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 删除组织机构用户关联
|
|
* @param {Object} clause - 删除条件
|
|
* @returns {Promise<boolean>}
|
|
*/
|
|
delete: async function (clause = {}) {
|
|
try {
|
|
const affectedRows = await prisma.dept_users.deleteMany({
|
|
where: clause,
|
|
});
|
|
return affectedRows.count > 0;
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
return false;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 查询组织机构用户关联列表
|
|
* @param {Object} clause - 查询条件
|
|
* @param {number} limit - 限制数量
|
|
* @returns {Promise<DeptUser[]>}
|
|
*/
|
|
where: async function (clause = {}, limit = null) {
|
|
try {
|
|
const deptUsers = await prisma.dept_users.findMany({
|
|
where: clause,
|
|
take: limit !== null ? limit : undefined,
|
|
});
|
|
return deptUsers;
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
return [];
|
|
}
|
|
},
|
|
};
|
|
|
|
module.exports = { DeptUsers };
|