# 🏭 API d'Inventaire Industriel API NestJS pour la gestion d'inventaire industriel avec architecture hiérarchique des machines, composants et pièces. ## 🚀 Installation ### Prérequis - Node.js 18+ - PostgreSQL - Fedora Linux (pour le script d'installation automatique) ### Configuration rapide 1. **Installer les dépendances** ```bash npm install ``` 2. **Configurer la base de données PostgreSQL** ```bash # Option 1: Installation automatique (Fedora) chmod +x setup-database.sh ./setup-database.sh # Option 2: Installation manuelle sudo dnf install postgresql postgresql-server postgresql-contrib sudo postgresql-setup --initdb sudo systemctl start postgresql sudo systemctl enable postgresql # Créer la base de données sudo -u postgres psql -c "CREATE DATABASE inventory_db;" sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'password';" ``` 3. **Générer le client Prisma et appliquer les migrations** ```bash npx prisma generate npx prisma migrate dev --name init ``` 4. **Démarrer l'API** ```bash npm run start:dev ``` L'API sera disponible sur `http://localhost:3000/api` ## 📊 Structure de la base de données ### Entités principales - **Site** : Représente un site/usine - **Machine** : Appartient à un site, peut contenir des composants et des pièces - **Composant** : Peut appartenir à une machine ou à un autre composant (arborescence infinie) - **Piece** : Peut appartenir à une machine ou à un composant - **TypeMachine/TypeComposant/TypePiece** : Définissent l'architecture et les champs personnalisés - **Document** : Fichiers/images liés aux éléments - **CustomField/CustomFieldValue** : Champs personnalisés dynamiques ### Relations ``` Site → Machine → Composant → Sous-composant → ... ↓ ↓ Machine → Piece Composant → Piece ``` ## 🔌 API Endpoints ### Sites - `GET /api/sites` - Liste tous les sites avec leur hiérarchie complète - `GET /api/sites/:id` - Détails d'un site - `POST /api/sites` - Créer un site - `PATCH /api/sites/:id` - Modifier un site - `DELETE /api/sites/:id` - Supprimer un site ### Machines - `GET /api/machines` - Liste toutes les machines - `GET /api/machines/:id` - Détails d'une machine - `POST /api/machines` - Créer une machine - `PATCH /api/machines/:id` - Modifier une machine - `DELETE /api/machines/:id` - Supprimer une machine ### Composants - `GET /api/composants` - Liste tous les composants - `GET /api/composants/:id` - Détails d'un composant - `POST /api/composants` - Créer un composant - `PATCH /api/composants/:id` - Modifier un composant - `DELETE /api/composants/:id` - Supprimer un composant ### Pièces - `GET /api/pieces` - Liste toutes les pièces - `GET /api/pieces/:id` - Détails d'une pièce - `POST /api/pieces` - Créer une pièce - `PATCH /api/pieces/:id` - Modifier une pièce - `DELETE /api/pieces/:id` - Supprimer une pièce ### Types - `GET /api/types/machines` - Liste tous les types de machines - `GET /api/types/composants` - Liste tous les types de composants - `GET /api/types/pieces` - Liste tous les types de pièces - `POST /api/types/machines` - Créer un type de machine - `POST /api/types/composants` - Créer un type de composant - `POST /api/types/pieces` - Créer un type de pièce ### Documents - `GET /api/documents` - Liste tous les documents - `POST /api/documents` - Uploader un document - `DELETE /api/documents/:id` - Supprimer un document ## 🛠️ Développement ### Scripts disponibles ```bash npm run start # Démarrer en mode production npm run start:dev # Démarrer en mode développement avec hot reload npm run build # Compiler le projet npm run test # Lancer les tests npm run test:e2e # Lancer les tests end-to-end npm run test:cov # Lancer les tests avec couverture ``` ### Variables d'environnement Créer un fichier `.env` : ```env DATABASE_URL="postgresql://postgres:password@localhost:5432/inventory_db?schema=public" PORT=3000 NODE_ENV=development ``` ### Prisma ```bash npx prisma studio # Interface graphique pour la base de données npx prisma migrate dev # Créer et appliquer une migration npx prisma generate # Régénérer le client Prisma npx prisma db push # Pousser les changements sans migration ``` ## 📁 Structure du projet ``` src/ ├── sites/ # Module de gestion des sites ├── machines/ # Module de gestion des machines ├── composants/ # Module de gestion des composants ├── pieces/ # Module de gestion des pièces ├── documents/ # Module de gestion des documents ├── types/ # Module de gestion des types ├── prisma/ # Configuration Prisma └── shared/ # DTOs et utilitaires partagés ``` ## 🔧 Configuration Docker (optionnel) Pour utiliser Docker avec PostgreSQL : ```bash # Démarrer PostgreSQL avec Docker docker run --name postgres-inventory \ -e POSTGRES_PASSWORD=password \ -e POSTGRES_DB=inventory_db \ -p 5432:5432 \ -d postgres:15 # Modifier le DATABASE_URL dans .env DATABASE_URL="postgresql://postgres:password@localhost:5432/inventory_db?schema=public" ``` ## 🎯 Fonctionnalités - ✅ Architecture hiérarchique infinie (sites → machines → composants → sous-composants → pièces) - ✅ Gestion des types avec champs personnalisés dynamiques - ✅ Upload et gestion de documents - ✅ Validation des données avec class-validator - ✅ API REST complète avec NestJS - ✅ Base de données PostgreSQL avec Prisma ORM - ✅ Support CORS pour le frontend - ✅ Structure modulaire et extensible ## 🚧 Prochaines étapes - [ ] Implémentation complète des contrôleurs et services - [ ] Gestion des champs personnalisés - [ ] Upload de fichiers - [ ] Tests unitaires et d'intégration - [ ] Documentation Swagger/OpenAPI - [ ] Frontend Nuxt 3