diff --git a/Cargo.toml b/Cargo.toml index 876b52f..5704be2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,4 +10,6 @@ anyhow = "1.0.81" crossterm = "0.27.0" mpris = "2.0.1" ratatui = "0.26.1" +sqlx = { version = "0.7.4", features = ["sqlite", "runtime-tokio"] } +tokio = { version = "1.36.0", features = ["rt", "macros", "rt-multi-thread"] } tui-textarea = "0.4.0" diff --git a/src/database.rs b/src/database.rs new file mode 100644 index 0000000..25e8bfc --- /dev/null +++ b/src/database.rs @@ -0,0 +1,49 @@ +use anyhow::Result; +use sqlx::{Row, SqlitePool}; + +pub struct Database { + pool: SqlitePool, +} + +impl Database { + pub async fn new() -> Result { + let pool = SqlitePool::connect("sqlite:ratings.db").await?; + Ok(Database { pool }) + } + + pub async fn add_user(&self, name: &str, number: i64) -> Result { + let mut conn = self.pool.acquire().await?; + + let id = sqlx::query( + r#" + INSERT INTO users (id, name) + VALUES (?1, ?2) + "#, + ) + .bind(name) + .bind(number) + .execute(&mut *conn) + .await? + .last_insert_rowid(); + + Ok(id) + } + + pub async fn user_exists(&self, number: i64) -> Result { + let mut conn = self.pool.acquire().await?; + + let record = sqlx::query( + r#" + SELECT id FROM users + WHERE id = ? + "#, + ) + .bind(number) + .fetch_one(&mut *conn) + .await?; + + let id = record.try_get("id")?; + + Ok(id) + } +} diff --git a/src/main.rs b/src/main.rs index fd3dffc..1f3d750 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,11 @@ +mod database; mod player; mod userinterface; -fn main() { +use tokio; + +#[tokio::main] +async fn main() { let player = player::MprisPlayer::new().expect("Could not create player"); let (usernumber, userrating) = userinterface::get_user_rating().expect("Lala");