Files
LoreMind/web/src/app/services/campaign-import.model.ts
IETM_FIXE\ietm6 8cc90bd24d
All checks were successful
Build & Push Images / build (brain) (push) Successful in 1m38s
Build & Push Images / build (core) (push) Successful in 1m59s
Build & Push Images / build-switcher (push) Successful in 17s
Build & Push Images / build (web) (push) Successful in 1m54s
Amélioration du feedback pendant les imports sur les PDF
passage en 0.12.4-beta
2026-06-12 14:35:10 +02:00

86 lines
2.3 KiB
TypeScript

/**
* Types de l'import de PDF de campagne (arbre arc → chapitre → scène).
* Jumeaux des records Java (CampaignImportProposal / CampaignImportProgress).
*/
export interface RoomProposal {
name: string;
description: string;
enemies: string;
loot: string;
}
export interface SceneProposal {
name: string;
description: string;
/** Texte d'encadré « à lire aux joueurs ». */
playerNarration: string;
/** Secrets / développement MJ. */
gmNotes: string;
/** Non vide ⇒ la scène est un lieu explorable (donjon). */
rooms: RoomProposal[];
/** ID si la scène existe déjà (revue pré-chargée) ; absent = à créer. */
existingId?: string | null;
}
export interface ChapterProposal {
name: string;
description: string;
scenes: SceneProposal[];
existingId?: string | null;
}
export type ArcKind = 'LINEAR' | 'HUB';
export interface ArcProposal {
name: string;
description: string;
type: ArcKind;
chapters: ChapterProposal[];
existingId?: string | null;
}
/** PNJ/créature notable détecté dans le PDF (PNJ nommés, boss). */
export interface NpcProposal {
name: string;
description: string;
}
export interface CampaignImportProposal {
arcs: ArcProposal[];
/** PNJ cochés à la revue (créés comme Npc de la campagne à l'apply). */
npcs?: NpcProposal[];
}
/** Récapitulatif renvoyé après création effective des entités. */
export interface CampaignImportApplyResult {
arcsCreated: number;
chaptersCreated: number;
scenesCreated: number;
npcsCreated: number;
}
/**
* Évènements du flux SSE d'import streamé.
* - progress : avancement (total=0 ⇒ extraction en cours).
* - status : message d'attente lisible (fournisseur saturé → retry, morceau
* re-découpé, morceau ignoré…) — feedback live pour l'utilisateur.
* - done : arbre proposé (à réviser).
* - error : message d'erreur côté serveur.
*/
export type CampaignImportStreamEvent =
| { type: 'status'; message: string }
| {
type: 'progress';
current: number;
total: number;
pageCount: number;
ocrPageCount: number;
arcCount: number;
chapterCount: number;
sceneCount: number;
npcCount: number;
}
| { type: 'done'; arcs: ArcProposal[]; npcs: NpcProposal[] }
| { type: 'error'; message: string };