Hallo,
gibt es eine Möglichkeit die Hauptvariante eines Artikels über den Varianten-Endpunkt der REST-API zu setzen?
Zur Zeit verwenden wir zum Anlegen und Bearbeiten von Artikelvarianten ausschließlich den Varianten-Endpunkt. Ausgangslage ist ein Variantenartikel (id: 12) mit mehreren Varianten (122 und 123), wobei Variante “122” die aktuelle Hauptvariante ist. Es soll über einen “PUT”-Request auf den Varianten-Endpunkt die eingestellte Hauptvariante geändert werden:
PUT /api/variants/123
{"kind": 1, [..]}
Auch wurde versucht zuvor oder danach mit einem seperatem “PUT”-Request die alte Hauptvariante wieder als normale Variante zu markieren:
PUT /api/variants/122
{"kind": 2}
Leider führen alle bisherigen Versuche zu Inkonsitenzen in der Datenbank, da zwar die “kind”-Spalte in der Tabelle s_article_details wie gewünscht gesetzt ist (1 bei Variante 123; 2 bei allen anderen Varianten), aber in der Tabelle s_articles, in der noch einmal redundant die Hauptvariante in der Spalte “main_detail_id” hinterlegt ist, ist noch die vorherige Hauptvariante angegeben. Dies führt natürlich zu Bugs sowohl im Frontend als auch im Backend (z.B. sorgt der Versuch die Hauptvariante über das Backend einzustellen dazu, dass alle Varianten in s_article_details als Hauptvariante markiert werden).
Nach einem kurzen Blick in den Source-Code (/engine/Shopware/Components/Api/Resource/Variant.php) scheint es so, als wäre gar kein Code implementiert, um diesen speziellen Fall abzudecken. Meiner Meinung nach sollte hier zumindest ein Fehler geworfen werden, wenn über die API versucht wird die “kind” Spalte zu ändern, da dies ja unweigerlich zu Inkonsistenzen führt.
Gibt es eine Möglichkeit die ich übersehe, z.B. einen undokumentierten Parameter o.ä.?
Der einzige Workaround der mir aktuell einfällt, wäre die Hauptvariante über einen 2. “PUT”-Request zum Artikel-Endpunkt zu setzen, da hier der entsprechende Code zum Ändern der Hauptvariante implementiert ist. Also z.B.:
PUT /api/articles/12
{"variants": {"id": 123, "isMain": true}}
oder gleichbedeutend:
{"variants": {"id": 123, "standard": true}}
Wobei weder der Parameter “standard” noch “isMain” in der Shopware 5 REST-API-Dokumentation erwähnt wird.
Mit freundlichen Grüßen,
Philipp
PS: Ich hätte gerne sinnvolle Tags auf meinem Beitrag gesetzt, leider scheinen aber außer den 4 populärsten Tags (die alle nichts mit dieser Frage zu tun haben) kein Tag zu existieren.