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
This commit is contained in:
2026-03-03 22:24:17 +01:00
commit e031c9a1d2
155 changed files with 22334 additions and 0 deletions

75
docs/bdd-comptes.md Normal file
View File

@@ -0,0 +1,75 @@
# 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`.