-
Notifications
You must be signed in to change notification settings - Fork 0
Wiki Ducklift
DuckLift est une application web et mobile conçue pour simplifier et améliorer la visualisation et le suivi des programmes d'haltérophilie pour les membres de mon club. Cette application permet aux athlètes de consulter facilement leurs programmes, leurs progressions et de recevoir des annonces du coach via l'application mobile. Le coach pourra paramétrer et définir les entrainements via l'application web.
Ce projet vise à enrichir ma maîtrise de certaines technologies en consolidant mes compétences existantes et en en explorant de nouvelles.
Le projet est la réalisation d'un projet complet incluants : la conception logiciel, le design ui/ux, le front-end, le backend, la persistance des données en incluant les divers tests et respectant la sécurité des informations des utilisateurs.
La Web App doit être full responsive et intégrer les normes d'accessibilité. Elle doit être supporté sur les principaux navigateurs. L'application mobile doit être distribué sur les plateformes iOS et Android. On aura donc essentiellement un rendu mobile, mais il faudra aussi garder en tête qu'un affiche sur tablette est possible.
Le public cible sont les membres de mon club d'haltérophilie, les athlètes et le coach de ce club.
- Définition de la cible et des besoins
- Définition des objectifs globaux des acteurs via diagramme UML
- Identification des interactions entre les différents cas d'usages
- Définition d'un glossaire des domaines du système
- Conception et modélisation de la base de donnée via diagramme de classe UML
- Schéma d'architecture de l'application simplifié
- Wireframes
- Creation des repos GitHub
- Dev Front Web App (en cours)
- Dev Back Api et BDD
- Dev Front Mobile App
- Déploiement
- L'athlète ouvre l'application et accède à la section des entraînements
- Le système affiche une liste d'entrainements disponibles pour l'athlète classés par date.
- L'athlète sélectionne un entrainement
- Le système récupère l'entraînement correspondant à la date choisie
- Le système charge le détail des éléments de l'entraînement (répétitions, charges, temps de repos, etc.)
- Le système affiche pour chaque exercice ou bloc d'exercices les charges en kilos que l'athlète doit utiliser basées sur le pourcentage du maximum souhaité par le coach
- L'athlète accède à la section des maximums
- Le système affiche la liste des exercices pour lesquels l'athlète a des maximums enregistrés
- Si l'athlète souhaite modifier maximums :
- L'athlète sélectionne un exercice à mettre à jour
- L'athlète entre la nouvelle valeur du Maximum pour cet exercice
- Le système enregistre le nouveau maximums avec la date actuelle
- Le système met à jour l'historique des maximums pour cet exercice
- Si lathlète souhaite ajouter un nouveau maximums à un exercice :
- L'athlète sélectionne l'ajout d'un nouveau maximum à créer
- Le système propose à athlète de choisir l'exercice parmi la liste d'exercices disponibles
- L'athlète sélectionne l'exercice et saisie le maximum en kilos
- Le système enregistre le nouveau maximums pour l'exercice avec la date actuelle
- L'athlète accède à la section programmation
- Le système récupère la programmation actuelle de l'athlète
- Le système affiche un calendrier avec les entraînements prévus par le coach
- L'athlète peut naviguer entre les semaines/mois/année
- Pour chaque jour, le système affiche un résumé de l'entraînement (type d'entrainements et/ou description)
- L'athlète peut sélectionner une date spécifique pour voir les détails de l'entraînement
- L'utilisateur (athlète ou coach) se connecte à l'application
- L'utilisateur accède à la section de la gestion du profil
- Le système affiche les informations actuelles du profil :
- Informations de base (nom, prénom, date de naissance)
- Club affilié
- Pays
- Avatar (image)
- Si l'utilisateur est un athlète, le système affiche également :
- Niveau de l'athlète (niveau : régional, national, rookie)
- Catégorie de sexe pour la compétition
- Catégorie de poids pour la compétition
- Mesures physiques (poids, taille, etc.)
- Nom du coach associé
- L'utilisateur peut modifier ses informations personnelles
- Si l'utilisateur est un coach, il peut :
- Voir la liste de ses athlètes associés
- Ajouter ou retirer des athlètes de sa liste
- Si l'utilisateur est un athlète :
- Le système affiche les actualité du club non consulté sous forme de notifications
- Le système peut envoyer un e-mail à l'athlète si celui à souhaité avoir accès à cette fonctionnalité dans ses préférences utilisateurs
- Si l'utilisateur est un coach :
- Il peut publier des messages à l'attention des membres du club sur l'actualité du club (compétitions à venir, information importantes)
- Le coach accède à la page permettant de gérer les entraînements
- Le système présente le choix entre une vue proposant un choix entre la bibliothèques des éléments liés aux entrainements ou la planification des entrainements des athlètes :
- Si le coach souhaite accéder à la vue de la bibliothèque des entrainements :
- Le système lui présente des listes d'exercices, bloc d'exercices et entrainements sous forme d'onglets.
- Pour chaque onglets il peut sélectionner un élément de la liste pour le modifier ou le supprimer ou créer un élément.
- Si le coach souhaite créer des éléments d'entraînement :
- Si le coach crée un exercice :
- Le système présente une interface de création d'exercice
- Il saisi le nom de l'exercice
- Il choisi le type d'exercice parmi une liste de type d'exercice possibles (ex: haltérophilie, musculation, cardio...)
- Il peut ajouter une description spécifique à l'exercice
- Il peut ajouter le nom anglais de l'exercice s'il y a lieu d'être
- Il peut ajouter une abréviation à ce nom d'exercice s'il le souhaite
- Il peut ajouter une vidéo de démonstration de exercice
- Il valide la création de l'exercice
- Le système enregistre le nouvel exercice avec la date actuelle de création
- Si le coach crée un bloc d'exercices :
- Le système présente une interface de création d'un bloc d'exercices
- Il choisi le type de bloc d'exercices à réaliser parmi une liste de type de blocs d'exercice possibles (ex: Renforcement, Complex d'arraché, Complex epaulé-jetté, AMRAP, TABATA, etc.).
- Il choisi au minimum deux exercices parmi la liste des exercices existants dans la bibliothèque d'exercice.
- Il choisi l'ordre d'exécution des exercices.
- Il peut ajouter une description pour la réalisation du bloc d'exercices. (ex: commentaire, point d'attention, objectif du bloc)
- Il valide la création du bloc d'exercices
- Le système enregistre le nouveau bloc d'exercices avec la date actuelle de création
- Si le coach crée un entrainement :
- Le système présente une interface de création d'un entrainement
- Il choisi d'ajouter un ou plusieurs exercices combiné ou non à un ou plusieurs bloc d'exercices parmi les listes des éléments de chaque déjà créé
- Le système propose également un raccourci vers la création d'un exercice ou d'un bloc d'exercices dans les listes des éléments proposés
- Pour chaque élément de l'entraînement, le coach saisie :
- Le nombre de répétitions
- Le nombre de séries
- Le pourcentage de charge (basé sur le maximum de l'athlète pour l'exercice défini)
- Le temps de repos (si applicable)
- La durée (si applicable)
- Le coach peut réordonner les éléments d'entraînement
- Le système enregistre l'entraînement dans la bibliothèque des entrainements
- Si le coach crée un exercice :
- Si le coach souhaite accéder à la planification des entraînements :
- Le système présente un calendrier
- Le calendrier comprend différents mode d'affichage par semaine/mois/année
- Le coach peut visualiser ou ajouter des entrainements en sélectionnant un jour sur le calendrier
- Plus de détails à venir...
- Si le coach souhaite accéder à la vue de la bibliothèque des entrainements :
- Le coach accède à la page permettant de gérer les athlètes
- Le système présente sa liste d'athlètes sous forme de grid ou cards avec le nom, prénom, pays, catégorie, poids de l'athlète, année de naissance, niveau de l'athlète et son maximum sur les deux mouvements de l'haltérophilie
- La liste d'athlètes peut être filtré par recherche (nom, prénom), par catégorie de poids (compétition), par catégorie de sexe (compétition) ou par niveau des athlètes (rookie, national, regional)
- Le coach peut accéder au détail de la fiche d'un athlète en cliquant dessus afin de visualiser des informations supplémentaire ou d'effectuer des modification sur celle ci (niveau par exemple)
Athlète
- Membre inscrit de l'application qui suit des entraînements personnalisés.
- Possède un profil contenant ses informations personnelles et ses maxima.
- Peut visualiser sa programmation d'entraînement et accéder à ses entraînements personnalisés.
- A la capacité de mettre à jour ses maxima pour chaque exercice.
- Peut visualiser le calendrier de sa programmation globale.
- Peut mettre à jour son profil (poids, taille, âge, catégorie, blessures).
- Reçoit des communications sur la vie du club (mises à jour importantes, les messages et les nouvelles programmations).
Coach
- Utilisateur avec des privilèges étendus qui crée et gère les entraînements des athlètes.
- Peut créer et gérer une bibliothèque d'exercices, de blocs d'exercices et d'entraînements.
- A la capacité de planifier les entraînements des athlètes.
- Dispose d'un tableau de bord pour gérer les profils des athlètes et visualiser leurs informations détaillées.
- Peut publier des communications sur la vie du club.
Entraînement
- Séance d'exercices spécifique assignée à un ou plusieurs athlètes pour une date donnée.
- Composé d'une série d'exercices ou de blocs d'exercices avec des paramètres spécifiques (séries, répétitions, charges, temps de repos).
- S'adapte automatiquement au profil de l'athlète pour les poids en fonction des maxima de celui ci.
Programmation
- Plan d'entraînements sur une période définie pour un ou plusieurs athlètes.
- Créée par un coach et adaptée aux objectifs et au niveau d'un ou plusieurs athlètes.
- Visualisable sous forme de calendrier par les athlètes.
Exercice
- Mouvement spécifique faisant partie d'un entraînement ou d'un bloc d'exercices.
- Possède des attributs tels que nom, type, description, nom anglais, abréviation, et potentiellement une vidéo de démonstration.
- Stocké dans la bibliothèque d'exercices pour être réutilisé dans différents entraînements ou blocs.
Bloc d'exercices
- Ensemble d'exercices regroupés pour former une unité d'entraînement cohérente.
- Possède un type spécifique (ex: Renforcement, Complex d'arraché, AMRAP, TABATA, etc.).
- Contient au minimum deux exercices avec un ordre d'exécution défini.
Bibliothèque d'entraînement
- Collection d'exercices, de blocs d'exercices et d'entraînements créée et maintenue par les coachs.
- Utilisée pour composer les entraînements et les programmations.
Maximum
- Performance maximale d'un athlète pour un exercice spécifique.
- Utilisé pour calculer les charges dans les entraînements personnalisés.
- Peut être mis à jour par l'athlète, avec un historique des valeurs précédentes.
- Spécifique à chaque mouvement technique de l'haltérophilie.
Message du club
- Communication textuelle publiée par un coach à l'attention des membres du club.
- Peut contenir des informations sur les compétitions à venir ou d'autres informations importantes.
Notification
- Alerte envoyée à l'athlète pour l'informer des actualités du club non consultées.
- Peut être associée à un e-mail si l'athlète a activé cette option dans ses préférences.
- Inclut les mises à jour importantes, les messages et les nouvelles programmations.
Profil athlète
- Ensemble d'informations personnelles d'un athlète.
- Inclut des données comme le nom, prénom, date de naissance, club affilié, pays, avatar, niveau, catégorie de sexe et de poids pour la compétition, mesures physiques, et nom du coach associé.
Profil coach
- Ensemble d'informations personnelles d'un coach.
- Inclut des données comme le nom, prénom, date de naissance, club affilié, pays, avatar.
- Contient également la liste des athlètes associés au coach.
Calcul automatique des charges
- Fonctionnalité qui détermine les charges en kilos pour chaque exercice d'un entraînement, basée sur le pourcentage du maximum de l'athlète spécifié par le coach.
Gestion des entraînements
- Ensemble de fonctionnalités permettant au coach de créer, modifier et organiser les exercices, blocs d'exercices et entraînements dans la bibliothèque d'entraînement.
- Inclut la planification et l'attribution des entraînements aux athlètes.
Gestion des athlètes
- Fonctionnalités permettant au coach de visualiser, filtrer et gérer les profils de ses athlètes.
Authentification
- Processus permettant aux athlètes et aux coachs de créer un compte et de se connecter à l'application.
- Nécessite la saisie du code du club d'haltérophilie lors de la création du compte.
//Todo Schéma UML
+-------------------+ +-------------------+ +-------------------+
| | | | | |
| Frontend | | Backend | | Base de Données |
| | | | | |
| React (Web App) | | - Nest.js (API) | | - PostgreSQL |
| | | | | |
| React Native | | | | |
| (Mobile App) | | | | |
| | | | | |
+-------------------+ +-------------------+ +-------------------+
| | |
| HTTP/HTTPS | TCP/IP |
| RESTful API | SQL Queries |
|------------------------->|-------------------------->|-
Visualisation de la Programmation d'Entraînement (Journal d’entraînements)
- Détails des exercices, pourcentages de travail et répétitions.
- Affichage par calcul automatique des poids à adapter pour les montées en charge (par exemple, de 80% à 95%) en fonction de l'Athlète.
-
Page Profil des Athlètes
- Profils détaillés avec nom, prénom, poids, taille, âge, et catégorie.
-
Page de Saisie et Visualisation des Max
- Pour l'adaptation automatique de la programmation aux fiches des athlètes.
-
Accès aux Fiches des Athlètes
- Filtres par poids, maxima, catégories, sexe.
-
Création et visualisation d'une Bibliothèque d'Exercices/Complex/Entrainements
- Interface pour élaborer, consulter et gérer une bibliothèque d'exercices, de complex (série ordonnée d'exercices) et/ou de séance d'entrainement complet (combinaison d'exercices et de complex).
-
Planification et visualisation des entrainements.
- Interface pour consulter un planning avec une visualisation jour/semaine/mois des entrainements prévus pour les athlètes
-
Vie du club
- Interface pour publier des annonces concernant le club (compétitions à venir, informations générales...)
- Deconnexion
- FAQ
- Aide
-
Gestion du Compte
- Téléchargement des données personnelles.
- Suppression du compte.
- Changement de Mot de Passe
-
Page Messages et Annonces Importants du Coach
- Fonctionnalité de suivi des lectures "vu par".
-
Annonces de Nouvelles Programmations d'Entraînement
- Alertes pour les nouveaux programmes disponibles (notifications dans l'app ou par email).
-
Création d'Événements
- Interface pour saisir les informations de l'événement (titre, description, date, lieu).
-
Suivi de la Progression
- Graphiques et visualisations pour suivre les progrès.
-
Mode Hors Ligne
- Accès aux fonctionnalités sans connexion internet.
-
Light/Dark Mode
- Adaptation de l'interface utilisateur pour confort visuel.
-
Chat Intégré du Club
- Communication en direct entre les membres.
-
Choix de la Langue
- Personnalisation linguistique de l'application.
Disponibles sur le notion du projet : url
Environnement de Développement : VsCode
Fournir des détails sur les standards de codage et les meilleures pratiques adoptées. (guides de style de code, des conventions de nommage)
- Front-End : React, React Router, React Native, TypeScript, Expo, Chakra UI, TanStack Query, React Paper (ou MUI), Storybooks, Zustand (si besoin) et Immer, Library Mouse Events, Touch Event : https://use-gesture.netlify.app/
- Back-End : Nest.js.
- Base de Données : PostgreSQL.
- CI/CD : Docker, Docker Compose, GitHub Actions.
- Gestion de projet : Notion
- Qualité du Code : Eslint, Prettier, SonarQube.
- Intégration des Design Patterns : Utilisation de modèles tels que Repository, Unit of Work, Singleton, et Factory pour structurer le code de manière efficace et maintenable.
- API et Logique Métier : Développement de l'API (RESTful) en Nest.js, implémentation de la logique métier.
- Interface Utilisateur: Construction des vues en React Native, en utilisant des composants pour un design réactif et accessible.
- Intégration avec le Back-End : Connexion du front-end au back-end via l'API RESTful.
- Accessibilité : RGAA
- Interface Utilisateur: Construction des vues en React, en utilisant des composants pour un design réactif et accessible.
- Intégration avec le Back-End : Connexion du front-end au back-end via l'API RESTful.
- Accessibilité : RGAA
- Sécurité : Assurer la sécurité des données utilisateur et des communications entre le client et le serveur. Définition des méthodes et outils utilisés pour sécuriser l'application dans la documentation.
- Authentification / Autorisation : Intégration d'un systeme robuste d'authentification et d'autorisation
- Techniques et outils utilisés pour le profiling et l'optimisation des performances.
- Approches pour assurer des temps de réponse rapides et une utilisation efficace des ressources.
Élaborez sur les types de tests effectués et comment ils sont intégrés dans le processus de développement.
- Tests Unitaires : Vitest/React Testing Library pour les composants Front-End.
- Tests d'Intégration : Vérification de l'interaction entre différents modules et services.
- Tests E2E : Utilisation Playwright pour simuler des scénarios utilisateur complets
- CI/CD : Mise en place d'un pipeline d'intégration continue et de déploiement continu avec GitHub Actions.
- Stratégies de Déploiement : Déployer l'application sur des plateformes cloud telles que Heroku, Vercel ou Netlify.
- Définition : L'environnement de staging, ou de préproduction, est une réplique exacte de l'environnement de production. Il est utilisé pour tester les codes, les mises à jour ou les nouvelles fonctionnalités dans des conditions presque identiques à celles de l'environnement de production.
- Objectif : Le but principal est de valider le logiciel dans un environnement qui simule étroitement le monde réel ou la production. Cela permet de détecter et de corriger les bugs, les problèmes de performance ou tout autre problème avant que le logiciel ne soit déployé en production.
- Tests : Les tests dans l'environnement de staging peuvent inclure des tests d'intégration, des tests de charge et de performance, et des tests d'acceptation utilisateur.
-
Systèmes de monitoring et de logging mis en place.
-
Stratégies pour surveiller la santé de l'application et détecter rapidement les problèmes.
-
Backups et Restauration
- Planification des sauvegardes de données.
- Procédures de restauration en cas de défaillance.
Checklist : Transformez les éléments de monitoring et de backups en une checklist pour faciliter le suivi.
Documentation Technique : Cette section concerne la documentation technique et la formation des utilisateurs.
- Documentation de l'API avec Swagger/OpenAPI.
- Documentation du code et des procédures opérationnelles.
- Diagrammes d'architecture
Questions Fréquentes
Contacts pour le Support
Guides d'utilisation pour les utilisateurs finaux. Screenshot, carrousel tour tuto