API Produkt Sichtbarkeit updaten

Hallo in die Runde,
ich bin aktuell dabei einen Importer zu schreiben und stoße nun auf folgendes Problem.

Wird im PIM (hier liegt die Datenbasis) die Sichtbarkeit eines Produktes geändert, so ändert sich das ModifiedDate des gesamten Produkts. Mit dem nächsten Import werde ich für dieses Produkt also ein Update durchführen und übergebe an die API das Produkt. Diesmal aber nicht nur mit einer, sondern mit zwei Einträgen für visibilities.

Der Import bricht dann aber ab, da er bereits einen Eintrag für die Relation ProductId auf salesChannelID hat. (Duplicate entry for key uniq.product_id__sales_channel_id)

Wie ich dieses Problem für mich löse, ist mir allerdings im Moment noch ein Rätsel. Über das PIM erhalte ich immer nur alle Information, ich weiß nicht, was geändert wurde, sondern lediglich das etwas geändert wurde, anhand des modified date.

Hat dazu irgendeiner ein paar hilfreiche Informationen?

Klingt für mich so, als würde ein Insert durchgeführt werden, statt ein Update bzw. Upsert.

Aktuell gehe ich den Weg über /api/product und nutze dort POST und PATCH. Über Slack kam jetzt schon der Hinweis, dass ich bei Relations, wie visibilities, die ID mitschicken muss.

Die wiederum muss ich mir ja dann in einer eigenen Tabelle zwischenspeichern, um diese beim Update auch wieder korrekt nutzen zu können.

Nun frage ich mich aber, wie ich eine Saleschannel Relation wieder löschen kann. Nehmen wir mal an, im PIM wird erst ein Channel angegeben, dann zwei und dann wieder eine. Meine Hoffnung war ja, dass ich die Produktinformation einfach immer komplett zusammen sammel, den Request abschicke und Shopware dann selbständig merkt, dass da jetzt eine Channel ID weniger vorhanden ist und das entsprechend löscht. Aber dem scheint ja nicht so. Oder denke ich hier irgendwie in eine falsche Richtung?

Das Grund Problem mit der Shopware 6 API ist, dass die multiplen Werte wie die SalesChannel oder auch die Kategorien IMMER additiv sind.

Also das Produkt in Shopware hat die Channels: Channel1 und Channel2, Jetzt sendest Du via API ein Upddate mit den Werten Channel13 und Channel 99, dann hast Du am Ende alle 4 Channels gesetzt.

Ansonsten müssten zunächst alle Channels löschen, wozu es aber die UUIDs braucht. Sprich eigentlich geht das Ganze nur mit 3 API calls. 1. Abruf der aktuellen Channels, 2. löschen der Channels die nun nicht mehr gesetzt sein sollen und 3. Call mit dem Setzen der neuen Daten.

Das ist alles leider recht unhandlich.

LG