# BNAR Backend - API de la Bibliothèque Numérique des Aéroports Régionaux du Sénégal

## 📋 Description

API REST pour gérer les données des aéroports régionaux du Sénégal, incluant :
- Informations sur les aéroports
- Cartes et plans
- Documents techniques
- Informations diverses

## 🚀 Installation

1. Installer les dépendances :
```bash
npm install
```

2. Configurer la base de données MySQL :
   - Créer une base de données nommée `bnar_aibd_db`
   - Copier `.env.example` vers `.env`
   - Modifier les paramètres de connexion dans `.env`

3. Configuration du fichier `.env` :
```env
PORT=3000
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=votre_mot_de_passe
DB_NAME=bnar_aibd_db
DB_PORT=3306
JWT_SECRET=votre_secret_jwt
NODE_ENV=development
```

## 🏃 Démarrage

### Mode développement (avec nodemon) :
```bash
npm run dev
```

### Mode production :
```bash
npm start
```

Le serveur démarrera sur `http://localhost:3000`

## 📚 API Endpoints

### Aéroports
- `GET /api/aeroports` - Liste tous les aéroports
- `GET /api/aeroports/:id` - Détails d'un aéroport
- `GET /api/aeroports/search?query=` - Rechercher des aéroports
- `POST /api/aeroports` - Créer un aéroport
- `PUT /api/aeroports/:id` - Mettre à jour un aéroport
- `DELETE /api/aeroports/:id` - Supprimer un aéroport

### Cartes
- `GET /api/cartes` - Liste toutes les cartes
- `GET /api/cartes/:id` - Détails d'une carte
- `GET /api/cartes/aeroport/:aeroportId` - Cartes d'un aéroport
- `POST /api/cartes` - Créer une carte
- `PUT /api/cartes/:id` - Mettre à jour une carte
- `DELETE /api/cartes/:id` - Supprimer une carte

### Documents
- `GET /api/documents` - Liste tous les documents
- `GET /api/documents/:id` - Détails d'un document
- `GET /api/documents/aeroport/:aeroportId` - Documents d'un aéroport
- `POST /api/documents` - Créer un document
- `PUT /api/documents/:id` - Mettre à jour un document
- `DELETE /api/documents/:id` - Supprimer un document

### Informations
- `GET /api/informations` - Liste toutes les informations
- `GET /api/informations/:id` - Détails d'une information
- `GET /api/informations/aeroport/:aeroportId` - Informations d'un aéroport
- `POST /api/informations` - Créer une information
- `PUT /api/informations/:id` - Mettre à jour une information
- `DELETE /api/informations/:id` - Supprimer une information

### Santé de l'API
- `GET /api/health` - Vérifier l'état de l'API

## 🗄️ Modèles de données

### Aeroport
```json
{
  "nom": "Aéroport de Ziguinchor",
  "code_iata": "ZIG",
  "code_oaci": "GOGG",
  "ville": "Ziguinchor",
  "region": "Casamance",
  "latitude": 12.5556,
  "longitude": -16.2817,
  "altitude": 23,
  "description": "Description de l'aéroport",
  "statut": "actif",
  "type": "regional",
  "image_url": "url_de_l_image"
}
```

### Carte
```json
{
  "aeroport_id": 1,
  "titre": "Plan de l'aéroport",
  "type_carte": "plan",
  "url_image": "url_de_la_carte",
  "description": "Description de la carte",
  "echelle": "1:5000",
  "annee": 2024
}
```

### Document
```json
{
  "aeroport_id": 1,
  "titre": "Manuel technique",
  "type_document": "pdf",
  "categorie": "technique",
  "url_fichier": "url_du_fichier",
  "description": "Description du document",
  "auteur": "Nom de l'auteur",
  "date_publication": "2024-01-01"
}
```

### Information
```json
{
  "aeroport_id": 1,
  "categorie": "infrastructure",
  "titre": "Nouvelle piste",
  "contenu": "Contenu de l'information",
  "date_info": "2024-01-01",
  "source": "Source de l'information",
  "est_public": true
}
```

## 🛠️ Technologies utilisées

- Node.js
- Express.js
- Sequelize ORM
- MySQL
- bcrypt (hachage de mots de passe)
- JWT (authentification)
- CORS
- dotenv

## 📝 Notes

- La base de données sera automatiquement synchronisée au démarrage du serveur
- Assurez-vous que MySQL est installé et en cours d'exécution
- Les modèles utilisent des timestamps automatiques (createdAt, updatedAt)

