From 2e2281541f01b0a3671195c22ff0ded3524ba0c1 Mon Sep 17 00:00:00 2001 From: Anton Weber Date: Thu, 27 Nov 2025 11:46:11 +0100 Subject: [PATCH 1/2] Fix Discount table under Postgres --- .../pretix/libpretixsync/sqldelight/Discount.sq | 5 +++-- .../main/sqldelight/postgres/migrations/111.sqm | 16 ++++++++++++++++ .../{common => sqlite}/migrations/111.sqm | 0 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 libpretixsync/src/main/sqldelight/postgres/migrations/111.sqm rename libpretixsync/src/main/sqldelight/{common => sqlite}/migrations/111.sqm (100%) diff --git a/libpretixsync/src/main/sqldelight/postgres/eu/pretix/libpretixsync/sqldelight/Discount.sq b/libpretixsync/src/main/sqldelight/postgres/eu/pretix/libpretixsync/sqldelight/Discount.sq index 9e6ed951..5f6d6052 100644 --- a/libpretixsync/src/main/sqldelight/postgres/eu/pretix/libpretixsync/sqldelight/Discount.sq +++ b/libpretixsync/src/main/sqldelight/postgres/eu/pretix/libpretixsync/sqldelight/Discount.sq @@ -1,12 +1,13 @@ import java.util.Date; +import kotlin.Long; CREATE TABLE Discount ( id serial AS Long PRIMARY KEY NOT NULL, server_id bigint NOT NULL, event_slug character varying(255) NOT NULL, active boolean NOT NULL, - available_from DATE as Date, - available_until DATE as Date, + available_from DATE AS Date, + available_until DATE AS Date, "position" bigint NOT NULL, json_data text NOT NULL ); diff --git a/libpretixsync/src/main/sqldelight/postgres/migrations/111.sqm b/libpretixsync/src/main/sqldelight/postgres/migrations/111.sqm new file mode 100644 index 00000000..85c2d584 --- /dev/null +++ b/libpretixsync/src/main/sqldelight/postgres/migrations/111.sqm @@ -0,0 +1,16 @@ +import java.util.Date; +import kotlin.Long; + +CREATE TABLE Discount ( + id serial AS Long PRIMARY KEY NOT NULL, + server_id bigint NOT NULL, + event_slug character varying(255) NOT NULL, + active boolean NOT NULL, + available_from DATE AS Date, + available_until DATE AS Date, + "position" bigint NOT NULL, + json_data text NOT NULL +); + +ALTER TABLE ReceiptLine ADD line_price_gross numeric; +ALTER TABLE ReceiptLine ADD discount_id bigint; diff --git a/libpretixsync/src/main/sqldelight/common/migrations/111.sqm b/libpretixsync/src/main/sqldelight/sqlite/migrations/111.sqm similarity index 100% rename from libpretixsync/src/main/sqldelight/common/migrations/111.sqm rename to libpretixsync/src/main/sqldelight/sqlite/migrations/111.sqm From 78de6a1a55d2b63a1c7084d612dbbfd69071c686 Mon Sep 17 00:00:00 2001 From: Anton Weber Date: Thu, 27 Nov 2025 13:27:58 +0100 Subject: [PATCH 2/2] Change Order.payments and Order.refunds properties to nullable The corresponding JSON values are only synced conditionally and using fallback values of empty JSON arrays can lead to bugs and confusion. The new null value will allow us to check whether the values have been redacted during sync and log errors whenever we encounter this in an unexpected code path. See https://github.com/pretix/libpretixsync/issues/59 --- .../java/eu/pretix/libpretixsync/models/Order.kt | 4 ++-- .../libpretixsync/models/db/OrderExensions.kt | 16 +++------------- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/Order.kt b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/Order.kt index 640694db..41701e2d 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/Order.kt +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/Order.kt @@ -16,8 +16,8 @@ class Order( val validIfPending: Boolean = false, val total: BigDecimal? = null, val pendingTotal: BigDecimal? = null, - val payments: JSONArray = JSONArray(), - val refunds: JSONArray = JSONArray(), + val payments: JSONArray? = JSONArray(), + val refunds: JSONArray? = JSONArray(), ) { val hasValidStatus = when (status) { diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/OrderExensions.kt b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/OrderExensions.kt index eace5152..6a4c22e3 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/OrderExensions.kt +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/OrderExensions.kt @@ -87,19 +87,9 @@ private fun parsePendingTotal(json: JSONObject): BigDecimal? { } private fun parsePayments(json: JSONObject): JSONArray { - try { - return json.getJSONArray("payments") - } catch (e: JSONException) { - e.printStackTrace() - return JSONArray() - } + return json.optJSONArray("payments") } -private fun parseRefunds(json: JSONObject): JSONArray { - try { - return json.getJSONArray("refunds") - } catch (e: JSONException) { - e.printStackTrace() - return JSONArray() - } +private fun parseRefunds(json: JSONObject): JSONArray? { + return json.optJSONArray("refunds") }