feat(db): add item_order to track the order that items are saved in
This commit is contained in:
parent
8ac1d77e06
commit
47c87159ae
1 changed files with 15 additions and 5 deletions
20
src/db.rs
20
src/db.rs
|
@ -261,6 +261,7 @@ mod db_impl {
|
|||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
wikidata_id TEXT,
|
||||
item_order INTEGER NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (url_id) REFERENCES urls(id) ON DELETE CASCADE
|
||||
);",
|
||||
)
|
||||
|
@ -382,7 +383,8 @@ mod db_impl {
|
|||
FROM items i
|
||||
LEFT JOIN item_properties ip ON i.id = ip.item_id
|
||||
LEFT JOIN properties p ON ip.property_id = p.id
|
||||
WHERE i.url_id = ?",
|
||||
WHERE i.url_id = ?
|
||||
ORDER BY i.item_order ASC",
|
||||
)?;
|
||||
let mut items: HashMap<String, Item> = HashMap::new();
|
||||
|
||||
|
@ -467,22 +469,30 @@ mod db_impl {
|
|||
Err(e) => return Err(e.into()),
|
||||
};
|
||||
|
||||
let max_order: i32 = tx.query_row(
|
||||
"SELECT COALESCE(MAX(item_order), 0) FROM items WHERE url_id = ?",
|
||||
[url_id],
|
||||
|row| row.get(0),
|
||||
)?;
|
||||
|
||||
// 4. Item insertion
|
||||
log!("[DB] Upserting item");
|
||||
tx.execute(
|
||||
"INSERT INTO items (id, url_id, name, description, wikidata_id)
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
"INSERT INTO items (id, url_id, name, description, wikidata_id, item_order)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
ON CONFLICT(id) DO UPDATE SET
|
||||
url_id = excluded.url_id,
|
||||
name = excluded.name,
|
||||
description = excluded.description,
|
||||
wikidata_id = excluded.wikidata_id",
|
||||
wikidata_id = excluded.wikidata_id,
|
||||
item_order = excluded.item_order",
|
||||
rusqlite::params![
|
||||
&item.id,
|
||||
url_id,
|
||||
&item.name,
|
||||
&item.description,
|
||||
&item.wikidata_id
|
||||
&item.wikidata_id,
|
||||
max_order + 1
|
||||
],
|
||||
)?;
|
||||
log!("[DB] Item upserted successfully");
|
||||
|
|
Loading…
Add table
Reference in a new issue