From 4c5b72d0d9ebfeb3bbf3889c5474dafab6efa372 Mon Sep 17 00:00:00 2001 From: julien vdb Date: Thu, 23 Oct 2025 09:52:27 +0200 Subject: [PATCH] 0.11.8 : add create event --- package.json | 2 +- src/api/event/controllers/create.ts | 62 +++++++++++++++++++ .../1.0.0/full_documentation.json | 2 +- 3 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 src/api/event/controllers/create.ts diff --git a/package.json b/package.json index 3f632f5..6d0c8ba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "harmony-back", - "version": "0.11.7", + "version": "0.11.8", "private": true, "description": "A Strapi application", "scripts": { diff --git a/src/api/event/controllers/create.ts b/src/api/event/controllers/create.ts new file mode 100644 index 0000000..c6406c0 --- /dev/null +++ b/src/api/event/controllers/create.ts @@ -0,0 +1,62 @@ +import type { Core } from "@strapi/strapi"; +import type { Context } from "koa"; + +/** + * Custom create handler for events + * + * When creating an event: + * 1. Create the event using Strapi's default create method + * 2. Automatically create an EventRelationship with relation "owner" for the creator + * 3. Return the created event with populated data + * + * POST /events + */ +export default ({ strapi }: { strapi: Core.Strapi }) => + async function create(ctx: Context) { + const userId = ctx.state.user?.id; + + // Validation + if (!userId) { + return ctx.badRequest( + "User ID is required. You must be logged in to create an event." + ); + } + + try { + // 1. Call the default Strapi create method + const event = await strapi.entityService.create("api::event.event", { + data: ctx.request.body.data, + }); + + if (!event) { + return ctx.internalServerError("Failed to create event"); + } + + // 2. Create the owner relationship + const ownerRelationship = await strapi.db + .query("api::event-relationship.event-relationship") + .create({ + data: { + author: userId, + event: event.id, + contextType: "user", + contextId: userId, + relation: "owner", + metas: { + createdAt: new Date().toISOString(), + }, + }, + }); + + strapi.log.info( + `Event ${event.id} created by user ${userId} with owner relationship ${ownerRelationship.id}` + ); + + ctx.send({ data: event }, 201); + } catch (error) { + strapi.log.error("Error in create event controller:", error); + return ctx.internalServerError( + `Failed to create event: ${error.message}` + ); + } + }; 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 843a82f..47847af 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-10-21T16:41:02.959Z" + "x-generation-date": "2025-10-23T07:52:13.018Z" }, "x-strapi-config": { "plugins": [