180 lines
4.8 KiB
Markdown
180 lines
4.8 KiB
Markdown
# Beuz Video Game Collection
|
|
|
|
Application web simple pour gerer une collection de jeux video par plateforme et console.
|
|
|
|
## Objectif
|
|
|
|
Centraliser ta collection dans une interface rapide a utiliser, evolutive, et facile a maintenir.
|
|
|
|
## Fonctionnalites actuelles
|
|
|
|
- Gestion des plateformes par marque (ex: SONY, MICROSOFT)
|
|
- Gestion des consoles par marque (ajout libre)
|
|
- Onglets dynamiques marque/console
|
|
- Compteur visuel du nombre de jeux par console (bulle sur l'onglet)
|
|
- Ajout de jeux avec champs:
|
|
- titre
|
|
- version
|
|
- genre
|
|
- editeur
|
|
- double (oui/non)
|
|
- annee
|
|
- prix d'achat
|
|
- cote estimee
|
|
- etat
|
|
- prete a
|
|
- Edition d'une fiche existante
|
|
- Suppression d'un jeu
|
|
- Statut de pret (marquer prete/rendu)
|
|
- Persistance locale via `localStorage`
|
|
- Backend avec migration automatique du schema PostgreSQL (etape 2)
|
|
|
|
## Stack technique
|
|
|
|
- Frontend: HTML, CSS, JavaScript vanilla
|
|
- Serveur web local: Nginx (conteneur Docker)
|
|
- Backend API: Node.js (endpoint de sante pour migration progressive)
|
|
- Base de donnees: PostgreSQL dediee a l'application
|
|
- Orchestration: Docker Compose
|
|
|
|
## Structure du projet
|
|
|
|
```text
|
|
.
|
|
|- index.html
|
|
|- styles.css
|
|
|- app.js
|
|
|- Dockerfile
|
|
|- api/
|
|
| |- Dockerfile
|
|
| |- server.js
|
|
|- docker-compose.yml
|
|
|- .dockerignore
|
|
|- .env.example
|
|
```
|
|
|
|
## Lancer en Docker
|
|
|
|
### 1) Configuration du port
|
|
|
|
Copie le fichier d'environnement:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
Par defaut:
|
|
|
|
```env
|
|
APP_PORT=7001
|
|
API_PORT=7002
|
|
VG_DB_NAME=video_games
|
|
VG_DB_USER=video_games_user
|
|
VG_DB_PASSWORD=change_me
|
|
APP_BASIC_AUTH_USER=beuz
|
|
APP_BASIC_AUTH_PASSWORD=change_me_now
|
|
PUBLIC_BASE_URL=http://localhost:7001
|
|
GOOGLE_CLIENT_ID=
|
|
GOOGLE_CLIENT_SECRET=
|
|
GOOGLE_REDIRECT_URI=
|
|
GOOGLE_DRIVE_FOLDER_NAME=BeuzGamesBackups
|
|
```
|
|
|
|
Tu peux mettre `7000` si ce port est libre sur ta machine.
|
|
|
|
### 2) Build et demarrage
|
|
|
|
```bash
|
|
docker compose up -d --build
|
|
```
|
|
|
|
### 3) Ouvrir l'application
|
|
|
|
- [http://localhost:7001](http://localhost:7001) (par defaut)
|
|
- ou [http://localhost:7000](http://localhost:7000) si `APP_PORT=7000`
|
|
|
|
### 3-bis) Verifier l'API (etape 1 migration)
|
|
|
|
- [http://localhost:7002/health](http://localhost:7002/health)
|
|
- [http://localhost:7002/api/catalog/summary](http://localhost:7002/api/catalog/summary)
|
|
- [http://localhost:7002/api/catalog/tree](http://localhost:7002/api/catalog/tree)
|
|
- [http://localhost:7001/api/catalog/full](http://localhost:7001/api/catalog/full) (via proxy Nginx frontend)
|
|
|
|
### 4) Arreter
|
|
|
|
```bash
|
|
docker compose down
|
|
```
|
|
|
|
## Utilisation rapide
|
|
|
|
1. Ajoute une marque + une console dans la section "Plateformes et consoles".
|
|
2. Selectionne une console.
|
|
3. Ajoute tes jeux via le formulaire.
|
|
4. Utilise `Editer` pour completer/modifier une fiche (ex: ajouter l'editeur plus tard).
|
|
5. Consulte la bulle sur chaque onglet console pour voir le volume de jeux.
|
|
|
|
## Git / Gitea
|
|
|
|
Le remote est configure en SSH via l'alias `gitea-local` (port `222`).
|
|
|
|
Exemples:
|
|
|
|
```bash
|
|
git push
|
|
git pull
|
|
```
|
|
|
|
## Evolutions prevues
|
|
|
|
- Fiches de pret plus detaillees (date de sortie, date de retour)
|
|
- Historique des prets
|
|
- Statistiques de collection (total jeux, valeur totale, repartition par plateforme)
|
|
- Export/import (CSV/JSON)
|
|
- Sauvegarde distante (API/backend)
|
|
|
|
## Etat migration base de donnees
|
|
|
|
- Etape 1: architecture `app + api + db` en place
|
|
- Etape 2: schema SQL applique automatiquement au demarrage API
|
|
- tables: `brands`, `consoles`, `games`
|
|
- trigger `updated_at` sur `games`
|
|
- endpoints de lecture pour validation: `summary` et `tree`
|
|
- Etape 3: frontend lit l'API (`/api/catalog/full`) avec fallback `localStorage` si API vide ou indisponible
|
|
- Etape 4: ecriture active en base via API
|
|
- POST `/api/catalog/consoles`
|
|
- POST `/api/catalog/games`
|
|
- PUT `/api/catalog/games/:id`
|
|
- DELETE `/api/catalog/games/:id`
|
|
- POST `/api/catalog/games/:id/toggle-loan`
|
|
- Etape 5: migration des donnees existantes `localStorage -> DB`
|
|
- POST `/api/catalog/import`
|
|
- bouton UI `Migrer localStorage vers DB`
|
|
- deduplication: `console + titre + annee`
|
|
- Etape 6: backup/restauration locale JSON
|
|
- GET `/api/backup/export`
|
|
- POST `/api/backup/restore` (modes `merge` ou `replace`)
|
|
- snapshot auto en base avant restore `replace` (`backup_snapshots`)
|
|
- actions accessibles dans le panneau lateral `Outils`
|
|
- Etape 7: sauvegarde/restauration Google Drive (OAuth)
|
|
- GET `/api/google/status`
|
|
- GET `/api/google/connect-url`
|
|
- GET `/auth/google/callback`
|
|
- POST `/api/google/backup/upload`
|
|
- GET `/api/google/backups`
|
|
- POST `/api/google/backup/restore`
|
|
|
|
## Import Excel (COLLECTIONS.xlsx)
|
|
|
|
- Script: `scripts/import_collections_xlsx.py`
|
|
- Commande:
|
|
- `python3 scripts/import_collections_xlsx.py '/Users/beuz/Downloads/COLLECTIONS.xlsx' --api-base http://127.0.0.1:7001`
|
|
- Mapping consoles -> marques:
|
|
- `NES/SNES/Wii -> NINTENDO`
|
|
- `PS1/PS2/PS3/PS4/PS5 -> SONY`
|
|
- `XBOX 360 -> MICROSOFT`
|
|
|
|
## Licence
|
|
|
|
Projet prive personnel.
|