import * as Yup from "yup"; import AppError from "../../errors/AppError"; import Whatsapp from "../../models/Whatsapp"; import AssociateWhatsappQueue from "./AssociateWhatsappQueue"; interface Request { name: string; queueIds?: number[]; greetingMessage?: string; farewellMessage?: string; status?: string; isDefault?: boolean; } interface Response { whatsapp: Whatsapp; oldDefaultWhatsapp: Whatsapp | null; } const CreateWhatsAppService = async ({ name, status = "OPENING", queueIds = [], greetingMessage, farewellMessage, isDefault = false }: Request): Promise => { const schema = Yup.object().shape({ name: Yup.string() .required() .min(2) .test( "Check-name", "This whatsapp name is already used.", async value => { if (!value) return false; const nameExists = await Whatsapp.findOne({ where: { name: value } }); return !nameExists; } ), isDefault: Yup.boolean().required() }); try { await schema.validate({ name, status, isDefault }); } catch (err) { throw new AppError(err.message); } const whatsappFound = await Whatsapp.findOne(); isDefault = !whatsappFound; let oldDefaultWhatsapp: Whatsapp | null = null; if (isDefault) { oldDefaultWhatsapp = await Whatsapp.findOne({ where: { isDefault: true } }); if (oldDefaultWhatsapp) { await oldDefaultWhatsapp.update({ isDefault: false }); } } if (queueIds.length > 1 && !greetingMessage) { throw new AppError("ERR_WAPP_GREETING_REQUIRED"); } const whatsapp = await Whatsapp.create( { name, status, greetingMessage, farewellMessage, isDefault }, { include: ["queues"] } ); await AssociateWhatsappQueue(whatsapp, queueIds); return { whatsapp, oldDefaultWhatsapp }; }; export default CreateWhatsAppService;