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:
regexpopvariants.barcodes(alleen externe EAN-barcodes) - Scope:
rangeopvariants.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.