Skip to content

supercoopbdx/webapp-backend-public

Repository files navigation

Application Backend Supercoop

📋 Description

Backend Flask pour l'application web Supercoop, fournissant une API RESTful pour la gestion des produits, des commandes et des utilisateurs.

🏗️ Structure du Projet

backend/
├── app/                  # Code source principal
│   ├── auth/            # Authentification et autorisation
│   ├── main/            # Routes et logique métier principale
│   ├── odoo/            # Intégration avec Odoo
│   ├── services/        # Services métier
│   └── templates/       # Templates HTML
├── migrations/          # Fichiers de migration de la base de données
├── tests/               # Tests automatisés
└── instance/            # Fichiers de configuration

📦 Dépendances Principales

  • Flask - Framework web
  • Flask-SQLAlchemy - ORM pour la base de données
  • Flask-Migrate - Gestion des migrations
  • Flask-CORS - Gestion des requêtes cross-origin
  • Python-Jose - Authentification JWT
  • Requests - Requêtes HTTP
  • Hypercorn - Serveur ASGI

🚀 Installation

  1. Cloner le dépôt

    git clone [url-du-depot]
    cd webapp-backend
  2. Installer les dépendances

    pip install -r requirements.txt
  3. Configurer l'environnement Créer un fichier .env à la racine avec les variables nécessaires :

    FLASK_APP=main.py
    FLASK_ENV=development
    SECRET_KEY=votre_cle_secrete
    DATABASE_URL=sqlite:///app.db
    ODOO_URL=votre_url_odoo
    ODOO_USERNAME=votre_utilisateur
    ODOO_PASSWORD=votre_mot_de_passe
    

à compléter ...

📡 Documentation de l'API

Commandes Fournisseurs

GET /orders/inbound

  • Description : Récupère la liste des commandes fournisseurs en attente avec leurs produits
  • Méthode : GET
  • Authentification : Requise
  • Réponse :
    [
      {
        "po": "PO13311",
        "provider": "Brasserie du Sabot BSA",
        "date": "2025-10-09T14:09:52",
        "products": [
          {
            "barcode": "0420000019879",
            "name": "Brasserie du Sabot Ambrée Emma Goldman 33cl BSA",
            "brand": "Brasserie du Sabot",
            "image": "data:image/png;base64,iVBORw0KGgoAA...",
            "parcels": 2,
            "packSize": 24
          }
        ]
      }
    ]

POST /orders/inbound/process/<po_reference>

  • Description : Traite la réception d'une commande fournisseur
  • Méthode : POST
  • Authentification : Requise
  • Paramètres de chemin :
    • po_reference (requis) : Référence de la commande fournisseur (ex: "PO13311")
  • Corps de la requête :
    {
      "products": [
        {
          "barcode": "1234567890123",
          "ok": false,
          "received": 234,
          "comment": "Commentaire optionnel"
        },
        {
          "barcode": "234567891234",
          "ok": true
        }
      ]
    }
  • Réponses possibles :
    • Succès (200) :
      {
        "success": true,
        "message": "Commande PO13311 traitée avec succès"
      }
    • Erreur (400) : Données invalides
    • Erreur (404) : Commande non trouvée
    • Erreur (500) : Erreur serveur

Zones d'Inventaire

POST /zone/process/<zone_id>

  • Description : Traite une zone d'inventaire
  • Méthode : POST
  • Authentification : Requise
  • Paramètres de chemin :
    • zone_id (requis) : Identifiant de la zone à traiter (entier)
  • Réponses possibles :
    • Succès (200) : Traitement réussi
    • Erreur (400) : Requête mal formatée
    • Erreur (401) : Non autorisé
    • Erreur (500) : Erreur serveur

Authentification

GET /auth/me

  • Description : Récupère les informations de l'utilisateur connecté
  • Méthode : GET
  • Authentification : Requise (JWT dans le header Authorization)
  • Réponse :
    {
      "user": {
        "sub": "user_id",
        "email": "user@example.com",
        "name": "Nom Utilisateur",
        "preferred_username": "username"
      },
      "is_authenticated": true
    }

GET /auth/health

  • Description : Vérifie l'accessibilité du serveur d'authentification
  • Méthode : GET
  • Authentification : Non requise
  • Réponses possibles :
    • Succès (200) :
      {
        "status": "ok",
        "auth_server": "reachable"
      }
    • Erreur (503) :
      {
        "status": "error",
        "error": "auth_server_unreachable",
        "message": "[détail de l'erreur]"
      }

Produits

GET /product/info?barcode=<code_barres>

  • Description : Récupère les informations d'un produit avec son image
  • Méthode : GET
  • Authentification : Requise
  • Paramètres :
    • barcode (requis) : Code-barres du produit
  • Réponse :
    {
      "barcode": "1234567890123",
      "name": "Nom du produit",
      "brand": "Marque",
      "brand_id": 1,
      "image": "data:image/png;base64,iVBORw0KGgoAA..."
    }

Commandes

GET /orders/inbound

  • Description : Liste des commandes fournisseurs en attente
  • Méthode : GET
  • Authentification : Requise
  • Réponse :
    {
      "orders": [
        {
          "id": 1,
          "reference": "PO001",
          "supplier": "Fournisseur",
          "date_planned": "2023-01-01",
          "state": "purchase"
        }
      ]
    }

🧪 Tests

Pour exécuter les tests :

pytest tests/ -v

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages