Skip to content

Commit ac1175c

Browse files
committed
Migrate SubEventSyncAdapter
1 parent 22efb39 commit ac1175c

File tree

5 files changed

+142
-84
lines changed

5 files changed

+142
-84
lines changed

libpretixsync/src/main/java/eu/pretix/libpretixsync/sync/OrderCleanup.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class OrderCleanup(val db: SyncDatabase, val store: BlockingEntityStore<Persista
2525
return subeventsDeletionDate[sid]
2626
}
2727
try {
28-
SubEventSyncAdapter(store, eventSlug, sid.toString(), api, syncCycleId) { }.download()
28+
SubEventSyncAdapter(db, eventSlug, sid.toString(), api, syncCycleId) { }.download()
2929
} catch (e: RollbackException) {
3030
subeventsDeletionDate[sid] = null
3131
return null

libpretixsync/src/main/java/eu/pretix/libpretixsync/sync/SubEventSyncAdapter.java

-82
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package eu.pretix.libpretixsync.sync
2+
3+
import app.cash.sqldelight.TransactionWithoutReturn
4+
import eu.pretix.libpretixsync.api.PretixApi
5+
import eu.pretix.libpretixsync.db.Migrations
6+
import eu.pretix.libpretixsync.sqldelight.SubEvent
7+
import eu.pretix.libpretixsync.sqldelight.SyncDatabase
8+
import eu.pretix.libpretixsync.sync.SyncManager.ProgressFeedback
9+
import eu.pretix.libpretixsync.utils.JSONUtils
10+
import org.joda.time.format.ISODateTimeFormat
11+
import org.json.JSONException
12+
import org.json.JSONObject
13+
14+
class SubEventSyncAdapter(
15+
db: SyncDatabase,
16+
eventSlug: String,
17+
key: String,
18+
api: PretixApi,
19+
syncCycleId: String,
20+
feedback: ProgressFeedback? = null,
21+
) : SqBaseSingleObjectSyncAdapter<SubEvent>(
22+
db,
23+
eventSlug,
24+
key,
25+
api,
26+
syncCycleId,
27+
feedback,
28+
) {
29+
30+
override fun getKnownObject(): SubEvent? {
31+
val known = db.subEventQueries.selectByServerId(key.toLong()).executeAsList()
32+
33+
return if (known.isEmpty()) {
34+
null
35+
} else if (known.size == 1) {
36+
known[0]
37+
} else {
38+
// What's going on here? Let's delete and re-fetch
39+
db.subEventQueries.deleteByServerId(key.toLong())
40+
null
41+
}
42+
}
43+
44+
override fun insert(jsonobj: JSONObject) {
45+
val dateFrom =
46+
ISODateTimeFormat.dateTimeParser().parseDateTime(jsonobj.getString("date_from"))
47+
.toDate()
48+
49+
val dateTo = if (!jsonobj.isNull("date_to")) {
50+
ISODateTimeFormat.dateTimeParser().parseDateTime(jsonobj.getString("date_to")).toDate()
51+
} else {
52+
null
53+
}
54+
55+
db.subEventQueries.insert(
56+
active = jsonobj.getBoolean("active"),
57+
date_from = dateFrom,
58+
date_to = dateTo,
59+
event_slug = eventSlug,
60+
json_data = jsonobj.toString(),
61+
server_id = jsonobj.getLong("id"),
62+
)
63+
}
64+
65+
override fun update(obj: SubEvent, jsonobj: JSONObject) {
66+
val dateFrom =
67+
ISODateTimeFormat.dateTimeParser().parseDateTime(jsonobj.getString("date_from"))
68+
.toDate()
69+
70+
val dateTo = if (!jsonobj.isNull("date_to")) {
71+
ISODateTimeFormat.dateTimeParser().parseDateTime(jsonobj.getString("date_to")).toDate()
72+
} else {
73+
null
74+
}
75+
76+
db.subEventQueries.updateFromJson(
77+
active = jsonobj.getBoolean("active"),
78+
date_from = dateFrom,
79+
date_to = dateTo,
80+
event_slug = eventSlug,
81+
json_data = jsonobj.toString(),
82+
id = obj.id,
83+
)
84+
}
85+
86+
override fun getResourceName(): String = "subevents"
87+
88+
override fun getJSON(obj: SubEvent): JSONObject = JSONObject(obj.json_data!!)
89+
90+
override fun runInTransaction(body: TransactionWithoutReturn.() -> Unit) {
91+
db.subEventQueries.transaction(false, body)
92+
}
93+
94+
@Throws(JSONException::class)
95+
fun standaloneRefreshFromJSON(data: JSONObject) {
96+
// Store object
97+
data.put("__libpretixsync_dbversion", Migrations.CURRENT_VERSION)
98+
data.put("__libpretixsync_syncCycleId", syncCycleId)
99+
val known = getKnownObject()
100+
if (known == null) {
101+
insert(data)
102+
} else {
103+
val old = JSONObject(known.json_data!!)
104+
if (!JSONUtils.similar(data, old)) {
105+
update(known, data)
106+
}
107+
}
108+
}
109+
}

libpretixsync/src/main/sqldelight/common/eu/pretix/libpretixsync/sqldelight/SubEvent.sq

+31
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,34 @@ selectByServerId:
77
SELECT *
88
FROM SubEvent
99
WHERE server_id = ?;
10+
11+
deleteByServerId:
12+
DELETE FROM SubEvent
13+
WHERE server_id = ?;
14+
15+
insert:
16+
INSERT INTO SubEvent (
17+
active,
18+
date_from,
19+
date_to,
20+
event_slug,
21+
json_data,
22+
server_id
23+
) VALUES (
24+
?,
25+
?,
26+
?,
27+
?,
28+
?,
29+
?
30+
);
31+
32+
updateFromJson:
33+
UPDATE SubEvent
34+
SET
35+
active = ?,
36+
date_from = ?,
37+
date_to = ?,
38+
event_slug = ?,
39+
json_data = ?
40+
WHERE id = ?;

libpretixsync/src/test/java/eu/pretix/libpretixsync/check/AsyncCheckProviderTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class AsyncCheckProviderTest : BaseDatabaseTest() {
5656
CheckInListSyncAdapter(dataStore, FakeFileStorage(), "demo2", fakeApi, "", null, 0).standaloneRefreshFromJSON(
5757
jsonResource("checkinlists/event2-list7.json")
5858
)
59-
SubEventSyncAdapter(dataStore, "demo", "14", fakeApi, "", null).standaloneRefreshFromJSON(jsonResource("subevents/subevent1.json"))
59+
SubEventSyncAdapter(db, "demo", "14", fakeApi!!, "", null).standaloneRefreshFromJSON(jsonResource("subevents/subevent1.json"))
6060

6161
val osa = OrderSyncAdapter(db, FakeFileStorage(), "demo", 0, true, false, fakeApi!!, "", null)
6262
osa.standaloneRefreshFromJSON(jsonResource("orders/order1.json"))

0 commit comments

Comments
 (0)