Créer une application distribuée et auto-hébergée (via Docker) pour permettre aux équipes Agile de suivre leur moral quotidien.
- Transparence : Visualiser l’humeur collective.
- Détection précoce : Identifier les baisses de moral.
- Empathie : Comprendre les défis de l'équipe.
- Motivation : Encourager l'utilisation via la gamification.
Public Cible : Équipes Agile, Managers, Scrum Masters, et membres de projets.
- Backend : API RESTful en .NET 10 (WebAPI).
- Architecture : Pattern Skinny Controllers / Fat Services.
- Contrats : Interfaces définies dans
NikoNiko.Core/Interfaces. - Logique : Services implémentés dans
NikoNiko.Services.
- Frontend : Application React 19+ avec TypeScript, Material UI, Axios, et SWR.
- Base de Données : PostgreSQL / SQLite (configurable).
- Déploiement : Docker (3 services : backend, frontend, db) avec une configuration centralisée dans
docker/.
- Authentification : OAuth2 (GitHub, Google, Discord). Microsoft est temporairement désactivé.
- Gestion d'Équipes : Création d'équipes (jusqu'à 2 pour les utilisateurs réguliers), gestion des membres (invitations) et paramètres administratifs comme la Durée de Sprint par Défaut et les Modèles de Nom de Sprint.
- Sprints : Définition de périodes de travail avec validation stricte :
- Pas de chevauchement : Les sprints d'une même équipe ne peuvent pas avoir de dates communes.
- Limite de durée : Un sprint ne peut pas dépasser 2 mois (62 jours).
- Suivi d'Humeur : Enregistrement quotidien (🤩/😊/😐/
☹️ /😫) restreint à la période du sprint en cours. Les dates futures sont bloquées. - Notifications Temps Réel : Intégration de SignalR pour des notifications en temps réel sur les actions importantes (création d'équipe, renommage, mises à jour des membres, entrées d'humeur).
- Gamification : Attribution de badges pour encourager la participation.
- Tableau de Bord : Vue centralisée des équipes, sprints et calendriers, avec une navigation simplifiée pour les utilisateurs et des vues administratives pour les chefs d'équipe.
User: Informations de profil et identifiants OAuth associés.Team: Unité collaborative avec un administrateur, des membres, des sprints et des paramètres par défaut.Sprint: Période de travail définie liée à une équipe avec des dates de début/fin.MoodEntry: Enregistrements du moral des utilisateurs liés à une date et un sprint spécifiques.Badge: Récompenses de gamification.
| Action (Endpoint) | Ressource | user |
team-admin |
super-admin |
|---|---|---|---|---|
| Équipes | ||||
GET /api/teams |
Liste les équipes | Ses équipes | Ses équipes | Toutes |
GET /api/teams/{teamId} |
Voir une équipe | Si membre | Si membre/admin | Toutes |
POST /api/teams |
Créer une équipe | ✓ (Max 2) | ✓ (Max 2) | Illimité |
PUT /api/teams/{teamId} |
Modifier une équipe | Non | Seulement son équipe | Toutes |
DELETE /api/teams/{teamId} |
Supprimer une équipe | Non | Seulement son équipe | Toutes |
| Utilisateurs | ||||
GET /api/users |
Liste les utilisateurs | Membres d'équipe | Membres d'équipe | Tous |
DELETE /api/users/me |
Supprimer son compte | ✓ Soi-même | ✓ Soi-même | Tous |
DELETE /api/users/{id} |
Supprimer utilisat. | Non | Non | Tous |
DELETE /api/teams/{teamId}/users/{userId} |
Retirer d'une équipe | Non | Seulement de son équipe | Toutes |
| Sprints | ||||
GET /api/sprints |
Liste les sprints | Leurs équipes | Leurs équipes | Tous |
POST /api/sprints |
Créer un sprint | Non | Seulement pour son équipe | Tous |
PUT /api/sprints/{sprintId} |
Modifier un sprint | Non | Seulement pour son équipe | Tous |
DELETE /api/sprints/{sprintId} |
Supprimer un sprint | Non | Seulement de son équipe | Tous |
| Humeurs (Moods) | ||||
GET /api/moods/bysprint/{sprintId} |
Lister les humeurs | Membres d'équipe | Membres d'équipe | Toutes |
POST /api/moods |
Enregistrer humeur | ✓ Dans le sprint | ✓ Dans le sprint | ✓ Dans le sprint |
PUT /api/moods/{id} |
Modifier une humeur | ✓ Uniquement la sienne | ✓ Uniquement la sienne | ✓ Uniquement la sienne |
| Invitations | ||||
GET /api/teams/{teamId}/invitations |
Lister les invitations | Non | Seulement pour son équipe | Toutes |
POST /api/teams/{teamId}/invitations |
Créer une invit | Non | Seulement pour son équipe | Toutes |
DELETE /api/teams/{teamId}/invitations/{invitationId} |
Supprimer invit | Non | Seulement de son équipe | Toutes |
Pour que l'authentification OAuth 2.0 fonctionne, vous devez configurer les fournisseurs externes.
-
Créez une application OAuth 2.0 pour chaque fournisseur :
-
Configurez les URI de redirection : Lors de la création de vos applications, utilisez les callbacks suivants pour l'environnement de développement.
- GitHub :
http://localhost:5000/signin-github - Google :
http://localhost:5000/signin-google - Discord :
http://localhost:5000/signin-discord
- GitHub :
-
Mettez à jour
appsettings.jsonet votre fichier.env: Remplacez les valeurs deClientIdetClientSecretavec les vôtres. Assurez-vous également que la variableJWT_KEYest définie dans.env."Authentication": { "GitHub": { "ClientId": "VOTRE_CLIENT_ID_GITHUB", "ClientSecret": "VOTRE_CLIENT_SECRET_GITHUB" }, "Google": { "ClientId": "VOTRE_CLIENT_ID_GOOGLE", "ClientSecret": "VOTRE_CLIENT_SECRET_GOOGLE" }, "Discord": { "ClientId": "VOTRE_CLIENT_ID_DISCORD", "ClientSecret": "VOTRE_CLIENT_SECRET_DISCORD" } // Microsoft est temporairement désactivé. }
Le projet peut être configuré pour utiliser PostgreSQL ou SQLite.
-
Pour utiliser SQLite (par défaut dans la branche
feature/back_sqlite) :- Dans
api/backend/appsettings.json, assurez-vous queDatabaseProviderest défini sur"SQLite". - Dans
docker-compose.yml, le servicedb(PostgreSQL) doit être commenté.
- Dans
-
Pour revenir à PostgreSQL :
- Dans
api/backend/appsettings.json, changezDatabaseProviderpour"PostgreSQL"(ou toute autre valeur que "SQLite"). - Dans
docker-compose.yml, décommentez le servicedb. - Note : Les migrations EF Core sont spécifiques au fournisseur. Pour changer de base de données, vous devrez peut-être supprimer le dossier
Migrationset en créer de nouvelles.
- Dans
Les migrations EF Core doivent être exécutées à l'intérieur du conteneur backend pour assurer l'accès à la base de données SQLite mappée.
- Assurez-vous que le service
backendest lancé (au moinsdocker compose up -d backend). - Accédez au shell du conteneur
backend:docker compose exec backend bash - Naviguez vers le dossier du projet API à l'intérieur du conteneur :
cd /app/api/NikoNiko.Api - Ajoutez une nouvelle migration (remplacez
NomDeVotreMigrationpar un nom descriptif) :dotnet ef migrations add NomDeVotreMigration --project ../NikoNiko.Data --startup-project . - Les migrations sont appliquées automatiquement au démarrage du service
backendviadbContext.Database.Migrate()dansProgram.cs. Vous n'avez pas besoin d'exécuterdotnet ef database updatemanuellement. - Quittez le shell du conteneur :
exit
The project uses a split Docker Compose configuration to separate common settings, development specifics, and production overrides.
docker-compose.yml: Base configuration (services, images, env vars).docker-compose.override.yml: Development overrides (ports, test services). Loaded automatically.docker-compose.prod.yml: Production overrides (Traefik labels, networks).
To build and run all services in detached mode for development (loads base + override):
docker compose up -d --buildTo run in production mode (loads base + prod, ignoring dev overrides):
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --buildNote sur la persistance des données PostgreSQL: Les données de la base de données PostgreSQL sont désormais stockées dans un répertoire local (./postgres_data) à côté du fichier docker-compose.yml. Cela facilite la sauvegarde et la gestion directe des données de la base de données pour les environnements de développement.
To stop the services:
docker compose downIf you wish to run frontend and/or backend locally without Docker Compose, follow these steps:
- Navigate to the
api/NikoNiko.Apidirectory:cd api/NikoNiko.Api - Install .NET dependencies:
dotnet restore
- After any change in .NET projects, execute
dotnet formatto apply code style preferences defined in.editorconfig. - Update
appsettings.jsonwith your database connection string and OAuth settings. Ensure the PostgreSQL database is running (e.g., viadocker compose up db). - Run the backend API:
The API will typically run on
dotnet run
http://localhost:5000(or as configured inlaunchSettings.json).
-
Navigate to the
app/frontenddirectory:cd app/frontend -
Install Node.js dependencies:
npm install # or yarn install -
Start the development server:
npm run dev # or yarn devThe frontend application will typically be accessible at
http://localhost:5173(or as configured by Vite). -
Control every changes using ES Lint:
npm run lint
Fix any lint or Typescript error.