Le but de l'application que vous développez est de permettre la détection du diabète de type 2 chez les patients. En utilisant une architecture microservices, cette application permettra de gérer les dossiers patients, les notes des médecins, et d'anticiper le niveau de risque de diabète d'un patient en se basant sur ses caractérisitques (âge, genre, etc.) et les notes le concernant (recherche intelligente dans les notes de facteurs aggravant).
L'objectif final est donc de fournir une solution complète pour le dépistage des risques de diabète, en respectant les normes de qualité de données, en assurant la sécurité de l'accès aux données des patients et en suivant les principes du Green Code pour la protection de l'environnement.
Ce projet est une application web composée de plusieurs microservices backend et frontend. Il utilise ASP.NET Core 8 pour les services backend et un frontend basé sur ASP.NET MVC.
- P10 Projet Éducatif
graph TD
subgraph CoreServices
A[Frontend] <--> B(ApiGateway)
B <--> C[AuthService]
B <--> D[BackendPatient]
B <--> E[BackendNote]
B <--> I[BackendDiabetesRiskPrediction]
end
subgraph Databases
C --> J[(AuthServiceDb - SQL Server)]
D --> F[(PatientDb - SQL Server)]
E --> G[(P10 - Notes - MongoDB)]
E --> H[Elasticsearch]
I <--> H
end
subgraph SharedComponents
L{{SharedLibrary}} --> A
L --> B
L --> C
L --> D
L --> E
L --> I
end
subgraph Infrastructure
M([Docker Compose])
M --> N([Container Services])
N -.- A
N -.- B
N -.- C
N -.- D
N -.- E
N -.- I
N -.- G
N -.- H
O[MongoDB Express]
N -.- O
O <--> G
end
- ApiGateway : Contient le projet de la passerelle API Gateway implémenté avec Ocelot.
- Auth : Contient le projet d'authentification avec Identity + Entity Framework et SQL Server en utilisant JWT Bearer.
- BackendNote : Contient le projet de gestion des notes MongoDB Driver et MongoDB et Elasticsearch.
- BackendPatient : Contient le projet de gestion des patients avec Entity Framework et SQL Server.
- BackendDiabetesRiskPrediction : Contient le projet de prédiction du risque de diabète avec Elasticsearch.
- Frontend : Contient le projet frontend avec ASP.NET Core 8 MVC.
- SharedLibrary : Contient les bibliothèques partagées entre les différents projets.
Frontend (port 7000) effectue des requêtes auprès de l'API Gateway (port 5000). API Gateway redirige les requêtes vers :
- BackendPatient (port 7200),
- Auth Service (port 7201),
- BackendNote (port 7202),
- BackendDiabetesRiskPrediction (port 7204).
BackendPatient utilise SQL Server via Entity Framework pour la gestion des patients. Auth Service gère l'authentification de tous les microservices avec JWT Bearer (tokens + refresh). BackendNote utilise MongoDB pour la gestion des notes. BackendDiabetesRiskPrediction utilise Elasticsearch pour la prédiction du risque de diabète.
-
Clonez le repository :
git clone https://github.com/EveCrystali/P10.git cd P10
-
Assurez-vous d'avoir installé :
- Docker Desktop
- SQL Server Express
-
Restaurez les bases de données SQL Server pour les services BackendPatient et Auth depuis SQL Server Management Studio (SSMS) :
- Utilisez les fichiers de sauvegarde contenus dans
P10>SQLServerDBBackup
pour restaurer les bases de données des micro-services BackendPatient et Auth (voir Recommandé : Restauration des Bases de Données à partir des Sauvegardes) pour plus de détails.
- Utilisez les fichiers de sauvegarde contenus dans
-
Exécutez le script SQL fourni (
create_backend_user.sql
) sur votre instance SQL Server :- Depuis SQL Server Management Studio (SSMS), dans
Fichier > Ouvrir > Fichier
sélectionnez le fichiercreate_backend_user.sql
dans le dossierSQLServerDBBackup
- Exécutez le script
create_backend_user.sql
depuis l'onglet de requête
- Depuis SQL Server Management Studio (SSMS), dans
-
Lancez les services avec Docker :
docker-compose build --no-cache docker-compose up -d
-
Accédez à l'application :
- Frontend : http://localhost:7000
Pour plus de détails sur l'installation et la configuration, consultez les sections suivantes.
Le projet utilise Docker pour la gestion des services backend, frontend, l'API Gateway et les bases de données MongoDB et Elasticsearch.
Note : Si vous souhaitez uniquement exécuter l'application via Docker, le SDK .NET 8 n'est pas nécessaire. Il n'est requis que si vous souhaitez développer ou modifier le code localement.
-
Clonez le repository :
git clone https://github.com/EveCrystali/P10.git cd P10
Note : Le paragraphe suivant ("2.") n'est nécessaire que si vous souhaitez développer localement. Pour simplement exécuter l'application, vous pouvez passez directement à la section suivante.
- Pour le développement local uniquement :
- Installez .NET 8 SDK
- Installez l'outil Entity Framework Core :
dotnet tool install --global dotnet-ef
- Restaurez les packages NuGet :
dotnet restore
-
Téléchargement et Installation :
- Téléchargez SQL Server Express depuis ce lien.
- Lancez l’installateur et suivez les instructions à l'écran.
- Configuration de l’instance :
- Choisissez une installation par défaut ou nommée selon vos préférences.
- Configurez le mode d’authentification en sélectionnant Authentification mixte (Windows + SQL Server).
- Définissez un mot de passe fort pour l’utilisateur
sa
.
-
Activation de TCP/IP :
- Ouvrez SQL Server Configuration Manager.
- Naviguez vers SQL Server Network Configuration > Protocols for [Votre Instance].
- Activez TCP/IP.
- Redémarrez le service SQL Server pour appliquer les changements.
Les bases de données SQL Server pour les microservices BackendPatient
et Auth
ne sont pas contenerisées dans Docker. Vous pouvez les restaurer depuis les fichiers de sauvegarde fournis dans P10>SQLServerDBBackup
(recommandé) OU (DEPRECIE) vous pouvez décider de créer manuellement des bases de données SQL Server via SQL Server Express puis utiliser des migrations to code first avec Entity Framework (non recommandé). *Une seule de ces deux méthodes est à réaliser.*Pour plus de détails sur la création manuelle des bases de données SQL Server avec migrations to code first, voir la section : Restauration des Bases de Données en utilisant les Migrations Entity Framework (SQL Server).
Pour simplifier la configuration des bases de données, vous pouvez restaurer les bases de données nécessaires PatientDb
et AuthServiceDb
avec l'utilisateur backend_user
à partir des fichiers de sauvegarde fournis AuthServiceDb.bak
et PatientDb.bak
, ainsi que le le script SQL fourni (create_backend_user.sql
) dans P10>SQLServerDBBackup
.
- Ouvrir SQL Server Management Studio (SSMS) :
- Lancez SSMS et connectez-vous à votre instance SQL Server.
Toutes les étapes suivantes s'effectue dans l'instance SQL Server.
-
Restaurer
AuthServiceDb
:- Faites un clic droit sur
Base de données
dans l’Explorateur d’objets et sélectionnezRestaurer la base de données
- Sélectionnez
Support
, cliquez sur...
puis cliquez surÀjouter
et naviguez jusqu’au fichier de sauvegardeAuthServiceDb.bak
. - Cliquez sur
OK
pour lancer la restauration.
- Faites un clic droit sur
-
Restaurer
PatientDb
:- Répétez le même processus que pour
AuthServiceDb
, en sélectionnant le fichierPatientDb.bak
.
- Répétez le même processus que pour
-
Vérifier la Restauration :
- Assurez-vous que les bases de données AuthServiceDb et PatientDb apparaissent dans l’Explorateur d’objets et que les tables et données sont correctes :
- La base de données
AuthServiceDb
devrait contenir les tablesUsers
avec 3 utilisateurs. - La base de données
PatientDb
devrait contenir les tablesPatients
avec 4 patients.
- La base de données
- Assurez-vous que les bases de données AuthServiceDb et PatientDb apparaissent dans l’Explorateur d’objets et que les tables et données sont correctes :
-
Exécutez le script SQL fourni (
create_backend_user.sql
) sur votre instance SQL Server pour créer l'utilisateurbackend_user
et lui attribuer les permissions nécessaires :- Dans
Fichier > Ouvrir > Fichier
sélectionner le fichiercreate_backend_user.sql
dans le dossierSQLServerDBBackup
. - Exécutez le script
create_backend_user.sql
depuis l'onglet de requête.
- Dans
-
Vérifiez que l'utilisateur
backend_user
est bien créé dans la section Sécurité > Connexions de votre instance SQL Server.
⚠️ Assurez-vous d'exécuter toutes ces étapes avant de lancer les containers Docker.
- Erreur : "Cannot connect to SQL Server" dans Docker
Assurez-vous que :- SQL Server est configuré pour accepter les connexions TCP/IP.
- Le port 1433 est ouvert sur votre machine hôte.
- Assurez-vous d'avoir installé SQL Server Express (non MS SQL Server).
-
Construction des images :
docker-compose build --no-cache
-
Démarrage des services :
docker-compose up -d
-
Arrêt des services :
docker-compose down
Les services suivants seront disponibles :
- Frontend : http://localhost:7000
- ApiGateway : http://localhost:5000
- Auth : http://localhost:7201
- BackendPatient : http://localhost:7200
- BackendNote : http://localhost:7202
- BackendDiabetesRiskPrediction : http://localhost:7204
- MongoDB : http://localhost:27017
- SQL Server : localhost,1433
- Elasticsearch : http://localhost:9200
- MongoDB Express : http://localhost:8081
Un service MongoDB Express est disponible sur le port 8081 afin de pouvoir visualiser les collections MongoDB.
Chaque service nécessite des variables d'environnement spécifiques. Un fichier .env
est fourni dans le projet. Assurez-vous de mettre à jour ces variables selon votre environnement si besoin.
Chaque service possède son propre fichier appsettings.json
pour la configuration spécifique. Si besoin, mettez à jour ces fichiers selon votre environnement.
L'application utilise JWT (JSON Web Tokens) pour l'authentification :
- Les tokens sont émis par le service Auth
- Tous les services vérifient la validité des tokens
- Les tokens ont une durée de validité de 15 minutes.
- La durée de validité des refresh tokens est de 7 jours.
Les rôles suivants sont disponibles : Admin
, Practitioner
, User
.
Seuls les rôles Admin
et Practitioner
peuvent accéder aux services backend.
Pour faciliter les tests, les comptes suivants sont disponibles :
-
Admin :
- Nom d'utilisateur : [email protected]
- Mot de passe : 0vBZBB.QH83GeE.
- Rôle : Admin
-
Practitioner :
- Nom d'utilisateur : [email protected]
- Mot de passe : 1vBZBB.QH83GeE.
- Rôle : Practitioner
-
User :
- Nom d'utilisateur : [email protected]
- Mot de passe : 2vBZBB.QH83GeE.
- Rôle : User
Vous pouvez utiliser ces comptes pour vous connecter à l'application et tester les différentes fonctionnalités en fonction des rôles.
1. Pour
AuthServiceDb
:
- Développez Bases de données > AuthServiceDB > Sécurité > Utilisateurs
.
- Faites un clic droit sur Utilisateurs
et sélectionnez Nouvel utilisateur
...
- Nom de l'utilisateur : backend_user
- Connexion : cliquez sur ...
puis Parcourir
et sélectionnez backend_user
dans la liste déroulante et validez en cliquant sur OK.
- Dans l'onglet Schémas appartenant à un rôle
, cochez db_owner
.
- Cliquez sur OK pour créer l'utilisateur.2. Pour
PatientDb
:
- Répétez les mêmes étapes que ci-dessus pour la base de données PatientDb.3. Vérifier la Restauration :
- Assurez-vous que les bases de données
AuthServiceDb
et PatientDb
apparaissent dans l’Explorateur d’objets et que les schémas et données sont corrects.4. Vérifier les permissions :
- Assurez-vous que l'utilisateur
backend_user
a bien les permissions appropriées sur les deux bases de données.
Vous pouvez tester la connexion en utilisant l'utilisateur backend_user
pour vous connecter à chaque base de données.5. Configurer les Chaînes de Connexion :
- Les chaînes de connexion pour AuthServiceDb et PatientDb sont définies dans le fichier docker-compose.yml pour les services auth et backendpatient.
- Elles utilisent le serveur host.docker.internal,1433 pour permettre aux containers Docker d'accéder à l'instance SQL Server sur l'hôte.
6. Configuration des Variables d’environnement :
- Le fichier .env contient les variables suivantes, qui correspondent à l'utilisateur créé :
```env
DB_USER=backend_user
DB_PASSWORD=Str0ng!Passw0rd#2024-renew
```
Non recommandé : Restauration des Bases de Données en utilisant les Migrations Entity Framework (SQL Server)
Si vous choisissez cette méthode, assurez-vous de modifier les variables d'environnement DB_USER et DB_PASSWORD pour correspondre aux identifiants que vous utiliserez. Notez que cette méthode est plus complexe et sujette à erreurs.
Si vous décidez de restaurer les bases de données SQL Server en utilisant des migrations to code first avec Entity Framework, n'oubliez pas de modifier les variables d'environnement DB_USER
et DB_PASSWORD
dans le fichier .env
pour correspondre aux valeurs utilisées lors de la restauration. De même il vous faudra modifier le fichier docker-compose.yml
pour modifier la configuration des chaînes de connexions SQL_SERVER_CONNECTION_STRING
pour correspondre aux valeurs utilisées lors de la création des bases de données.
1. Création de la base de données :
Depuis SQL Server Management Studio (SSMS) :
- Ouvrir SSMS et connectez-vous à votre instance SQL Server.
- Faites un clic droit sur Databases dans l’Explorateur d’objets et sélectionnez Create Database...
- Entrez le nom de la base de données souhaite (par exemple, "PatientDb") et cliquez sur OK.
- Dans l'onglet Autorisations, sélectionnez votre nouvel utilisateur et attribuez les permissions nécessaires.
- Dans la page Rôles du serveur, cochez dbcreator et cliquez sur OK.
- Faites un clic droit sur Databases dans l’Explorateur d’objets et sélectionnez Create Database...
- Entrez le nom de la base de données souhaite (par exemple, "PatientDb") et cliquez sur OK.
2. OPTIONNEL : Création d'une nouvelle migration :
Le repository contient déjà les fichiers initiaux pour créer une migration initial.
```bash
cd BackendPatient
dotnet ef migrations add Migration0
```
3. Mise à jour de la base de données :
```bash
cd BackendPatient
dotnet ef database update
```
1. Création de la base de données :
Depuis SQL Server Management Studio (SSMS) :
- Ouvrir SSMS et connectez-vous à votre instance SQL Server.
- Faites un clic droit sur Databases dans l’Explorateur d’objets et sélectionnez Create Database...
- Entrez le nom de la base de données souhaite (par exemple, "AuthServiceDb") et cliquez sur OK.
2. OPTIONNEL :Création d'une nouvelle migration :
~~Le repository contient déjà les fichiers initiaux pour créer une migration initial.~~
```bash
cd Auth
dotnet ef migrations add Migration0~~
```
3. Mise à jour de la base de données :
```bash
cd Auth
dotnet ef database update
```~~