# Serveur ArtFinder

Ce backend appartient exclusivement à ArtFinder. Il n’utilise ni la base, ni les tables, ni le jeton API d’Accolay.

## Modèle de données

- `artfinder_themes` : thèmes créés et nommés par l’utilisateur, associés à un moteur de corpus.
- `artfinder_theme_candidates` : annonces collectées pour un thème.
- `artfinder_theme_decisions` : réponses oui/non, toujours rattachées à un seul thème.
- `artfinder_theme_seen` : anti-doublon indépendant pour chaque thème.
- `artfinder_theme_runs` : historique des sélections initiales et recherches visuelles.
- `artfinder_settings` : réglages propres à ArtFinder.
- `reference-images/` : copie pérenne des images marquées « oui », utilisée par la bibliothèque visuelle même après la disparition de l’annonce d’origine.

Seules les décisions `positive` constituent la bibliothèque visuelle d’un thème. Aucun thème ou nom d’artiste n’est préchargé par l’application.

Les requêtes de marché ne sont pas stockées dans les thèmes. La sélection initiale utilise automatiquement le nom du thème; les recherches visuelles utilisent le profil partagé du moteur choisi. Le profil Céramique reprend les requêtes du scanner Accolay.

## Installation

1. Créer un utilisateur MySQL limité à la base `artfinder`.
2. Exécuter `schema.sql` avec un compte autorisé à créer cette base et ses tables.
3. Copier `config.php.example` vers `config.php`.
4. Fournir des valeurs exclusivement ArtFinder pour `ARTFINDER_DB_DSN`, `ARTFINDER_DB_USER`, `ARTFINDER_DB_PASSWORD` et `ARTFINDER_API_TOKEN`.
5. Déployer `api.php` et `config.php` dans un répertoire web différent de celui d’Accolay.
6. Vérifier que `ARTFINDER_API_TOKEN` correspond au jeton intégré dans la version d’ArtFinder distribuée. L’application ne propose plus de réglage d’URL ou de jeton.
7. Créer au besoin le dossier `reference-images` à côté de `api.php` et autoriser PHP à y écrire. Sur la plupart des hébergements, des droits `0755` ou `0775` suffisent selon le propriétaire du processus PHP.

L’application envoie le secret dans `Authorization: Bearer …` et dans l’en-tête de secours `X-ArtFinder-Token`. L’API accepte aussi `REDIRECT_HTTP_AUTHORIZATION` et `getallheaders()`, car certains hébergeurs Apache/FastCGI ne transmettent pas `HTTP_AUTHORIZATION` à PHP. Les espaces et retours à la ligne accidentels autour du jeton sont ignorés des deux côtés.

Pour tester l’installation dans un navigateur, ouvrir `https://votre-domaine/chemin/api.php?action=test` et saisir la clé. La page vérifie maintenant successivement le jeton, la connexion SQL et la présence des six tables ArtFinder. En cas d’échec, elle indique si le problème vient du pilote PDO MySQL, des identifiants, du nom de base, de l’hôte ou du schéma. Le formulaire utilise `POST` afin que le secret ne soit pas enregistré dans l’URL.

Lorsqu’une annonce est marquée « oui », l’API essaie de copier son image distante dans `reference-images/<theme>/`. Si l’hébergeur n’active pas PHP cURL ou n’autorise pas l’écriture dans ce dossier, la décision reste enregistrée avec l’URL distante et une explication apparaît dans le journal PHP. Les mosaïques de sélection initiale continuent, elles, à afficher directement les images de Vinted et Leboncoin.

Le fichier `schema.sql` utilise les nouvelles tables `artfinder_theme_*`. D’anciennes tables ArtFinder expérimentales éventuellement présentes sont ignorées par cette API et peuvent être archivées après vérification de vos données.

Si la première version expérimentale de ce schéma avait déjà été installée, exécuter une fois `migrate_remove_theme_queries.sql` avant de déployer la nouvelle API. Cette migration retire uniquement l’ancienne colonne de requêtes saisies manuellement.
