feat(app) : phase 2 — endpoint /api/alerts, inbox, flows Node-RED
- POST /api/alerts : token Bearer (comparaison temps constant, 503 si non configuré), schéma d'alerte PRD §4.4 validé Zod, exempté du SSO dans les hooks - Persistance alertes.yaml + commits git (réception, « traité ») - Inbox /alertes : filtres par profil impacté et statut, actions « Marquer traité » et « Créer/MAJ fiche » avec pré-remplissage du formulaire registre depuis l'alerte (aucun champ licence/capacité inventé) - nodered-flows/ : 4 flows importables (rss-ingest, license-watch, classifier avec le prompt figé du PRD §6 embarqué tel quel, notify) — nœuds core uniquement, configuration par variables d'env, README de câblage - Vérifié : check/lint/test (27) /build verts, autofixer propre, JSON des flows et fonctions embarquées validés, test fumée HTTP (201/400/401 sur l'endpoint, inbox, traité + commit, pré-remplissage MAJ fiche)
This commit is contained in:
@@ -1,14 +1,32 @@
|
||||
import { error, fail, redirect } from '@sveltejs/kit';
|
||||
import { modeleSchema } from '$lib/schemas';
|
||||
import { erreursZod, modeleDepuisFormulaire } from '$lib/server/formulaires';
|
||||
import { lireAlertes } from '$lib/server/alertes';
|
||||
import { ecrireRegistre, lireRegistre } from '$lib/server/stockage';
|
||||
import type { Actions, PageServerLoad } from './$types';
|
||||
|
||||
export const load: PageServerLoad = async ({ params }) => {
|
||||
export const load: PageServerLoad = async ({ params, url }) => {
|
||||
const registre = await lireRegistre();
|
||||
const modele = registre.find((m) => m.id === params.id);
|
||||
if (!modele) error(404, 'Modèle introuvable');
|
||||
return { modele };
|
||||
|
||||
// Pré-remplissage depuis une alerte (action « Mettre à jour la fiche » de l'inbox) :
|
||||
// fusionne les sources, préfixe les notes du résumé — sans toucher aux champs vérifiés.
|
||||
const alerteId = url.searchParams.get('depuis_alerte');
|
||||
let brut: Record<string, unknown> | null = null;
|
||||
if (alerteId) {
|
||||
const alertes = await lireAlertes();
|
||||
const alerte = alertes.find((a) => a.id === alerteId);
|
||||
if (alerte) {
|
||||
brut = {
|
||||
...modele,
|
||||
sources: [...new Set([...modele.sources, ...alerte.sources])],
|
||||
notes: `${alerte.resume}\n\n${modele.notes ?? ''}`.trim()
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return { modele, brut };
|
||||
};
|
||||
|
||||
export const actions: Actions = {
|
||||
|
||||
Reference in New Issue
Block a user