Aller au contenu principal

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

ChampRôle
typeType de contexte
labelLibellé lisible pour l'interface
communeIdsBase territoriale commune
actorIdsActeurs ciblés si applicable
organizationIdsOrganisations ciblées si applicable
userIdUtilisateur courant si contexte personnel
sourceOrigine principale du contexte
summaryRésumé visuel ou textuel pour l'UI
permissionsCapacités utiles à l'affichage
actionsActions 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.