create db functions to get/set messages

This commit is contained in:
Akulij 2025-04-03 22:43:49 +09:00
parent c93d2f1ee8
commit f992a99bd4

View File

@ -74,4 +74,53 @@ impl DB {
.unwrap(), .unwrap(),
} }
} }
pub async fn get_message(&mut self, chatid: i64, messageid: i32) -> Result<Option<Message>, Box<dyn std::error::Error>> {
use self::schema::messages::dsl::*;
let conn = &mut self.pool.get().await.unwrap();
let msg = messages
.filter(chat_id.eq(chatid))
.filter(message_id.eq(messageid as i64))
.first::<Message>(conn)
.await
.optional()?;
Ok(msg)
}
pub async fn get_message_literal(&mut self, chatid: i64, messageid: i32) -> Result<Option<String>, Box<dyn std::error::Error>> {
let msg = self.get_message(chatid, messageid).await?;
Ok(msg.map(|m| m.token))
}
pub async fn set_message_literal(&mut self, chatid: i64, messageid: i32, literal: &str) -> Result<(), Box<dyn std::error::Error>> {
use self::schema::messages::dsl::*;
let conn = &mut self.pool.get().await?;
let msg = self.clone().get_message(chatid, messageid).await?;
match msg {
Some(msg) => {
diesel::update(messages)
.filter(id.eq(msg.id))
.set(token.eq(literal))
.execute(conn)
.await?;
},
None => {
diesel::insert_into(messages)
.values((
chat_id.eq(chatid),
message_id.eq(messageid as i64),
token.eq(literal)
))
.execute(conn)
.await?;
}
};
Ok(())
}
} }