diff --git a/package.json b/package.json index 78cfb0e..acbbbae 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "harmony-back", - "version": "0.12.13", + "version": "0.12.14", "private": true, "description": "A Strapi application", "scripts": { diff --git a/src/api/contact/content-types/contact/lifecycles.ts b/src/api/contact/content-types/contact/lifecycles.ts new file mode 100644 index 0000000..08b8b8b --- /dev/null +++ b/src/api/contact/content-types/contact/lifecycles.ts @@ -0,0 +1,51 @@ +// src/api/contact/content-types/contact/lifecycles.js + +module.exports = { + /** + * Se déclenche après qu'un contact a été créé. + * @param {Object} result - L'entrée de contact qui vient d'être créée. + */ + async afterCreate(result) { + // On vérifie si l'état du contact est bien 'pending' + if (result.result.state === "pending") { + const populatedContact = await strapi + .documents("api::contact.contact") + .findOne({ + documentId: result.result.documentId, // On utilise documentId au lieu de id + populate: { + owner: true, // On peuple la relation 'owner' + user: true, // On peuple la relation 'user' + }, + }); + const { user, owner } = populatedContact; + + // On s'assure que le receiver et le sender existent bien + if (user && owner) { + try { + // Appel du service de notification + await strapi + .service("api::notification.notification") + ?.createNotification({ + title: "Demande d'ami", + message: `Tu as été invité par ${owner.username} à être son ami.`, + type: "success", + target_user: user.id, + source: "system", + payload: {}, + }); + + strapi.log.info( + `Notification sent to user ${user.id} for new contact invitation from ${owner.id}.` + ); + } catch (error) { + // C'est une bonne pratique d'attraper les erreurs pour ne pas + // bloquer la création du contact si l'envoi de la notification échoue. + strapi.log.error( + "Failed to send notification after contact creation:", + error + ); + } + } + } + }, +}; diff --git a/src/api/contact/document-middleware.ts b/src/api/contact/document-middleware.ts new file mode 100644 index 0000000..5556303 --- /dev/null +++ b/src/api/contact/document-middleware.ts @@ -0,0 +1,58 @@ +// path: src/api/contact/document-middleware.ts + +export default { + /** + * Déclenché à la création d’un document Contact + */ + async beforeCreate(event) { + // Pas besoin ici, mais tu peux faire des validations avant création + }, + + async afterCreate(event) { + const { result } = event; + + // On récupère les infos du contact + const contact = result; + + // On agit seulement sur les contacts en attente + if (contact.state !== "pending") return; + + const fromUserId = contact.fromUser?.id || contact.fromUser; + const toUserId = contact.toUser?.id || contact.toUser; + + if (!fromUserId || !toUserId) { + strapi.log.warn("Notification non créée : fromUser ou toUser manquant."); + return; + } + + try { + /*await strapi.service("api::notification.notification").create({ + data: { + type: "contact-request", + title: "Nouvelle demande de contact", + message: `L'utilisateur #${fromUserId} vous a envoyé une demande de contact.`, + user: toUserId, + meta: { + fromUserId, + contactId: contact.id, + }, + }, + });*/ + + strapi.log.info(`Notification envoyée à l’utilisateur ${toUserId}`); + } catch (error) { + strapi.log.error( + "Erreur lors de la création de la notification :", + error + ); + } + }, + + async beforeUpdate(event) { + // pour plus tard si tu veux : accepter/refuser… + }, + + async afterUpdate(event) { + // idem, pour envoyer une notif sur "accepted" ou "rejected" + }, +}; diff --git a/src/extensions/documentation/documentation/1.0.0/full_documentation.json b/src/extensions/documentation/documentation/1.0.0/full_documentation.json index c2174a3..f0076d6 100644 --- a/src/extensions/documentation/documentation/1.0.0/full_documentation.json +++ b/src/extensions/documentation/documentation/1.0.0/full_documentation.json @@ -14,7 +14,7 @@ "name": "Apache 2.0", "url": "https://www.apache.org/licenses/LICENSE-2.0.html" }, - "x-generation-date": "2025-12-09T22:24:41.239Z" + "x-generation-date": "2025-12-11T14:30:17.431Z" }, "x-strapi-config": { "plugins": [