0.11.10 : add link post

This commit is contained in:
2025-10-29 22:53:35 +01:00
parent 337293182b
commit 39c3a516cd
8 changed files with 211 additions and 61 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "harmony-back", "name": "harmony-back",
"version": "0.11.9", "version": "0.11.10",
"private": true, "private": true,
"description": "A Strapi application", "description": "A Strapi application",
"scripts": { "scripts": {

View File

@@ -207,7 +207,26 @@ export default ({ strapi }: { strapi: Core.Strapi }) =>
} }
}); });
// 7Enrichir le feed avec les propriétés friend, member, contactFollow, group et registered participants // 7Récupérer les PostOwnership pour vérifier si les events sont déjà partagés
const eventPostOwnerships = await strapi.db
.query("api::post-ownership.post-ownership")
.findMany({
where: {
contextId: eventIds,
contextType: "event",
relation: "link",
},
populate: ["author"],
});
// Créer une map des events partagés par userId et eventId
const sharedEventsByUserAndEvent = new Map<string, boolean>();
eventPostOwnerships.forEach((po) => {
const key = `${po.author?.id}-${po.contextId}`;
sharedEventsByUserAndEvent.set(key, true);
});
// 8⃣ Enrichir le feed avec les propriétés friend, member, contactFollow, group, registered participants et isShared
const enrichedFeed = feed.map((eventRelationship) => { const enrichedFeed = feed.map((eventRelationship) => {
const authorId = eventRelationship.author?.id; const authorId = eventRelationship.author?.id;
const contextType = eventRelationship.contextType; const contextType = eventRelationship.contextType;
@@ -235,6 +254,12 @@ export default ({ strapi }: { strapi: Core.Strapi }) =>
? participantsByEventId.get(eventId) || [] ? participantsByEventId.get(eventId) || []
: []; : [];
// Vérifier si l'event est déjà partagé par l'auteur
const isShared =
authorId && eventId
? sharedEventsByUserAndEvent.has(`${authorId}-${eventId}`)
: false;
return { return {
...eventRelationship, ...eventRelationship,
friend: isFriend, friend: isFriend,
@@ -242,6 +267,7 @@ export default ({ strapi }: { strapi: Core.Strapi }) =>
member: isMember, member: isMember,
...(group && { group }), // Ajouter group seulement s'il existe ...(group && { group }), // Ajouter group seulement s'il existe
registered, // Ajouter les participants enregistrés registered, // Ajouter les participants enregistrés
isShared, // Indiquer si l'event est partagé par l'auteur
}; };
}); });

View File

@@ -23,7 +23,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -34,7 +35,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": { "metas": {

View File

@@ -19,7 +19,12 @@
"type": "media", "type": "media",
"multiple": true, "multiple": true,
"required": false, "required": false,
"allowedTypes": ["images", "files", "videos", "audios"] "allowedTypes": [
"images",
"files",
"videos",
"audios"
]
}, },
"likes": { "likes": {
"type": "relation", "type": "relation",
@@ -28,7 +33,11 @@
}, },
"category": { "category": {
"type": "enumeration", "type": "enumeration",
"enum": ["photo", "video", "event"] "enum": [
"photo",
"video",
"event"
]
}, },
"comments": { "comments": {
"type": "relation", "type": "relation",

View File

@@ -720,5 +720,57 @@ export default factories.createCoreController(
return ctx.internalServerError("Failed to add comment"); return ctx.internalServerError("Failed to add comment");
} }
}, },
async link(ctx) {
const user = ctx.state.user;
if (!user) {
return ctx.unauthorized("You must be logged in to link events");
}
const { contextType, contextId, relation } = ctx.request.body;
if (!contextType || contextId === undefined || !relation) {
return ctx.badRequest(
"contextType, contextId, and relation are required"
);
}
try {
// Check if link already exists
const existingLink = await strapi.db
.query("api::post-ownership.post-ownership")
.findOne({
where: {
author: user.id,
contextType,
contextId,
relation,
},
});
if (existingLink) {
return ctx.badRequest("This event is already linked");
}
const postOwnership = await strapi.db
.query("api::post-ownership.post-ownership")
.create({
data: {
author: user.id,
contextType,
contextId,
relation,
},
});
return ctx.send({
message: "Event linked successfully",
postOwnership,
});
} catch (error: any) {
console.error("Error linking event:", error);
return ctx.internalServerError("Failed to link event");
}
},
}) })
); );

View File

@@ -39,5 +39,10 @@ export default {
path: "/posts/:id/comment", path: "/posts/:id/comment",
handler: "post.addComment", handler: "post.addComment",
}, },
{
method: "POST",
path: "/posts/link",
handler: "post.link",
},
], ],
}; };

View File

@@ -14,7 +14,7 @@
"name": "Apache 2.0", "name": "Apache 2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0.html" "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
}, },
"x-generation-date": "2025-10-24T10:39:51.987Z" "x-generation-date": "2025-10-29T21:53:00.271Z"
}, },
"x-strapi-config": { "x-strapi-config": {
"plugins": [ "plugins": [
@@ -16968,7 +16968,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -16979,7 +16980,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -20417,7 +20419,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -20428,7 +20431,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -24351,7 +24355,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -24362,7 +24367,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -27844,7 +27850,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -27855,7 +27862,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -31785,7 +31793,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -31796,7 +31805,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -35977,7 +35987,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -35988,7 +35999,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -40618,7 +40630,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -40629,7 +40642,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -44549,7 +44563,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -44560,7 +44575,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -48382,7 +48398,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -48393,7 +48410,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -52202,7 +52220,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -52213,7 +52232,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -56058,7 +56078,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -56069,7 +56090,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -59914,7 +59936,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -59925,7 +59948,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -63731,7 +63755,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -63742,7 +63767,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -67729,7 +67755,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -67740,7 +67767,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -71216,7 +71244,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -71227,7 +71256,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -75632,7 +75662,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -75643,7 +75674,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -79448,7 +79480,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -79459,7 +79492,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -83581,7 +83615,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -83592,7 +83627,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -87417,7 +87453,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -87428,7 +87465,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -91359,7 +91397,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -91370,7 +91409,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -94638,7 +94678,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -94649,7 +94690,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -99195,7 +99237,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -99206,7 +99249,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -99797,7 +99841,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -99808,7 +99853,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -103076,7 +103122,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -103087,7 +103134,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -103528,7 +103576,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -103539,7 +103588,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},
@@ -106917,7 +106967,8 @@
"enum": [ "enum": [
"user", "user",
"group", "group",
"system" "system",
"event"
] ]
}, },
"contextId": { "contextId": {
@@ -106928,7 +106979,8 @@
"enum": [ "enum": [
"owner", "owner",
"saved", "saved",
"hidden" "hidden",
"link"
] ]
}, },
"metas": {}, "metas": {},

View File

@@ -1227,7 +1227,9 @@ export interface ApiPostOwnershipPostOwnership
'plugin::users-permissions.user' 'plugin::users-permissions.user'
>; >;
contextId: Schema.Attribute.Integer; contextId: Schema.Attribute.Integer;
contextType: Schema.Attribute.Enumeration<['user', 'group', 'system']>; contextType: Schema.Attribute.Enumeration<
['user', 'group', 'system', 'event']
>;
createdAt: Schema.Attribute.DateTime; createdAt: Schema.Attribute.DateTime;
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
Schema.Attribute.Private; Schema.Attribute.Private;
@@ -1240,7 +1242,9 @@ export interface ApiPostOwnershipPostOwnership
metas: Schema.Attribute.JSON; metas: Schema.Attribute.JSON;
post: Schema.Attribute.Relation<'manyToOne', 'api::post.post'>; post: Schema.Attribute.Relation<'manyToOne', 'api::post.post'>;
publishedAt: Schema.Attribute.DateTime; publishedAt: Schema.Attribute.DateTime;
relation: Schema.Attribute.Enumeration<['owner', 'saved', 'hidden']>; relation: Schema.Attribute.Enumeration<
['owner', 'saved', 'hidden', 'link']
>;
updatedAt: Schema.Attribute.DateTime; updatedAt: Schema.Attribute.DateTime;
updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
Schema.Attribute.Private; Schema.Attribute.Private;