mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2025-09-06 02:01:26 +03:00
feat(api): data imports
This commit is contained in:
@@ -2,34 +2,35 @@ const { expose } = require('threads/worker');
|
||||
const Cryptr = require('cryptr');
|
||||
const { decrypt } = new Cryptr(process.env.ENCRYPTION_KEY);
|
||||
|
||||
function decryptIfExists(encrypted) {
|
||||
if (encrypted) return decrypt(encrypted);
|
||||
return null;
|
||||
}
|
||||
|
||||
expose({
|
||||
exportTicket(ticket) {
|
||||
if (ticket.closedReason) ticket.closedReason = decrypt(ticket.closedReason);
|
||||
if (ticket.feedback?.comment) ticket.feedback.comment = decrypt(ticket.feedback.comment);
|
||||
if (ticket.topic) ticket.topic = decrypt(ticket.topic);
|
||||
|
||||
ticket.archivedMessages = ticket.archivedMessages.map(message => {
|
||||
message.content = decryptIfExists(message.content);
|
||||
message.content &&= decrypt(message.content);
|
||||
return message;
|
||||
});
|
||||
|
||||
ticket.archivedUsers = ticket.archivedUsers.map(user => {
|
||||
user.displayName = decryptIfExists(user.displayName);
|
||||
user.username = decryptIfExists(user.username);
|
||||
user.displayName &&= decrypt(user.displayName);
|
||||
user.username &&= decrypt(user.username);
|
||||
return user;
|
||||
});
|
||||
|
||||
if (ticket.feedback) {
|
||||
// why is feedback the only one with a guild relation? 😕
|
||||
delete ticket.feedback.guildId;
|
||||
ticket.feedback.comment &&= decrypt(ticket.feedback.comment);
|
||||
}
|
||||
|
||||
ticket.closedReason &&= decrypt(ticket.closedReason);
|
||||
|
||||
delete ticket.guildId;
|
||||
|
||||
ticket.questionAnswers = ticket.questionAnswers.map(answer => {
|
||||
if (answer.value) answer.value = decryptIfExists(answer.value);
|
||||
answer.value &&= decrypt(answer.value);
|
||||
return answer;
|
||||
});
|
||||
|
||||
delete ticket.guildId;
|
||||
ticket.topic &&= decrypt(ticket.topic);
|
||||
|
||||
return JSON.stringify(ticket);
|
||||
},
|
||||
|
115
src/lib/workers/import.js
Normal file
115
src/lib/workers/import.js
Normal file
@@ -0,0 +1,115 @@
|
||||
const { expose } = require('threads/worker');
|
||||
const Cryptr = require('cryptr');
|
||||
const { encrypt } = new Cryptr(process.env.ENCRYPTION_KEY);
|
||||
|
||||
expose({
|
||||
importTicket(stringified, guildId, categoryMap) {
|
||||
const ticket = JSON.parse(stringified);
|
||||
|
||||
ticket.archivedChannels = {
|
||||
create: ticket.archivedChannels.map(user => {
|
||||
delete user.ticketId;
|
||||
return user;
|
||||
}),
|
||||
};
|
||||
|
||||
ticket.archivedUsers = {
|
||||
create: ticket.archivedUsers.map(user => {
|
||||
delete user.ticketId;
|
||||
user.displayName &&= encrypt(user.displayName);
|
||||
user.username &&= encrypt(user.username);
|
||||
return user;
|
||||
}),
|
||||
};
|
||||
|
||||
ticket.archivedRoles = {
|
||||
create: ticket.archivedRoles.map(user => {
|
||||
delete user.ticketId;
|
||||
return user;
|
||||
}),
|
||||
};
|
||||
|
||||
const messages = ticket.archivedMessages.map(message => {
|
||||
// messages don't need to be wrapped in {create}
|
||||
message.content &&= encrypt(message.content);
|
||||
return message;
|
||||
});
|
||||
delete ticket.archivedMessages;
|
||||
|
||||
ticket.category = { connect: { id: categoryMap.get(ticket.categoryId) } };
|
||||
delete ticket.categoryId;
|
||||
|
||||
if (ticket.claimedById) {
|
||||
ticket.claimedBy = {
|
||||
connectOrCreate: {
|
||||
create: { id: ticket.claimedById },
|
||||
where: { id: ticket.claimedById },
|
||||
},
|
||||
};
|
||||
}
|
||||
delete ticket.claimedById;
|
||||
|
||||
if (ticket.closedById) {
|
||||
ticket.closedBy = {
|
||||
connectOrCreate: {
|
||||
create: { id: ticket.closedById },
|
||||
where: { id: ticket.closedById },
|
||||
},
|
||||
};
|
||||
}
|
||||
delete ticket.closedById;
|
||||
|
||||
if (ticket.createdById) {
|
||||
ticket.createdBy = {
|
||||
connectOrCreate: {
|
||||
create: { id: ticket.createdById },
|
||||
where: { id: ticket.createdById },
|
||||
},
|
||||
};
|
||||
}
|
||||
delete ticket.createdById;
|
||||
|
||||
ticket.closedReason &&= encrypt(ticket.closedReason);
|
||||
|
||||
if (ticket.feedback) {
|
||||
ticket.feedback.guild = { connect: { id: guildId } };
|
||||
ticket.feedback.comment &&= encrypt(ticket.feedback.comment);
|
||||
if (ticket.feedback.userId) {
|
||||
ticket.feedback.user = {
|
||||
connectOrCreate: {
|
||||
create: { id: ticket.feedback.userId },
|
||||
where: { id: ticket.feedback.userId },
|
||||
},
|
||||
};
|
||||
delete ticket.feedback.userId;
|
||||
}
|
||||
ticket.feedback = { create: ticket.feedback };
|
||||
} else {
|
||||
ticket.feedback = undefined;
|
||||
}
|
||||
|
||||
ticket.guild = { connect: { id: guildId } };
|
||||
delete ticket.guildId; // shouldn't exist but make sure
|
||||
|
||||
if (ticket.questionAnswers.length) {
|
||||
ticket.questionAnswers = {
|
||||
create: ticket.questionAnswers.map(async answer => {
|
||||
answer.value &&= encrypt(answer.value);
|
||||
return answer;
|
||||
}),
|
||||
};
|
||||
} else {
|
||||
ticket.questionAnswers = undefined;
|
||||
}
|
||||
|
||||
if (ticket.referencesTicketId) {
|
||||
ticket.referencesTicket = { connect: { id: ticket.referencesTicketId } };
|
||||
}
|
||||
delete ticket.referencesTicketId;
|
||||
|
||||
ticket.topic &&= encrypt(ticket.topic);
|
||||
|
||||
return [ticket, messages];
|
||||
|
||||
},
|
||||
});
|
Reference in New Issue
Block a user