87 lines
1.9 KiB
TypeScript
87 lines
1.9 KiB
TypeScript
import AppError from "../../errors/AppError";
|
|
import Contact from "../../models/Contact";
|
|
import ContactCustomField from "../../models/ContactCustomField";
|
|
|
|
import { updateTicketsByContactsCache } from '../../helpers/TicketCache'
|
|
import { updateContactCacheById } from '../../helpers/ContactsCache'
|
|
|
|
interface ExtraInfo {
|
|
id?: number;
|
|
name: string;
|
|
value: string;
|
|
}
|
|
interface ContactData {
|
|
email?: string;
|
|
number?: string;
|
|
name?: string;
|
|
extraInfo?: ExtraInfo[];
|
|
}
|
|
|
|
interface Request {
|
|
contactData: ContactData;
|
|
contactId: string;
|
|
}
|
|
|
|
|
|
const UpdateContactService = async ({
|
|
contactData,
|
|
contactId
|
|
}: Request): Promise<Contact> => {
|
|
const { email, name, number, extraInfo } = contactData;
|
|
|
|
const contact = await Contact.findOne({
|
|
where: { id: contactId },
|
|
attributes: ["id", "name", "number", "email", "profilePicUrl"],
|
|
include: ["extraInfo"]
|
|
});
|
|
|
|
if (!contact) {
|
|
throw new AppError("ERR_NO_CONTACT_FOUND", 404);
|
|
}
|
|
|
|
if (extraInfo) {
|
|
await Promise.all(
|
|
extraInfo.map(async info => {
|
|
await ContactCustomField.upsert({ ...info, contactId: contact.id });
|
|
})
|
|
);
|
|
|
|
await Promise.all(
|
|
contact.extraInfo.map(async oldInfo => {
|
|
const stillExists = extraInfo.findIndex(info => info.id === oldInfo.id);
|
|
|
|
if (stillExists === -1) {
|
|
await ContactCustomField.destroy({ where: { id: oldInfo.id } });
|
|
}
|
|
})
|
|
);
|
|
}
|
|
|
|
const oldNumber = contact.number
|
|
|
|
await contact.update({
|
|
name,
|
|
number,
|
|
email
|
|
});
|
|
|
|
//TEST DEL
|
|
await updateTicketsByContactsCache(oldNumber, contact.name, contact.number)
|
|
//
|
|
|
|
|
|
await contact.reload({
|
|
attributes: ["id", "name", "number", "email", "profilePicUrl"],
|
|
include: ["extraInfo"]
|
|
});
|
|
|
|
|
|
|
|
// console.log('contactcontactcontactcontact: ',flatten(JSON.parse(JSON.stringify(contact))))
|
|
await updateContactCacheById(contact.id, JSON.parse(JSON.stringify(contact)))
|
|
|
|
return contact;
|
|
};
|
|
|
|
export default UpdateContactService;
|