> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cel-eleague.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Recherche algolia

# Recherche et Algolia

Cette page couvre la synchronisation Algolia telle qu’implémentée.

Sources principales :

* `convex/integrations/algolia.ts`
* `convex/schema.ts`

## Variables et index (vérifié)

Variables lues :

* `NEXT_PUBLIC_ALGOLIA_APP_ID`
* `ALGOLIA_WRITE_API_KEY`
* `NEXT_PUBLIC_ALGOLIA_INDEX_NAME` (défaut `cel_public`)
* `ALGOLIA_ADMIN_INDEX_NAME` (défaut `cel_admin`)

Index destination :

* public : `NEXT_PUBLIC_ALGOLIA_INDEX_NAME`
* admin : `ALGOLIA_ADMIN_INDEX_NAME`

## Types indexés (vérifié)

Public :

* `club`
* `player`
* `match`
* `article`
* `league`

Admin :

* `user`
* `transfer`
* `sanction`
* `audit_log`
* `ea_unmatched`

Le syncer rejette un type inconnu (`Unsupported document type for Algolia sync`).

## `syncDocument` (unitaire)

* lit/écrit un objet avec `op: upsert|delete`,
* si `ALGOLIA_WRITE_API_KEY` ou `NEXT_PUBLIC_ALGOLIA_APP_ID` manquants : skip silencieux avec warning,
* en `delete` : suppression directe dans l’index cible,
* en `upsert` :
  * récupère le payload (`getPublicSearchPayload` ou `getAdminSearchPayload`),
  * si payload nul/insuffisant (supprimé, inactif, non publié), tente la suppression sur Algolia,
  * sinon `PUT` du payload.

## Reindex global (vérifié)

Action `reindexAllAction(indexType)` supporte `public | admin | all`.

* pagination : `REINDEX_PAGE_SIZE = 100`,
* envoi par lot : `ALGOLIA_BATCH_SIZE = 150` vers endpoint batch Algolia,
* pour chaque type public/admin : pagine avec `getPaginated...Payloads` jusqu’à exhaustion,
* renvoie `{ success: true }`.

## Requête de payloads pour reindex

* `getPaginatedPublicPayloads` : source table par type public.
* `getPaginatedAdminPayloads` : source table par type admin.

## Index Convex `searchIndex` (vérifié partiel)

Les occurrences `searchIndex(...)` observées dans `schema.ts` :

* `search_announcements`
* `search_articles`
* `search_audit_logs`
* `search_clubs`
* `search_disputes`
* `search_matches`
* `search_notifications`
* `search_email_delivery_logs`
* `search_sanctions`
* `search_transfers`
* `search_displayName`
* `search_users`

### Zone non vérifiée

* L’objectif métier de chaque index (quels écrans/frontends les consomment) n’est pas documenté dans ces fichiers. Vérifier côté frontend si nécessaire.
