**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
3.9 KiB
Base de données et comptes
Utilisation de PostgreSQL pour persister les zoos et les comptes joueurs, et du client pour se connecter à l’API.
1. Schéma PostgreSQL
Fichier : server/schema.sql.
Créer la base et exécuter le schéma une fois :
createdb builazoo
psql -d builazoo -f server/schema.sql
Ou avec une URL complète :
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 suraccount_id). - map_config : une ligne
paramsavecmapWidth,mapHeight,minZoospour la densité de zoos et les bots.
2. Variables d’environnement 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éfautpostgres://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 l’API côté client
Trois possibilités :
- Paramètre d’URL : ouvrir l’app avec
?api=https://votre-serveur.example.com(sans slash final). Exemple :https://jeu.example.com/?api=https://api.example.com. - Champ « URL du serveur » : au premier lancement sans
?api=, l’écran propose « Jouer en local » ou « Se connecter au serveur ». Saisir l’URL du serveur et cliquer sur « Se connecter au serveur ». L’URL est enregistrée enlocalStorage(builazoo_api_url) et réutilisée aux prochains chargements. - Injection globale : définir
window.BUILAZOO_API_URLavant le chargement du script (comme le fait le script dansindex.htmlpour?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/registeravecX-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 d’un zoo (
POST /api/zoos/me) avec état initial, puis entrée dans le jeu. - 200 : zoo existant → chargement de
game_state, mise à jour delast_seen_atcôté serveur.
Authentification : clé Ed25519 générée dans le navigateur, clé publique envoyée à l’inscription ; 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 l’URL de l’API (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 l’API. - 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.