EpicEvents CRM est une application interne permettant à l’entreprise Epic Events de gérer plus efficacement ses clients, contrats et événements. Développée en Python, cette application met l’accent sur la sécurité, la maintenabilité et l’évolutivité. Elle propose une interface en ligne de commande (CLI) pour permettre aux collaborateurs (commerciaux, gestion, support) de travailler sur les données internes du CRM sans interface graphique, mais de manière simple et structurée.
L’application utilise des composants et bibliothèques de référence :
- Base de Données : PostgreSQL, pour sa robustesse, sa stabilité et ses capacités avancées.
- ORM : SQLAlchemy, pour interagir de manière sécurisée avec la base de données et éviter l’usage de requêtes SQL brutes.
- Architecture : Design patterns MVC et DAO pour une séparation claire des responsabilités, facilitant la maintenance et les évolutions futures.
- Interface Utilisateur : Click & Rich, permettant une expérience en ligne de commande plus ergonomique, avec des tables, des couleurs et des messages d’aide.
- Sécurité & Authentification : Passlib pour le hachage des mots de passe, PyJWT pour la gestion des tokens, Pydantic pour la validation des données.
- Journalisation & Suivi des Erreurs : Intégration à Sentry pour la capture des erreurs et le suivi des exceptions.
- Qualité & Tests : pytest pour les tests, flake8 + flake8-html pour s’assurer du respect des bonnes pratiques et du style de code.
- Gestion des utilisateurs et authentification (commerciaux, gestion, support) avec permissions adaptées à chaque rôle.
- Création, mise à jour et consultation des clients.
- Création, mise à jour et consultation des contrats (avec statut, montants, etc.).
- Création, assignation et mise à jour des événements (associés aux clients via les contrats).
- Filtrage et recherche avancés (par exemple, rechercher tous les événements sans support, contrats non signés, etc.).
- Interface en ligne de commande ergonomique, avec aide intégrée.
- Python 3.9+
- PostgreSQL installé sur votre machine ou accessible via un serveur distant.
- Un environnement virtuel Python (recommandé) pour isoler les dépendances.
-
Cloner le repo :
git clone https://github.com/hericlibong/EpicEvent_BackEnd.git cd EpicEvent_Backend -
Créer et activer un environnement virtuel (optionnel mais recommandé) :
python3 -m venv venv source venv/bin/activate # Sur Linux/MacOS venv\Scripts\activate # Sur Windows
-
Installer les dépendances :
pip install -r requirements.txt
-
Aller dans l'application
cd epiceventsOuvrez une console (PowerShell, CMD sous Windows ou un terminal sous Linux/macOS) et connectez-vous à PostgreSQL en tant que super-utilisateur postgres :
psql -U postgres
Saisissez le mot de passe postgres si nécessaire.
Dans le prompt psql, exécutez :
CREATE DATABASE epicevents_db; CREATE USER epicenvents_user WITH PASSWORD 'M0tD3P4ss3'; GRANT ALL PRIVILEGES ON DATABASE epicevents_db TO epicenvents_user; \q
Conseil : Utilisez des identifiants simples, sans accents ni caractères spéciaux complexes. Par exemple :
- Utilisateur :
epicenvents_user - Mot de passe :
M0tD3P4ss3(pas d’accents, pas d’espaces)
Renommez le fichier d’exemple
.env_sampleen.env(situé dans le répertoire epicevents) et mettez à jour les variables :DB_USER=epicenvents_user DB_PASSWORD=M0tD3P4ss3 DB_HOST=localhost DB_PORT=5432 DB_NAME=epicevents_db // Clé utilisée pour générer les tokens SECRET_KEY=my_secret_key // Journalisation Sentry SENTRY_DSN=
Assurez-vous que le fichier
.envest bien dans le répertoire epicevents et qu’il ne contient aucun caractère accentué ou problème d’encodage. Assurez-vous également que ce fichier n’est pas versionné (il doit être listé dans.gitignore).Depuis le répertoire epicevents (là où se trouvent
alembic.iniet le dossieralembic), lancez :alembic upgrade head
Cette commande applique les migrations définies dans
alembic/versionset crée les tables nécessaires dans la base de donnéesepicevents_db. - Utilisateur :
-
Connectez-vous à PostgreSQL en tant que super-utilisateur :
psql -U postgres
-
Créez une nouvelle base de données et un utilisateur associé :
CREATE DATABASE nouvelle_base; CREATE USER nouvel_utilisateur WITH PASSWORD 'mot_de_passe_securise'; GRANT ALL PRIVILEGES ON DATABASE nouvelle_base TO nouvel_utilisateur; \q
-
Renommez et modifiez le fichier
.env:
Editez-le avec les informations de la nouvelle base :
DB_USER=nouvel_utilisateur
DB_PASSWORD=mot_de_passe_securise
DB_HOST=localhost
DB_PORT=5432
DB_NAME=nouvelle_base
SECRET_KEY=une_nouvelle_cle_secrete- Initialisez la base de données :
alembic upgrade head
L’application se pilote via la ligne de commande. Une fois installée et configurée, vous pouvez lancer :
```
python main.py --help
```
Exemple d'affichage d'aide :
```
Usage: main.py [OPTIONS] COMMAND [ARGS]...
Interface en ligne de commande pour Epic Events.
Options:
--help Show this message and exit.
Commands:
clients Commandes pour gérer les clients.
contracts Commandes pour gérer les contrats.
events Commandes pour gérer les événements.
sample-command Commande d'exemple avec journalisation.
users Commandes pour gérer les utilisateurs.
```
Cela affichera la liste des commandes disponibles et leurs options.
-
Authentification :
python main.py users login
Saisissez votre nom d’utilisateur et mot de passe. Un jeton d’authentification sera généré et stocké (selon votre implémentation) pour les prochaines commandes.
-
Gestion des clients :
python main.py clients create-clients
Cette commande crée un nouveau client dans la base.
-
Liste des clients :
python main.py clients list-clients
Affiche tous les clients. Vous pouvez ajouter des options pour filtrer ou trier.
-
Contrats & Événements :
Des commandes similaires existent pour créer, modifier et lister les contrats et les événements. Consultez l’aide intégrée :
python main.py create-contract --help python main.py list-events --help
Le schéma ci-dessous représente les différentes tables de la base de données et leurs relations :
Ce diagramme montre les entités suivantes :
users: Gère les utilisateurs internes (commerciaux, support, gestion).clients: Liste des clients de l’entreprise.contracts: Contrats signés avec les clients, incluant le montant, la date, etc.events: Événements organisés pour les clients, liés aux contrats signés.departments: Représente les départements au sein de l'organisation.
Pour une description de l'architecture de l'application, consultez le dossier docs.
