Skip to content

Commit 26e99dc

Browse files
committed
Global: add a README to guide our upcoming developers
1 parent 9e30cc3 commit 26e99dc

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

README.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Docurba
2+
3+
Cette documentation est en cours de création. Merci de l'agrémenter selon vos besoins.
4+
5+
## Architecture
6+
7+
(à faire)
8+
9+
### Base de données
10+
11+
La base de données est gérée par [Supabase](https://supabase.com/docs). En local, la CLI supabase permet de créer une base de données et un environnement local équivalent à la production. Malheureusement, Supabase ne permet pas de travailler avec plusieurs bases de données localement. Pourtant, il nous faut bien deux bases de données pour faire tourner les tests.
12+
Jusqu'à maintenant, la base de données de test était créée par Pytest et utilisait donc l'URL `DATABASE_URL` configurée localement. Une nouvelle base était créée mais elle ne contenait pas :
13+
- les spécificités de Supabase : roles, schémas, fonctions et extensions (notamment).
14+
- la structure de la base de données de production qui est bien plus complet que les modèles Django. Il y a les tables mais aussi des fonctions, des déclencheurs et autres réjouissances créées en clic-clic-clic et non documentées.
15+
16+
Cela devient un véritable problème depuis que nous utilisons les migrations Django pour gérer les changements de structure. En effet, ceux-ci se basent sur des tables qui existent bien en production mais pas dans l'environnement de test.
17+
18+
Une première solution avait été de créer les tables manquantes dans un `conftest.py`. Puis via des signaux spécifiques à chaque application Django mais tout cela était incomplet. Maintenant, il est temps d'utiliser la structure complète de la base de données pour travailler sereinement.
19+
20+
#### Locale
21+
22+
Voir `supabase start`.
23+
24+
#### Test
25+
26+
En résumé :
27+
- Docker compose expose une base de test qui s'appuie sur l'image officielle de Supabase.
28+
- Le schéma de production est injecté dans la base de test lorsqu'elle est disponible.
29+
- Les migrations Django sont exécutées ensuite.
30+
- Puis Pytest peut tourner gentiment sans râler.
31+
La tâche `mise start:tests` permet de lancer l'ensemble automatiquement. Elle est utilisée dans la CI et peut être lancée localement.
32+
33+
##### Docker compose à la rescousse
34+
La base de données de test utilise l'image officielle de Supabase qui est documentée dans la partie « [self-hosting with Docker](https://supabase.com/docs/guides/self-hosting/docker) ». Elle s'appuie sur les valeurs d'environnement `PG*`.
35+
Les scripts spécifiques sont dans le dossier `docker`.
36+
La structure spécifique à Supabase est ainsi créée par l'image mais aussi par des scripts qui ont été écrits par eux (voir le dossier `docker/test_db/supabase_seeds`) et qui viennent du dépôt officiel.
37+
38+
##### Schéma de production
39+
40+
Voir `docker/test_db/prod_schema_before_django_migrations.sql`.
41+
Le schéma de production a été créé avec `pg_dump` puis nettoyé et adapté. Il contient les tables, les fonctions, les extensions, certains déclencheurs et les permissions.
42+
Plus les modèles Django refléteront la structure de la base, moins nous aurons besoin de ce fichier. In fine, il pourra être supprimé lorsque tout aura été « traduit » dans Django.
43+
44+
## Environnement local
45+
46+
- Installez [Mise en place](https://mise.jdx.dev/getting-started.html)
47+
- Installez [la CLI Supabase](https://supabase.com/docs/guides/local-development/cli/getting-started).
48+
- Clônez [le dépôt Nuxt 3](https://github.com/betagouv/docurba-nuxt3/) et vérifiez que le serveur local se lance correctement (`$ mise start`).
49+
- Renseignez les variables d'environnement nécessaires à Nuxt et Django. Voir `django/.env.example` et `nuxt/.env.example`.
50+
Vous pouvez utiliser [dotenv](https://pypi.org/project/python-dotenv/), un utilitaire Python qui automatise l'usage des variables d'environnement (entre autre).
51+
- Utilisez la commande `mise start` pour lancer les serveurs suivants : Nuxt, Django, Nuxt3 et base de test (voir docker-compose.yml)

0 commit comments

Comments
 (0)