Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
VITE_API_URL=API_ADRESS
VITE_APP_URL=APP_ADDRESS
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ node_modules
dist
dist-ssr
*.local
.env

# Editor directories and files
.vscode/*
Expand Down
28 changes: 28 additions & 0 deletions docs/guides/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Documentation modules

Ce dossier contient la documentation technique par domaine fonctionnel.

## Utilisation de la doc

- **Onboarding nouveau dev** : commencer par `docs/guides/onboarding.md`
- **Reference technique** : utiliser les fichiers de `docs/modules/` et `docs/technical/` selon le perimetre modifie

## Index

- `docs/modules/front-office.md` : parcours public, recherche, resultats, fiche organisme
- `docs/modules/back-office-edition.md` : edition des organismes (CRUD, archivage, filtres)
- `docs/modules/back-office-users.md` : gestion des utilisateurs et droits
- `docs/technical/auth.md` : authentification, session, securite client
- `docs/technical/zones.md` : fonctionnement des zones et impact metier
- `docs/technical/api.md` : organisation des appels API et conventions
- `docs/technical/vigilance.md` : liste centralisee des points a surveiller/corriger

## Convention de mise a jour

Pour chaque PR, mettre a jour les fichiers impactes:

1. Objectif / perimetre
2. Routes et composants touches
3. Flux de donnees / API
4. Regles de droits
5. Cas limites et points de vigilance
54 changes: 54 additions & 0 deletions docs/guides/onboarding.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Onboarding developpeur

Ce guide est le point d'entree rapide pour contribuer a la webapp.

## 1) Contexte du projet

- Frontend: ce repo (`web_app`)
- Backend: Directus (`https://github.com/Watizat/directus`)
- Le frontend depend du backend pour fonctionner (auth, donnees, edition, roles, zones).

## 2) Setup local

```bash
npm install
npm run dev
```

Puis ouvrir `http://localhost:5173`.

## 3) Parcours de lecture conseille (30 min)

1. `docs/specifications.md` (vue d'ensemble)
2. `docs/modules/front-office.md`
3. `docs/modules/back-office-edition.md`
4. `docs/modules/back-office-users.md`
5. `docs/technical/auth.md`
6. `docs/technical/zones.md`
7. `docs/technical/api.md`
8. `docs/technical/vigilance.md`

## 4) Fichiers source a connaitre

- `src/router.tsx` : routes front/back
- `src/context/AppStateContext.tsx` : state global
- `src/components/App/FrontOffice.tsx` : shell front
- `src/components/App/BackOffice.tsx` : shell back + guard auth
- `src/utils/axios.ts` : auth bearer + refresh

## 5) Regles de contribution doc

A chaque PR, mettre a jour au moins un fichier dans `docs/modules/` ou `docs/technical/` si le comportement change.

## 6) Verification minimale avant PR

```bash
npm run lint
npm run build
```

Si un flux metier est touche, verifier manuellement:

- login/logout
- parcours recherche front (zone + categorie)
- ecran admin impacte
9 changes: 9 additions & 0 deletions docs/modules/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Modules fonctionnels

Ce dossier contient uniquement les modules metier du produit.

- `docs/modules/front-office.md`
- `docs/modules/back-office-edition.md`
- `docs/modules/back-office-users.md`

Les sujets transversaux (auth, zones, API) sont dans `docs/technical/`.
42 changes: 42 additions & 0 deletions docs/modules/back-office-edition.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Module Back Office - Edition

## Objectif

Gerer le referentiel d'organismes: creation, edition, gestion des services/contacts, archivage.

## Routes concernees

- `/admin/edition`

## Composants / fichiers cles

- `src/components/BackOffice/Edition/Edition.tsx`
- `src/components/BackOffice/Edition/SideList.tsx`
- `src/components/BackOffice/Edition/DataPanel/*`
- `src/components/BackOffice/SlideOvers/Edition/*`
- `src/components/Modals/ArchiveOrganism.tsx`
- `src/context/BackOfficeContext.tsx`
- `src/api/admin.ts`
- `src/api/crud.ts`

## Flux principal

1. Chargement de la liste des organismes selon la zone active (`fetchAdminOrganisms`).
2. Selection d'un organisme -> chargement detail (`fetchAdminOrganism`).
3. Edition via slide-over (general, infos, services, contacts, visibilite).
4. Archivage/desarchivage via `editOrganismVisibility`.
5. Rafraichissement liste/detail apres mutation.

## Etat UI local (BackOfficeContext)

- `isOpenSlideNewOrga`
- `isOpenFiltersOrga`
- `isDisplayArchivedOrga`

## Regles metier principales

- La liste est filtree par zone et par visibilite.
- Un organisme archive est `visible = false` avec message `visible_comment` possible.
- Creation/edition geolocalise l'adresse via `api-adresse.data.gouv.fr`.

Points de vigilance de ce module: `docs/technical/vigilance.md`.
56 changes: 56 additions & 0 deletions docs/modules/back-office-users.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Module Back Office - Utilisateurs

## Objectif

Gerer les comptes membres, leur role, leur zone de rattachement et leur cycle de vie.

## Routes concernees

- `/admin/users`
- `/admin/profil`
- `/account-request` (entree creation de compte)

## Composants / fichiers cles

- `src/components/BackOffice/Users/Users.tsx`
- `src/components/BackOffice/Users/UserLine.tsx`
- `src/components/BackOffice/SlideOvers/Users/EditUser.tsx`
- `src/components/BackOffice/Profil.tsx`
- `src/components/BackOffice/SlideOvers/Profil/EditProfil.tsx`
- `src/api/admin.ts` (`fetchUsers`, `fetchRoles`)
- `src/api/user.ts` (`registerUser`, `editUser`, `updateUserStatus`, `fetchMe`)
- `src/components/BackOffice/Sidebar/SideBase.tsx`
- `src/components/BackOffice/Dashboard/Dashboard.tsx`

## Roles observes et droits frontend

- `Administrator`
- `RefLocal`
- `Edition`
- `NewUser`
- `UserToDelete`

## Matrice des droits (frontend)

| Action | Administrator | RefLocal | Edition | NewUser | UserToDelete |
|---|---|---|---|---|---|
| Acceder au back-office (`/admin/*`) | Oui | Oui | Oui | Non | Non |
| Acceder a `/admin/users` | Oui | Oui | Non | Non | Non |
| Changer la zone active dans le header back-office | Oui | Oui | Non | Non | Non |
| Voir l'entree "Back-end" dans la navigation | Oui | Non | Non | Non | Non |
| Modifier un utilisateur (nom/email/role/zone) | Oui | Oui | Non | Non | Non |
| Attribuer le role `Administrator` depuis l'UI users | Oui | Oui* | Non | Non | Non |
| Archiver / reactiver un utilisateur | Oui | Oui | Non | Non | Non |

\* Cote frontend actuel, `RefLocal` a acces a la meme UI de role/zone qu'`Administrator`. Les droits effectifs finaux dependent des regles backend Directus.

## Flux principal gestion users

1. Recuperation du role courant via `/users/me`.
2. Chargement users selon zone:
- admin/reflocal: zone active (ou toutes si pas de zone selectionnee)
- autres: zone du user connecte
3. Edition d'un user via slide-over (`editUser`).
4. Changement de statut via `updateUserStatus` (`active`, `suspended`, `archived`).

Points de vigilance de ce module: `docs/technical/vigilance.md`.
42 changes: 42 additions & 0 deletions docs/modules/front-office.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Module Front Office

## Objectif

Permettre la consultation publique du guide: recherche d'organismes, consultation des resultats et fiche detail.

## Routes concernees

- `/` (home et formulaire de recherche)
- `/resultats`
- `/organisme/:slug`
- `/mentions-legales`
- `/guides-papier`

## Composants / fichiers cles

- `src/components/App/FrontOffice.tsx`
- `src/components/FrontOffice/Home/SearchBox.tsx`
- `src/components/FrontOffice/Resultats/Resultats.tsx`
- `src/components/FrontOffice/Organisme/Organisme.tsx`
- `src/api/organisms.ts`

## Flux principal

1. Chargement initial des categories, zones et jours (`FrontOffice.tsx`).
2. L'utilisateur choisit zone + categorie sur la home.
3. Navigation vers `/resultats?city=...&category=...`.
4. `Resultats.tsx` charge:
- la position de la zone (`fetchCityPosition`)
- la liste des organismes (`fetchOrganisms`)
5. Clic sur un organisme -> `organisme/:slug` puis `fetchOrganism`.

## Donnees d'etat cle

- `organismState.categories`
- `organismState.organisms`
- `organismState.filteredOrganisms`
- `organismState.organism`
- `organismState.days`
- `adminState.zones`

Points de vigilance de ce module: `docs/technical/vigilance.md`.
6 changes: 6 additions & 0 deletions docs/specifications.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,3 +176,9 @@ Rien à faire par ici
*Newsletter* : Non

*Réseaux sociaux* : Forte présence et forte communauté (Facebook, Instagram, Twitter)

### Variables d'environnement (frontend)

Le frontend necessite la variable suivante pour fonctionner :

- `VITE_API_URL` : URL de l'API Directus (exemple dans `.env.example`).
10 changes: 10 additions & 0 deletions docs/technical/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Documentation technique transversale

Ce dossier contient les sujets techniques qui traversent plusieurs modules.

- `docs/technical/auth.md`
- `docs/technical/zones.md`
- `docs/technical/api.md`
- `docs/technical/vigilance.md`

Les modules metier sont dans `docs/modules/`.
65 changes: 65 additions & 0 deletions docs/technical/api.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Technique - API

## Objectif

Centraliser les conventions d'appel API et la cartographie des principaux endpoints utilises par le frontend.

## Organisation des fichiers

- `src/utils/axios.ts` : instance Axios + interceptors auth/refresh
- `src/api/user.ts` : auth et users
- `src/api/admin.ts` : zones, roles, listes admin
- `src/api/organisms.ts` : consultation front des organismes
- `src/api/crud.ts` : mutations organisme/service/contact
- `src/api/navitia.ts` : transport (si active)

## Base URL et auth

- Base URL: `https://api.watizat.app`
- Bearer token injecte automatiquement si session presente
- Refresh token via `POST /auth/refresh`
- En cas d'echec refresh: purge session + redirection login

## Endpoints principaux utilises

### Auth / user

- `POST /auth/login`
- `POST /auth/logout`
- `POST /auth/password/request`
- `GET /users/me`
- `POST /users`
- `PATCH /users/:id`

### Zones / roles / users admin

- `GET /items/zone`
- `GET /roles`
- `GET /users` (filtre par zone)

### Organismes / contenu guide

- `GET /items/organisme` (liste/front + liste/admin + detail)
- `PATCH /items/organisme/:id`
- `POST /items/organisme`
- `POST/PATCH/DELETE` sur:
- `/items/service`
- `/items/service_translation`
- `/items/contact`
- `/items/schedule`

### Service externe

- Geocodage adresse: `https://api-adresse.data.gouv.fr/search/?q=...`
- Releases app (modal versions): `https://api.github.com/repos/Watizat/web_app/releases`

## Caching local existant

- `fetchZones`: cache memoire (`zonesCache`, `zonesPromise`)
- `fetchMe`: cache memoire (`meCache`, `mePromise`)

## Cas limites / vigilance

- Les champs `fields` Directus sont tres verbeux et repetes; risque de divergence entre endpoints.
- Quelques champs semblent typo/incomplets (`services.categorie_id.translations.`).
- Harmoniser les filtres de zone entre front/back pour eviter des comportements differents.
45 changes: 45 additions & 0 deletions docs/technical/auth.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Technique - Auth

## Objectif

Gerer l'authentification des membres, la persistance de session et la protection du back office.

## Routes concernees

- `/login`
- `/account-request`
- `/forgotten-password`
- `/recover-password`
- `/new-user`
- toutes les routes `/admin/*` (acces conditionnel)

## Composants / fichiers cles

- `src/components/FrontOffice/Login/SignIn.tsx`
- `src/components/FrontOffice/Login/AccountRequest.tsx`
- `src/components/FrontOffice/Login/NewUser.tsx`
- `src/components/App/BackOffice.tsx`
- `src/components/InactivityDetector/InactivityDetector.tsx`
- `src/utils/axios.ts`
- `src/api/user.ts`
- `src/utils/user.ts`

## Flux principal

1. Login via `POST /auth/login` (`login` dans `src/api/user.ts`).
2. Token stocke dans `localStorage.user`.
3. `BackOffice.tsx` appelle `/users/me` pour valider l'acces.
4. L'intercepteur Axios ajoute le bearer et gere le refresh (`POST /auth/refresh`).
5. Si refresh impossible: purge session + redirection `/login`.

## Regles de droits appliquees a l'entree back-office

- Role `NewUser` : acces refuse, deconnexion, retour login.
- Role `UserToDelete` : acces refuse, deconnexion, retour login.
- Roles valides pour le back-office: `Administrator`, `RefLocal`, `Edition` (avec menus differents).

## Cas limites / vigilance

- Le code melange noms de roles et UUID selon les composants.
- La suppression de compte utilisateur est un passage en statut (`suspended`/`archived`) selon contexte.
- L'inactivite deconnecte la session apres timeout (5h par defaut cote state).
Loading