|
|
|
# API
|
|
|
|
|
|
|
|
L'API de Churros permet l'interaction avec les données de l'application. C'est un API [GraphQL](https://graphql.org/), dont la documentation est disponible à `/graphql` (par exemple, <https://churros.inpt.fr/graphql>). À l'API GraphQL s'ajoute quelques autres URLs fournissant des services divers:
|
|
|
|
|
|
|
|
- Un serveur de fichiers statiques pour les fichiers générés par les utilisateurs à `/storage` (sert par exemple à récupérer les photos de profil, les logos des clubs ou les documents sur La Frappe)
|
|
|
|
- Un endpoint pour récupérer ses données personnelles à `/dump` (voir [RGPD (données personnelles)](#rgpd-donnees-personnelles))
|
|
|
|
- Un [webhook Lydia](#webhook-lydia) à `/lydia-webhook`, servant à recevoir les acquittements de paiements depuis [Lydia](https://lydia-app.com)
|
|
|
|
- Un service pour télécharger en .pdf les billets d'évènements à `/print-booking/:pseudoID`, où `:pseudoID` est le code de réservation du billet.
|
|
|
|
- Un endpoint pour échanger un code d'autorisaton OAuth contre un token d'accès à `/token` (voir [OAuth](#oauth))
|
|
|
|
- Un endpoint `/log` pour logger du contenu dans côté serveur depuis le côté client (utile, par exemple, pour le [Service worker](#service-worker) de l'application)
|
|
|
|
- Un endpoint `/maintenance` servant une simple page de maintenance (voir [Maintenance](#maintenance))
|
|
|
|
|
|
|
|
## Architecture
|
|
|
|
|
|
|
|
Pour gérer ces divers _endpoints_, l'API est implémentée comme un server [Express](https://expressjs.com/).
|
|
|
|
|
|
|
|
Le serveur GraphQL est servi avec [GraphQL Yoga Server](https://the-guild.dev/graphql/yoga-server), et est implémenté avec [Pothos](https://pothos-graphql.dev).
|
|
|
|
|
|
|
|
Les données sont stockées dans une base de données [PostgreSQL](https://www.postgresql.org/), dont la gestion des migrations, la spécification des tables et l'interaction avec l'API est gérée via [Prisma](https://www.prisma.io/).
|
|
|
|
|
|
|
|
|
|
|
|
Enfin, pour assurer la cohérence de caches et la gestion des [subscriptions (pour le temps réel)](#subscriptions), l'API utilise une base de données [Redis](https://redis.io/).
|
|
|
|
|
|
|
|
> **NOTE:** La cohérence des caches n'est pour l'instant pas assurée via Redis.
|
|
|
|
|
|
|
|
## Organisation des fichiers
|
|
|
|
|
|
|
|
> **NOTE:** Une refonte de l'organisation des fichiers de l'API est prévue pendant les vacances d'avril 2024.
|
|
|
|
|
|
|
|
- `src/index.ts`: Pointe d'entrée de l'API, démarre le serveur Express et le serveur GraphQL
|
|
|
|
- `src/lib/builder.ts`: Configure Pothos
|
|
|
|
- `src/schema.ts`: Définit le schema GraphQL en important les diverses définitions de types et de requêtes
|
|
|
|
- `src/objects/<nom_du_type>.ts`: Définit les types GraphQL ainsi que les _queries_ et _mutations_ associées
|
|
|
|
- `src/services/<nom_du_service>.ts`: Définit les services GraphQL, qui sont des _queries_ et/ou _mutations_ non reliées à des objets en base de données
|
|
|
|
- `prisma/schema.prisma`: Définit les tables de la base de données
|
|
|
|
- `prisma/migrations`: Contient les migrations de la base de données. À ne pas modifier manuellement.
|
|
|
|
- `src/seed.ts`: Script pour remplir la base de données avec des données de test
|
|
|
|
- `scripts/`: Scripts divers, servant à la maintenance, au développement et (au déploiement initial de Churros) ayant servi à la migration de données depuis l'[ancien portail](#ancien-portail)
|
|
|
|
- `src/*.sql`: Du code SQL ayant été intégré manuellement dans les migrations. Gardé dans des fichiers pour pouvoir les ré-éxécuter si jamais les migrations sont réinitialisées.
|
|
|
|
- `src/*.ts`: Les autres fichiers dans src sont des fonctions utilitaires |