added server-side user unread_count to rooms
This commit is contained in:
+31
-1
@@ -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))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user