# En Développement
Ce projet est en développement.

# Pre-requis
    Disposer à minima de 8GO de RAM et de 20 GO de disk

    Centos - Installer docker en dernière version de docker engine
        sudo yum check-update
        curl -fsSL https://get.docker.com/ | sh
        sudo systemctl start docker
        sudo systemctl status docker
        sudo systemctl enable docker (to start automatically)

# Lancement des services Mongo avec docker
Pour lancer Mongo exécuter la commande :

    ./start_XXX.sh

Cette commande permet de démarrer les containers et de lancer les services Mongo.


# Arrêt des services Mongo avec docker

Pour arrêter les services Mongo exécuter la commande :

    ./stop_XXX.sh

Aucune donnée n'est sauvegardée à l'arrêt de la base.

# Suppression du container Mongo

Pour détruire le container vitamui-mongo :

    docker rm vitamui-mongo

# Ajouter un utilisateur Admin pour mongo

$ docker exec -it vitamui-mongo mongo admin
connecting to: admin

    > db.createUser({ user: 'jsmith', pwd: 'some-initial-password', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
    Successfully added user: {
        "user" : "jsmith",
        "roles" : [
            {
                "role" : "userAdminAnyDatabase",
                "db" : "admin"
            }
        ]
    }



# Initialisation de la base Mongo

Afin de mutualiser le code et les scripts Mongo exploités en developpement ou lors du déploiement sur un environnement, l'intelligence a été répartie de la manière suivante:

- Les scripts Mongo figurent à l'emplacement suivant: **~/tools/docker/mongo/database_scripts**
- Le role Ansible d'initialisation figure à l'emplacement suivant: **~/deployment/roles/mongo_init**

Le role d'initialisation de la base de données a plusieurs fonctionnalités: ordonnancement des scripts, templatage et versioning.

## Templatage des scripts de DB

La structure du dossier **database_scripts** est simple:
```txt
> database_scripts
  > 0.0.0
     > 01_script.js
     > 02_script.js
  > 0.1
  > 1.0
  > 1.0.5
  > 1.0.10
```

Deux niveaux de répertoires sont pris en compte:

- 1er niveau: la version de l'application

  Lors du templatage, un premier tri par version est exécutée afin de trier ces dernières par ordre croissante.

- 2ème niveau: les scripts à exécuter par version

  Lors du templatage, les scripts sont triés par ordre d'index (X_nomDuScript) afin d'assurer l'ordonnacement de l'exécution des scripts. Si aucun index n'est renseigné, l'ordre alphabétique s'applique.

  Par convention, les catégories d'indexes sont:
  - 0-99: scripts de référence à passer quelque soit les environnements
  - 100-199: scripts de démo
  - 200-299: Scripts de developpement.

Les scripts de templatage utilisés sont ceux du déploiement. Lors du packaging du projet, l'ensemble des scripts est copié et intégré à l'archive de déploiement.

Afin d'injecter les bonnes valeurs aux variables des templates, le fichier **mongo_vars_dev.yml** est présent.

Afin d'intégrer une surcharge extérieure des variables par défaut, il est possible de renseigner le chemin d'un autre fichier de variable à travers la variable d'environnements **ADDITIONNAL_VITAMUI_CONFIG_FILE**.
Attention, toute variable définie dans ce fichier additionnel écrasera la valeur existante.

## Versionning des scripts Mongo

Avant l'exécution d'un script, on vérifie que ce dernier a été exécuté. Pour ce faire, nous nous basons sur deux éléments:
- le nom du fichier
- le checkum du fichier

Lors de l'initialisation de la base de données, la base de données **versioning** est créée et la collection suivante est initialisée:
```
Changelog {
  id: Identifiant interne mongo
  filename: nom du fichier
  date: date d'éxécution du script
  version: version de l'application associée au script
  checksum: hash du fichier
}
```

Avant l'exécution de chaque script, on effectue une recherche d'exécution (sur les champs filename et checksum):
- si le script a déjà été exécutée, aucun action n'est effectuée
- si le script n'a pas été exécuté, ce dernier est exécuté et une entrée est rajoutée dans la collection *changelog*

Toute erreur lors du processus entraine l'arrêt de l'initialisation de la base Mongo

Dans le cas d'une migration d'une version de VitamUI précédent le versioning, il suffit de définir la variable Ansible **mock_insert_data**. Dans le cas présent, l'ensemble des scripts seront joués mais non exécutées, seules les entrées dans la collection **changelog** seront ajoutées.

## Coloration syntaxique intellij

Si vous utilisez un IDE intellij, le plugin suivant vous offrera la coloration syntaxique adequate ainsi que quelques
fonctionnalité de
https://plugins.jetbrains.com/plugin/7792-yaml-ansible-support