forked from sanchezvem/pyrofetes-backend
Actualiser README.md
This commit is contained in:
303
README.md
303
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.
|
||||
## ⚙️ 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<List<GetBrandDto>>
|
||||
{
|
||||
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 <token>`.
|
||||
|
||||
### 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.
|
||||
Reference in New Issue
Block a user