Refactor code structure for improved readability and maintainability

This commit is contained in:
k1ngsterr1
2026-01-17 01:50:10 +05:00
parent 97eac22879
commit 14ea9e6996
6 changed files with 139 additions and 78 deletions

View File

@@ -361,9 +361,10 @@ interface DialogDao {
/**
* Отметить что я отправлял сообщения в этот диалог
* Возвращает количество обновлённых строк
*/
@Query("UPDATE dialogs SET i_have_sent = 1 WHERE account = :account AND opponent_key = :opponentKey")
suspend fun markIHaveSent(account: String, opponentKey: String)
suspend fun markIHaveSent(account: String, opponentKey: String): Int
/**
* Обновить онлайн статус
@@ -417,7 +418,8 @@ interface DialogDao {
* Логика:
* 1. Берем последнее сообщение (по timestamp DESC)
* 2. Считаем количество непрочитанных сообщений (from_me = 0 AND read = 0)
* 3. Обновляем диалог или создаем новый
* 3. Вычисляем i_have_sent = 1 если есть исходящие сообщения (from_me = 1) - как sended в Архиве
* 4. Обновляем диалог или создаем новый
*/
@Query("""
INSERT OR REPLACE INTO dialogs (
@@ -430,7 +432,8 @@ interface DialogDao {
unread_count,
is_online,
last_seen,
verified
verified,
i_have_sent
)
SELECT
:account AS account,
@@ -478,7 +481,19 @@ interface DialogDao {
COALESCE(
(SELECT verified FROM dialogs WHERE account = :account AND opponent_key = :opponentKey),
0
) AS verified
) AS verified,
CASE
WHEN (SELECT COUNT(*) FROM messages
WHERE account = :account
AND from_public_key = :account
AND to_public_key = :opponentKey
AND from_me = 1) > 0
THEN 1
ELSE COALESCE(
(SELECT i_have_sent FROM dialogs WHERE account = :account AND opponent_key = :opponentKey),
0
)
END AS i_have_sent
""")
suspend fun updateDialogFromMessages(account: String, opponentKey: String)
}