Skip to content

EveCrystali/P10-Microservices

Repository files navigation

P10 Projet Éducatif

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.

Description

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.

Sommaire

Structure du Projet

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

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

Démarrage Rapide

  1. Clonez le repository :

    git clone https://github.com/EveCrystali/P10.git
    cd P10
  2. Assurez-vous d'avoir installé :

    • Docker Desktop
    • SQL Server Express
  3. Restaurez les bases de données SQL Server pour les services BackendPatient et Auth depuis SQL Server Management Studio (SSMS) :

  4. 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 fichier create_backend_user.sql dans le dossier SQLServerDBBackup
    • Exécutez le script create_backend_user.sql depuis l'onglet de requête
  5. Lancez les services avec Docker :

    docker-compose build --no-cache
    docker-compose up -d
  6. Accédez à l'application :

Pour plus de détails sur l'installation et la configuration, consultez les sections suivantes.

Installation

Le projet utilise Docker pour la gestion des services backend, frontend, l'API Gateway et les bases de données MongoDB et Elasticsearch.

Prérequis

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.

Clonage du Repository et Installation

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

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

Installation de SQL Server Express

  1. 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.
  2. 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.

Restauration des Bases de Données

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

Recommandé : Restauration des Bases de Données à partir des Sauvegardes

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.

Étapes de Restauration des données des Bases de Données

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

  1. Restaurer AuthServiceDb :

    • Faites un clic droit sur Base de données dans l’Explorateur d’objets et sélectionnez Restaurer la base de données
    • Sélectionnez Support, cliquez sur ... puis cliquez sur Àjouter et naviguez jusqu’au fichier de sauvegarde AuthServiceDb.bak.
    • Cliquez sur OK pour lancer la restauration.
  2. Restaurer PatientDb :

    • Répétez le même processus que pour AuthServiceDb, en sélectionnant le fichier PatientDb.bak.
  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 tables et données sont correctes :
      • La base de données AuthServiceDb devrait contenir les tables Users avec 3 utilisateurs.
      • La base de données PatientDb devrait contenir les tables Patients avec 4 patients.
  4. Exécutez le script SQL fourni (create_backend_user.sql) sur votre instance SQL Server pour créer l'utilisateur backend_user et lui attribuer les permissions nécessaires :

    • Dans Fichier > Ouvrir > Fichier sélectionner le fichier create_backend_user.sql dans le dossier SQLServerDBBackup.
    • Exécutez le script create_backend_user.sql depuis l'onglet de requête.
  5. 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.

Résolution des erreurs fréquentes

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

Docker

  1. Construction des images :

    docker-compose build --no-cache

  2. Démarrage des services :

    docker-compose up -d

  3. Arrêt des services :

    docker-compose down

Les services suivants seront disponibles :

Un service MongoDB Express est disponible sur le port 8081 afin de pouvoir visualiser les collections MongoDB.

Configuration

Variables d'environnement

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.

Configuration des services

Chaque service possède son propre fichier appsettings.json pour la configuration spécifique. Si besoin, mettez à jour ces fichiers selon votre environnement.

Sécurité

Authentification

L'application utilise JWT (JSON Web Tokens) pour l'authentification :

  1. Les tokens sont émis par le service Auth
  2. Tous les services vérifient la validité des tokens
  3. Les tokens ont une durée de validité de 15 minutes.
  4. La durée de validité des refresh tokens est de 7 jours.

Autorisation

Les rôles suivants sont disponibles : Admin, Practitioner, User. Seuls les rôles Admin et Practitioner peuvent accéder aux services backend.

Comptes Utilisateurs par Défaut

Pour faciliter les tests, les comptes suivants sont disponibles :

  • Admin :

  • Practitioner :

    • Nom d'utilisateur : [email protected]
    • Mot de passe : 1vBZBB.QH83GeE.
    • Rôle : Practitioner
  • User :

Vous pouvez utiliser ces comptes pour vous connecter à l'application et tester les différentes fonctionnalités en fonction des rôles.


❌ DEPRECIE : Restaurations manuelles des bases de donnees avec les utilisateurs ❌

Mapper le login 'backend_user' aux bases de données restaurées :

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.

BackendPatient

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

Auth

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
```~~

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published