From 2b9d00678d3238114edf464764593b3652b68a4f Mon Sep 17 00:00:00 2001 From: colesm Date: Thu, 23 Apr 2026 17:24:40 +0200 Subject: [PATCH] Actualiser README.md --- README.md | 303 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 267 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 445adac..6c9c4f0 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,281 @@ -# Gestionnaire de Stocks et Commandes +# 🎆 Pyrofêtes — Backend -Cette application web permet de **suivre les stocks**, **automatiser les commandes fournisseurs** et **gérer le cycle complet d’approvisionnement**. -Elle est conçue pour simplifier le travail des entreprises en offrant une vue en temps réel sur les produits, leurs fournisseurs et l’état des livraisons. +> API REST de gestion des entrepôts et produits pyrotechniques, développée avec **C#**, **ASP.NET Core** et **FastEndpoints**. --- -## ✨ Fonctionnalités principales +## 🛠️ Stack technique -### 1️⃣ Suivi et réapprovisionnement des stocks -- Définissez un **niveau minimal de stock** pour chaque produit. -- Surveillez les **niveaux en temps réel** grâce à une interface claire. -- Lorsqu’un produit atteint ou descend sous son seuil minimal, le système **génère automatiquement un bon de commande** pour le réapprovisionner. - -### 2️⃣ Gestion des fournisseurs -- Enregistrez les informations complètes des fournisseurs : nom, adresse, coordonnées, produits fournis, délais de livraison. -- **Associez un ou plusieurs fournisseurs** à chaque produit. -- Lorsqu’un bon de commande est créé, le système **propose automatiquement les fournisseurs appropriés**. - -### 3️⃣ Devis et bons de commande -- Créez des **devis personnalisés** : sélection des produits, quantités, prix, ajout d’un logo, message ou conditions de vente. -- **Imprimez ou exportez** vos devis au format PDF. -- Générez des **bons de commande** en quelques clics, avec personnalisation (logo, conditions d’achat) et exportation en PDF. - -### 4️⃣ Suivi des livraisons -- **Transformez un bon de commande en bon de livraison** dès l’expédition des produits par le fournisseur. -- Enregistrez toutes les informations importantes : date d’expédition, transporteur, numéro de suivi, date prévue et date effective de livraison. -- Recevez des **alertes en cas de retard**. -- Gérez la **réception des produits** et vérifiez leur conformité. +| Technologie | Rôle | +|---|---| +| [C# / .NET 8](https://dotnet.microsoft.com/) | Langage et runtime principal | +| [ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/) | Framework web | +| [FastEndpoints](https://fast-endpoints.com/) | Bibliothèque d'endpoints REST performants | +| Entity Framework Core | ORM pour l'accès à la base de données | +| SQL Server | Base de données relationnelle | +| JWT Bearer | Authentification par token | --- -## 🗂️ Livrables prévus -- **Modèle de données** : diagramme de classes commun à tous les groupes. -- **Interface utilisateur** : maquettes ou prototypes interactifs. -- **Code source commenté** pour une meilleure compréhension. -- **Documentation technique** : description des fonctionnalités, architecture de l’application et API. +## 📁 Structure du projet + +``` +Pyrofetes.API/ +│ +├── Models/ # Entités de la base de données (EF Core) +│ +├── DTO/ # Objets de transfert de données +│ ├── Brand/ +│ │ ├── Request/ +│ │ │ ├── CreateBrandDto.cs +│ │ │ └── UpdateBrandDto.cs +│ │ └── Response/ +│ │ └── GetBrandDto.cs +│ ├── Classification/ +│ ├── Color/ +│ ├── Effect/ +│ ├── Login/ +│ ├── Material/ +│ ├── Movement/ +│ ├── Product/ +│ ├── ProductCategory/ +│ ├── ProductColor/ +│ ├── ProductEffect/ +│ ├── ProductSupplierPrice/ +│ ├── ProductWarehouse/ +│ ├── Refrresh/ # Token refresh +│ ├── Supplier/ +│ └── Warehouse/ +│ +├── Endpoints/ # Endpoints FastEndpoints (CRUD par domaine) +│ ├── Brand/ +│ │ ├── CreateBrandEndpoint.cs +│ │ ├── DeleteBrandEndpoint.cs +│ │ ├── GetAllBrandsEndpoint.cs +│ │ ├── GetBrandEndpoint.cs +│ │ └── UpdateBrandEndpoint.cs +│ ├── Classification/ +│ ├── Color/ +│ ├── Effect/ +│ ├── Login/ +│ ├── Material/ +│ ├── Movement/ +│ ├── Product/ +│ ├── ProductCategory/ +│ ├── Refresh/ # Refresh token JWT +│ ├── Supplier/ +│ └── Warehouse/ +│ +├── Data/ # Contexte Entity Framework Core +│ └── AppDbContext.cs +│ +├── Migrations/ # Migrations EF Core +├── appsettings.json # Configuration production +├── appsettings.Development.json # Configuration développement +└── Program.cs # Point d'entrée et configuration des services +``` --- -## 👥 Équipe -- **Mathys** -- **Enzo** -- **Cristiano** -- **Arsène** +## 🚀 Installation et lancement + +### Prérequis + +- [.NET SDK](https://dotnet.microsoft.com/download) >= 8.0 +- SQL Server en cours d'exécution (local ou distant) +- [Entity Framework CLI](https://learn.microsoft.com/en-us/ef/core/cli/dotnet) + +```bash +dotnet tool install --global dotnet-ef +``` + +### Installation + +```bash +# Cloner le dépôt +git clone https://gitea.btssio-poitiers.fr/reignem/PyroFetes-Sujet1.git +cd pyrofetes-backend +``` + +### Migrations et base de données + +```bash +# Créer la base de données et appliquer les migrations +dotnet ef database update +``` + +### Lancement + +```bash +dotnet run +``` + +L'API sera disponible sur [http://localhost:5000](http://localhost:5000) +La documentation Swagger sera accessible sur [http://localhost:5000/swagger](http://localhost:5000/swagger) --- -## 🚀 Objectif -Fournir un outil complet pour automatiser la gestion des stocks et des commandes, réduisant les erreurs humaines, améliorant le suivi des livraisons et facilitant la communication avec les fournisseurs. \ No newline at end of file +## ⚙️ Configuration FastEndpoints + CORS + +Dans `Program.cs` : + +```csharp +builder.Services.AddCors(options => +{ + options.AddPolicy("AllowAngular", policy => + policy.WithOrigins("http://localhost:4200") + .AllowAnyHeader() + .AllowAnyMethod()); +}); + +builder.Services.AddFastEndpoints(); +builder.Services.AddJWTBearerAuth("votre-cle-secrete"); + +var app = builder.Build(); + +app.UseCors("AllowAngular"); +app.UseAuthentication(); +app.UseAuthorization(); +app.UseFastEndpoints(); +app.Run(); +``` + +### Anatomie d'un endpoint + +Chaque endpoint suit le pattern **Request → Handler → Response** de FastEndpoints : + +```csharp +// Endpoints/Brand/GetAllBrandsEndpoint.cs +public class GetAllBrandsEndpoint : EndpointWithoutRequest> +{ + private readonly AppDbContext _db; + + public GetAllBrandsEndpoint(AppDbContext db) => _db = db; + + public override void Configure() + { + Get("/api/brands"); + Roles("Admin", "User"); + } + + public override async Task HandleAsync(CancellationToken ct) + { + var brands = await _db.Brands + .Select(b => new GetBrandDto { Id = b.Id, Name = b.Name }) + .ToListAsync(ct); + + await SendOkAsync(brands, ct); + } +} +``` + +### Pattern DTO + +``` +DTO/ +└── Brand/ + ├── Request/ + │ ├── CreateBrandDto.cs ← payload entrant (POST) + │ └── UpdateBrandDto.cs ← payload entrant (PUT) + └── Response/ + └── GetBrandDto.cs ← payload sortant (GET) +``` + +--- + +## 📡 Endpoints API + +> Tous les endpoints (sauf `/api/auth/*` et `/api/auth/refresh`) requièrent un header `Authorization: Bearer `. + +### Authentification + +| Méthode | Route | Description | Auth | +|---|---|---|---| +| `POST` | `/api/auth/login` | Connexion, retourne JWT + refresh token | ❌ | +| `POST` | `/api/auth/refresh` | Renouvellement du JWT via refresh token | ❌ | + +### Marques (Brand) + +| Méthode | Route | Description | +|---|---|---| +| `GET` | `/api/brands` | Liste toutes les marques | +| `GET` | `/api/brands/{id}` | Détail d'une marque | +| `POST` | `/api/brands` | Créer une marque | +| `PUT` | `/api/brands/{id}` | Modifier une marque | +| `DELETE` | `/api/brands/{id}` | Supprimer une marque | + +### Produits (Product) + +| Méthode | Route | Description | +|---|---|---| +| `GET` | `/api/products` | Liste tous les produits | +| `GET` | `/api/products/{id}` | Détail d'un produit | +| `POST` | `/api/products` | Créer un produit | +| `PUT` | `/api/products/{id}` | Modifier un produit | +| `DELETE` | `/api/products/{id}` | Supprimer un produit | + +### Entrepôts (Warehouse) + +| Méthode | Route | Description | +|---|---|---| +| `GET` | `/api/warehouses` | Liste tous les entrepôts | +| `GET` | `/api/warehouses/{id}` | Détail d'un entrepôt | +| `POST` | `/api/warehouses` | Créer un entrepôt | +| `PUT` | `/api/warehouses/{id}` | Modifier un entrepôt | +| `DELETE` | `/api/warehouses/{id}` | Supprimer un entrepôt | + +### Fournisseurs (Supplier) + +| Méthode | Route | Description | +|---|---|---| +| `GET` | `/api/suppliers` | Liste tous les fournisseurs | +| `GET` | `/api/suppliers/{id}` | Détail d'un fournisseur | +| `POST` | `/api/suppliers` | Créer un fournisseur | +| `PUT` | `/api/suppliers/{id}` | Modifier un fournisseur | +| `DELETE` | `/api/suppliers/{id}` | Supprimer un fournisseur | + +### Autres domaines disponibles + +| Domaine | Préfixe route | +|---|---| +| Classifications | `/api/classifications` | +| Couleurs | `/api/colors` | +| Effets | `/api/effects` | +| Matériaux | `/api/materials` | +| Mouvements de stock | `/api/movements` | +| Catégories produit | `/api/product-categories` | +| Couleurs produit | `/api/product-colors` | +| Effets produit | `/api/product-effects` | +| Prix fournisseur produit | `/api/product-supplier-prices` | + +--- + +## 🔐 Authentification JWT + +### Flux d'authentification + +``` +Client (Angular) API (FastEndpoints) + │ │ + │── POST /api/auth/login ──▶│ + │ │ Vérifie credentials + │◀── { token, refreshToken }│ + │ │ + │── GET /api/... ──────────▶│ + │ Authorization: Bearer │ Valide le JWT + │◀── 200 OK ────────────────│ + │ │ + │── POST /api/auth/refresh ▶│ (token expiré) + │◀── { newToken } ──────────│ +``` + +### Header requis + +``` +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... +``` +--- + +## 📄 Licence + +Ce projet est à usage interne — © Pyrofêtes. Tous droits réservés. \ No newline at end of file