# Structure du Projet IPWatch

## Vue d'ensemble

```
ipwatch/
├── backend/                      # Backend FastAPI
│   ├── app/
│   │   ├── core/                # Configuration et database
│   │   │   ├── config.py        # Gestionnaire config YAML
│   │   │   └── database.py      # Setup SQLAlchemy
│   │   ├── models/              # Modèles SQLAlchemy
│   │   │   └── ip.py            # Tables IP et IPHistory
│   │   ├── routers/             # Endpoints API REST
│   │   │   ├── ips.py           # CRUD IPs + historique
│   │   │   ├── scan.py          # Contrôle scans
│   │   │   └── websocket.py     # Endpoint WebSocket
│   │   ├── services/            # Services métier
│   │   │   ├── network.py       # Scanner réseau (ping, ARP, ports)
│   │   │   ├── scheduler.py     # APScheduler pour tâches périodiques
│   │   │   └── websocket.py     # Gestionnaire WebSocket
│   │   └── main.py              # Application FastAPI principale
│   └── requirements.txt         # Dépendances Python
│
├── frontend/                    # Frontend Vue 3
│   ├── src/
│   │   ├── assets/
│   │   │   └── main.css         # Styles Monokai + animations
│   │   ├── components/
│   │   │   ├── AppHeader.vue    # Header avec stats et contrôles
│   │   │   ├── IPCell.vue       # Cellule IP dans la grille
│   │   │   ├── IPDetails.vue    # Détails IP (colonne gauche)
│   │   │   ├── IPGrid.vue       # Grille d'IP (colonne centrale)
│   │   │   └── NewDetections.vue # Nouvelles IP (colonne droite)
│   │   ├── stores/
│   │   │   └── ipStore.js       # Store Pinia + WebSocket client
│   │   ├── App.vue              # Layout 3 colonnes
│   │   └── main.js              # Point d'entrée
│   ├── package.json             # Dépendances Node
│   ├── vite.config.js           # Configuration Vite
│   ├── tailwind.config.js       # Configuration Tailwind (Monokai)
│   └── index.html               # HTML principal
│
├── tests/                       # Tests backend
│   ├── test_network.py          # Tests modules réseau
│   ├── test_models.py           # Tests modèles SQLAlchemy
│   ├── test_api.py              # Tests endpoints API
│   └── test_scheduler.py        # Tests APScheduler
│
├── config.yaml                  # Configuration principale
├── docker-compose.yml           # Orchestration Docker
├── Dockerfile                   # Image multi-stage
├── Makefile                     # Commandes utiles
├── start.sh                     # Script démarrage rapide
├── pytest.ini                   # Configuration pytest
├── .gitignore                   # Exclusions Git
├── .dockerignore                # Exclusions Docker
├── README.md                    # Documentation
├── CLAUDE.md                    # Guide pour Claude Code
└── STRUCTURE.md                 # Ce fichier
```

## Flux de données

### 1. Scan réseau (backend)

```
APScheduler (scheduler.py)
    ↓ déclenche périodiquement
NetworkScanner (network.py)
    ↓ effectue scan complet
    ├─→ Ping parallélisé
    ├─→ ARP lookup + MAC vendor
    └─→ Port scan
    ↓ résultats
SQLAlchemy (models/ip.py)
    ↓ enregistre dans
SQLite (data/db.sqlite)
    ↓ notifie via
WebSocket Manager (services/websocket.py)
    ↓ broadcast vers
Clients WebSocket (frontend)
```

### 2. Interface utilisateur (frontend)

```
App.vue (layout 3 colonnes)
    ├─→ IPDetails.vue (gauche)
    ├─→ IPGrid.vue (centre)
    │      └─→ IPCell.vue (x254)
    └─→ NewDetections.vue (droite)
    ↓ tous utilisent
Pinia Store (ipStore.js)
    ↓ communique avec
    ├─→ API REST (/api/ips/*)
    └─→ WebSocket (/ws)
```

### 3. Workflow complet d'un scan

```
1. Scheduler déclenche scan
2. NetworkScanner génère liste IP (CIDR)
3. Ping parallélisé (50 simultanés)
4. ARP lookup pour MAC/vendor
5. Port scan (ports configurés)
6. Classification état (online/offline)
7. Mise à jour base de données
8. Détection nouvelles IP
9. Push WebSocket vers clients
10. Mise à jour UI temps réel
```

## Composants clés

### Backend

| Fichier | Responsabilité | Lignes |
|---------|---------------|--------|
| `services/network.py` | Scan réseau (ping, ARP, ports) | ~300 |
| `services/scheduler.py` | Tâches planifiées | ~100 |
| `services/websocket.py` | Gestionnaire WebSocket | ~150 |
| `routers/ips.py` | API CRUD IPs | ~200 |
| `routers/scan.py` | API contrôle scan | ~150 |
| `models/ip.py` | Modèles SQLAlchemy | ~100 |
| `core/config.py` | Gestion config YAML | ~150 |
| `main.py` | Application FastAPI | ~150 |

### Frontend

| Fichier | Responsabilité | Lignes |
|---------|---------------|--------|
| `stores/ipStore.js` | State management + WebSocket | ~250 |
| `components/IPGrid.vue` | Grille IP + filtres | ~100 |
| `components/IPDetails.vue` | Détails + édition IP | ~200 |
| `components/IPCell.vue` | Cellule IP individuelle | ~80 |
| `components/NewDetections.vue` | Liste nouvelles IP | ~120 |
| `assets/main.css` | Styles Monokai | ~150 |

## Points d'entrée

### Développement

**Backend** :
```bash
cd backend
python -m backend.app.main
# ou
make dev-backend
```

**Frontend** :
```bash
cd frontend
npm run dev
# ou
make dev-frontend
```

### Production (Docker)

```bash
docker-compose up -d
# ou
./start.sh
# ou
make up
```

## Configuration requise

### Backend
- Python 3.11+
- Privilèges réseau (ping, ARP)
- Accès au réseau local

### Frontend
- Node.js 20+
- npm

### Docker
- Docker 20+
- docker-compose 2+

## Ports utilisés

- **8080** : API backend + frontend buildé (production)
- **3000** : Frontend dev (développement)

## Volumes Docker

- `./config.yaml` → `/app/config.yaml` (ro)
- `./data/` → `/app/data/`
- `./logs/` → `/app/logs/`

## Base de données

**SQLite** : `data/db.sqlite`

Tables :
- `ip` : Table principale des IP (14 colonnes)
- `ip_history` : Historique des états (5 colonnes)

Index :
- `ip.last_status`
- `ip.known`
- `ip_history.timestamp`
- `ip_history.ip`

## Tests

Lancer les tests :
```bash
pytest
# ou
make test
```

Couverture :
```bash
pytest --cov=backend.app --cov-report=html
# ou
make test-coverage
```

## Commandes utiles

Voir toutes les commandes :
```bash
make help
```

Principales commandes :
- `make build` - Construire l'image
- `make up` - Démarrer
- `make down` - Arrêter
- `make logs` - Voir les logs
- `make test` - Tests
- `make clean` - Nettoyer
- `make db-backup` - Sauvegarder DB
- `make db-reset` - Réinitialiser DB

## Dépendances principales

### Backend (Python)
- fastapi 0.109.0
- uvicorn 0.27.0
- sqlalchemy 2.0.25
- pydantic 2.5.3
- apscheduler 3.10.4
- scapy 2.5.0
- pytest 7.4.4

### Frontend (JavaScript)
- vue 3.4.15
- pinia 2.1.7
- axios 1.6.5
- vite 5.0.11
- tailwindcss 3.4.1
