xpeditis2.0/apps/backend/src/domain/ports/out/wiki-contribution.repository.ts

57 lines
2.0 KiB
TypeScript

import { WikiContribution, WikiContributionStatus } from '../../entities/wiki-contribution.entity';
export class WikiContributionConflict extends Error {}
export interface WikiContributionWriter {
id: string;
organizationId: string;
}
export const WIKI_CONTRIBUTION_REPOSITORY = 'WikiContributionRepository';
export interface WikiContributionRepository {
/**
* Pages **publiees** pour cette langue, de la plus recente a la plus ancienne.
*
* C'est ce que lisent la recherche documentaire et la page de complements :
* une proposition en attente n'existe pour personne d'autre que le relecteur.
*/
findPublished(locale: string): Promise<WikiContribution[]>;
/**
* File de relecture, tous statuts confondus ou filtree.
*
* Reservee a l'administration : c'est le seul endroit d'ou une page en
* attente est visible.
*/
findForReview(status?: WikiContributionStatus): Promise<WikiContribution[]>;
findById(id: string): Promise<WikiContribution | null>;
/**
* Page portant deja ce titre, quel que soit son statut.
*
* Le couple (langue, sujet, titre) est l'identite editoriale d'une page :
* c'est ce qui permet de mettre a jour une proposition plutot que d'en
* empiler une seconde sur le meme sujet, y compris quand la premiere attend
* encore sa relecture.
*/
findByTitle(locale: string, topic: string, title: string): Promise<WikiContribution | null>;
/** Inserts version 0; otherwise atomically updates the exact version. Contributor writes also enforce ownership and unpublished state. */
save(
contribution: WikiContribution,
contributor?: WikiContributionWriter
): Promise<WikiContribution>;
/**
* Empreinte du jeu **publie**, qui change des qu'une page est validee,
* revisee ou retiree.
*
* L'index vectoriel des complements est garde en memoire ; cette valeur est
* ce qui dit a la recherche qu'il est perime, sans relire tout le contenu a
* chaque question.
*/
revision(locale: string): Promise<string>;
}