diff --git a/package.json b/package.json index 2c14889..a2a2130 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "harmony-back", - "version": "0.11.5", + "version": "0.11.6", "private": true, "description": "A Strapi application", "scripts": { diff --git a/src/api/event-other/content-types/event-other/schema.json b/src/api/event-other/content-types/event-other/schema.json index db8fb09..14a796f 100644 --- a/src/api/event-other/content-types/event-other/schema.json +++ b/src/api/event-other/content-types/event-other/schema.json @@ -28,14 +28,14 @@ "enum": [ "concert", "festival", - "salon", + "trade show", "symposium", - "concours", + "competition", "masterclass", - "atelier vocal", - "conférence", - "répétition", - "sorties" + "vocal_workshop", + "conference", + "rehearsal", + "outings" ] } } diff --git a/src/api/event-relationship/content-types/event-relationship/schema.json b/src/api/event-relationship/content-types/event-relationship/schema.json new file mode 100644 index 0000000..351f196 --- /dev/null +++ b/src/api/event-relationship/content-types/event-relationship/schema.json @@ -0,0 +1,49 @@ +{ + "kind": "collectionType", + "collectionName": "event_relationships", + "info": { + "singularName": "event-relationship", + "pluralName": "event-relationships", + "displayName": "EventRelationship", + "description": "" + }, + "options": { + "draftAndPublish": false + }, + "pluginOptions": {}, + "attributes": { + "author": { + "type": "relation", + "relation": "oneToOne", + "target": "plugin::users-permissions.user" + }, + "contextType": { + "type": "enumeration", + "enum": [ + "user", + "group", + "choral", + "system" + ] + }, + "contextId": { + "type": "integer" + }, + "relation": { + "type": "enumeration", + "enum": [ + "owner", + "interested", + "registered" + ] + }, + "metas": { + "type": "json" + }, + "event": { + "type": "relation", + "relation": "oneToOne", + "target": "api::event.event" + } + } +} diff --git a/src/api/event-relationship/controllers/event-relationship.ts b/src/api/event-relationship/controllers/event-relationship.ts new file mode 100644 index 0000000..79167f8 --- /dev/null +++ b/src/api/event-relationship/controllers/event-relationship.ts @@ -0,0 +1,7 @@ +/** + * event-relationship controller + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreController('api::event-relationship.event-relationship'); diff --git a/src/api/event-relationship/routes/event-relationship.ts b/src/api/event-relationship/routes/event-relationship.ts new file mode 100644 index 0000000..320d903 --- /dev/null +++ b/src/api/event-relationship/routes/event-relationship.ts @@ -0,0 +1,7 @@ +/** + * event-relationship router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::event-relationship.event-relationship'); diff --git a/src/api/event-relationship/services/event-relationship.ts b/src/api/event-relationship/services/event-relationship.ts new file mode 100644 index 0000000..7f907c6 --- /dev/null +++ b/src/api/event-relationship/services/event-relationship.ts @@ -0,0 +1,7 @@ +/** + * event-relationship service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::event-relationship.event-relationship'); diff --git a/src/api/event/content-types/event/schema.json b/src/api/event/content-types/event/schema.json index 1dd3ac1..876ea50 100644 --- a/src/api/event/content-types/event/schema.json +++ b/src/api/event/content-types/event/schema.json @@ -35,6 +35,40 @@ }, "location": { "type": "string" + }, + "type": { + "type": "enumeration", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "enumeration", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "text" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" } } } diff --git a/src/api/event/controllers/applyEvent.ts b/src/api/event/controllers/applyEvent.ts new file mode 100644 index 0000000..bea1cc9 --- /dev/null +++ b/src/api/event/controllers/applyEvent.ts @@ -0,0 +1,93 @@ +import type { Core } from "@strapi/strapi"; +import type { Context } from "koa"; + +/** + * Controller pour gérer l'inscription d'un utilisateur à un événement + * POST /events/:eventId/apply + */ +export default ({ strapi }: { strapi: Core.Strapi }) => + async function applyEvent(ctx: Context) { + const userId = ctx.state.user?.id; + const eventId = ctx.params.eventId; + + // Validation des paramètres + if (!userId) { + return ctx.badRequest("User ID is required"); + } + + if (!eventId || isNaN(parseInt(eventId))) { + return ctx.badRequest("Event ID is required and must be a valid number"); + } + + try { + // Vérifier que l'événement existe + const event = await strapi.db.query("api::event.event").findOne({ + where: { id: parseInt(eventId) }, + }); + + if (!event) { + return ctx.notFound("Event not found"); + } + + // Vérifier que l'utilisateur n'est pas déjà inscrit + const existingRelationship = await strapi.db + .query("api::event-relationship.event-relationship") + .findOne({ + where: { + event: { id: parseInt(eventId) }, + contextType: "user", + contextId: parseInt(userId), + relation: { $in: ["registered", "interested"] }, + }, + }); + + if (existingRelationship) { + return ctx.badRequest( + "User is already registered or interested in this event" + ); + } + + // Créer la nouvelle relation d'inscription + const eventRelationship = await strapi.db + .query("api::event-relationship.event-relationship") + .create({ + data: { + author: parseInt(userId), + event: parseInt(eventId), + contextType: "user", + contextId: parseInt(userId), + relation: "registered", + metas: { + appliedAt: new Date().toISOString(), + }, + }, + }); + + // Populer les données pour la réponse + const populatedRelationship = await strapi.db + .query("api::event-relationship.event-relationship") + .findOne({ + where: { id: eventRelationship.id }, + populate: { + event: { + populate: { + choral: true, + }, + }, + author: { + populate: { + avatar: true, + }, + }, + }, + }); + + ctx.send({ + data: populatedRelationship, + message: "Successfully registered for the event", + }); + } catch (error) { + strapi.log.error("Error in applyEvent controller:", error); + ctx.internalServerError(`Failed to register for event: ${error.message}`); + } + }; diff --git a/src/api/event/controllers/event.ts b/src/api/event/controllers/event.ts index 9725955..1a479c1 100644 --- a/src/api/event/controllers/event.ts +++ b/src/api/event/controllers/event.ts @@ -2,6 +2,39 @@ * event controller */ -import { factories } from '@strapi/strapi' +import { factories } from "@strapi/strapi"; +import fs from "fs"; +import path from "path"; -export default factories.createCoreController('api::event.event'); +export default factories.createCoreController( + "api::event.event", + ({ strapi }) => { + const controllersDir = __dirname; + const controllers: Record = {}; + + fs.readdirSync(controllersDir).forEach((file) => { + // Ignorer le contrôleur principal + fichiers map + if (file.startsWith("event.") || file.endsWith(".map")) return; + + // On accepte .ts et .js + const ext = path.extname(file); + if (![".ts", ".js"].includes(ext)) return; + + const name = path.basename(file, ext); + const modulePath = path.join(controllersDir, file); + const module = require(modulePath); + + const handler = module.default; + if (typeof handler === "function") { + controllers[name] = handler({ strapi }); + } + }); + + console.log(Object.keys(controllers)); + + return { + // ✅ injection automatique des customs + ...controllers, + } as any; + } +); diff --git a/src/api/event/controllers/feed.ts b/src/api/event/controllers/feed.ts new file mode 100644 index 0000000..e555685 --- /dev/null +++ b/src/api/event/controllers/feed.ts @@ -0,0 +1,278 @@ +import type { Core } from "@strapi/strapi"; +import type { Context } from "koa"; + +export default ({ strapi }: { strapi: Core.Strapi }) => + async function feed(ctx: Context) { + const userId = ctx.state.user?.id; + + if (!userId) return ctx.badRequest("userId is required"); + + // Récupérer et valider la query avec les fonctions de Strapi + + const contentType = strapi.contentType( + "api::event-relationship.event-relationship" + ); + let limit: number; + let start: number; + + try { + // Sanitize la query + await strapi.contentAPI.validate.query(ctx.query, contentType, { + auth: ctx.state.auth, + }); + const sanitizedQueryParams = await strapi.contentAPI.sanitize.query( + ctx.query, + contentType, + { auth: ctx.state.auth } + ); + + const { _limit = 20, _start = 0 } = 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) { + return ctx.badRequest(`Invalid query parameters: ${error.message}`); + } + + const queryParams = { + populate: { + event: { + populate: { + choral: true, + }, + }, + author: { + populate: { + avatar: true, + }, + }, + }, + sort: { createdAt: "desc" }, + pagination: { + start, + limit, + }, + }; + + // 1️⃣ Récupérer les groupes de l'utilisateur + const groups = await strapi.db + .query("api::group-membership.group-membership") + .findMany({ + where: { user: { id: parseInt(userId) } }, + populate: ["group"], + }); + const groupIds = groups.map((g) => g.group.id); + + // 2️⃣ Récupérer les amis (contacts acceptés) et les follows + const friendsContacts = await strapi.db + .query("api::contact.contact") + .findMany({ + where: { + $or: [ + { owner: { id: parseInt(userId) } }, + { user: { id: parseInt(userId) } }, + ], + state: "accepted", + }, + populate: ["owner", "user"], + }); + const friendIds = friendsContacts.map((c) => + c.owner.id !== parseInt(userId) ? c.owner.id : c.user.id + ); + + // Récupérer les contacts suivis (follow) + const followContacts = await strapi.db + .query("api::contact.contact") + .findMany({ + where: { + owner: { id: parseInt(userId) }, + state: "follow", + }, + populate: ["user"], + }); + const followIds = followContacts.map((c) => c.user.id); + + // 3️⃣ Récupérer les groupes où mes amis sont membres (en excluant mes propres groupes) + const friendsGroupMemberships = await strapi.db + .query("api::group-membership.group-membership") + .findMany({ + where: { user: { id: friendIds } }, + populate: ["group"], + }); + const friendsGroupIds = friendsGroupMemberships + .map((membership) => membership.group.id) + .filter((groupId) => !groupIds.includes(groupId)); // Exclure mes propres groupes + + // 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" }, + ], + }, + }); + + // 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" }, + ], + }, + ...queryParams, + }); + + // 5️⃣ Récupérer tous les groupes mentionnés dans le feed pour les populer + const allGroupIds = [...new Set([...groupIds, ...friendsGroupIds])]; + const allGroups = await strapi.db.query("api::group.group").findMany({ + where: { id: allGroupIds }, + }); + + // Créer un map pour un accès rapide aux groupes par ID + const groupsMap = new Map(allGroups.map((group) => [group.id, group])); + + // 6️⃣ Récupérer les participants (registered) pour chaque événement du feed + const eventIds = feed.filter((er) => er.event?.id).map((er) => er.event.id); + + const registeredRelationships = await strapi.db + .query("api::event-relationship.event-relationship") + .findMany({ + where: { + event: { id: eventIds }, + relation: { $in: ["registered", "interested", "pending"] }, + contextType: "user", + }, + populate: ["event"], + }); + + // Extraire les userIds et récupérer les Users complètement populés + const userIds = [ + ...new Set(registeredRelationships.map((er) => er.contextId)), + ]; + const users = await strapi.db + .query("plugin::users-permissions.user") + .findMany({ + where: { id: userIds }, + populate: { + avatar: true, + }, + }); + + // Créer une map des users par ID pour accès rapide + const usersMap = new Map(users.map((user) => [user.id, user])); + + // Grouper les participants par eventId + const participantsByEventId = new Map(); + registeredRelationships.forEach((er) => { + const eventId = er.event?.id; + if (eventId) { + if (!participantsByEventId.has(eventId)) { + participantsByEventId.set(eventId, []); + } + const user = usersMap.get(er.contextId); + if (user) { + participantsByEventId.get(eventId)!.push({ + relation: er.relation, + createdAt: er.createdAt, + user: user, + }); + } + } + }); + + // 7️⃣ Enrichir le feed avec les propriétés friend, member, contactFollow, group et registered participants + const enrichedFeed = feed.map((eventRelationship) => { + const authorId = eventRelationship.author?.id; + const contextType = eventRelationship.contextType; + const contextId = eventRelationship.contextId; + const eventId = eventRelationship.event?.id; + + // Vérifier si l'auteur est un ami + const isFriend = authorId ? friendIds.includes(authorId) : false; + + // Vérifier si l'auteur est un contact suivi + const isContactFollow = authorId ? followIds.includes(authorId) : false; + + // Vérifier si je suis membre du groupe (seulement pour les events de groupe) + const isMember = + contextType === "group" && contextId + ? groupIds.includes(contextId) + : false; + + // Ajouter l'objet group si contextType est "group" + const group = + contextType === "group" && contextId ? groupsMap.get(contextId) : null; + + // Récupérer les participants enregistrés pour cet événement + const registered = eventId + ? participantsByEventId.get(eventId) || [] + : []; + + return { + ...eventRelationship, + friend: isFriend, + contactFollow: isContactFollow, + member: isMember, + ...(group && { group }), // Ajouter group seulement s'il existe + registered, // Ajouter les participants enregistrés + }; + }); + + // Trier par createdAt (le plus récent en premier) + const sortedFeed = enrichedFeed.sort((a, b) => { + const dateA = a.event?.createdAt + ? new Date(a.event.createdAt).getTime() + : 0; + const dateB = b.event?.createdAt + ? new Date(b.event.createdAt).getTime() + : 0; + return dateB - dateA; // Ordre décroissant (plus récent en premier) + }); + + // Calculer les métadonnées de pagination comme Strapi + const pageSize = limit; + const page = Math.floor(start / limit) + 1; + const pageCount = Math.ceil(totalCount / limit); + + // Retourner avec les métadonnées de pagination + ctx.send({ + data: sortedFeed, + meta: { + pagination: { + start, + limit: pageSize, + total: totalCount, + page, + pageSize, + pageCount, + }, + }, + }); + }; diff --git a/src/api/event/controllers/unapplyEvent.ts b/src/api/event/controllers/unapplyEvent.ts new file mode 100644 index 0000000..eee68e9 --- /dev/null +++ b/src/api/event/controllers/unapplyEvent.ts @@ -0,0 +1,65 @@ +import type { Core } from "@strapi/strapi"; +import type { Context } from "koa"; + +/** + * Controller pour gérer la désinscription d'un utilisateur d'un événement + * POST /events/:eventId/unapply + */ +export default ({ strapi }: { strapi: Core.Strapi }) => + async function unapplyEvent(ctx: Context) { + const userId = ctx.state.user?.id; + const eventId = ctx.params.eventId; + + // Validation des paramètres + if (!userId) { + return ctx.badRequest("User ID is required"); + } + + if (!eventId || isNaN(parseInt(eventId))) { + return ctx.badRequest("Event ID is required and must be a valid number"); + } + + try { + // Vérifier que l'événement existe + const event = await strapi.db.query("api::event.event").findOne({ + where: { id: parseInt(eventId) }, + }); + + if (!event) { + return ctx.notFound("Event not found"); + } + + // Vérifier que l'utilisateur est inscrit + const existingRelationship = await strapi.db + .query("api::event-relationship.event-relationship") + .findOne({ + where: { + event: { id: parseInt(eventId) }, + contextType: "user", + contextId: parseInt(userId), + relation: { $in: ["registered", "interested"] }, + }, + }); + + if (!existingRelationship) { + return ctx.badRequest("User is not registered for this event"); + } + + // Supprimer la relation d'inscription + const deletedRelationship = await strapi.db + .query("api::event-relationship.event-relationship") + .delete({ + where: { id: existingRelationship.id }, + }); + + ctx.send({ + data: deletedRelationship, + message: "Successfully unregistered from the event", + }); + } catch (error) { + strapi.log.error("Error in unapplyEvent controller:", error); + ctx.internalServerError( + `Failed to unregister from event: ${error.message}` + ); + } + }; diff --git a/src/api/event/routes/custom.ts b/src/api/event/routes/custom.ts new file mode 100644 index 0000000..e8b6389 --- /dev/null +++ b/src/api/event/routes/custom.ts @@ -0,0 +1,23 @@ +/** + * Custom event routes + */ + +export default { + routes: [ + { + method: "GET", + path: "/events/feed", + handler: "event.feed", + }, + { + method: "POST", + path: "/events/:eventId/apply", + handler: "event.applyEvent", + }, + { + method: "POST", + path: "/events/:eventId/unapply", + handler: "event.unapplyEvent", + }, + ], +}; diff --git a/src/api/post/controllers/post.ts b/src/api/post/controllers/post.ts index 19f6030..2990bfb 100644 --- a/src/api/post/controllers/post.ts +++ b/src/api/post/controllers/post.ts @@ -148,7 +148,7 @@ export default factories.createCoreController( }); const followIds = followContacts.map((c) => c.user.id); - // Récupérer les contacts suivis (follow) + // Récupérer les contacts bloqués (blocked) const blockedContacts = await strapi.db .query("api::contact.contact") .findMany({ 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 f26df26..ac4b000 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-14T20:21:29.388Z" + "x-generation-date": "2025-10-20T21:52:11.110Z" }, "x-strapi-config": { "plugins": [ @@ -8134,6 +8134,512 @@ "operationId": "delete/event-others/{id}" } }, + "/event-relationships": { + "get": { + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventRelationshipListResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "tags": [ + "Event-relationship" + ], + "parameters": [ + { + "name": "sort", + "in": "query", + "description": "Sort by attributes ascending (asc) or descending (desc)", + "deprecated": false, + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pagination[withCount]", + "in": "query", + "description": "Return page/pageSize (default: true)", + "deprecated": false, + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "pagination[page]", + "in": "query", + "description": "Page number (default: 0)", + "deprecated": false, + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "pagination[pageSize]", + "in": "query", + "description": "Page size (default: 25)", + "deprecated": false, + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "pagination[start]", + "in": "query", + "description": "Offset value (default: 0)", + "deprecated": false, + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "pagination[limit]", + "in": "query", + "description": "Number of entities to return (default: 25)", + "deprecated": false, + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "fields", + "in": "query", + "description": "Fields to return (ex: title,author)", + "deprecated": false, + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "populate", + "in": "query", + "description": "Relations to return", + "deprecated": false, + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filters", + "in": "query", + "description": "Filters to apply", + "deprecated": false, + "required": false, + "schema": { + "type": "object", + "additionalProperties": true + }, + "style": "deepObject" + }, + { + "name": "locale", + "in": "query", + "description": "Locale to apply", + "deprecated": false, + "required": false, + "schema": { + "type": "string" + } + } + ], + "operationId": "get/event-relationships" + }, + "post": { + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventRelationshipResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "tags": [ + "Event-relationship" + ], + "parameters": [], + "operationId": "post/event-relationships", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventRelationshipRequest" + } + } + } + } + } + }, + "/event-relationships/{id}": { + "get": { + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventRelationshipResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "tags": [ + "Event-relationship" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "description": "", + "deprecated": false, + "required": true, + "schema": { + "type": "number" + } + } + ], + "operationId": "get/event-relationships/{id}" + }, + "put": { + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventRelationshipResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "tags": [ + "Event-relationship" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "description": "", + "deprecated": false, + "required": true, + "schema": { + "type": "number" + } + } + ], + "operationId": "put/event-relationships/{id}", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventRelationshipRequest" + } + } + } + } + }, + "delete": { + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int64" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "tags": [ + "Event-relationship" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "description": "", + "deprecated": false, + "required": true, + "schema": { + "type": "number" + } + } + ], + "operationId": "delete/event-relationships/{id}" + } + }, "/groups": { "get": { "responses": { @@ -15343,6 +15849,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -20905,6 +21445,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -24796,6 +25370,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -28246,6 +28854,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -32144,6 +32786,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -36293,6 +36969,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -38735,6 +39445,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -42623,6 +43367,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -46413,6 +47191,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -50190,6 +51002,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -54003,6 +54849,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -57816,6 +58696,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -61590,6 +62504,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -65545,6 +66493,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -67855,6 +68837,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "locale": { "type": "string" }, @@ -71102,6 +72118,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -71532,6 +72582,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -71624,14 +72708,14 @@ "enum": [ "concert", "festival", - "salon", + "trade show", "symposium", - "concours", + "competition", "masterclass", - "atelier vocal", - "conférence", - "répétition", - "sorties" + "vocal_workshop", + "conference", + "rehearsal", + "outings" ] }, "locale": { @@ -71718,14 +72802,14 @@ "enum": [ "concert", "festival", - "salon", + "trade show", "symposium", - "concours", + "competition", "masterclass", - "atelier vocal", - "conférence", - "répétition", - "sorties" + "vocal_workshop", + "conference", + "rehearsal", + "outings" ] }, "createdAt": { @@ -72047,14 +73131,14 @@ "enum": [ "concert", "festival", - "salon", + "trade show", "symposium", - "concours", + "competition", "masterclass", - "atelier vocal", - "conférence", - "répétition", - "sorties" + "vocal_workshop", + "conference", + "rehearsal", + "outings" ] }, "createdAt": { @@ -72124,6 +73208,3939 @@ } } }, + "EventRelationshipRequest": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "properties": { + "author": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "example": "string or id" + }, + "contextType": { + "type": "string", + "enum": [ + "user", + "group", + "choral", + "system" + ] + }, + "contextId": { + "type": "integer" + }, + "relation": { + "type": "string", + "enum": [ + "owner", + "interested", + "registered" + ] + }, + "metas": {}, + "event": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "example": "string or id" + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "example": "string or id" + } + } + } + } + } + }, + "EventRelationshipListResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EventRelationship" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "page": { + "type": "integer" + }, + "pageSize": { + "type": "integer", + "minimum": 25 + }, + "pageCount": { + "type": "integer", + "maximum": 1 + }, + "total": { + "type": "integer" + } + } + } + } + } + } + }, + "EventRelationship": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "author": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "username": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "provider": { + "type": "string" + }, + "resetPasswordToken": { + "type": "string" + }, + "confirmationToken": { + "type": "string" + }, + "confirmed": { + "type": "boolean" + }, + "blocked": { + "type": "boolean" + }, + "role": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "type": { + "type": "string" + }, + "permissions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "action": { + "type": "string" + }, + "role": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "firstname": { + "type": "string" + }, + "lastname": { + "type": "string" + }, + "username": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "resetPasswordToken": { + "type": "string" + }, + "registrationToken": { + "type": "string" + }, + "isActive": { + "type": "boolean" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "code": { + "type": "string" + }, + "description": { + "type": "string" + }, + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "permissions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "action": { + "type": "string" + }, + "actionParameters": {}, + "subject": { + "type": "string" + }, + "properties": {}, + "conditions": {}, + "role": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "blocked": { + "type": "boolean" + }, + "preferedLanguage": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + }, + "avatar": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "alternativeText": { + "type": "string" + }, + "caption": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "formats": {}, + "hash": { + "type": "string" + }, + "ext": { + "type": "string" + }, + "mime": { + "type": "string" + }, + "size": { + "type": "number", + "format": "float" + }, + "url": { + "type": "string" + }, + "previewUrl": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "provider_metadata": {}, + "related": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "folder": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "pathId": { + "type": "integer" + }, + "parent": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "children": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "alternativeText": { + "type": "string" + }, + "caption": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "formats": {}, + "hash": { + "type": "string" + }, + "ext": { + "type": "string" + }, + "mime": { + "type": "string" + }, + "size": { + "type": "number", + "format": "float" + }, + "url": { + "type": "string" + }, + "previewUrl": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "provider_metadata": {}, + "related": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "folder": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "folderPath": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "path": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + }, + "folderPath": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + }, + "nbFollowers": { + "type": "integer" + }, + "nbFollowing": { + "type": "integer" + }, + "nbPosts": { + "type": "integer" + }, + "nbSaved": { + "type": "integer" + }, + "choralOwner": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "cover": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "alternativeText": { + "type": "string" + }, + "caption": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "formats": {}, + "hash": { + "type": "string" + }, + "ext": { + "type": "string" + }, + "mime": { + "type": "string" + }, + "size": { + "type": "number", + "format": "float" + }, + "url": { + "type": "string" + }, + "previewUrl": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "provider_metadata": {}, + "related": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "folder": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "folderPath": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + }, + "country": { + "type": "string" + }, + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "postal": { + "type": "integer" + }, + "owner": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "admins": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "boards": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "image": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "alternativeText": { + "type": "string" + }, + "caption": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "formats": {}, + "hash": { + "type": "string" + }, + "ext": { + "type": "string" + }, + "mime": { + "type": "string" + }, + "size": { + "type": "number", + "format": "float" + }, + "url": { + "type": "string" + }, + "previewUrl": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "provider_metadata": {}, + "related": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "folder": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "folderPath": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + }, + "choral": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "unsplashImage": { + "type": "string" + }, + "board_lists": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "board": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "cards": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "boardList": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "image": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "alternativeText": { + "type": "string" + }, + "caption": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "formats": {}, + "hash": { + "type": "string" + }, + "ext": { + "type": "string" + }, + "mime": { + "type": "string" + }, + "size": { + "type": "number", + "format": "float" + }, + "url": { + "type": "string" + }, + "previewUrl": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "provider_metadata": {}, + "related": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "folder": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "folderPath": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "link", + "youtube", + "image", + "video", + "audio", + "pdf" + ] + }, + "url": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "calendar": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "start": { + "type": "string", + "format": "date-time" + }, + "end": { + "type": "string", + "format": "date-time" + }, + "color": { + "type": "string" + }, + "choral": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "comment": { + "type": "string" + }, + "location": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "permissions_templates": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionsComponent" + } + }, + "choral": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "email": { + "type": "string", + "format": "email" + }, + "phoneNumber": { + "type": "string" + }, + "website": { + "type": "string" + }, + "memberships": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "user": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "choral": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "role": { + "type": "string", + "enum": [ + "member", + "admin", + "owner" + ] + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionsComponent" + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "announcements": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "choral": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "author": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "TEXT", + "AUDIO", + "VIDEO" + ] + }, + "choral": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "messages": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "content": { + "type": "string" + }, + "fileUrl": { + "type": "string" + }, + "author": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "choral": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + }, + "choralAdmin": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "chorals": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "board": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "background": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "alternativeText": { + "type": "string" + }, + "caption": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "formats": {}, + "hash": { + "type": "string" + }, + "ext": { + "type": "string" + }, + "mime": { + "type": "string" + }, + "size": { + "type": "number", + "format": "float" + }, + "url": { + "type": "string" + }, + "previewUrl": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "provider_metadata": {}, + "related": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "folder": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "folderPath": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + }, + "name": { + "type": "string" + }, + "surname": { + "type": "string" + }, + "address": { + "type": "string" + }, + "gender": { + "type": "string", + "enum": [ + "men", + "women", + "none" + ] + }, + "job": { + "type": "string", + "enum": [ + "choir_director", + "choir_addict", + "choir_master", + "choir_singer", + "none" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "mezzo-soprano", + "alto", + "tenor", + "baryton", + "basse" + ] + }, + "dob": { + "type": "string", + "format": "date" + }, + "choral_permissions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "choralName": { + "type": "string" + }, + "choralId": { + "type": "integer" + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionsComponent" + } + }, + "user": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "choral_memberships": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "announcements": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "friends": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "group_memberships": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "user": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "group": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "banner": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "alternativeText": { + "type": "string" + }, + "caption": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "formats": {}, + "hash": { + "type": "string" + }, + "ext": { + "type": "string" + }, + "mime": { + "type": "string" + }, + "size": { + "type": "number", + "format": "float" + }, + "url": { + "type": "string" + }, + "previewUrl": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "provider_metadata": {}, + "related": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "folder": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "folderPath": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SocialTagsComponent" + } + }, + "category": { + "type": "string", + "enum": [ + "mixedChoir", + "womensChoir", + "mensChoir", + "childrensChoir" + ] + }, + "access": { + "type": "string", + "enum": [ + "private", + "public", + "closed" + ] + }, + "memberships": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "lastActivity": { + "type": "string", + "format": "date-time" + }, + "activityType": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "open", + "recruiting", + "audition" + ] + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + }, + "role": { + "type": "string", + "enum": [ + "member", + "admin", + "owner", + "follow", + "pending" + ] + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "saved_posts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "content": { + "type": "string" + }, + "media": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "alternativeText": { + "type": "string" + }, + "caption": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "formats": {}, + "hash": { + "type": "string" + }, + "ext": { + "type": "string" + }, + "mime": { + "type": "string" + }, + "size": { + "type": "number", + "format": "float" + }, + "url": { + "type": "string" + }, + "previewUrl": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "provider_metadata": {}, + "related": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "folder": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "folderPath": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "likes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "category": { + "type": "string", + "enum": [ + "photo", + "video", + "event" + ] + }, + "comments": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "content": { + "type": "string" + }, + "likes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "owner": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "replies": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "shares": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "source": { + "type": "string" + }, + "post_ownerships": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "author": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "contextType": { + "type": "string", + "enum": [ + "user", + "group", + "system" + ] + }, + "contextId": { + "type": "integer" + }, + "relation": { + "type": "string", + "enum": [ + "owner", + "saved", + "hidden" + ] + }, + "metas": {}, + "post": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "taggedContacts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "contacts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "owner": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "user": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "state": { + "type": "string", + "enum": [ + "pending", + "accepted", + "rejected", + "blocked", + "follow" + ] + }, + "message": { + "type": "string" + }, + "requestedAt": { + "type": "string", + "format": "date-time" + }, + "respondedAt": { + "type": "string", + "format": "date-time" + }, + "metas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "contact": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "owner": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "favorite": { + "type": "boolean" + }, + "note": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + }, + "related_contacts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "contact_metas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "phone": { + "type": "string" + }, + "post_ownerships": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + }, + "contextType": { + "type": "string", + "enum": [ + "user", + "group", + "choral", + "system" + ] + }, + "contextId": { + "type": "integer" + }, + "relation": { + "type": "string", + "enum": [ + "owner", + "interested", + "registered" + ] + }, + "metas": {}, + "event": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + }, + "author": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "contextType": { + "type": "string", + "enum": [ + "user", + "group", + "choral", + "system" + ] + }, + "contextId": { + "type": "integer" + }, + "relation": { + "type": "string", + "enum": [ + "owner", + "interested", + "registered" + ] + }, + "metas": {}, + "event": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "publishedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "updatedBy": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + }, + "locale": { + "type": "string" + }, + "localizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "documentId": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "EventRelationshipResponse": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/EventRelationship" + }, + "meta": { + "type": "object" + } + } + }, "GroupRequest": { "type": "object", "required": [ @@ -73999,6 +79016,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -77768,6 +82819,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -81561,6 +86646,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -85460,6 +90579,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -90852,6 +96005,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -93210,6 +98397,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -97048,6 +102269,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" @@ -100846,6 +106101,40 @@ "location": { "type": "string" }, + "type": { + "type": "string", + "enum": [ + "concert", + "festival", + "trade show", + "symposium", + "competition", + "masterclass", + "vocal_workshop", + "conference", + "rehearsal", + "outings" + ] + }, + "voice": { + "type": "string", + "enum": [ + "soprano", + "alto", + "tenor", + "bass", + "mixed" + ] + }, + "description": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "isPublic": { + "type": "boolean" + }, "createdAt": { "type": "string", "format": "date-time" diff --git a/types/generated/contentTypes.d.ts b/types/generated/contentTypes.d.ts index 1f20b1f..c8937ed 100644 --- a/types/generated/contentTypes.d.ts +++ b/types/generated/contentTypes.d.ts @@ -947,14 +947,14 @@ export interface ApiEventOtherEventOther extends Struct.CollectionTypeSchema { [ 'concert', 'festival', - 'salon', + 'trade show', 'symposium', - 'concours', + 'competition', 'masterclass', - 'atelier vocal', - 'conf\u00E9rence', - 'r\u00E9p\u00E9tition', - 'sorties', + 'vocal_workshop', + 'conference', + 'rehearsal', + 'outings', ] >; updatedAt: Schema.Attribute.DateTime; @@ -963,6 +963,48 @@ export interface ApiEventOtherEventOther extends Struct.CollectionTypeSchema { }; } +export interface ApiEventRelationshipEventRelationship + extends Struct.CollectionTypeSchema { + collectionName: 'event_relationships'; + info: { + description: ''; + displayName: 'EventRelationship'; + pluralName: 'event-relationships'; + singularName: 'event-relationship'; + }; + options: { + draftAndPublish: false; + }; + attributes: { + author: Schema.Attribute.Relation< + 'oneToOne', + 'plugin::users-permissions.user' + >; + contextId: Schema.Attribute.Integer; + contextType: Schema.Attribute.Enumeration< + ['user', 'group', 'choral', 'system'] + >; + createdAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + event: Schema.Attribute.Relation<'oneToOne', 'api::event.event'>; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation< + 'oneToMany', + 'api::event-relationship.event-relationship' + > & + Schema.Attribute.Private; + metas: Schema.Attribute.JSON; + publishedAt: Schema.Attribute.DateTime; + relation: Schema.Attribute.Enumeration< + ['owner', 'interested', 'registered'] + >; + updatedAt: Schema.Attribute.DateTime; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + }; +} + export interface ApiEventEvent extends Struct.CollectionTypeSchema { collectionName: 'events'; info: { @@ -981,17 +1023,37 @@ export interface ApiEventEvent extends Struct.CollectionTypeSchema { createdAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; + description: Schema.Attribute.Text; end: Schema.Attribute.DateTime; + isPublic: Schema.Attribute.Boolean; locale: Schema.Attribute.String & Schema.Attribute.Private; localizations: Schema.Attribute.Relation<'oneToMany', 'api::event.event'> & Schema.Attribute.Private; location: Schema.Attribute.String; publishedAt: Schema.Attribute.DateTime; + size: Schema.Attribute.Integer; start: Schema.Attribute.DateTime; title: Schema.Attribute.String; + type: Schema.Attribute.Enumeration< + [ + 'concert', + 'festival', + 'trade show', + 'symposium', + 'competition', + 'masterclass', + 'vocal_workshop', + 'conference', + 'rehearsal', + 'outings', + ] + >; updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; + voice: Schema.Attribute.Enumeration< + ['soprano', 'alto', 'tenor', 'bass', 'mixed'] + >; }; } @@ -1886,6 +1948,7 @@ declare module '@strapi/strapi' { 'api::conversation.conversation': ApiConversationConversation; 'api::direct-message.direct-message': ApiDirectMessageDirectMessage; 'api::event-other.event-other': ApiEventOtherEventOther; + 'api::event-relationship.event-relationship': ApiEventRelationshipEventRelationship; 'api::event.event': ApiEventEvent; 'api::group-membership.group-membership': ApiGroupMembershipGroupMembership; 'api::group.group': ApiGroupGroup;