Files
groove/src/database/mod.rs

58 lines
1.6 KiB
Rust

pub mod artists;
pub mod paths;
pub mod tracks;
use r2d2::{Pool, PooledConnection};
use r2d2_sqlite::SqliteConnectionManager;
pub fn establish_connection() -> Pool<SqliteConnectionManager> {
dotenvy::dotenv().ok();
let database_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set");
let manager = SqliteConnectionManager::file(database_url);
let pool = Pool::new(manager).expect("Error creating SQLite pool");
pool
}
pub fn initialize_database(
connection: &PooledConnection<SqliteConnectionManager>,
) -> Result<(), r2d2_sqlite::rusqlite::Error> {
connection.execute(
"
CREATE TABLE IF NOT EXISTS library_paths (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
path TEXT NOT NULL
);
",
[],
)?;
connection.execute(
"CREATE TABLE IF NOT EXISTS artists (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
name TEXT NOT NULL
)",
[],
)?;
connection.execute(
"
CREATE TABLE IF NOT EXISTS tracks (
hash TEXT PRIMARY KEY NOT NULL,
library_path_id INTEGER NOT NULL,
name TEXT NOT NULL,
artist_id INTEGER NOT NULL,
path TEXT NOT NULL,
duration INTEGER NOT NULL,
FOREIGN KEY (library_path_id) REFERENCES library_paths (id) ON DELETE CASCADE,
FOREIGN KEY (artist_id) REFERENCES artists (id) ON DELETE CASCADE
);
",
[],
)?;
Ok(())
}