added server-side user unread_count to rooms

This commit is contained in:
2026-01-16 12:39:00 +01:00
parent 37e6bb25fc
commit 96837fcc21
5 changed files with 133 additions and 51 deletions
+31 -1
View File
@@ -53,6 +53,7 @@ pub fn routes() -> Router {
.route("/messages/{room_uuid}", post(create_message))
}
/// Also resets `last_read_at`
async fn list_messages(
Path(room_uuid): Path<Uuid>,
Query(query): Query<MessageFetchQuery>,
@@ -73,6 +74,11 @@ async fn list_messages(
let limit: i32 = query.limit.unwrap_or(30).abs().min(80);
let mut tx = db
.begin()
.await
.map_err(|_| (StatusCode::INTERNAL_SERVER_ERROR, "DB error".into()))?;
let messages = sqlx::query_as::<_, MessageRow>(
r#"
SELECT
@@ -95,7 +101,7 @@ async fn list_messages(
.bind(room_id)
.bind(query.before)
.bind(limit)
.fetch_all(&db)
.fetch_all(&mut *tx)
.await
.map_err(|e| {
(
@@ -119,6 +125,30 @@ async fn list_messages(
messages.reverse();
sqlx::query(
r#"
UPDATE membership_
SET last_read_at = CURRENT_TIMESTAMP
WHERE user_id = $1
AND room = $2
"#,
)
.bind(user_id)
.bind(room_id)
.execute(&mut *tx)
.await
.map_err(|e| {
tracing::error!("Error updating membership timestamp: {e}");
(StatusCode::INTERNAL_SERVER_ERROR, format!("Failed to "))
})?;
tx.commit().await.map_err(|_| {
(
StatusCode::INTERNAL_SERVER_ERROR,
"Could not list messages".into(),
)
})?;
Ok(Json(messages))
}