diff --git a/rust/migrations/20230820094036_add_user_to_inventory.sql b/rust/migrations/20230820094036_add_user_to_inventory.sql new file mode 100644 index 0000000..9df8369 --- /dev/null +++ b/rust/migrations/20230820094036_add_user_to_inventory.sql @@ -0,0 +1,32 @@ +CREATE TABLE "inventory_items_tmp" ( + id VARCHAR(36) NOT NULL, + name TEXT NOT NULL, + description TEXT, + weight INTEGER NOT NULL, + category_id VARCHAR(36) NOT NULL, + product_id VARCHAR(36), + user_id VARCHAR(36) NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (category_id) REFERENCES inventory_items_categories(id), + FOREIGN KEY (product_id) REFERENCES inventory_products(id), + FOREIGN KEY (user_id) REFERENCES users(id) +); + +CREATE TABLE "inventory_items_categories_tmp" ( + id VARCHAR(36) NOT NULL, + name TEXT NOT NULL, + description TEXT, + user_id VARCHAR(36) NOT NULL, + PRIMARY KEY (id), + UNIQUE (name), + FOREIGN KEY (user_id) REFERENCES users(id) +); + +INSERT INTO inventory_items_tmp SELECT *, (SELECT id FROM users LIMIT 1) as user_id FROM inventory_items; +INSERT INTO inventory_items_categories_tmp SELECT *, (SELECT id FROM users LIMIT 1) as user_id FROM inventory_items_categories; + +DROP TABLE inventory_items; +DROP TABLE inventory_items_categories; + +ALTER TABLE inventory_items_tmp RENAME TO inventory_items; +ALTER TABLE inventory_items_categories_tmp RENAME TO inventory_items_categories; diff --git a/rust/src/main.rs b/rust/src/main.rs index 5b4bb33..8ecb19e 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -82,15 +82,15 @@ async fn main() -> MainResult { .with_max_level(tracing::Level::DEBUG) .init(); + if let Err(e) = sqlite::migrate(&args.database_url).await { + return <_ as Into>::into(e).into(); + } + let database_pool = match sqlite::init_database_pool(&args.database_url).await { Ok(pool) => pool, Err(e) => return <_ as Into>::into(e).into(), }; - if let Err(e) = sqlite::migrate(&database_pool).await { - return <_ as Into>::into(e).into(); - } - let state = AppState { database_pool, client_state: ClientState::new(), @@ -159,12 +159,7 @@ async fn main() -> MainResult { }, }, Command::Migrate => { - let database_pool = match sqlite::init_database_pool(&args.database_url).await { - Ok(pool) => pool, - Err(e) => return <_ as Into>::into(e).into(), - }; - - if let Err(e) = sqlite::migrate(&database_pool).await { + if let Err(e) = sqlite::migrate(&args.database_url).await { return <_ as Into>::into(e).into(); } diff --git a/rust/src/sqlite.rs b/rust/src/sqlite.rs index e000ce5..533f68c 100644 --- a/rust/src/sqlite.rs +++ b/rust/src/sqlite.rs @@ -12,7 +12,12 @@ pub async fn init_database_pool(url: &str) -> Result, StartError> { .await?) } -pub async fn migrate(pool: &Pool) -> Result<(), StartError> { - sqlx::migrate!().run(pool).await?; +pub async fn migrate(url: &str) -> Result<(), StartError> { + let pool = SqlitePoolOptions::new() + .max_connections(5) + .connect_with(SqliteConnectOptions::from_str(url)?.pragma("foreign_keys", "0")) + .await?; + + sqlx::migrate!().run(&pool).await?; Ok(()) }