diff --git a/Cargo.toml b/Cargo.toml index 5704be2..0388e9c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,3 +13,13 @@ 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" + +[profile.optimize] +inherits = "release" +opt-level = "z" +debug = false +strip = true +lto = true +codegen-units = 1 +incremental = false +panic = "abort" diff --git a/src/database.rs b/src/database.rs index 6e58d21..d92323c 100644 --- a/src/database.rs +++ b/src/database.rs @@ -193,4 +193,32 @@ impl Database { Ok(()) } + + pub async fn get_user_most_ratings(&self) -> Result<()> { + let mut conn = self.pool.acquire().await?; + + let records = sqlx::query( + r#" + select users.name, count(rating) as c, avg(rating) + from ratings + join users on users.id = user_id + group by user_id + order by c desc; + "#, + ) + .fetch_all(&mut *conn) + .await?; + + //let id = record.try_get("id")?; + + for r in records { + let name: &str = r.try_get("name")?; + let count: i64 = r.try_get("c")?; + let avg: f64 = r.try_get("avg(rating)")?; + + println!("Name: {name}, Ratings: {count}, Average: {avg}"); + } + + Ok(()) + } } diff --git a/src/main.rs b/src/main.rs index 7813631..5a700d8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -33,6 +33,14 @@ async fn main() { Err(e) => eprintln!("{e}"), } } else { + // Check if the parameter is -l + if username == "-l" { + db.get_user_most_ratings() + .await + .expect("Could not get ratings"); + return; + } + let user_id = db.add_user(&username).await.expect("Could not add user"); println!("UserID for {username}: {user_id}"); } @@ -45,7 +53,7 @@ async fn main() { .expect("Could not read from database"); if is_empty { - println!("Add an user first. This can be achieved by using rate_music [name] [user_id]"); + println!("Add a new user first. This can be achieved by using rate_music [name] [user_id]"); return; }