![]() |
vor 3 Monaten | |
---|---|---|
client | vor 3 Monaten | |
data | vor 3 Monaten | |
nginx | vor 3 Monaten | |
server | vor 3 Monaten | |
.dockerignore | vor 3 Monaten | |
.gitignore | vor 3 Monaten | |
Dockerfile | vor 3 Monaten | |
README.md | vor 3 Monaten | |
docker-compose.yml | vor 3 Monaten | |
package-lock.json | vor 3 Monaten | |
package.json | vor 3 Monaten | |
rrr | vor 3 Monaten |
Framed Tracker est une application web pour suivre et analyser vos scores aux jeux Framed (Daily Frame et One Frame).
L'application est construite avec une architecture client-serveur:
framed-tracker/
├── client/ # Frontend React
│ ├── public/ # Fichiers statiques
│ └── src/ # Code source React
│ ├── App.jsx # Composant principal React
│ ├── api.js # Fonctions d'API
│ └── index.css # Styles CSS
├── server/ # Backend Express
│ ├── server.js # Point d'entrée du serveur
│ ├── schema.sql # Schéma de la base de données
│ ├── scripts/ # Scripts utilitaires
│ │ ├── init-db.js # Initialisation de la BD
│ │ └── backup-db.js # Sauvegarde de la BD
│ └── public/ # Build du frontend (production)
├── data/ # Stockage des données
│ └── framed.db # Base de données SQLite
├── backups/ # Sauvegardes de la BD
├── nginx/ # Configuration NGINX (production)
└── docker-compose.yml # Configuration Docker
Cloner le dépôt:
git clone https://github.com/votre-username/framed-tracker.git
cd framed-tracker
Lancer en mode développement:
docker-compose up
Créer une version de production:
docker-compose --profile build up framed-client-build
docker-compose --profile prod up -d
Installer les dépendances du serveur:
cd server
npm install
Installer les dépendances du client:
cd client
npm install
Lancer le serveur:
cd server
npm start
Lancer le client (dans un autre terminal):
cd client
npm start
POST /api/register
- Inscription utilisateur
{ username, password }
{ message, userId, username }
POST /api/login
- Connexion utilisateur
{ username, password }
{ userId, username }
POST /api/scores
- Ajouter un score
{ userId, date, gameType, gameNumber, score }
GET /api/scores/user/:userId
- Récupérer les scores d'un utilisateur
DELETE /api/scores/:id?userId=<userId>
- Supprimer un score
{ message }
GET /api/stats/:userId
- Statistiques d'un utilisateur
GET /api/leaderboard?gameType=<type>
- Classement global
gameType
(all, daily, one)GET /api/scores?gameType=<type>
- Tous les scores (admin)
gameType
(all, daily, one)L'authentification est gérée sans JWT ou sessions côté serveur. À la place:
Cette approche est simple mais convient à cette application. Une authentification plus robuste avec JWT serait préférable pour une application en production à plus grande échelle.
La base de données SQLite contient deux tables principales:
users
Colonne | Type | Description |
---|---|---|
id | INTEGER | Clé primaire auto-incrémentée |
username | TEXT | Nom d'utilisateur (unique) |
password | TEXT | Mot de passe hashé |
created_at | TIMESTAMP | Date de création du compte |
scores
Colonne | Type | Description |
---|---|---|
id | INTEGER | Clé primaire auto-incrémentée |
user_id | INTEGER | ID de l'utilisateur (clé étrangère) |
date | TEXT | Date du jeu (YYYY-MM-DD) |
game_type | TEXT | Type de jeu ("daily" ou "one") |
game_number | INTEGER | Numéro du jeu |
score | INTEGER | Score (1-6) |
created_at | TIMESTAMP | Date d'enregistrement du score |
idx_users_username
: Index unique sur le nom d'utilisateuridx_scores_user_id
: Index sur les scores par utilisateuridx_scores_game_type
: Index sur les scores par type de jeuidx_scores_user_game_type
: Index composite pour les requêtes fréquentesuser_stats
: Statistiques globales par utilisateuruser_game_type_stats
: Statistiques par type de jeu et utilisateurleaderboard
: Classement généralleaderboard_by_type
: Classement par type de jeuL'application propose plusieurs thèmes visuels:
Les thèmes sont stockés dans localStorage et s'appliquent à toute l'interface.
Frontend:
Backend:
DevOps:
Initialisation de la base de données:
node server/scripts/init-db.js
Sauvegarde de la base de données:
node server/scripts/backup-db.js
En production, l'application est servie par NGINX qui:
La configuration Docker permet une isolation complète et une facilité de déploiement.