diff --git a/src/entity/account.rs b/src/entity/account.rs index aa39c2d..a79047f 100644 --- a/src/entity/account.rs +++ b/src/entity/account.rs @@ -129,4 +129,17 @@ impl Entity { .await?; Ok(result.is_some()) } + + pub async fn get( + user_id: u64, + account_name: impl Into, + db: &DatabaseConnection, + ) -> crate::Result> { + Self::find() + .filter(Column::UserId.eq(user_id)) + .filter(Column::Name.eq(account_name.into())) + .one(db) + .await + .map_err(Into::into) + } } diff --git a/src/handlers/commands/get_account.rs b/src/handlers/commands/get_account.rs index db553f6..23d10ba 100644 --- a/src/handlers/commands/get_account.rs +++ b/src/handlers/commands/get_account.rs @@ -1,5 +1,5 @@ use crate::{ - entity::{account, prelude::Account}, + entity::prelude::Account, errors::NoUserInfo, handlers::{markups, utils::package_handler, MainDialogue, State}, }; @@ -19,12 +19,13 @@ async fn get_master_pass( let _ = bot.delete_message(previous.chat.id, previous.id).await; dialogue.exit().await?; let user_id = msg.from().ok_or(NoUserInfo)?.id.0; - let account = Account::find() - .filter(account::Column::UserId.eq(user_id)) - .filter(account::Column::Name.eq(&name)) - .one(&db) - .await? - .unwrap(); + let account = match Account::get(user_id, &name, &db).await? { + Some(account) => account, + None => { + bot.send_message(msg.chat.id, "Account not found").await?; + return Ok(()); + } + }; let (login, password) = spawn_blocking(move || account.decrypt(&master_pass)).await??; let message = format!("Name:\n`{name}`\nLogin:\n`{login}`\nPassword:\n`{password}`"); bot.send_message(msg.chat.id, message)