DiscordTickets/src/lib/middleware/prisma-sqlite.js
Isaac 5f5ffca74c
Finally "fix" (hack) Prisma middleware bug
Middleware runs twice on question upsert?
2022-07-23 20:28:48 +01:00

39 lines
1.2 KiB
JavaScript

const jsonFields = [
'pingRoles',
'requiredRoles',
'staffRoles',
'autoTag',
'blocklist',
'workingHours',
'options',
'pinnedMessages',
];
const traverse = (obj, action) => {
for (let prop in obj) {
if (prop === 'createMany') {
obj.create = obj[prop].data;
delete obj[prop];
prop = 'create';
traverse(obj[prop], action);
} else if (jsonFields.includes(prop) && obj[prop] !== null && obj[prop] !== undefined) {
if (action === 'SERIALISE' && typeof obj[prop] !== 'string') {
obj[prop] = JSON.stringify(obj[prop]);
} else if (action === 'PARSE' && typeof obj[prop] === 'string') {
obj[prop] = JSON.parse(obj[prop]);
}
} else if (typeof obj[prop] === 'object' && obj[prop] !== null && obj[prop] !== undefined) {
traverse(obj[prop], action);
}
}
return obj;
};
module.exports = async (params, next) => {
if (params.args.create) params.args.create = traverse(params.args.create, 'SERIALISE');
if (params.args.data) params.args.data = traverse(params.args.data, 'SERIALISE');
if (params.args.update) params.args.update = traverse(params.args.update, 'SERIALISE');
let result = await next(params);
if (result) result = traverse(result, 'PARSE');
return result;
};