Guten Morgen, wir haben leider hin und wieder das Problem, dass es beim Aktualisieren eines Produkts über die API zu einer Race Condition kommt. Bei Produkten ohne Varianten steht der Lagerbestand in den Hauptdaten des Produktes. Wenn ich die Artikelbeschreibung per PUT api.php/v2/products/{product_id} aktualisiere, ist "quantity" ein required Feld, was ich damit überschreibe. Wenn in dem Moment wo ich per API das Produkt aktualisiere eine Bestellung getätigt wird, kann es vorkommen, dass der Bestand durch die Bestellung nicht abgezogen wird, weil der PUT Call den alten Bestand wieder überschreibt. Das erzeugt sehr schwer nachvollziehbare Bestandsfehler, die teilweise erst Monate später auffallen. Es hat mich glaube ich 2 Jahre gebraucht bis ich überhaupt verstanden habe, was hier passiert. Es ist auch möglich, dass es sich gar nicht um eine Race Condition sondern um einen Time-of-Check-to-Time-of-Use-Problem handelt. Um das möglichst zu vermeiden habe ich mir angewöhnt ein Produkt per API abzufragen, dann irgendwelche Dinge mit dem content anzustellen und statt das Produkt dann zu Aktualisieren, das Produkt ein zweites mal per API abfragen und sofort zu updaten. Es ist quasi unmöglich für mich, die Zeit zwischen GET und PUT Call zu verkürzen, das ist schon so kurz wie es geht. Mein Frage wäre nur: Was tun? Hat jemand das Problem auch schon gehabt und dafür eine Lösung? Ich habe schon überlegt, NACH jedem Update eines Produktes abzufragen, ob neue Bestellungen eingegangen sind in den letzten paar Sekunden, zu prüfen ob das Produkt was gerade bearbeitet wurde in der Bestellung war, und dann den Lagerbestand vorher mit nachher zu vergleichen und ggf. anzupassen, falls es zu einem Fehler gekommen ist. Das erzeugt halt eine Irre Menge an zusätzlichen API-Calls. Wir haben über 2000 Produkte im Shop, wenn ich da einmal durchgehe sind das auch über 2000 POST api.php/v2/orders/search anfragen nur für diesen seltenen Fall, der nur ein paar mal im Jahr vorkommt (soweit ich weiß).
Kannst Du das nicht automatisieren, sodass es bspw. Montagsmorgens um 3:00 Uhr läuft? Da sind erfahrungsgemäß weniger Kunden online.