# TRAIL DPS 4.2 - LOT 5.1.7 OVH - Révocation activation mobile

## Objectif

Ajouter côté serveur OVH un endpoint de révocation permettant à PLACE de révoquer un token d’activation et le binding/device actif associé à un acteur.

## Fichiers créés

- `public/api/tracking/revoke_device_activation.php`
- `docs/LOT_5_1_7_OVH_REVOCATION_DEVICE_ACTIVATION.md`

## Fichiers modifiés

- `SRC/Tracking/DeviceActivationRepository.php`

## Endpoint

`POST /api/tracking/revoke_device_activation.php`

Headers requis :

- `X-Api-Key`
- `X-Activation-Secret`

Payload attendu :

```json
{
  "place_instance_id": "...",
  "event_remote_id": "...",
  "event_local_id": 2,
  "run_id": null,
  "actor_type": "COURSE_STAFF",
  "local_team_id": null,
  "local_staff_team_id": 1,
  "activation_token": "optionnel",
  "device_uid": "optionnel"
}
```

## Comportement

- Si `activation_token` est fourni, le serveur tente de révoquer précisément ce token.
- Si aucun token n’est fourni ou trouvé, le serveur révoque par périmètre acteur : instance PLACE, événement, run, type acteur et identifiant local.
- Les lignes `tracking_device_activation_tokens` concernées passent à `revoked`.
- Les `tracking_bindings` actifs concernés passent à `revoked` avec `valid_to = UTC_TIMESTAMP()`.
- Les `tracking_devices` concernés passent à `revoked`, ce qui bloque les remontées avec l’ancien device_token.

## Justification métier

Cette révocation permet de ré-enrôler proprement un autre smartphone pour le même acteur terrain en cas d’erreur de scan, téléphone sans batterie, changement d’utilisateur ou mauvaise manipulation.

## Non-régression

- Aucun changement sur `position.php`.
- Aucun changement sur `activate_device.php`.
- Aucun changement SQL destructif.
- Le nouvel endpoint est isolé et appelé uniquement par PLACE.
