From cf2d27358485a957ba4d2d1e6bb11bedce4d4eee Mon Sep 17 00:00:00 2001 From: Patrick Cleavelin Date: Tue, 28 Feb 2023 19:18:52 -0600 Subject: [PATCH] refactor structures sent to frontend --- src/main.rs | 4 +-- src/routes.rs | 69 +++++++++++++++++++++++++++++++++++++------------ src/settings.rs | 5 +++- 3 files changed, 58 insertions(+), 20 deletions(-) diff --git a/src/main.rs b/src/main.rs index 086781e..daac78a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -217,7 +217,7 @@ async fn spawn_bot(settings: Arc>) -> Vec match songbird::ytdl(&intro.url).await { Ok(source) => source, Err(err) => { @@ -246,7 +246,7 @@ async fn spawn_bot(settings: Arc>) -> Vec { - Settings(Vec<&'a UserSettings>), - NoUserFound, -} +use crate::settings::{GuildSettings, Intro, IntroIndex, Settings, UserSettings}; #[derive(Serialize)] pub(crate) enum IntroResponse<'a> { @@ -22,6 +16,30 @@ pub(crate) enum IntroResponse<'a> { NoGuildFound, } +#[derive(Serialize)] +pub(crate) enum MeResponse<'a> { + Me(Me<'a>), + NoUserFound, +} + +#[derive(Serialize)] +pub(crate) struct Me<'a> { + pub(crate) username: String, + pub(crate) guilds: Vec>, +} + +#[derive(Serialize)] +pub(crate) struct MeGuild<'a> { + pub(crate) name: String, + pub(crate) channels: Vec>, +} + +#[derive(Serialize)] +pub(crate) struct MeChannel<'a> { + pub(crate) name: String, + pub(crate) intros: &'a Vec, +} + pub(crate) async fn health(State(state): State>>) -> Json { let settings = state.lock().await; @@ -44,17 +62,34 @@ pub(crate) async fn me( ) -> Json { let settings = state.lock().await; - let user_settings = settings - .guilds - .values() - .flat_map(|guild| guild.channels.values().flat_map(|channel| &channel.users)) - .filter(|(name, _)| **name == user) - .map(|(_, settings)| settings) - .collect::>(); + let mut me = Me { + username: user.clone(), + guilds: Vec::new(), + }; - if user_settings.is_empty() { + for g in &settings.guilds { + let mut guild = MeGuild { + name: g.0.to_string(), + channels: Vec::new(), + }; + + for channel in &g.1.channels { + let user_settings = channel.1.users.iter().find(|u| *u.0 == user); + + let Some(user) = user_settings else { continue; }; + + guild.channels.push(MeChannel { + name: channel.0.to_owned(), + intros: &user.1.intros, + }); + } + + me.guilds.push(guild); + } + + if me.guilds.is_empty() { Json(json!(MeResponse::NoUserFound)) } else { - Json(json!(MeResponse::Settings(user_settings))) + Json(json!(MeResponse::Me(me))) } } diff --git a/src/settings.rs b/src/settings.rs index 862941e..a959330 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -54,7 +54,10 @@ pub(crate) struct ChannelSettings { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub(crate) struct IntroIndex(pub usize, pub i32); +pub(crate) struct IntroIndex { + pub(crate) index: usize, + pub(crate) volume: i32, +} #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")]