Skip to content

hericlibong/EpicEvent_BackEnd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EpicEvents CRM - Backend Application

Présentation

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.

Fonctionnalités Principales

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

Prérequis

  • Python 3.9+
  • PostgreSQL installé sur votre machine ou accessible via un serveur distant.
  • Un environnement virtuel Python (recommandé) pour isoler les dépendances.

Installation

  1. Cloner le repo :

    git clone https://github.com/hericlibong/EpicEvent_BackEnd.git
    cd EpicEvent_Backend
  2. 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
  3. Installer les dépendances :

    pip install -r requirements.txt
  4. Aller dans l'application

    cd epicevents

    Configuration de la Base de Données

    Option 1 : Utiliser la base de données existante

    Connexion au Super-Utilisateur PostgreSQL

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

    Création de la Base de Données et de l’Utilisateur

    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)

    Configurer le Fichier .env

    Renommez le fichier d’exemple .env_sample en .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 .env est 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).

    Initialiser la Base de Données avec Alembic

    Depuis le répertoire epicevents (là où se trouvent alembic.ini et le dossier alembic), lancez :

    alembic upgrade head

    Cette commande applique les migrations définies dans alembic/versions et crée les tables nécessaires dans la base de données epicevents_db.

    Option 2 : Créer une base de données personnalisée

  5. Connectez-vous à PostgreSQL en tant que super-utilisateur :

    psql -U postgres
  6. 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
  7. 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
  1. Initialisez la base de données :
    alembic upgrade head

Utilisation

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.

Exemples de Commandes

  • 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

Schéma de la Base de Données

Le schéma ci-dessous représente les différentes tables de la base de données et leurs relations :

Schéma de la Base de Données

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.

Structure et architecture

Pour une description de l'architecture de l'application, consultez le dossier docs.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published