All checks were successful
Build release Docker image / Build Docker Images (push) Successful in 10m42s
62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
import { factories } from "@strapi/strapi";
|
|
|
|
export default factories.createCoreService(
|
|
"api::mails.mails",
|
|
({ strapi }) => ({
|
|
// Notre méthode personnalisée
|
|
async sendInvitation(
|
|
emailAddress: string,
|
|
inviterName: string,
|
|
choirName: string,
|
|
inviteToken: string | null,
|
|
) {
|
|
// 1. Définir le lien de redirection selon le type d'utilisateur
|
|
// S'il y a un token, c'est un nouvel utilisateur. Sinon, c'est un membre existant.
|
|
const inviteLink = inviteToken
|
|
? `https://www.choralsync.com/invite?token=${inviteToken}`
|
|
: `https://www.choralsync.com/app`; // Lien vers l'app pour accepter l'invitation interne
|
|
|
|
// 2. Récupérer le single-type "mails" avec l'API Document
|
|
const mailsConfig = await strapi.documents("api::mails.mails").findFirst({
|
|
populate: ["onInviteUser"],
|
|
});
|
|
|
|
if (!mailsConfig || !mailsConfig.onInviteUser) {
|
|
throw new Error(
|
|
"Le template d'email d'invitation n'est pas configuré dans le CMS.",
|
|
);
|
|
}
|
|
|
|
const templateConfig = mailsConfig.onInviteUser[0];
|
|
|
|
try {
|
|
// 3. Envoyer l'email via le moteur de template natif
|
|
await strapi.plugin("email").service("email").sendTemplatedEmail(
|
|
{
|
|
to: emailAddress,
|
|
from: "ChoralSync <contact@choralsync.com>",
|
|
},
|
|
{
|
|
subject: templateConfig.subject,
|
|
html: templateConfig.message,
|
|
text: `Bonjour, Vous avez été invité(e) par <%= inviter_name %> à rejoindre <%= choir_name %>. Acceptez l'invitation en cliquant sur ce lien : <%= invite_link %>`,
|
|
},
|
|
{
|
|
// Variables injectées dans le template (<%= variable %>)
|
|
inviter_name: inviterName,
|
|
choir_name: choirName,
|
|
invite_link: inviteLink,
|
|
},
|
|
);
|
|
|
|
return { success: true };
|
|
} catch (error) {
|
|
console.error("Erreur lors de l'envoi de l'email :", error);
|
|
// On throw l'erreur pour que le contrôleur puisse la logger,
|
|
// mais idéalement sans bloquer la création en base.
|
|
throw error;
|
|
}
|
|
},
|
|
}),
|
|
);
|