projeto-hit/backend/src/services/WhatsappService/CreateWhatsAppService.ts

89 lines
1.9 KiB
TypeScript
Raw Normal View History

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<Response> => {
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;