diff --git a/apps/api/libs/handlers/src/chats/list_chats_handler.rs b/apps/api/libs/handlers/src/chats/list_chats_handler.rs index 22d1c7f08..a0fdd824d 100644 --- a/apps/api/libs/handlers/src/chats/list_chats_handler.rs +++ b/apps/api/libs/handlers/src/chats/list_chats_handler.rs @@ -101,25 +101,22 @@ pub async fn list_chats_handler( Vec::new() // If admin view, we'll show all chats anyway }; - let user_message_count = messages::table - .filter(messages::chat_id.eq(chats::id)) - .filter(messages::request_message.is_not_null()) - .filter(messages::deleted_at.is_null()) - .count(); - - let total_message_count = messages::table - .filter(messages::chat_id.eq(chats::id)) - .filter(messages::deleted_at.is_null()) - .count(); - // Start building the query let mut query = chats::table .inner_join(users::table.on(chats::created_by.eq(users::id))) .filter(chats::deleted_at.is_null()) .filter(chats::title.ne("")) // Filter out empty titles .filter( - user_message_count.gt(0) - .or(total_message_count.gt(1)) + diesel::dsl::exists( + messages::table + .filter(messages::chat_id.eq(chats::id)) + .filter(messages::request_message.is_not_null()) + .filter(messages::deleted_at.is_null()) + ).or( + diesel::dsl::sql::( + "(SELECT COUNT(*) FROM messages WHERE messages.chat_id = chats.id AND messages.deleted_at IS NULL) > 1" + ) + ) ) .into_boxed(); diff --git a/apps/api/libs/handlers/src/logs/list_logs_handler.rs b/apps/api/libs/handlers/src/logs/list_logs_handler.rs index 507dccafa..09d65fabe 100644 --- a/apps/api/libs/handlers/src/logs/list_logs_handler.rs +++ b/apps/api/libs/handlers/src/logs/list_logs_handler.rs @@ -73,17 +73,6 @@ pub async fn list_logs_handler( let mut conn = get_pg_pool().get().await?; - let user_message_count = messages::table - .filter(messages::chat_id.eq(chats::id)) - .filter(messages::request_message.is_not_null()) - .filter(messages::deleted_at.is_null()) - .count(); - - let total_message_count = messages::table - .filter(messages::chat_id.eq(chats::id)) - .filter(messages::deleted_at.is_null()) - .count(); - // Start building the query let mut query = chats::table .inner_join(users::table.on(chats::created_by.eq(users::id))) @@ -92,8 +81,16 @@ pub async fn list_logs_handler( .filter(chats::title.ne("")) // Filter out empty titles .filter(chats::title.ne(" ")) // Filter out single space .filter( - user_message_count.gt(0) - .or(total_message_count.gt(1)) + diesel::dsl::exists( + messages::table + .filter(messages::chat_id.eq(chats::id)) + .filter(messages::request_message.is_not_null()) + .filter(messages::deleted_at.is_null()) + ).or( + diesel::dsl::sql::( + "(SELECT COUNT(*) FROM messages WHERE messages.chat_id = chats.id AND messages.deleted_at IS NULL) > 1" + ) + ) ) .into_boxed();