-
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.
Le projet inclut : la conception logiciel, le design ui/ux, le front-end, le backend, la persistance des données, les tests et le déploiement de l'application.
La Web App doit être 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.
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
- Schéma d'architecture de l'application
- Bootstrap du projet (dépôts git, client, api, bdd)
- Dev CRUD feature d'exercice
- Wireframes
- Dev Client Web App (en cours)
- Dev Back Api et BDD
- Schéma du deploiement de l'application
- 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
- Membre utilisateur avec des privilèges étendus qui crée et gère les entraînements des athlètes.
- Possède un profil contenant ses informations personnelles et ses maxima.
- A la capacité de mettre à jour ses maxima pour chaque exercice.
- 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 filtrer les athlètes par poids, maxima, catégories, sexe)
- 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 afficher 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 jour/mois/semaine.
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 ordonnée 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.
- Comporte une fonctionnalité de suivi des lectures "vu par".
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 publication d'entrainements disponibles.
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é.
- Inclut des graphiques et visualisations pour suivre les progrès (fonctionnalité future).
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.
Gestion du compte
- Permet le téléchargement des données personnelles.
- Offre la possibilité de supprimer le compte.
- Permet le changement de mot de passe.
Fonctionnalités futures
- Mode hors ligne pour accéder aux fonctionnalités sans connexion internet.
- Choix entre mode clair et sombre pour l'interface utilisateur.
- Chat intégré du club pour la communication en direct entre les membres.
- Choix de la langue pour la personnalisation linguistique de l'application.
Disponibles sur le notion du projet : url
- Front-End : React, TypeScript, TanStack (Query + Router), Shadcn + Tailwind
- Back-End : Nest.js + MikroORM
- Base de Données : PostgreSQL.
- Recherche: Typesense
- Cache: Redis
- CI/CD : Docker, Docker Compose, GitHub Actions.
- Gestion de projet : Notion
- Qualité du Code : Biome, SonarQube.
- Monorepo: Turborepo
- 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 (REST ou GraphQL) en Nest.js.
- Interface Utilisateur: Construction des vues en React, en utilisant des composants pour un design réactif et accessible.
- 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 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 : Transformer 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.
- Diagrammes d'architecture
Questions Fréquentes
Contacts pour le Support
Guides d'utilisation pour les utilisateurs finaux. Screenshot, carrousel tour tuto