store creation id and implement moves

This commit is contained in:
Andras Schmelczer 2026-04-21 20:30:04 +01:00
parent dca59a18dc
commit 5ee9db0007
9 changed files with 128 additions and 23 deletions

View file

@ -586,6 +586,7 @@ impl Database {
r#"
select
vault_update_id,
creation_vault_update_id,
document_id as "document_id: Hyphenated",
relative_path,
updated_date as "updated_date: chrono::DateTime<Utc>",
@ -626,6 +627,7 @@ impl Database {
r#"
select
vault_update_id,
creation_vault_update_id,
document_id as "document_id: Hyphenated",
relative_path,
updated_date as "updated_date: chrono::DateTime<Utc>",
@ -661,6 +663,7 @@ impl Database {
r#"
select
vault_update_id,
creation_vault_update_id,
document_id as "document_id: Hyphenated",
relative_path,
updated_date as "updated_date: chrono::DateTime<Utc>",
@ -697,6 +700,7 @@ impl Database {
r#"
insert into documents (
vault_update_id,
creation_vault_update_id,
document_id,
relative_path,
updated_date,
@ -706,9 +710,10 @@ impl Database {
device_id,
has_been_merged
)
values (?, ?, ?, ?, ?, ?, ?, ?, ?)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
"#,
version.vault_update_id,
version.creation_vault_update_id,
document_id,
version.relative_path,
version.updated_date,

View file

@ -0,0 +1,20 @@
ALTER TABLE documents ADD COLUMN creation_vault_update_id INTEGER NOT NULL DEFAULT 0;
UPDATE documents
SET creation_vault_update_id = (
SELECT MIN(d2.vault_update_id)
FROM documents d2
WHERE d2.document_id = documents.document_id
);
DROP VIEW latest_document_versions;
CREATE VIEW IF NOT EXISTS latest_document_versions AS --recreate view as it now includes one more field
SELECT d.*
FROM documents d
INNER JOIN (
SELECT MAX(vault_update_id) AS max_version_id
FROM documents
GROUP BY document_id
) max_versions
ON d.vault_update_id = max_versions.max_version_id;

View file

@ -13,6 +13,7 @@ pub type DeviceId = String;
#[derive(Debug, Clone)]
pub struct StoredDocumentVersion {
pub vault_update_id: VaultUpdateId,
pub creation_vault_update_id: VaultUpdateId,
pub document_id: DocumentId,
pub relative_path: String,
pub updated_date: DateTime<Utc>,

View file

@ -121,8 +121,10 @@ pub async fn create_document(
let path_changed = deduped_path != sanitized_relative_path;
let new_vault_update_id = last_update_id + 1;
let new_version = StoredDocumentVersion {
vault_update_id: last_update_id + 1,
vault_update_id: new_vault_update_id,
creation_vault_update_id: new_vault_update_id,
document_id,
relative_path: deduped_path,
content: new_content,

View file

@ -73,13 +73,16 @@ pub async fn delete_document(
return Ok(Json(latest_version.clone().into()));
}
let (latest_relative_path, latest_content) = latest_version.map_or_else(
|| (String::new(), Vec::new()),
|version| (version.relative_path, version.content),
);
let new_vault_update_id = last_update_id + 1;
let (latest_relative_path, latest_content, creation_vault_update_id) =
latest_version.map_or_else(
|| (String::new(), Vec::new(), new_vault_update_id),
|version| (version.relative_path, version.content, version.creation_vault_update_id),
);
let new_version = StoredDocumentVersion {
vault_update_id: last_update_id + 1,
vault_update_id: new_vault_update_id,
creation_vault_update_id,
document_id,
relative_path: latest_relative_path,
content: latest_content, // copy the content from the latest version

View file

@ -133,6 +133,7 @@ pub async fn restore_document_version(
let new_version = StoredDocumentVersion {
vault_update_id: last_update_id + 1,
creation_vault_update_id: target_version.creation_vault_update_id,
document_id,
relative_path: restore_path,
content: target_version.content,

View file

@ -303,6 +303,7 @@ pub async fn update_document(
let new_version = StoredDocumentVersion {
document_id,
vault_update_id: last_update_id + 1,
creation_vault_update_id: latest_version.creation_vault_update_id,
relative_path: new_relative_path,
content: merged_content,
updated_date: chrono::Utc::now(),