Schéma cible de WallContext
Statut
Document de cadrage architecture — v1.0 — créé le 2026-06-27.
Objectif
Décrire le schéma cible de conception utilisé entre le Context Engine et le
Wall Engine.
Ce schéma est une cible d'architecture.
Il ne décrit pas nécessairement l'état actuel exact du code.
TypeScript cible de référence
type WallContextType =
| "commune"
| "personal"
| "actor"
| "organization"
| "territory"
| "search";
type WallContext = {
type: WallContextType;
label: string;
communeIds: number[];
actorIds?: number[];
organizationIds?: number[];
userId?: number;
source?: "favorite_commune" | "gps" | "followed" | "search" | "manual";
summary?: {
title: string;
subtitle?: string;
imageUrl?: string;
description?: string;
};
permissions?: {
canPublish?: boolean;
canManage?: boolean;
};
actions?: Array<{
type: string;
label: string;
href?: string;
}>;
};
Principes
- le schéma doit rester compact ;
communeIds[]est toujours présent ;- une commune unique est aussi représentée par un tableau ;
- le contexte décrit la consultation, pas la gestion métier ;
- les permissions et actions sont préparées par le
Context Engine.
Champs cibles
| Champ | Rôle |
|---|---|
type | Type de contexte |
label | Libellé lisible pour l'interface |
communeIds | Base territoriale commune |
actorIds | Acteurs ciblés si applicable |
organizationIds | Organisations ciblées si applicable |
userId | Utilisateur courant si contexte personnel |
source | Origine principale du contexte |
summary | Résumé visuel ou textuel pour l'UI |
permissions | Capacités utiles à l'affichage |
actions | Actions proposées par l'interface |
Pourquoi communeIds[]
communeIds[] est la clé d'unification.
Il permet le même moteur pour :
- une commune ;
- plusieurs communes ;
Autour de moi;Toutes mes communes;- une recherche élargie par rayon.
Exemple minimal — Mur de Bessan
{
"type": "commune",
"label": "Bessan",
"communeIds": [34031],
"source": "manual",
"summary": {
"title": "Bessan",
"subtitle": "Mur communal"
},
"permissions": {
"canPublish": false,
"canManage": false
},
"actions": []
}
Exemple — Mon Mur
{
"type": "personal",
"label": "Mon Mur",
"communeIds": [34031, 34100],
"userId": 42,
"source": "followed",
"summary": {
"title": "Mon Mur",
"subtitle": "Mes communes et mes favoris"
},
"permissions": {
"canPublish": false
},
"actions": [
{
"type": "open_favorites",
"label": "Voir mes favoris"
}
]
}
Exemple — Recherche
{
"type": "search",
"label": "Recherche rugby",
"communeIds": [34031, 34003, 34142],
"source": "search",
"summary": {
"title": "Recherche : prochain match de rugby",
"subtitle": "Résultats classés par pertinence puis distance"
},
"actions": [
{
"type": "open_actor",
"label": "Voir le club"
}
]
}
Règle de simplicité
Tout champ ajouté au schéma doit répondre à un besoin partagé par plusieurs contextes.
Sinon, il doit rester hors du noyau WallContext.