Files
builazoo/docs/bdd-comptes.md
Nicolas Cantu e031c9a1d2 Initial commit
**Motivations:**
- Initialisation du versionning git pour le projet

**Root causes:**
- N/A (Nouveau projet)

**Correctifs:**
- N/A

**Evolutions:**
- Structure initiale du projet
- Ajout du .gitignore

**Pages affectées:**
- Tous les fichiers
2026-03-03 22:24:17 +01:00

76 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Base de données et comptes
Utilisation de PostgreSQL pour persister les zoos et les comptes joueurs, et du client pour se connecter à lAPI.
---
## 1. Schéma PostgreSQL
Fichier : `server/schema.sql`.
Créer la base et exécuter le schéma une fois :
```bash
createdb builazoo
psql -d builazoo -f server/schema.sql
```
Ou avec une URL complète :
```bash
psql "$DATABASE_URL" -f server/schema.sql
```
**Tables :**
- **accounts** : `id` (UUID), `public_key` (texte unique), `pseudo` (texte unique), `created_at`, `last_seen_at`. Un compte = une clé publique + pseudo (pas de mot de passe).
- **zoos** : `id`, `account_id` (FK vers accounts, NULL pour les bots), `name`, `x`, `y`, `is_bot`, `animal_weights` (JSONB), `game_state` (JSONB), `updated_at`. Un compte a au plus un zoo (contrainte UNIQUE sur `account_id`).
- **map_config** : une ligne `params` avec `mapWidth`, `mapHeight`, `minZoos` pour la densité de zoos et les bots.
---
## 2. Variables denvironnement serveur
- **DATABASE_URL** : URL de connexion PostgreSQL (ex. `postgres://user:pass@localhost:5442/builazoo`). **Port 5442** si PostgreSQL écoute sur ce port sur la machine. Par défaut `postgres://localhost/builazoo` (port 5432).
- **PORT** : Port HTTP du serveur (défaut 3000).
Le serveur charge un fichier **`.env`** à la racine du projet (via `dotenv`) au démarrage. Copier `.env.example` en `.env` et renseigner les valeurs. Démarrer avec : `node server/index.js` (depuis la racine du projet ou depuis `server/`).
---
## 3. Activer lAPI côté client
Trois possibilités :
1. **Paramètre dURL** : ouvrir lapp avec `?api=https://votre-serveur.example.com` (sans slash final). Exemple : `https://jeu.example.com/?api=https://api.example.com`.
2. **Champ « URL du serveur »** : au premier lancement sans `?api=`, lécran propose « Jouer en local » ou « Se connecter au serveur ». Saisir lURL du serveur et cliquer sur « Se connecter au serveur ». LURL est enregistrée en `localStorage` (`builazoo_api_url`) et réutilisée aux prochains chargements.
3. **Injection globale** : définir `window.BUILAZOO_API_URL` avant le chargement du script (comme le fait le script dans `index.html` pour `?api=`).
Si une URL est définie (paramètre, localStorage ou `window`), le jeu charge la liste des zoos via `GET /api/zoos`, puis le zoo du joueur via `GET /api/zoos/me` (requête signée). La sauvegarde se fait par `PATCH /api/zoos/me` avec `game_state` en JSON.
---
## 4. Flux compte et zoo
- **401 sur GET /api/zoos/me** : compte inconnu → affichage de lécran « Créer un compte » (pseudo). Après inscription (`POST /api/auth/register` avec `X-Public-Key`), création du zoo (`POST /api/zoos/me`) puis entrée dans le jeu.
- **404 sur GET /api/zoos/me** : compte connu mais aucun zoo → création automatique dun zoo (`POST /api/zoos/me`) avec état initial, puis entrée dans le jeu.
- **200** : zoo existant → chargement de `game_state`, mise à jour de `last_seen_at` côté serveur.
Authentification : clé Ed25519 générée dans le navigateur, clé publique envoyée à linscription ; chaque requête authentifiée est signée (méthode, chemin, timestamp, hash du body). La clé privée reste en local (localStorage).
---
## 5. Déploiement
- **Backend** : héberger le serveur Node (Express) avec accès au PostgreSQL ; exposer lURL de lAPI (proxy, CORS si besoin).
- **Front** : déployer les fichiers statiques ; les utilisateurs passent par `?api=...` ou par lécran « Se connecter au serveur » pour pointer vers lAPI.
- **CORS** : le serveur utilise `cors({ origin: true, credentials: true })` ; adapter si des origines précises sont imposées.
---
## 6. Références
- Schéma et routes : `server/schema.sql`, `server/db.js`, `server/routes/zoos.js`.
- Client : `web/js/api-client.js`, `web/js/auth-client.js`, `web/js/main.js`.
- Fonctionnalités détaillées : `docs/features/carte-fixe-serveur-auth.md`, `docs/features/reste-a-implementer-carte-serveur.md`.