From 4d8b1b3cfcbf471fdcdf2897175710024f5e9d62 Mon Sep 17 00:00:00 2001 From: Mats Rauhala Date: Tue, 6 Oct 2026 13:32:32 +0300 Subject: [PATCH] Retain history --- src/sync.rs | 12 ++++-------- src/writer.rs | 8 ++++++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/sync.rs b/src/sync.rs index 37c8abb..0ff1a71 100644 --- a/src/sync.rs +++ b/src/sync.rs @@ -41,13 +41,7 @@ impl ProgressSync { self.writer.connection.call(move |conn| -> rusqlite::Result<()> { conn.execute("insert into progress (user_id, document_id, progress, percentage, device, device_id, timestamp) select id, :document_id, :progress, :percentage, :device, :device_id, :timestamp from users - where username = :username - on conflict (user_id, document_id) do update - set progress = excluded.progress, - percentage = excluded.percentage, - device = excluded.device, - device_id = excluded.device_id, - timestamp = excluded.timestamp", named_params! + where username = :username", named_params! { ":username": username, ":document_id": doc.document_id, ":progress": doc.progress, @@ -69,7 +63,9 @@ impl ProgressSync { document_id, progress, percentage, device, device_id, timestamp from progress left join users on progress.user_id = users.id - where users.username = :username and progress.document_id = :document_id", named_params! + where users.username = :username and progress.document_id = :document_id + order by progress.rowid desc + limit 1", named_params! { ":username": username, ":document_id": document_id, }, |row| { diff --git a/src/writer.rs b/src/writer.rs index e6a8914..361899d 100644 --- a/src/writer.rs +++ b/src/writer.rs @@ -16,6 +16,14 @@ impl Writer { connection.call(|conn| -> rusqlite::Result<()> { conn.execute("create table if not exists users (id primary key, username not null, secret not null, unique(username))", [])?; conn.execute("create table if not exists progress (user_id not null, document_id not null, progress not null, percentage not null, device not null, device_id, timestamp not null, unique(user_id, document_id), foreign key (user_id) references users(id))", [])?; + + // Migrations + // + // Store history + conn.execute("alter table progress rename to progress_bak", [])?; + conn.execute("create table if not exists progress (user_id not null, document_id not null, progress not null, percentage not null, device not null, device_id, timestamp not null, foreign key (user_id) references users(id))", [])?; + conn.execute("insert into progress (user_id, document_id, progress, percentage, device, device_id, timestamp) select user_id, document_id, progress, percentage, device, device_id, timestamp from progress_bak", [])?; + conn.execute("drop table progress_bak", [])?; Ok(()) }).await?;