import { BaseEntity } from "./BaseEntity.js"; import type { Action } from "./Action.js"; import type { PaginatorPage, PaginatorState } from "./BaseEntity.js"; import type { AddProjectData, GetContributorsAdminData, GetContributorsNoAdminData } from "./EndpointApi.types.js"; import type { Organization } from "./Organization.js"; import type { User } from "./User.js"; import type { ProjectTransforms } from "../types/transforms.js"; type ProjectItemNormalized = import("./serverDataType/Project.js").ProjectItemNormalized; export declare class Project 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_PROJECT", "addProject" | "updateImageProfil">; static UPDATE_BLOCKS: Map<"UPDATE_BLOCK_DESCRIPTION" | "UPDATE_BLOCK_INFO" | "UPDATE_BLOCK_SOCIAL" | "UPDATE_BLOCK_LOCALITY" | "UPDATE_BLOCK_SLUG" | "PROFIL_IMAGE", "updateImageProfil" | "updateDescription" | "updateSocial" | "updateLocality" | "updateInfo" | "updateSlug">; defaultFields: Record; removeFields: string[]; transforms: ProjectTransforms; /** * Transforme les Answer docs imbriqués dans `data.answers` (renvoyé par /costum/navigator/gettl) * en instances d'entité Answer. Voir `Organization._transformServerData` pour le même pattern. * * @protected */ protected _transformServerData(data: ProjectItemNormalized): ProjectItemNormalized; _add: (payload: Record) => Promise; _update: (payload: Record) => Promise; /** * Ajoute un projet. * * @param data - Données du projet à ajouter. * @returns - Résultat de l'ajout du projet. * @throws {ApiError} - Si l'utilisateur n'est pas connecté ou si l'entité n'est pas enregistrée. */ addProject(data?: Partial): Promise; /** * Supprime ce projet via `DELETE_ELEMENT` (`type=projects`). * * **Garde** : auteur (`serverData.creator`) OU administrateur — direct * (`links.projects[id].isAdmin`) ou de l'organisation parente (via * `serverData.parent` × hiérarchie). cf. {@link BaseEntity#_deleteViaElement}. * * ⚠️ **Destructif** : supprime le projet et potentiellement ses rattachements * (actions/events/membres) côté serveur. À utiliser avec précaution. * * Après succès : données vidées + `_isDeleted = true`. * * @param reason - Raison transmise au backend (audit). Défaut `"delete project"`. * @throws {ApiError} 400 si le projet n'a pas d'id. * @throws {ApiError} 403 si ni auteur ni admin. */ delete(reason?: string): Promise; getOrganizations(): Promise; /** * {@inheritDoc BaseEntity#getProjects} * * Récupère les projets du projet. */ getProjects(data?: Parameters["getProjects"]>[0]): Promise>; /** * {@inheritDoc BaseEntity#getEvents} * * Récupère les événements d'un projet. */ getEvents(data?: Parameters["getEvents"]>[0]): Promise>; /** * {@inheritDoc BaseEntity#getPois} * * Récupère les points d'intérêt d'un projet. */ getPois(data?: Parameters["getPois"]>[0]): Promise>; /** * {@inheritDoc BaseEntity#getBadgesIssuer} * * Récupère les émetteurs de badges d'un projet. */ getBadgesIssuer(data?: Parameters["getBadgesIssuer"]>[0]): Promise>; /** * {@inheritDoc BaseEntity#getNews} * * Récupère les actualités d'un projet. */ getNews(data?: Parameters["getNews"]>[0]): Promise; /** * {@inheritDoc BaseEntity#getSubscribers} * * Récupère les abonnés d'un projet. */ getSubscribers(data?: Parameters["getSubscribers"]>[0]): Promise>; /** * Récupérer les contributeurs d'un projet. * Constant : GET_CONTRIBUTORS_ADMIN / GET_CONTRIBUTORS_NO_ADMIN * @param data - Paramètres (partiels) de recherche/pagination. * @param options - Options supplémentaires. * @param options.toBeValidated - Indique si les contributeurs 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 contributeurs et la liste des contributeurs. * @throws {ApiResponseError} - Si une erreur se produit lors de la récupération des contributeurs. * * @example * // Récupérer tous les contributeurs * const contributors = await project.getContributors(); * * // Récupérer les contributeurs avec validation en attente * const contributorsToBeValidated = await project.getContributors({}, { toBeValidated: true }); * * // Récupérer les contributeurs avec un rôle spécifique * const contributorsWithRole = await project.getContributors({}, { roles: ["admin"] }); * * // Récupérer les contributeurs administrateurs * const adminContributors = await project.getContributors({}, { isAdmin: true }); * * // Récupérer les contributeurs en attente d'invitation * const invitingContributors = await project.getContributors({}, { isInviting: true }); * * // Restreindre la recherche : uniquement les citoyens * const onlyCitoyens = await project.getContributors({}, { searchType: "citoyens" }); * * // Restreindre la recherche : uniquement les organisations * const onlyOrgas = await project.getContributors({}, { searchType: "organizations" }); */ getContributors(data?: Partial, options?: { toBeValidated?: boolean; isAdmin?: boolean; isAdminPending?: boolean; isInviting?: boolean; roles?: any[]; searchType?: "all" | "citoyens" | "organizations"; restoredState?: PaginatorState; }): Promise>; /** * {@inheritDoc BaseEntity#getGallery} * * Récupère la galerie d'un projet. */ getGallery(data?: Parameters["getGallery"]>[0]): Promise>; /** * {@inheritDoc BaseEntity#searchCostum} * * Cette surcharge précise que la recherche est faite dans le contexte du projet. */ searchCostum(data: Parameters["searchCostum"]>[0], options?: Parameters["searchCostum"]>[1]): Promise>; /** * {@inheritDoc BaseEntity#project} * * Crée une instance de projet et récupère son profil si nécessaire. */ project(projectData?: Parameters["project"]>[0]): Promise; /** * {@inheritDoc BaseEntity#poi} * * Crée une instance de POI et la récupère si nécessaire. */ poi(poiData?: Parameters["poi"]>[0]): Promise; /** * {@inheritDoc BaseEntity#event} * * Crée une instance d'événement et la récupère si nécessaire. */ event(eventData?: Parameters["event"]>[0]): Promise; /** * {@inheritDoc BaseEntity#badge} * * Crée une instance de badge et la récupère si nécessaire. */ badge(badgeData?: Parameters["badge"]>[0]): Promise; /** * {@inheritDoc BaseEntity#form} * * Crée une instance de Form dans le contexte de ce projet : le Form aura * `this.parent = Project`, ce qui permet à `form.getAnswers()` de déléguer * `coformAnswersSearch` avec le bon costumContext. */ form(formData?: Parameters["form"]>[0]): Promise; /** * {@inheritDoc BaseEntity#news} * * Crée une instance de news et la récupère si nécessaire. */ news(newsData?: Parameters["news"]>[0]): Promise; /** * Vérifie qu'un milestoneId existe dans `serverData.oceco.milestones[]`. * Sert à valider une référence avant d'attacher une entité (Action) à un milestone. * * @param milestoneId - L'ID du milestone à chercher. * @returns `true` si trouvé, `false` sinon (y compris si oceco/milestones absents). */ hasMilestone(milestoneId: string): boolean; /** * {@inheritDoc BaseEntity#action} * * Crée une instance d'Action liée à ce projet et la récupère si nécessaire. */ action(actionData?: Parameters["action"]>[0]): Promise; /** * ─────────────────────────────── * Lien utilisateur ↔ projet * (rejoindre, valider, quitter, devenir admin) * ─────────────────────────────── */ /** * {@inheritDoc BaseEntity#requestToJoin} * * Envoie une demande pour rejoindre le projet en tant que contributeur. * L'action est soumise à validation par un administrateur du projet. */ requestToJoin(): Promise; /** * {@inheritDoc BaseEntity#requestToJoinAdmin} * * Envoie une demande pour devenir administrateur du projet. * L'action est soumise à validation par un administrateur existant. */ requestToJoinAdmin(): Promise; /** * {@inheritDoc BaseEntity#acceptInvitation} * * Accepte une invitation à rejoindre le projet. * Cette action valide un lien en attente avec l'option `isInviting`. */ acceptInvitation(): Promise; /** * {@inheritDoc BaseEntity#requestPromoteToAdmin} * * Envoie une demande de promotion en tant qu'administrateur du projet. * L'utilisateur doit déjà être contributeur du projet. */ requestPromoteToAdmin(): Promise; /** * {@inheritDoc BaseEntity#leave} * * Quitte le projet, que ce soit en tant que contributeur ou administrateur. * Cette action supprime le lien entre l'utilisateur et le projet. */ leave(): Promise; /** * {@inheritDoc BaseEntity#follow} * * Suivre un projet. * Cette action permet à l'utilisateur de suivre le projet. */ follow(): Promise; /** * {@inheritDoc BaseEntity#unfollow} * * Se désabonne d'un projet. */ unfollow(): Promise; } export {};