Skip to content

Wiki Ducklift

nenets edited this page Nov 25, 2024 · 56 revisions

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.

1. Vue d'Ensemble du Projet

Objectif du Projet

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.

Contraintes Techniques

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.

Public Cible

Le public cible sont les membres de mon club d'haltérophilie, les athlètes et le coach de ce club.

(retour en haut)


2. Planification

  • 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

(retour en haut)


3. Conception Technique

Diagramme des cas d'usages


uml_use_cases

Flux d'interaction

1. Accéder à son entraînement personnalisé (Athlète)

  • 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

2. Gestion des maximums (Athlète)

  • 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

3. Visualisation du calendrier de la programmation globale (Athlète)

  • 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

4. Gestion du profil (Athlète et Coach)

  • 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

5. Communication vie du club (Athlète et Coach)

  • 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)

6. Gestion des entraînement (Coach)

  • 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 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...

7. Gestion des athlètes (Coach)

  • 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)

Glossaire du domaine

Utilisateurs

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înements

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.

Communication

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

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.

Système

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.

Conception préliminaire de la base de données et des modèles de données

uml_bdd_diagram ![uml bdd diagram](https://github.com/Netsbump/duckLift/blob/main/wiki/images/dbdiagram-users-ducklift.pdf)

Schéma d'architecture de l'application


app_architecture

(retour en haut)


4. Interface Utilisateur et UX

Wireframes

Disponibles sur le notion du projet : url

(retour en haut)


5. Développement

Intégration des Technologies

  • 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

Back-End : Nest.js

  • 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.

Front-end Wep App : React Typescript

  • Interface Utilisateur: Construction des vues en React, en utilisant des composants pour un design réactif et accessible.
  • Accessibilité : RGAA

Sécurité

  • 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

Performance

  • 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.

(retour en haut)


6. Tests et Assurance Qualité

Stratégie de Test

Élaborez sur les types de tests effectués et comment ils sont intégrés dans le processus de développement.

Outils de Test

  • 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

(retour en haut)


7. Déploiement et Maintenance

Processus de Déploiement :

  • 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.

Environnements de Staging et Production :

  • 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.

Monitoring et Logging :

  • 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.

Version Beta: Lancement d'une version beta pour collecter les retours des utilisateurs.

(retour en haut)


8. Documentation et Ressources

Documentation Technique : Cette section concerne la documentation technique et la formation des utilisateurs.

  • Documentation de l'API avec Swagger/OpenAPI.
  • Diagrammes d'architecture

Ressources Externes

(retour en haut)


9. FAQ et Support

Questions Fréquentes
Contacts pour le Support

Formation des Utilisateurs

Guides d'utilisation pour les utilisateurs finaux. Screenshot, carrousel tour tuto

(retour en haut)