Monorepo for the ProcrastIn school project (ESTIAM).
/
├── apps
│ ├── api # Fastify API
│ └── mobile # React Native app
└── libs
├── contract # The shared API contract w/ auto-generated client services and typescript models for the front-end
├── prisma # All prisma related things
(en français pour une meilleure compréhension)
Ce projet repose sur 4 principes :
- La robustesse du code
- La facilité de développement
- La vitesse de développement
- La maintenabilité dans le temps
Tout est mis en oeuvre pour maximiser au possible ces 4 principes, que ce soit par les technologies choisies, les méthodes employées, les systèmes mis en place ou encore le code produit.
Outre les technologies imposées par le projet, nous avons choisi d'utiliser :
react native
pour le front-end mobile. Il s'agit d'un framework très performant et très moderne qui permet de faire des applications mobiles de manière efficace et rapide, le tout pour iOS et Android sans avoir à développer deux bases de code différentes.expo
pour faciliter le développement de l'application mobile en React Native.nx
pour gérer l'entiereté du projet dans un seul repository git. Il s'agit d'un outil qui permet de gérer un monorepo de manière efficace.ts-rest
comme solution de contrat API. Cet outil nous permet, à l'instar de OpenAPI, de déclarer un contrat d'API et de générer automatiquement un client pour cette API. Cela permet de gagner du temps de développement et de s'assurer que le client et le serveur sont toujours en accord.@tanstack/query
(anciennementreact-query
) nous permet de gérer les appels API de manière efficace et de gérer le cache de manière transparente. Cela permet de gagner du temps de développement et de s'assurer que les appels API sont toujours cohérents.- ci/cd complet
github actions
eslint
etprettier
pour les configuration de standardisation de code.
L'un des points clés de ce projet réside dans la mise en place de tout un système d'auto-génération de code et d'extraction de type de code afin d'avoir un typage bout-en-bout constant et juste ainsi une synchronisation des modèles de données entre le back-end et le front-end. Ce simple point permet de grandement améliorer la robustesse du code, la facilité ainsi que la vitesse de développement et enfin la maintenabilité dans le temps. C'est à dire nos 4 principes de refonte cités précédement.
Dans notre cas précis, la "Single Source of Truth" (seule source de vérité) est le contrat ts-rest. De plus, nous avons ajouté des outils nous permettant de générer automatiquement des schéma Zod (utilisés ensuite dans ts-rest) à partir de notre schéma Prisma.
Un monorepo permet de gérer l'entiereté du projet dans un seul repository git. Cela permet de gérer les dépendances entre les projets, de gérer les tests, les builds, les générateurs de code, etc.
Il est très important dans notre cas puisque l'on peut ainsi gérer à la fois le back-end et le front-end dans le même repository, et donc faciliter l'auto-génération et la synchronisation des modèles de données et des types entre le back-end et le front-end.
- Node.js (>=22)
- Install Node dependencies
npm install
- Run the database generation
npm run prisma:generate
npx nx start mobile
npx nx start api
npm run prisma:generate
npm run prisma:migrate
⚠️ Warning: You'll need a fully fledged .env file
npx nx run prisma:seed