import { BaseEntity, PaginatorPage, PaginatorState } from "./BaseEntity.js"; import type { AddEventData, GetAttendeesAdminData, GetAttendeesNoAdminData } from "./EndpointApi.types.js"; import type { User } from "./User.js"; import type { EventTransforms } from "../types/transforms.js"; type EventItemNormalized = import("./serverDataType/Event.js").EventItemNormalized; export declare class Event extends BaseEntity { static entityType: string; static entityTag: string; /** Bloc de création où injecter les champs costum (CostumScope). */ static COSTUM_ADD_CONSTANT: string; static SCHEMA_CONSTANTS: string[]; static ADD_BLOCKS: Map<"PROFIL_IMAGE" | "ADD_EVENT", "updateImageProfil" | "addEvent">; static UPDATE_BLOCKS: Map<"UPDATE_BLOCK_SLUG" | "PROFIL_IMAGE", "updateImageProfil" | "updateSlug">; defaultFields: Record; removeFields: string[]; transforms: EventTransforms; _add: (payload: Record) => Promise; _update: (payload: Record) => Promise; addEvent(data?: Partial): Promise; /** * Supprime cet événement via `DELETE_ELEMENT` (`type=events`). * * **Garde** : auteur de l'événement (`serverData.creator`) OU administrateur * de l'organisation/projet organisateur (via `serverData.organizer` × hiérarchie). * cf. {@link BaseEntity#_deleteViaElement}. * * Après succès : données vidées + `_isDeleted = true`. * * @param reason - Raison transmise au backend (audit). Défaut `"delete event"`. * @throws {ApiError} 400 si l'événement n'a pas d'id. * @throws {ApiError} 403 si ni auteur ni admin de l'organisateur. */ delete(reason?: string): Promise; getOrganizations(): Promise; getProjects(): Promise; getEvents(): Promise; getPois(): Promise; getBadgesIssuer(): Promise; /** * {@inheritDoc BaseEntity#getNews} * * Récupère les actualités de l'événement. */ getNews(data?: Parameters["getNews"]>[0]): Promise; /** * {@inheritDoc BaseEntity#getSubscribers} * * Récupère les abonnés de l'événement. */ getSubscribers(data?: Parameters["getSubscribers"]>[0]): Promise>; /** * Récupérer les participants d'un événement. * Constant : GET_ATTENDEES_NO_ADMIN * @param data - Paramètres (partiels) de recherche/pagination. * @param options - Options supplémentaires. * @param options.toBeValidated - Indique si les participants doivent être validés. * @param options.isAdmin - Indique si l'utilisateur est admin. * @param options.isInviting - Indique si l'utilisateur est en attente d'invitation. * @param options.roles - Liste des rôles à filtrer. * @param isNext - Indique si c'est une recherche suivante (pagination). * @returns - Un objet contenant le nombre de participants et la liste des participants. * @throws {ApiResponseError} - Si une erreur se produit lors de la récupération des participants. * * @example * // Récupérer tous les participants * const participants = await project.getAttendees(); * * // Récupérer les participants avec validation en attente * const participantsToBeValidated = await project.getAttendees({}, { toBeValidated: true }); * * // Récupérer les participants avec un rôle spécifique * const contributorsWithRole = await project.getAttendees({}, { roles: ["admin"] }); * * // Récupérer les participants administrateurs * const adminParticipants = await project.getAttendees({}, { isAdmin: true }); * * // Récupérer les participants en attente d'invitation * const invitingParticipants = await project.getAttendees({}, { isInviting: true }); * */ getAttendees(data?: Partial, options?: { toBeValidated?: boolean; isAdmin?: boolean; isAdminPending?: boolean; isInviting?: boolean; roles?: any[]; restoredState?: PaginatorState; }): Promise>; project(): Promise; poi(): Promise; form(): Promise; event(): Promise; badge(): Promise; /** * {@inheritDoc BaseEntity#news} * * Crée une instance de news et la récupère si nécessaire. */ news(newsData?: Parameters["news"]>[0]): Promise; /** * ─────────────────────────────── * Lien utilisateur ↔ event * (participation, abonnement) * ─────────────────────────────── */ /** * {@inheritDoc BaseEntity#requestToJoin} * * Rejoindre l'événement en tant que participant. */ requestToJoin(): Promise; /** * {@inheritDoc BaseEntity#acceptInvitation} * * Accepte une invitation à rejoindre l'événement. * Cette action valide un lien en attente avec l'option `isInviting`. */ acceptInvitation(): Promise; /** * {@inheritDoc BaseEntity#leave} * * Quitte l'événement, que ce soit en tant que participant ou administrateur. * Cette action supprime le lien entre l'utilisateur et l'événement. */ leave(): Promise; /** * {@inheritDoc BaseEntity#follow} * * Suivre un événement. * Cette action permet à l'utilisateur de suivre un événement. */ follow(): Promise; /** * {@inheritDoc BaseEntity#unfollow} * * Se désabonne d'un événement. */ unfollow(): Promise; } export {};