API Search

Le module search est un moteur de découverte général, distinct de la recherche directe disponible sur GET /api/articles/search.

Différence avec la recherche directe

GET /api/articles/search GET /api/search/articles/discover

Recherche 100% locale (MongoDB)

Recherche locale + enrichissement via résolveurs

Latence faible (< 200 ms)

Latence plus haute selon les résolveurs actifs

Résultats : articles correspondants à la requête

Résultats : articles directs + équivalents (OEM, cross-refs, TecDoc)

Source : toujours "direct"

Source : "direct", "oem", "internal", ou "tecdoc" par résultat

GET /api/search/articles/discover

Recherche des articles dans la base locale, puis enrichit les résultats via des résolveurs indépendants (relations OEM, relations internes, catalogue TecDoc).

Tous les endpoints requièrent une authentification (authMiddleware).

Paramètres de requête

Paramètre Type Requis Description

reference

string

(1)

Recherche partielle sur la référence ou les alias normalisés

brand

string

(1)

Recherche sur le nom de marque

ean

string

(1)

Recherche par code EAN

alias

string

(1)

Recherche sur les alias de l’article

company

ObjectId

Oui

Tenant courant

archetype

string

Non

Filtre par archétype (nom)

customer

ObjectId

Non

Client pour calcul du prix net personnalisé

tier

ObjectId

Non

Tier tarifaire pour le calcul du prix

resolvers

string

Non

Résolveurs actifs, séparés par virgule. Défaut : oem,internal

page

number

Non

Page (défaut : 1)

limit

number

Non

Résultats par page (défaut : 20)

Au moins un critère parmi reference, brand, ean, alias est obligatoire.

Résolveurs disponibles

Valeur Comportement

oem

Cherche dans article_relations (types oem, replaces, replaced_by). Résultats fiables, sans appel externe.

internal

Cherche dans article_relations (types cross, complementary). Résultats de suggestion ou complémentarité.

tecdoc

Interroge l’API TecDoc (getArticles) avec les aliases de l’article trouvé, puis retrouve dans notre base les articles correspondant aux cross-refs OEM retournées.

Format de réponse

{
  items: Array<{
    article: IArticle;
    price: ArticlePriceResult | null;
    stock: ArticleStockResult | null;
    promotions: IPromotion[];
    source: "direct" | "oem" | "internal" | "tecdoc";
    confidence: number;  // 0-1, degré de certitude de l'équivalence
  }>;
  resolvers_used: string[];
  pagination: {
    page: number;
    limit: number;
    total: number;
    pages: number;
  };
}

Le tableau items est ordonné : articles directs en premier, puis articles enrichis par résolveur.

Exemples

Recherche directe + OEM + interne (défaut)
GET /api/search/articles/discover?reference=BP123&company=<id>
OEM uniquement
GET /api/search/articles/discover?reference=BP123&resolvers=oem&company=<id>
Tous les résolveurs
GET /api/search/articles/discover?reference=BP123&resolvers=oem,internal,tecdoc&company=<id>

Réponses HTTP

  • 200 — liste enrichie

  • 400 — validation échouée (aucun critère, résolveur inconnu ignoré silencieusement)

  • 401 — non authentifié