diff --git a/package.json b/package.json index af78d98..7581303 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "harmony-back", - "version": "0.11.19", + "version": "0.11.20", "private": true, "description": "A Strapi application", "scripts": { diff --git a/src/api/event/controllers/create.ts b/src/api/event/controllers/create.ts index 1284d97..f6c69ef 100644 --- a/src/api/event/controllers/create.ts +++ b/src/api/event/controllers/create.ts @@ -23,8 +23,10 @@ export default ({ strapi }: { strapi: Core.Strapi }) => } try { + const groupId = ctx.request.body.data.group; // Format tags from array of strings to array of component objects const data = ctx.request.body.data; + delete data.group; if (data.tags && Array.isArray(data.tags)) { data.tags = data.tags .filter((tag: any) => { @@ -51,14 +53,17 @@ export default ({ strapi }: { strapi: Core.Strapi }) => } // 2. Create the owner relationship + const contextType = groupId && groupId !== 0 ? "group" : "user"; + const contextId = groupId && groupId !== 0 ? groupId : userId; + const ownerRelationship = await strapi.db .query("api::event-relationship.event-relationship") .create({ data: { author: userId, event: event.id, - contextType: "user", - contextId: userId, + contextType, + contextId, relation: "owner", metas: { createdAt: new Date().toISOString(), diff --git a/src/api/event/controllers/feed.ts b/src/api/event/controllers/feed.ts index d487e43..a5cfabc 100644 --- a/src/api/event/controllers/feed.ts +++ b/src/api/event/controllers/feed.ts @@ -4,7 +4,7 @@ import type { Context } from "koa"; export default ({ strapi }: { strapi: Core.Strapi }) => async function feed(ctx: Context) { const userId = ctx.state.user?.id; - + const { contextId, contextType } = ctx.query; if (!userId) return ctx.badRequest("userId is required"); // Récupérer et valider la query avec les fonctions de Strapi @@ -26,7 +26,12 @@ export default ({ strapi }: { strapi: Core.Strapi }) => { auth: ctx.state.auth } ); - const { _limit = 20, _start = 0 } = sanitizedQueryParams; + const { + _limit = 20, + _start = 0, + contextType, + contextId, + } = sanitizedQueryParams; limit = Math.max(1, Math.min(parseInt(String(_limit)) || 20, 100)); // Entre 1 et 100 start = Math.max(0, parseInt(String(_start)) || 0); // Minimum 0 } catch (error) { @@ -100,50 +105,44 @@ export default ({ strapi }: { strapi: Core.Strapi }) => .map((membership) => membership.group.id) .filter((groupId) => !groupIds.includes(groupId)); // Exclure mes propres groupes + // Construire la condition where en fonction des paramètres contextId et contextType + const whereCondition = + contextId && contextType + ? { + relation: "owner", + contextType, + contextId: parseInt(String(contextId)), + } + : { + relation: "owner", + $or: [ + // EventRelationships de l'utilisateur courant + { author: { id: parseInt(userId) } }, + // EventRelationships des amis + { author: { id: friendIds } }, + // EventRelationships des contacts suivis + { author: { id: followIds } }, + // EventRelationships des groupes de l'utilisateur + { contextType: "group", contextId: groupIds }, + // EventRelationships des groupes des amis + { contextType: "group", contextId: friendsGroupIds }, + // EventRelationships système + { contextType: "system" }, + ], + }; + // 4️⃣ Récupérer le count total pour la pagination const totalCount = await strapi.db .query("api::event-relationship.event-relationship") .count({ - where: { - relation: "owner", - $or: [ - // EventRelationships de l'utilisateur courant - { author: { id: parseInt(userId) } }, - // EventRelationships des amis - { author: { id: friendIds } }, - // EventRelationships des contacts suivis - { author: { id: followIds } }, - // EventRelationships des groupes de l'utilisateur - { contextType: "group", contextId: groupIds }, - // EventRelationships des groupes des amis - { contextType: "group", contextId: friendsGroupIds }, - // EventRelationships système - { contextType: "system" }, - ], - }, + where: whereCondition, }); // 4️⃣ Récupérer le feed avec pagination const feed = await strapi.db .query("api::event-relationship.event-relationship") .findMany({ - where: { - relation: "owner", - $or: [ - // EventRelationships de l'utilisateur courant - { author: { id: parseInt(userId) } }, - // EventRelationships des amis - { author: { id: friendIds } }, - // EventRelationships des contacts suivis - { author: { id: followIds } }, - // EventRelationships des groupes de l'utilisateur - { contextType: "group", contextId: groupIds }, - // EventRelationships des groupes des amis - { contextType: "group", contextId: friendsGroupIds }, - // EventRelationships système - { contextType: "system" }, - ], - }, + where: whereCondition, ...queryParams, }); 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 f32cba5..0a7b061 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-11-10T13:53:36.003Z" + "x-generation-date": "2025-11-10T22:10:01.518Z" }, "x-strapi-config": { "plugins": [