# Phase 3A — Moteur commun de connecteurs

Version : **Coaster World DATA v0.7.0**

## Objectif

Créer une couche technique commune avant de brancher ThemeParks.wiki, Queue-Times, Wikidata ou un connecteur spécifique à un parc.

Un fournisseur continue d'être une configuration métier. Le connecteur est le moteur PHP qui sait communiquer avec la source technique.

Exemples futurs :

- fournisseur `ThemeParks.wiki` → connecteur `themeparks_wiki` ;
- fournisseur `Queue-Times` → connecteur `queue_times` ;
- fournisseur propre à un parc → connecteur spécialisé ;
- simple page/API à surveiller → connecteur `generic_http`.

## Architecture

### `ProviderConnector`

Contrat minimal commun à tous les connecteurs. La Phase 3A expose d'abord le test de connexion. Les opérations de collecte seront ajoutées sur cette fondation dans les phases suivantes sans que l'administration ne dépende d'une API externe précise.

### `ConnectorRegistry`

Associe une clé stable à une classe de connecteur. Les fournisseurs enregistrent seulement la clé (`connector_key`) et ne dépendent pas du nom PHP de la classe.

### `ConnectorRunner`

Encadre les exécutions :

- crée un journal `running` ;
- lance le connecteur ;
- enregistre succès, échec ou opération ignorée ;
- mesure la durée ;
- conserve le code HTTP lorsqu'il existe ;
- rattache l'utilisateur qui a déclenché l'action ;
- capture l'erreur sans modifier les données canoniques.

### `connector_runs`

Historique technique des exécutions. Cette table servira ensuite également aux synchronisations réelles et au monitoring.

## Connecteurs v0.7.0

### `manual`

Aucun appel réseau. Convient aux sources saisies manuellement ou aux fournisseurs dont le connecteur n'est pas encore développé.

### `generic_http`

Teste uniquement l'accessibilité technique :

1. première source active, en privilégiant un endpoint API ;
2. sinon `base_url` du fournisseur ;
3. sinon `homepage_url`.

Le test utilise HEAD, avec repli GET uniquement si HEAD n'est pas supporté (`405`/`501`). Aucune donnée encyclopédique n'est importée.

## Sécurité

- HTTP/HTTPS uniquement ;
- `localhost` et IP privées/réservées bloquées par défaut ;
- timeout et délai de connexion bornés ;
- aucun secret ni query string n'est écrit dans `connector_runs` ;
- les erreurs réseau sont journalisées sans modifier les données canoniques.

## Hors périmètre

Cette phase ne contient volontairement pas :

- ThemeParks.wiki réel ;
- Queue-Times réel ;
- import automatique ;
- mapping de données ;
- scheduler de collecte ;
- agent IA.

La prochaine phase peut maintenant ajouter **ThemeParks.wiki comme premier connecteur réel** en réutilisant ce moteur commun.
