import { BaseEntity } from "./BaseEntity.js"; import type { Comment } from "./Comment.js"; import type { AddNewsData, UpdateNewsData } from "./EndpointApi.types.js"; import type { NewsItemNormalized } from "./serverDataType/News.js"; export declare class News extends BaseEntity { static entityType: string; static entityTag: string; static SCHEMA_CONSTANTS: string[]; static ADD_BLOCKS: Map<"ADD_NEWS", "addNews">; static UPDATE_BLOCKS: Map<"ADD_NEWS", "updateNews">; defaultFields: Record; removeFields: string[]; transforms: { scope: (val: any) => any; mentions: (val: any) => any[]; mediaImg: (val: any) => { countImages: number; images: string[]; }; mediaFile: (val: any) => { countFiles: number; files: any[]; }; }; /** * Transforme les champs imbriqués (author, target, sharedBy, etc.) en instances d'entités. * @param data - Les données brutes du serveur. * @returns Les données transformées. * @protected */ protected _transformServerData(data: NewsItemNormalized): NewsItemNormalized; /** * Récupérer des actualités par IDs : Récupère des actualités à partir d'une liste d'identifiants. * Constant : GET_NEWS_BY_ID */ get(): Promise>; _add: (payload: Record) => Promise; _update: (payload: Record) => Promise; addNews(data?: Partial): Promise; updateNews(data?: Partial): Promise; addMention({ slug, id }: { slug?: string; id?: string; }): Promise; /** * Ajouter une image à une actualité : Ajoute une images à une actualité. * Constant : ADD_IMAGE_NEWS */ addImage(image: File | Blob | Buffer | import("stream").Readable): Promise<{ id: string; [key: string]: any; }>; /** * Ajouter un fichier à une actualité : Ajoute un fichier à une actualité. * Constant : ADD_FILE_NEWS */ addFile(file: File | Blob | Buffer | import("stream").Readable): Promise; /** * Supprimer une actualité : Supprime une actualité existante. * Constant : DELETE_NEWS */ delete(): Promise; /** * Créer une instance de commentaire pour cette news. * @param commentData - Données du commentaire. * @returns Instance de Comment. */ comment(commentData?: Record): Promise; /** * Récupérer les commentaires : Récupère la liste de commentaires selon plusieurs critères. * Constant : GET_COMMENTS * @returns - Les données de réponse. * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse. * @throws {Error} - En cas d'erreur inattendue. */ getComments(): Promise; /** * Ajoute un vote sur cette news * * @param status - Statut du vote (ex: 'like', 'dislike', 'love', etc.) * @returns Promise contenant la réponse de l'API après l'ajout du vote * @throws {ApiError} Si la news n'a pas d'ID (non enregistrée) */ addVote(status: string): Promise; /** * Récupère la liste des votes (like, love, etc.) sur cette news. * * Wrap de `SHOW_VOTE` avec auto-injection du `type` (`"news"`) et de * `this.id` dans `pathParams`. Le retour contient `vote` (votes individuels * indexés par userId) et `voteCount` (compteurs par statut). * * @returns Réponse API : `{ _id, vote, voteCount }` ou variante d'erreur. * @throws {ApiError} 404 si la news n'a pas d'id (non enregistrée). * * @example * const votes = await news.getVotes(); * votes.voteCount?.like; // nombre de likes * votes.vote?.[userId]; // vote détaillé d'un user */ getVotes(): Promise; /** * Signale un abus sur cette news * * @param params - Paramètres du signalement * @param params.reason - Raison du signalement * @param params.comment - Commentaire expliquant le signalement (optionnel) * @returns Promise contenant la réponse de l'API après le signalement * @throws {ApiError} Si la news n'a pas d'ID (non enregistrée) */ addReportAbuse({ reason, comment }: { reason: string; comment?: string; }): Promise; /** * Partage cette news vers une entité (utilisateur, projet ou organisation) * * @param params - Paramètres de partage * @param params.childId - ID de l'entité cible (par défaut: utilisateur connecté) * @param params.childType - Type de l'entité cible (par défaut: "citoyens") * @param params.comment - Commentaire optionnel accompagnant le partage * @returns Promise contenant la réponse de l'API après le partage * @throws {ApiError} Si la news n'a pas d'ID (404) * @throws {ApiError} Si l'utilisateur n'est pas connecté (400) * @throws {ApiError} Si le parent n'est pas défini (400) * @throws {ApiError} Si on tente de partager sa propre news à soi-même (400) * @throws {ApiError} Si le type cible n'est pas valide (400) */ shareNews({ childId, childType, comment }?: { childId?: string; childType?: string; comment?: string; }): Promise; /** * Vérifie si l'utilisateur connecté est l'auteur de cette actualité. * * Cette méthode compare l'ID de l'utilisateur connecté avec l'ID de l'auteur * de l'actualité. L'auteur peut être soit un objet simple NewsAuthor, soit * une instance d'entité User ou Organization. * @param options - Options de vérification. * @param options.silent - Si `true`, retourne `false` au lieu de lever une exception. Par défaut `true`. * @returns `true` si l'utilisateur connecté est l'auteur, `false` sinon * @throws {ApiError} Si l'utilisateur n'est pas connecté (401) * @throws {ApiError} Si l'actualité n'a pas d'ID - non enregistrée (404) * @throws {ApiError} Si les données serveur ne sont pas disponibles (404) * * @example * ```typescript * const news = await me.news({ id: "123" }); * await news.get(); * * if (news.isAuthor()) { * console.log("Vous êtes l'auteur de cette actualité"); * await news.delete(); // Vous pouvez la supprimer * } * ``` */ isAuthor(options?: { silent?: boolean; }): boolean; form(): Promise; }