Skip to content

Wiki Ducklift

Nets edited this page Aug 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.

Ce projet vise à enrichir ma maîtrise de certaines technologies en consolidant mes compétences existantes et en en explorant de nouvelles.

1. Vue d'Ensemble du Projet

Objectif du Projet

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.

Contraintes Techniques

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.

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 et Roadmap

  • 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
  • Dev Back Api et BDD
  • Dev Front Mobile App
  • Déploiement

(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 évènements du club non consulté sous forme de notification
    • Le système peut envoyer un email à 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 coach accède à une vue lui présentant 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 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 spécifie :
    • 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

7. Gestion des athlètes (Coach)


User Stories (A suppr) et remplacer par un glossaire du Domaine

Authentification

En tant qu'athlète ou coach, je veux pouvoir créer un compte et me connecter facilement, afin de pouvoir accéder aux informations d'entraînement et à mes progrès personnels. La création d'un compte nécessite la saisie du code du club d'haltérophilie.

Visualisation de la Programmation d'Entraînement

En tant qu'athlète, je veux voir la programmation d'entraînement du jour publiée par le coach, afin que je sache quel entraînement effectuer à chaque session.

Page Profil des Athlètes

En tant qu'athlète, je veux pouvoir visualiser et mettre à jour mon profil (poids, taille, âge, catégorie), afin de suivre mes progrès et m'assurer que la programmation est adaptée à mes besoins.

Journal d'Entraînement et Planification pour le Coach

En tant que coach, je veux pouvoir enregistrer et planifier les exercices, poids et répétitions pour mes athlètes, afin de gérer efficacement leur progression.

Page de Messages et Annonces du Coach

En tant qu'athlète, je veux recevoir des annonces et messages importants du coach, afin de rester informé des mises à jour et des conseils.

Tableau de Bord du Coach

En tant que coach, je veux avoir un tableau de bord pour accéder aux bibliothèques d'entraînements et aux fiches des athlètes, afin de gérer plus efficacement l'entraînement de mon équipe. Je veux pouvoir les attribuer à un ou plusieurs athlètes et définir la date de l'entrainement.

Notifications et Annonces

En tant qu'athlète, je veux recevoir des notifications pour les mises à jour importantes, les messages et les nouvelles programmations, afin de ne rien manquer d'important.

Programmation Personnalisée

En tant qu'athlète, je veux que la programmation s'adapte automatiquement à ma fiche (pour les poids), pour que je puisse optimiser mon entraînement en fonction de mes capacités actuelles.

Page de Saisie et Visualisation des Max

En tant qu'athlète, je veux pouvoir saisir et visualiser mes maxima pour chaque mouvement technique de l'haltérophilie, afin que le calculateur de charge puisse ajuster automatiquement les poids en fonction de ma programmation.


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

//Todo Schéma UML


Architecture du Système (temporaire)

+-------------------+       +-------------------+       +-------------------+
|                   |       |                   |       |                   |
|    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               |
         |------------------------->|-------------------------->|

Fonctionnalités Principales

Page Principale

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

Tableau de Bord des Athlètes

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

Tableau de Bord du Coach

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

Page Réglages

  • Deconnexion
  • FAQ
  • Aide
  • Gestion du Compte
    • Téléchargement des données personnelles.
    • Suppression du compte.
  • Changement de Mot de Passe

Notifications et Annonces

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

Fonctionnalités futures

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

(retour en haut)


4. Interface Utilisateur et UX

Wireframes

Disponibles sur le notion du projet : url

(retour en haut)


5. Développement

Environnement de Développement : VsCode

Guidelines

Fournir des détails sur les standards de codage et les meilleures pratiques adoptées. (guides de style de code, des conventions de nommage)

Intégration des Technologies

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

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 (RESTful) en Nest.js, implémentation de la logique métier.

Front-End App mobile : React Native

  • 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

Front-end Wep App : React

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

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

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 : Transformez les éléments de monitoring et de backups en une checklist pour faciliter le suivi.

Version Beta: Lancez 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.
  • Documentation du code et des procédures opérationnelles.
  • 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)

Clone this wiki locally