aboutsummaryrefslogtreecommitdiffstats
path: root/filamento/src
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2025-04-10 01:25:00 +0100
committerLibravatar cel 🌸 <cel@bunny.garden>2025-04-10 01:25:00 +0100
commit4008efcc072ccb0d149eeb16f3841c5a63d98b2c (patch)
tree9089d2f00df96d2cf44c027863b5d3d193c03d65 /filamento/src
parent2b0b4391ce4bc7616170a7b3c4ec40c61be99a5a (diff)
downloadluz-4008efcc072ccb0d149eeb16f3841c5a63d98b2c.tar.gz
luz-4008efcc072ccb0d149eeb16f3841c5a63d98b2c.tar.bz2
luz-4008efcc072ccb0d149eeb16f3841c5a63d98b2c.zip
fix(filamento): create_message_with_user_resource sql error
Diffstat (limited to '')
-rw-r--r--filamento/src/db.rs37
-rw-r--r--filamento/src/logic/process_stanza.rs2
2 files changed, 22 insertions, 17 deletions
diff --git a/filamento/src/db.rs b/filamento/src/db.rs
index 51d99e6..1d3d36c 100644
--- a/filamento/src/db.rs
+++ b/filamento/src/db.rs
@@ -384,9 +384,10 @@ impl Db {
let id = Uuid::new_v4();
let jid = chat.correspondent();
sqlx::query!(
- "insert into chats (id, correspondent) values (?, ?)",
+ "insert into chats (id, correspondent, have_chatted) values (?, ?, ?)",
id,
- jid
+ jid,
+ chat.have_chatted,
)
.execute(&self.db)
.await?;
@@ -473,7 +474,9 @@ impl Db {
pub message: Message,
}
+ // TODO: sometimes chats have no messages.
// TODO: i don't know if this will assign the right uuid to the latest message or the chat's id. should probably check but i don't think it matters as nothing ever gets called with the id of the latest message in the chats list
+ // TODO: it does matter in fact, as message updates and delivery receipts need to go to the right latest_message
let chats: Vec<ChatWithMessage> = sqlx::query_as("select c.*, m.* from chats c join (select chat_id, max(timestamp) max_timestamp from messages group by chat_id) max_timestamps on c.id = max_timestamps.chat_id join messages m on max_timestamps.chat_id = m.chat_id and max_timestamps.max_timestamp = m.timestamp order by m.timestamp desc")
.fetch_all(&self.db)
.await?;
@@ -569,7 +572,7 @@ impl Db {
Ok(())
}
- // create direct message from incoming
+ /// create direct message from incoming. MUST upsert chat and user
pub(crate) async fn create_message_with_user_resource(
&self,
message: Message,
@@ -579,20 +582,20 @@ impl Db {
) -> Result<(), Error> {
let bare_chat = chat.as_bare();
let resource = &chat.resourcepart;
- sqlx::query!(
- "insert into users (jid) values (?) on conflict do nothing",
- bare_chat
- )
- .execute(&self.db)
- .await?;
- let id = Uuid::new_v4();
- sqlx::query!(
- "insert into chats (id, correspondent) values (?, ?) on conflict do nothing",
- id,
- bare_chat
- )
- .execute(&self.db)
- .await?;
+ // sqlx::query!(
+ // "insert into users (jid) values (?) on conflict do nothing",
+ // bare_chat
+ // )
+ // .execute(&self.db)
+ // .await?;
+ // let id = Uuid::new_v4();
+ // sqlx::query!(
+ // "insert into chats (id, correspondent) values (?, ?) on conflict do nothing",
+ // id,
+ // bare_chat
+ // )
+ // .execute(&self.db)
+ // .await?;
if let Some(resource) = resource {
sqlx::query!(
"insert into resources (bare_jid, resource) values (?, ?) on conflict do nothing",
diff --git a/filamento/src/logic/process_stanza.rs b/filamento/src/logic/process_stanza.rs
index 7142144..9c49b04 100644
--- a/filamento/src/logic/process_stanza.rs
+++ b/filamento/src/logic/process_stanza.rs
@@ -92,12 +92,14 @@ pub async fn recv_message<Fs: FileStore + Clone>(
logic
.handle_error(Error::MessageRecv(MessageRecvError::MessageHistory(e)))
.await;
+ error!("failed to upsert chat and user")
}
}
Err(e) => {
logic
.handle_error(Error::MessageRecv(MessageRecvError::MessageHistory(e)))
.await;
+ error!("failed to upsert chat and user")
}
};