Skip to content

Commit 209a1b4

Browse files
doc: improve README.md
1 parent 09e8a96 commit 209a1b4

File tree

1 file changed

+86
-14
lines changed

1 file changed

+86
-14
lines changed

README.md

+86-14
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,91 @@
11
# Gymlib UCPA Facilitator
22

3-
Ce projet a pour but de me faire gagner du temps lors de mes réservations UCPA via Gymlib.
3+
Ce projet a pour but d'automatiser et simplifier les réservations via Gymlib et UCPA, en minimisant les étapes manuelles.
44

55
Voici les différentes étapes pour pouvoir préparer correctement sa venue :
66

77
![Les différentes étapes de réservation](./docs/étapes-reservation.png)
88

9-
Le projet est composé actuellement de 5 grandes étapes :
9+
Sur ce schéma, on peut voir des tâches sans valeur ajoutée comme remplir le formulaire de contremarque et les deux temps d'attentes de validation.
1010

11-
1. Vérifier qu'une nouvelle réservation a été demandée sur Gymlib
12-
2. Remplir le formulaire de contremarque UCPA
13-
3. Recevoir une notification dès que l'UCPA a validé les informations avec des créneaux arrangeants qui sont disponibles
14-
4. Créer des évènements dans un calendrier et proposer une url pour s'abonner au calendrier `/reservations/calendar`.
15-
5. Créer un pass Apple Wallet qui se met à jour pour chaque réservation
11+
Pour ces différentes raisons, j'ai automatisé les étapes facilement automatisables jusqu'à la réservation et après la réservation.
12+
Ce qui me permet d'avoir juste à faire une demande de code sur Gymlib, et choisir mon créneau horaire sur le site de l'UCPA.
13+
L'après-réservation est transparente pour moi, car je n'ai rien à faire pour avoir les réservations dans mon calendrier,
14+
et j'ai le QRCode sous la main à mon arrivée.
1615

17-
A venir :
16+
## Plus en détail
1817

19-
2. Me notifier de créneaux qui m'arrangent qui se libèrent
18+
Dans le code, les différentes étapes sont lancées par un CRON et sont découpées de cette manière :
2019

21-
La réservation du créneau se fait donc toujours manuellement sur le site de l'UCPA, mais toutes les étapes contraignantes
22-
et d'attente sont désormais automatisées.
20+
### 1. Vérifier qu'une nouvelle réservation a été demandée sur Gymlib
2321

24-
## Usage
22+
Le code analyse les e-mails reçus en provenance de Gymlib et récupère le code de contremarque dans le contenu de ce dernier.
23+
24+
### 2. Remplir le formulaire de contremarque UCPA
25+
26+
Le formulaire ayant un token CSRF, le plus rapide à mettre en place a été de faire remplir le formulaire en utilisant [Puppeteer](https://pptr.dev/),
27+
presque tous les champs du formulaire peuvent être remplis dynamiquement grâce à la variable d'environnement : `FORM_RESPONSE`.
28+
D'ailleurs, en phase de tests, vous pouvez désactiver l'envoi du formulaire grâce à la variable d'environnement `FORM_SUBMIT_ENABLED=false`.
29+
30+
### 3. Recevoir une notification dès que l'UCPA a validé les informations avec des créneaux arrangeants qui sont disponibles
31+
32+
Même principe que pour la première étape, le code détecte un e-mail en provenance de l'UCPA pour valider la contremarque
33+
et dire que l'e-billet est disponible sur votre espace personnel. Ensuite, le code cherche les créneaux qui vous arrangent, pour cela, il se base sur la variable d'environnement :
34+
35+
```dotenv
36+
TIME_SLOTS_PREFERENCES='{
37+
"sun": [
38+
"17h00",
39+
],
40+
"mon": [
41+
"19h00",
42+
"20h00"
43+
],
44+
}'
45+
```
46+
47+
Cette variable d'environnement n'a pas besoin d'avoir tous les jours de la semaine renseignée.
48+
49+
### 4. Créer des évènements dans un calendrier
50+
51+
Tous les créneaux réservés sont ajoutés à un calendrier en utilisant la librairie `ical-generator`.
52+
53+
Le calendrier est un lien auquel on s'abonne, il est disponible sous l'url `/reservations/calendar/${CALENDAR_ID}`,
54+
`CALENDAR_ID` correspond à ce qu'il y a dans la variable d'environnement.
55+
56+
### 5. Mettre à jour le pass Apple Wallet pour chaque réservation à venir
57+
58+
La génération du pass est géré par la librairie `passkit-generator`, il faut avoir un compte Apple Developer pour générer des pass.
59+
60+
Les prérequis sont :
61+
62+
- Avoir un compte Apple Developer
63+
- Générer tous les certificats nécessaires aux pass et les avoir mis dans le dossier `certs`
64+
- Fournir les variables d'environnement nécessaire pour le pass
65+
66+
```dotenv
67+
CERTIFICATES_SIGNER_KEY_PASSPHRASE=
68+
PASS_TYPE_IDENTIFIER=
69+
PASS_TEAM_IDENTIFIER=
70+
```
71+
72+
Pour le pass, il faut d'abord en créer un. Pour ça, nous devons récupérer un token :
73+
74+
```shell
75+
ACCESS_TOKEN=$(node --input-type=module --eval "console.log(await (await import('./src/infrastructure/jsonWebTokenService.js')).jsonWebTokenService.generateToken({}));")
76+
```
77+
78+
Après avoir obtenu notre token, nous pouvons faire un curl pour créer le pass :
79+
80+
```shell
81+
curl -X POST -H "Authorization: Bearer $ACCESS_TOKEN" http://localhost:4000/pass
82+
```
83+
84+
## A venir :
85+
86+
1. Me notifier de créneaux qui m'arrangent qui se libèrent
87+
88+
## Usage en développement
2589

2690
1. Copier le sample.env dans un fichier .env
2791

@@ -36,13 +100,13 @@ cp sample.env .env
36100
npm ci
37101
```
38102

39-
4. Lancer la base de donnée
103+
4. Lancer la base de données
40104

41105
```shell
42106
docker compose up -d
43107
```
44108

45-
5. Créer la base de donnée
109+
5. Créer la base de données
46110

47111
```shell
48112
npm run db:prepare
@@ -53,3 +117,11 @@ npm run db:prepare
53117
```shell
54118
npm start
55119
```
120+
121+
Voilà votre environnement est prêt !
122+
123+
## Contribuer
124+
125+
Les contributions sont les bienvenues !
126+
Que ce soit pour corriger des bugs, ajouter de nouvelles fonctionnalités ou améliorer la documentation,
127+
n'hésitez pas à ouvrir une issue ou à proposer une pull request.

0 commit comments

Comments
 (0)