Migre le projet vers Blazor WebAssembly en .NET 10

This commit is contained in:
2026-04-13 21:29:12 +02:00
parent b11056097d
commit 90f17c9c89
26 changed files with 4314 additions and 94 deletions

118
README.md
View File

@@ -1,25 +1,35 @@
# ChessCubing Arena
Application web mobile-first pour téléphone et tablette, pensée comme application officielle de suivi de match pour `ChessCubing Twice` et `ChessCubing Time`.
Application web mobile-first pour telephone et tablette, maintenant migree vers **Blazor WebAssembly en C# / .NET 10**.
## Ce que fait cette première version
## Ce que fait l'application
- configure une rencontre `Twice` ou `Time`
- sépare l'application en pages dédiées : configuration, phase chrono, phase cube
- permet de définir librement le temps de partie et le temps par coup
- separe l'experience en pages dediees : configuration, phase chrono, phase cube
- permet de definir librement le temps de partie et le temps par coup
- suit les quotas `FAST`, `FREEZE` et `MASTERS`
- orchestre la phase cube avec désignation du cube, capture des temps et préparation de la partie suivante
- orchestre la phase cube avec designation du cube, capture des temps et preparation de la partie suivante
- applique la logique du double coup V2 en `Twice`
- applique les ajustements `bloc -` et `bloc +` en `Time` avec plafond de 120 s pris en compte
- conserve un historique local dans le navigateur
- propose une page chrono pensée pour le téléphone avec deux grandes zones tactiles, une par joueur
- ouvre automatiquement la page cube dès que la phase chess de la partie est terminée
- conserve l'etat du match dans le navigateur
- propose une page chrono pensee pour le telephone avec deux grandes zones tactiles
- ouvre automatiquement la page cube des que la phase chess est terminee
## Hypothèse de produit
## Architecture
Cette version est volontairement construite comme une **application d'arbitrage et de direction de match** autour d'un vrai échiquier physique, et non comme un moteur d'échecs complet. C'est le choix le plus fidèle aux règlements fournis et le plus réaliste pour une utilisation immédiate en club, en démonstration ou en tournoi.
Le coeur de l'application se trouve dans `ChessCubing.App/`.
## Démarrage avec Docker
- `ChessCubing.App/Pages/` : pages Razor du site et de l'application
- `ChessCubing.App/Services/MatchEngine.cs` : logique metier des matchs
- `ChessCubing.App/Services/MatchStore.cs` : persistance navigateur
- `ChessCubing.App/wwwroot/` : assets statiques, manifeste, PDFs, appli Ethan
- `docker-compose.yml` + `Dockerfile` : build Blazor puis service via nginx
Le projet continue a exposer les routes historiques `index.html`, `application.html`, `chrono.html`, `cube.html` et `reglement.html`.
## Demarrage local
### Avec Docker
```bash
docker compose down
@@ -28,16 +38,23 @@ docker compose up -d --build
L'application est ensuite disponible sur `http://localhost:8080`.
## Déploiement dans un LXC Proxmox
### Avec .NET 10
Deux scripts Bash permettent de créer un conteneur LXC Debian sur Proxmox puis de le mettre à jour depuis Git.
```bash
dotnet restore ChessCubing.App/ChessCubing.App.csproj
dotnet run --project ChessCubing.App/ChessCubing.App.csproj
```
Prérequis sur la machine qui lance les scripts :
## Deploiement dans un LXC Proxmox
Deux scripts Bash permettent de creer un conteneur LXC Debian sur Proxmox puis de le mettre a jour depuis Git.
Prerrequis sur la machine qui lance les scripts :
- en mode distant : `ssh` et `sshpass`
- en mode local sur l'hôte Proxmox : aucun paquet supplémentaire n'est installé sur Proxmox
- en mode local sur l'hote Proxmox : aucun paquet supplementaire n'est installe sur Proxmox
Le déploiement dans le LXC n'utilise pas Docker. Le script installe `nginx`, `git` et `rsync` dans le conteneur, clone le dépôt principal, synchronise aussi le projet d'Ethan, puis publie uniquement les fichiers web.
Le deploiement dans le LXC n'utilise pas Docker. Le script clone le depot, publie l'application Blazor dans le conteneur, puis sert le resultat via `nginx`.
### Installer un nouveau LXC
@@ -54,38 +71,7 @@ Version "curl | bash" :
bash -c "$(curl -fsSL https://git.jeannerot.fr/christophe/chesscubing/raw/branch/main/install-chesscubing-proxmox.sh)"
```
Cette version pose les questions nécessaires si les variables d'environnement ne sont pas déjà définies.
Si elle est lancée directement sur l'hôte Proxmox, elle passe automatiquement en mode local :
- elle ne demande ni serveur, ni login, ni mot de passe SSH
- elle n'installe rien sur l'hôte Proxmox
- elle crée uniquement le LXC puis installe les dépendances dans ce LXC
Valeurs par défaut utiles :
- LXC nommé `chesscubing-web`
- IP du LXC en `dhcp`
- branche Git `main`
- dépôt `https://git.jeannerot.fr/christophe/chesscubing.git`
- dépôt Ethan `https://git.jeannerot.fr/Mineloulou/Chesscubing.git`
Options utiles si besoin :
- `--ctid 120`
- `--lxc-ip 192.168.1.50/24 --gateway 192.168.1.1`
- `--template-storage local`
- `--rootfs-storage local-lvm`
- `--branch main`
- `--ethan-branch main`
À la fin, le script affiche :
- le `CTID`
- le mot de passe `root` du LXC
- l'URL probable du site
### Mettre à jour depuis Git
### Mettre a jour depuis Git
```bash
./scripts/update-proxmox-lxc.sh \
@@ -101,30 +87,14 @@ Version "curl | bash" :
bash -c "$(curl -fsSL https://git.jeannerot.fr/christophe/chesscubing/raw/branch/main/update-chesscubing-proxmox.sh)"
```
Sur l'hôte Proxmox, cette commande met à jour le LXC local sans passer par SSH.
Par défaut, elle cible le conteneur `chesscubing-web` sans demander le `CTID`.
## Fichiers cles
On peut aussi cibler le conteneur par nom si on n'a pas le `CTID` :
```bash
./scripts/update-proxmox-lxc.sh \
--proxmox-host 10.0.0.2 \
--proxmox-user root@pam \
--proxmox-password 'secret' \
--hostname chesscubing-web
```
Le script de mise à jour exécute un `git pull --ff-only` pour le dépôt principal et le dépôt d'Ethan dans le conteneur, puis republie les fichiers statiques via `nginx`, y compris la route `/ethan/`.
## Fichiers clés
- `index.html` : page d'accueil du site
- `application.html` : page de configuration et reprise de match
- `chrono.html` : page dédiée à la phase chrono
- `cube.html` : page dédiée à la phase cube
- `reglement.html` : page éditoriale qui présente le règlement officiel
- `styles.css` : design mobile/tablette
- `app.js` : logique de match et arbitrage
- `docker-compose.yml` + `Dockerfile` : exécution locale
- `scripts/install-proxmox-lxc.sh` : création et déploiement d'un LXC Proxmox
- `scripts/update-proxmox-lxc.sh` : mise à jour d'un LXC existant depuis Git
- `ChessCubing.App/Pages/Home.razor` : page d'accueil du site
- `ChessCubing.App/Pages/ApplicationPage.razor` : configuration et reprise de match
- `ChessCubing.App/Pages/ChronoPage.razor` : phase chrono
- `ChessCubing.App/Pages/CubePage.razor` : phase cube
- `ChessCubing.App/Pages/RulesPage.razor` : synthese du reglement
- `ChessCubing.App/Services/MatchEngine.cs` : regles de jeu et transitions
- `docker-compose.yml` + `Dockerfile` : execution locale
- `scripts/install-proxmox-lxc.sh` : creation et deploiement d'un LXC Proxmox
- `scripts/update-proxmox-lxc.sh` : mise a jour d'un LXC existant depuis Git