From 42e753dfd9b3b14cc4660e114885fb7555f00bf5 Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Tue, 7 May 2024 19:07:56 +0200 Subject: [PATCH] Proccess 204 status code from users service --- .../modules/annotations/callback_data.rs | 10 ++++---- .../modules/book/callback_data.rs | 12 +++++----- .../modules/download/callback_data.rs | 24 +++++++++---------- .../approved_bot/modules/download/commands.rs | 19 ++++++++------- .../modules/search/callback_data.rs | 14 +++++------ .../modules/settings/callback_data.rs | 12 +++++----- .../modules/update_history/callback_data.rs | 8 +++---- .../services/user_settings/mod.rs | 15 ++++++++---- src/bots_manager/internal.rs | 16 ++++--------- 9 files changed, 66 insertions(+), 64 deletions(-) diff --git a/src/bots/approved_bot/modules/annotations/callback_data.rs b/src/bots/approved_bot/modules/annotations/callback_data.rs index 196a74a..64d6399 100644 --- a/src/bots/approved_bot/modules/annotations/callback_data.rs +++ b/src/bots/approved_bot/modules/annotations/callback_data.rs @@ -1,4 +1,4 @@ -use std::str::FromStr; +use std::{fmt::Display, str::FromStr}; use regex::Regex; @@ -37,11 +37,11 @@ impl FromStr for AnnotationCallbackData { } } -impl ToString for AnnotationCallbackData { - fn to_string(&self) -> String { +impl Display for AnnotationCallbackData { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - AnnotationCallbackData::Book { id, page } => format!("b_an_{id}_{page}"), - AnnotationCallbackData::Author { id, page } => format!("a_an_{id}_{page}"), + AnnotationCallbackData::Book { id, page } => write!(f, "b_an_{}_{}", id, page), + AnnotationCallbackData::Author { id, page } => write!(f, "a_an_{}_{}", id, page), } } } diff --git a/src/bots/approved_bot/modules/book/callback_data.rs b/src/bots/approved_bot/modules/book/callback_data.rs index f045918..89e3ac7 100644 --- a/src/bots/approved_bot/modules/book/callback_data.rs +++ b/src/bots/approved_bot/modules/book/callback_data.rs @@ -1,4 +1,4 @@ -use std::str::FromStr; +use std::{fmt::Display, str::FromStr}; use regex::Regex; @@ -39,12 +39,12 @@ impl FromStr for BookCallbackData { } } -impl ToString for BookCallbackData { - fn to_string(&self) -> String { +impl Display for BookCallbackData { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - BookCallbackData::Author { id, page } => format!("ba_{id}_{page}"), - BookCallbackData::Translator { id, page } => format!("bt_{id}_{page}"), - BookCallbackData::Sequence { id, page } => format!("bs_{id}_{page}"), + BookCallbackData::Author { id, page } => write!(f, "ba_{}_{}", id, page), + BookCallbackData::Translator { id, page } => write!(f, "bt_{}_{}", id, page), + BookCallbackData::Sequence { id, page } => write!(f, "bs_{}_{}", id, page), } } } diff --git a/src/bots/approved_bot/modules/download/callback_data.rs b/src/bots/approved_bot/modules/download/callback_data.rs index 0f2f191..bd95f7e 100644 --- a/src/bots/approved_bot/modules/download/callback_data.rs +++ b/src/bots/approved_bot/modules/download/callback_data.rs @@ -1,4 +1,4 @@ -use std::str::FromStr; +use std::{fmt::Display, str::FromStr}; use regex::Regex; use strum_macros::EnumIter; @@ -12,11 +12,11 @@ pub enum DownloadQueryData { DownloadData { book_id: u32, file_type: String }, } -impl ToString for DownloadQueryData { - fn to_string(&self) -> String { +impl Display for DownloadQueryData { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { DownloadQueryData::DownloadData { book_id, file_type } => { - format!("d_{book_id}_{file_type}") + write!(f, "d_{}_{}", book_id, file_type) } } } @@ -47,15 +47,15 @@ pub enum DownloadArchiveQueryData { Translator { id: u32, file_type: String }, } -impl ToString for DownloadArchiveQueryData { - fn to_string(&self) -> String { +impl Display for DownloadArchiveQueryData { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { DownloadArchiveQueryData::Sequence { id, file_type } => { - format!("da_s_{id}_{file_type}") + write!(f, "da_s_{}_{}", id, file_type) } - DownloadArchiveQueryData::Author { id, file_type } => format!("da_a_{id}_{file_type}"), + DownloadArchiveQueryData::Author { id, file_type } => write!(f, "da_a_{}_{}", id, file_type), DownloadArchiveQueryData::Translator { id, file_type } => { - format!("da_t_{id}_{file_type}") + write!(f, "da_t_{}_{}", id, file_type) } } } @@ -90,9 +90,9 @@ pub struct CheckArchiveStatus { pub task_id: String, } -impl ToString for CheckArchiveStatus { - fn to_string(&self) -> String { - format!("check_da_{}", self.task_id) +impl Display for CheckArchiveStatus { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "check_da_{}", self.task_id) } } diff --git a/src/bots/approved_bot/modules/download/commands.rs b/src/bots/approved_bot/modules/download/commands.rs index 3988e6c..4903c9e 100644 --- a/src/bots/approved_bot/modules/download/commands.rs +++ b/src/bots/approved_bot/modules/download/commands.rs @@ -1,3 +1,5 @@ +use std::fmt::Display; + use regex::Regex; use strum_macros::EnumIter; @@ -10,10 +12,9 @@ pub struct StartDownloadCommand { pub id: u32, } -impl ToString for StartDownloadCommand { - fn to_string(&self) -> String { - let StartDownloadCommand { id } = self; - format!("/d_{id}") +impl Display for StartDownloadCommand { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "/d_{}", self.id) } } @@ -43,12 +44,12 @@ pub enum DownloadArchiveCommand { Translator { id: u32 }, } -impl ToString for DownloadArchiveCommand { - fn to_string(&self) -> String { +impl Display for DownloadArchiveCommand { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - DownloadArchiveCommand::Sequence { id } => format!("/da_s_{id}"), - DownloadArchiveCommand::Author { id } => format!("/da_a_{id}"), - DownloadArchiveCommand::Translator { id } => format!("/da_t_{id}"), + DownloadArchiveCommand::Sequence { id } => write!(f, "/da_s_{}", id), + DownloadArchiveCommand::Author { id } => write!(f, "/da_a_{}", id), + DownloadArchiveCommand::Translator { id } => write!(f, "/da_t_{}", id), } } } diff --git a/src/bots/approved_bot/modules/search/callback_data.rs b/src/bots/approved_bot/modules/search/callback_data.rs index 187d607..55bdff2 100644 --- a/src/bots/approved_bot/modules/search/callback_data.rs +++ b/src/bots/approved_bot/modules/search/callback_data.rs @@ -1,4 +1,4 @@ -use std::str::FromStr; +use std::{fmt::Display, str::FromStr}; use regex::Regex; use strum_macros::EnumIter; @@ -13,13 +13,13 @@ pub enum SearchCallbackData { Translators { page: u32 }, } -impl ToString for SearchCallbackData { - fn to_string(&self) -> String { +impl Display for SearchCallbackData { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - SearchCallbackData::Book { page } => format!("sb_{page}"), - SearchCallbackData::Authors { page } => format!("sa_{page}"), - SearchCallbackData::Sequences { page } => format!("ss_{page}"), - SearchCallbackData::Translators { page } => format!("st_{page}"), + SearchCallbackData::Book { page } => write!(f, "sb_{}", page), + SearchCallbackData::Authors { page } => write!(f, "sa_{}", page), + SearchCallbackData::Sequences { page } => write!(f, "ss_{}", page), + SearchCallbackData::Translators { page } => write!(f, "st_{}", page), } } } diff --git a/src/bots/approved_bot/modules/settings/callback_data.rs b/src/bots/approved_bot/modules/settings/callback_data.rs index 25de526..e82e0c9 100644 --- a/src/bots/approved_bot/modules/settings/callback_data.rs +++ b/src/bots/approved_bot/modules/settings/callback_data.rs @@ -1,4 +1,4 @@ -use std::str::FromStr; +use std::{fmt::Display, str::FromStr}; use regex::Regex; use smartstring::alias::String as SmartString; @@ -37,12 +37,12 @@ impl FromStr for SettingsCallbackData { } } -impl ToString for SettingsCallbackData { - fn to_string(&self) -> String { +impl Display for SettingsCallbackData { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - SettingsCallbackData::Settings => "lang_settings".to_string(), - SettingsCallbackData::On { code } => format!("lang_on_{code}"), - SettingsCallbackData::Off { code } => format!("lang_off_{code}"), + SettingsCallbackData::Settings => write!(f, "lang_settings"), + SettingsCallbackData::On { code } => write!(f, "lang_on_{}", code), + SettingsCallbackData::Off { code } => write!(f, "lang_off_{}", code), } } } diff --git a/src/bots/approved_bot/modules/update_history/callback_data.rs b/src/bots/approved_bot/modules/update_history/callback_data.rs index 8d586f9..8c7132b 100644 --- a/src/bots/approved_bot/modules/update_history/callback_data.rs +++ b/src/bots/approved_bot/modules/update_history/callback_data.rs @@ -1,4 +1,4 @@ -use std::str::FromStr; +use std::{fmt::Display, str::FromStr}; use chrono::NaiveDate; use dateparser::parse; @@ -36,15 +36,15 @@ impl FromStr for UpdateLogCallbackData { } } -impl ToString for UpdateLogCallbackData { - fn to_string(&self) -> String { +impl Display for UpdateLogCallbackData { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let date_format = "%Y-%m-%d"; let from = self.from.format(date_format); let to = self.to.format(date_format); let page = self.page; - format!("update_log_{from}_{to}_{page}") + write!(f, "update_log_{}_{}_{}", from, to, page) } } diff --git a/src/bots/approved_bot/services/user_settings/mod.rs b/src/bots/approved_bot/services/user_settings/mod.rs index 6ce2b83..7dfbe30 100644 --- a/src/bots/approved_bot/services/user_settings/mod.rs +++ b/src/bots/approved_bot/services/user_settings/mod.rs @@ -1,3 +1,4 @@ +use reqwest::StatusCode; use serde::Deserialize; use serde_json::json; use smallvec::{smallvec, SmallVec}; @@ -26,7 +27,7 @@ pub struct UserSettings { pub async fn get_user_settings( user_id: UserId, -) -> Result> { +) -> Result, Box> { let response = reqwest::Client::new() .get(format!( "{}/users/{}", @@ -38,7 +39,11 @@ pub async fn get_user_settings( .await? .error_for_status()?; - Ok(response.json::().await?) + if response.status() == StatusCode::NO_CONTENT { + return Ok(None); + } + + Ok(Some(response.json::().await?)) } pub async fn get_user_or_default_lang_codes(user_id: UserId) -> SmallVec<[SmartString; 3]> { @@ -50,8 +55,10 @@ pub async fn get_user_or_default_lang_codes(user_id: UserId) -> SmallVec<[SmartS match get_user_settings(user_id).await { Ok(v) => { - let langs: SmallVec<[SmartString; 3]> = - v.allowed_langs.into_iter().map(|lang| lang.code).collect(); + let langs: SmallVec<[SmartString; 3]> = match v { + Some(v) => v.allowed_langs.into_iter().map(|lang| lang.code).collect(), + None => return default_lang_codes, + }; USER_LANGS_CACHE.insert(user_id, langs.clone()).await; langs } diff --git a/src/bots_manager/internal.rs b/src/bots_manager/internal.rs index 8896e39..bce0b6f 100644 --- a/src/bots_manager/internal.rs +++ b/src/bots_manager/internal.rs @@ -65,17 +65,11 @@ pub async fn set_webhook(bot_data: &BotData) -> bool { match bot.set_webhook(url.clone()).await { Ok(_) => true, Err(err) => { - match err { - teloxide::RequestError::Api(ref err) => { - match err { - teloxide::ApiError::NotFound => { - let _ = delete_bot(bot_data.id).await; - }, - _ => (), - } - }, - _ => () - }; + if let teloxide::RequestError::Api(ref err) = err { + if err == &teloxide::ApiError::NotFound { + let _ = delete_bot(bot_data.id).await; + } + } log::error!("Webhook set error: {}", err); false