0.13.8 : invite by mail or contact and change mail provider on local
All checks were successful
Build release Docker image / Build Docker Images (push) Successful in 10m42s
All checks were successful
Build release Docker image / Build Docker Images (push) Successful in 10m42s
This commit is contained in:
@@ -1,7 +1,61 @@
|
||||
/**
|
||||
* mails service
|
||||
*/
|
||||
import { factories } from "@strapi/strapi";
|
||||
|
||||
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
|
||||
|
||||
export default factories.createCoreService('api::mails.mails');
|
||||
// 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;
|
||||
}
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user