use crate::errors::Result;
use idb::{Database, KeyPath};
pub(super) const DB_VERSION: u32 = 1;
pub(super) const TASKS: &str = "tasks";
pub(super) const OPERATIONS: &str = "operations";
pub(super) const OPERATIONS_BY_UUID: &str = "operations_by_uuid";
pub(super) const OPERATIONS_BY_UNSYNCED: &str = "operations_by_unsynced";
pub(super) const SYNC_META: &str = "sync_meta";
pub(super) const WORKING_SET: &str = "working_set";
fn upgrade_0_to_1(db: Database) -> Result<()> {
let mut params = idb::ObjectStoreParams::new();
params.key_path(None);
params.auto_increment(false);
db.create_object_store(TASKS, params)?;
let mut params = idb::ObjectStoreParams::new();
params.key_path(None);
params.auto_increment(true);
let ops = db.create_object_store(OPERATIONS, params)?;
ops.create_index(OPERATIONS_BY_UUID, KeyPath::new_single("uuid"), None)?;
ops.create_index(
OPERATIONS_BY_UNSYNCED,
KeyPath::new_single("unsynced"),
None,
)?;
let mut params = idb::ObjectStoreParams::new();
params.key_path(None);
params.auto_increment(false);
db.create_object_store(SYNC_META, params)?;
let mut params = idb::ObjectStoreParams::new();
params.key_path(None);
params.auto_increment(false);
db.create_object_store(WORKING_SET, params)?;
Ok(())
}
pub(super) fn upgrade(db: Database, old_version: u32) -> Result<()> {
if old_version == 0 {
upgrade_0_to_1(db)
} else {
unreachable!("old_version should be less than DB_VERSION");
}
}