Skip to content

Locally.com Inventarisfeed

Legacy implementatie — niet actief

De Locally.com-feed is een legacy implementatie in de huidige CodeIgniter-applicatie (zwerfkei). De feed werkt momenteel niet: de configuratie bij Locally.com is vermoedelijk verloren gegaan of de feed-URL is niet meer bereikbaar. De werking hieronder beschrijft de oorspronkelijke implementatie. Herimplementatie is gepland — zie de milestone voor de geplande aanpak.


Doel

Locally.com is een third-party platform dat de voorraad van fysieke winkels beschikbaar maakt op de productpagina's van merken. Zwerfkei is bij meerdere merken ingeschreven als retailer.

Een concreet voorbeeld: op arcteryx.com/nl/en/stores/find-a-store kunnen bezoekers zoeken op "Woerden" en Zwerfkei selecteren. Via de "Browse Stock" knop verschijnt de actuele Zwerfkei-voorraad — aangestuurd door Locally.com, die de feed van Zwerfkei pollt.


Huidige architectuur (legacy)

sequenceDiagram
    participant Locally as Locally.com (polling)
    participant Feed as GET /ext/inventory_feed
    participant ES as Elasticsearch

    Locally->>Feed: GET /ext/inventory_feed (periodiek)
    Feed->>ES: Scroll query — alle varianten met EAN-barcode + stock_free > 0
    ES-->>Feed: Artikelen (batches van 500)
    Feed-->>Locally: CSV (EAN-barcode, in_stock)
    Locally->>Brand as Merk (bijv. Arc'teryx): Synchroniseer voorraad

Feed-endpoint

URL GET /ext/inventory_feed
Authenticatie Geen
Formaat CSV, geen header-rij
Bestand application/controllers/ext/Inventory_feed.php

CSV-formaat

8717457123456,1
4046051082638,0
8710539123441,1
Kolom Beschrijving
Kolom 1 EAN-barcode (extern, niet-systeem barcode)
Kolom 2 1 = op voorraad (stock_free > 0), 0 = niet op voorraad

Barcode-filter

Niet alle barcodes zijn externe EAN-codes. Zwerfkei gebruikt ook interne systeem-barcodes (beginnen met 2). De feed filtert deze eruit via een regex:

[0-1,3-9]{1}[0-2,4-9]{1}[0-9]{10,11}

Alleen barcodes die op dit patroon matchen worden opgenomen. Als een variant uitsluitend een systeem-barcode heeft, wordt hij overgeslagen.

Elasticsearch-query

De feed gebruikt de Filter-klasse met Elasticsearch scroll-paginering:

  • Scope: regexp op variants.barcodes (alleen externe EAN-barcodes)
  • Scope: range op variants.stock_free (groter dan 0)
  • Batchgrootte: 500 artikelen per scroll-iteratie

Merken

Oorspronkelijk (tot juni 2020) kon de feed per merk worden gefilterd via een URL-parameter, met een vaste lijst van aangesloten merken:

arcteryx, lowa, hanwag, glerups, falke, therm-a-rest, mepal, msr, lonely planet, ortlieb, sea to summit, patagonia, deuter, helinox, leki

Sindsdien geeft de feed de volledige Zwerfkei-voorraad terug (alle merken). Locally.com filtert zelf per merk op basis van de GTIN-koppeling in hun platform.


Knelpunten huidige implementatie

  • Feed niet actief: Locally.com heeft de feed-URL waarschijnlijk niet meer geconfigureerd staan, of de URL is door een deployment/domeinwijziging onbereikbaar geworden
  • Geen monitoring: er is geen check of Locally.com de feed succesvol pollt
  • Geen logging: mislukte Elasticsearch-queries resulteren stilletjes in een lege CSV of HTTP 404

Target situatie

Herimplementatie gepland

De feed wordt opnieuw geïmplementeerd in de nieuwe Laravel-applicatie en opnieuw aangemeld bij Locally.com.

Milestone: Locally.com feed