diff --git a/src/rust/lektor_db/src/connexion.rs b/src/rust/lektor_db/src/connexion.rs index 235fc9296d93fdb2e31cb8359f6e165601ded978..efedeaf94968542dd2e5090582d37376fa7a5548 100644 --- a/src/rust/lektor_db/src/connexion.rs +++ b/src/rust/lektor_db/src/connexion.rs @@ -1,4 +1,5 @@ use crate::{models::*, uri::LktUri, *}; +use diesel::connection::DefaultLoadingMode; use kurisu_api::v1 as api_v1; /// Create a connexion to a database and run automatically the migrations. @@ -276,19 +277,37 @@ impl LktDatabaseConnection { /// Get all infos about a kara, its metadata, its tags, repo, repo id, /// languages, karamakers... - pub fn get_kara_info(&mut self, local_id: i64) -> LktDatabaseResult<()> { - let _repo: String = with_dsl!(repo_kara => repo_kara + pub fn get_kara_info( + &mut self, + local_id: i64, + ) -> LktDatabaseResult<Vec<(String, Option<String>)>> { + let repo: String = with_dsl!(repo_kara => repo_kara .filter(local_kara_id.is(local_id)) .inner_join(schema::repo::table) .select(schema::repo::name) .first::<String>(&mut self.sqlite)? ); - let _kara_maker: Vec<String> = with_dsl!(kara => kara + let mut ret = vec![(String::from("repo"), Some(repo))]; + + for kara_maker in with_dsl!(kara => kara .filter(id.is(local_id)) .inner_join(schema::kara_maker::table) .select(schema::kara_maker::name) - .load::<String>(&mut self.sqlite)? - ); - todo!() + .load_iter::<String, DefaultLoadingMode>(&mut self.sqlite)? + ) { + ret.push((String::from("karamaker"), Some(kara_maker?))); + } + + for tag_entry in with_dsl!(kara_tag => kara_tag + .filter(kara_id.is(local_id)) + .inner_join(schema::tag::table) + .select((schema::tag::name, value)) + .load_iter::<(String, Option<String>), DefaultLoadingMode>(&mut self.sqlite)? + ) { + let (key, value) = tag_entry?; + ret.push((key, value)) + } + + Ok(ret) } }