Фикс бага с уникальными индексами сообщений

This commit is contained in:
RoyceDa
2026-02-16 19:28:36 +02:00
parent d02cb63ffe
commit 432b270b34
4 changed files with 17 additions and 7 deletions

View File

@@ -19,10 +19,15 @@ export function DatabaseProvider(props: DatabaseProviderProps) {
setInitialized(true); setInitialized(true);
//await runQuery("DROP TABLE IF EXISTS accounts_sync_times"); //await runQuery("DROP TABLE IF EXISTS accounts_sync_times");
/** /**
* Добавляем уникальный индекс на столбец message_id в таблица * Удаляем старый индекс только по message_id
* messages чтобы избежать дубликации сообщений
*/ */
await runQuery("CREATE UNIQUE INDEX IF NOT EXISTS idx_messages_message_id ON messages(message_id)"); await runQuery("DROP INDEX IF EXISTS idx_messages_message_id");
/**
* Добавляем уникальный индекс на столбцы message_id и public_key
* в таблице messages чтобы избежать дубликации сообщений
*/
await runQuery("CREATE UNIQUE INDEX IF NOT EXISTS idx_messages_message_id_public_key ON messages(message_id, account)");
})(); })();
}, []); }, []);

View File

@@ -43,6 +43,11 @@ export const TABLES = [
UNIQUE (id) UNIQUE (id)
)`, )`,
/**
* Создаем индекс на столбцы message_id и public_key чтобы избежать дубликации сообщений при синхронизации
*/
`CREATE UNIQUE INDEX IF NOT EXISTS idx_messages_message_id_public_key ON messages(message_id, account)`,
`CREATE TABLE IF NOT EXISTS cached_users ( `CREATE TABLE IF NOT EXISTS cached_users (
public_key TEXT PRIMARY KEY, public_key TEXT PRIMARY KEY,
title TEXT NOT NULL, title TEXT NOT NULL,

View File

@@ -70,8 +70,8 @@ export function useDialogFiber() {
} }
await runQuery( await runQuery(
"INSERT INTO accounts_sync_times (account, last_sync) VALUES (?, ?) " + "INSERT INTO accounts_sync_times (account, last_sync) VALUES (?, ?) " +
"ON CONFLICT(account) DO UPDATE SET last_sync = ?", "ON CONFLICT(account) DO UPDATE SET last_sync = ? WHERE account = ?",
[publicKey, timestamp, timestamp] [publicKey, timestamp, timestamp, publicKey]
); );
}; };

View File

@@ -54,8 +54,8 @@ export function useSynchronize() {
console.info("Batch finished"); console.info("Batch finished");
await runQuery( await runQuery(
"INSERT INTO accounts_sync_times (account, last_sync) VALUES (?, ?) " + "INSERT INTO accounts_sync_times (account, last_sync) VALUES (?, ?) " +
"ON CONFLICT(account) DO UPDATE SET last_sync = ?", "ON CONFLICT(account) DO UPDATE SET last_sync = ? WHERE account = ?",
[publicKey, packet.getTimestamp(), packet.getTimestamp()] [publicKey, packet.getTimestamp(), packet.getTimestamp(), publicKey]
); );
console.info("Batch complete", publicKey, packet.getTimestamp()); console.info("Batch complete", publicKey, packet.getTimestamp());
trySync(); trySync();