Proccess 204 status code from users service

This commit is contained in:
2024-05-07 19:07:56 +02:00
parent ac20b2a34a
commit 42e753dfd9
9 changed files with 66 additions and 64 deletions

View File

@@ -1,4 +1,4 @@
use std::str::FromStr; use std::{fmt::Display, str::FromStr};
use regex::Regex; use regex::Regex;
@@ -37,11 +37,11 @@ impl FromStr for AnnotationCallbackData {
} }
} }
impl ToString for AnnotationCallbackData { impl Display for AnnotationCallbackData {
fn to_string(&self) -> String { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self { match self {
AnnotationCallbackData::Book { id, page } => format!("b_an_{id}_{page}"), AnnotationCallbackData::Book { id, page } => write!(f, "b_an_{}_{}", id, page),
AnnotationCallbackData::Author { id, page } => format!("a_an_{id}_{page}"), AnnotationCallbackData::Author { id, page } => write!(f, "a_an_{}_{}", id, page),
} }
} }
} }

View File

@@ -1,4 +1,4 @@
use std::str::FromStr; use std::{fmt::Display, str::FromStr};
use regex::Regex; use regex::Regex;
@@ -39,12 +39,12 @@ impl FromStr for BookCallbackData {
} }
} }
impl ToString for BookCallbackData { impl Display for BookCallbackData {
fn to_string(&self) -> String { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self { match self {
BookCallbackData::Author { id, page } => format!("ba_{id}_{page}"), BookCallbackData::Author { id, page } => write!(f, "ba_{}_{}", id, page),
BookCallbackData::Translator { id, page } => format!("bt_{id}_{page}"), BookCallbackData::Translator { id, page } => write!(f, "bt_{}_{}", id, page),
BookCallbackData::Sequence { id, page } => format!("bs_{id}_{page}"), BookCallbackData::Sequence { id, page } => write!(f, "bs_{}_{}", id, page),
} }
} }
} }

View File

@@ -1,4 +1,4 @@
use std::str::FromStr; use std::{fmt::Display, str::FromStr};
use regex::Regex; use regex::Regex;
use strum_macros::EnumIter; use strum_macros::EnumIter;
@@ -12,11 +12,11 @@ pub enum DownloadQueryData {
DownloadData { book_id: u32, file_type: String }, DownloadData { book_id: u32, file_type: String },
} }
impl ToString for DownloadQueryData { impl Display for DownloadQueryData {
fn to_string(&self) -> String { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self { match self {
DownloadQueryData::DownloadData { book_id, file_type } => { 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 }, Translator { id: u32, file_type: String },
} }
impl ToString for DownloadArchiveQueryData { impl Display for DownloadArchiveQueryData {
fn to_string(&self) -> String { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self { match self {
DownloadArchiveQueryData::Sequence { id, file_type } => { 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 } => { 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, pub task_id: String,
} }
impl ToString for CheckArchiveStatus { impl Display for CheckArchiveStatus {
fn to_string(&self) -> String { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
format!("check_da_{}", self.task_id) write!(f, "check_da_{}", self.task_id)
} }
} }

View File

@@ -1,3 +1,5 @@
use std::fmt::Display;
use regex::Regex; use regex::Regex;
use strum_macros::EnumIter; use strum_macros::EnumIter;
@@ -10,10 +12,9 @@ pub struct StartDownloadCommand {
pub id: u32, pub id: u32,
} }
impl ToString for StartDownloadCommand { impl Display for StartDownloadCommand {
fn to_string(&self) -> String { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let StartDownloadCommand { id } = self; write!(f, "/d_{}", self.id)
format!("/d_{id}")
} }
} }
@@ -43,12 +44,12 @@ pub enum DownloadArchiveCommand {
Translator { id: u32 }, Translator { id: u32 },
} }
impl ToString for DownloadArchiveCommand { impl Display for DownloadArchiveCommand {
fn to_string(&self) -> String { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self { match self {
DownloadArchiveCommand::Sequence { id } => format!("/da_s_{id}"), DownloadArchiveCommand::Sequence { id } => write!(f, "/da_s_{}", id),
DownloadArchiveCommand::Author { id } => format!("/da_a_{id}"), DownloadArchiveCommand::Author { id } => write!(f, "/da_a_{}", id),
DownloadArchiveCommand::Translator { id } => format!("/da_t_{id}"), DownloadArchiveCommand::Translator { id } => write!(f, "/da_t_{}", id),
} }
} }
} }

View File

@@ -1,4 +1,4 @@
use std::str::FromStr; use std::{fmt::Display, str::FromStr};
use regex::Regex; use regex::Regex;
use strum_macros::EnumIter; use strum_macros::EnumIter;
@@ -13,13 +13,13 @@ pub enum SearchCallbackData {
Translators { page: u32 }, Translators { page: u32 },
} }
impl ToString for SearchCallbackData { impl Display for SearchCallbackData {
fn to_string(&self) -> String { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self { match self {
SearchCallbackData::Book { page } => format!("sb_{page}"), SearchCallbackData::Book { page } => write!(f, "sb_{}", page),
SearchCallbackData::Authors { page } => format!("sa_{page}"), SearchCallbackData::Authors { page } => write!(f, "sa_{}", page),
SearchCallbackData::Sequences { page } => format!("ss_{page}"), SearchCallbackData::Sequences { page } => write!(f, "ss_{}", page),
SearchCallbackData::Translators { page } => format!("st_{page}"), SearchCallbackData::Translators { page } => write!(f, "st_{}", page),
} }
} }
} }

View File

@@ -1,4 +1,4 @@
use std::str::FromStr; use std::{fmt::Display, str::FromStr};
use regex::Regex; use regex::Regex;
use smartstring::alias::String as SmartString; use smartstring::alias::String as SmartString;
@@ -37,12 +37,12 @@ impl FromStr for SettingsCallbackData {
} }
} }
impl ToString for SettingsCallbackData { impl Display for SettingsCallbackData {
fn to_string(&self) -> String { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self { match self {
SettingsCallbackData::Settings => "lang_settings".to_string(), SettingsCallbackData::Settings => write!(f, "lang_settings"),
SettingsCallbackData::On { code } => format!("lang_on_{code}"), SettingsCallbackData::On { code } => write!(f, "lang_on_{}", code),
SettingsCallbackData::Off { code } => format!("lang_off_{code}"), SettingsCallbackData::Off { code } => write!(f, "lang_off_{}", code),
} }
} }
} }

View File

@@ -1,4 +1,4 @@
use std::str::FromStr; use std::{fmt::Display, str::FromStr};
use chrono::NaiveDate; use chrono::NaiveDate;
use dateparser::parse; use dateparser::parse;
@@ -36,15 +36,15 @@ impl FromStr for UpdateLogCallbackData {
} }
} }
impl ToString for UpdateLogCallbackData { impl Display for UpdateLogCallbackData {
fn to_string(&self) -> String { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let date_format = "%Y-%m-%d"; let date_format = "%Y-%m-%d";
let from = self.from.format(date_format); let from = self.from.format(date_format);
let to = self.to.format(date_format); let to = self.to.format(date_format);
let page = self.page; let page = self.page;
format!("update_log_{from}_{to}_{page}") write!(f, "update_log_{}_{}_{}", from, to, page)
} }
} }

View File

@@ -1,3 +1,4 @@
use reqwest::StatusCode;
use serde::Deserialize; use serde::Deserialize;
use serde_json::json; use serde_json::json;
use smallvec::{smallvec, SmallVec}; use smallvec::{smallvec, SmallVec};
@@ -26,7 +27,7 @@ pub struct UserSettings {
pub async fn get_user_settings( pub async fn get_user_settings(
user_id: UserId, user_id: UserId,
) -> Result<UserSettings, Box<dyn std::error::Error + Send + Sync>> { ) -> Result<Option<UserSettings>, Box<dyn std::error::Error + Send + Sync>> {
let response = reqwest::Client::new() let response = reqwest::Client::new()
.get(format!( .get(format!(
"{}/users/{}", "{}/users/{}",
@@ -38,7 +39,11 @@ pub async fn get_user_settings(
.await? .await?
.error_for_status()?; .error_for_status()?;
Ok(response.json::<UserSettings>().await?) if response.status() == StatusCode::NO_CONTENT {
return Ok(None);
}
Ok(Some(response.json::<UserSettings>().await?))
} }
pub async fn get_user_or_default_lang_codes(user_id: UserId) -> SmallVec<[SmartString; 3]> { 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 { match get_user_settings(user_id).await {
Ok(v) => { Ok(v) => {
let langs: SmallVec<[SmartString; 3]> = let langs: SmallVec<[SmartString; 3]> = match v {
v.allowed_langs.into_iter().map(|lang| lang.code).collect(); 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; USER_LANGS_CACHE.insert(user_id, langs.clone()).await;
langs langs
} }

View File

@@ -65,17 +65,11 @@ pub async fn set_webhook(bot_data: &BotData) -> bool {
match bot.set_webhook(url.clone()).await { match bot.set_webhook(url.clone()).await {
Ok(_) => true, Ok(_) => true,
Err(err) => { Err(err) => {
match err { if let teloxide::RequestError::Api(ref err) = err {
teloxide::RequestError::Api(ref err) => { if err == &teloxide::ApiError::NotFound {
match err {
teloxide::ApiError::NotFound => {
let _ = delete_bot(bot_data.id).await; let _ = delete_bot(bot_data.id).await;
},
_ => (),
} }
}, }
_ => ()
};
log::error!("Webhook set error: {}", err); log::error!("Webhook set error: {}", err);
false false