diff --git a/src/db-sql/migration.ts b/src/db-sql/migration.ts index ce917472..7a99724f 100644 --- a/src/db-sql/migration.ts +++ b/src/db-sql/migration.ts @@ -107,7 +107,7 @@ const MIGRATIONS = [ CREATE INDEX IF NOT EXISTS idx_contacts_name ON contacts(name); CREATE TABLE IF NOT EXISTS logs ( - date TEXT PRIMARY KEY, + date TEXT NOT NULL, message TEXT NOT NULL ); diff --git a/src/db/databaseUtil.ts b/src/db/databaseUtil.ts index 610d5f69..6ab32d4e 100644 --- a/src/db/databaseUtil.ts +++ b/src/db/databaseUtil.ts @@ -123,6 +123,8 @@ export async function retrieveSettingsForActiveAccount(): Promise { } } +let lastCleanupDate: string | null = null; + /** * Logs a message to the database with proper handling of concurrent writes * @param message - The message to log @@ -135,65 +137,29 @@ export async function logToDb(message: string): Promise { try { // Try to insert first, if it fails due to UNIQUE constraint, update instead - try { - await platform.dbExec("INSERT INTO logs (date, message) VALUES (?, ?)", [ - todayKey, - fullMessage, - ]); - } catch (error) { - // If insert fails due to UNIQUE constraint, update instead - if ( - error instanceof Error && - error.message.includes("UNIQUE constraint failed") - ) { - const result = await platform.dbQuery( - "SELECT message FROM logs WHERE date = ?", - [todayKey], - ); - - if (result && result.values.length > 0) { - const prevMessages = result.values[0][0] as string; - const updatedMessage = `${prevMessages}\n${fullMessage}`; - - await platform.dbExec("UPDATE logs SET message = ? WHERE date = ?", [ - updatedMessage, - todayKey, - ]); - } - } else { - // If it's a different error, rethrow it - throw error; - } - } + await platform.dbExec("INSERT INTO logs (date, message) VALUES (?, ?)", [ + todayKey, + fullMessage, + ]); // Clean up old logs (keep only last 7 days) - do this less frequently // Only clean up if the date is different from the last cleanup - const lastCleanupKey = "last_log_cleanup"; - const result = await platform.dbQuery( - "SELECT value FROM settings WHERE key = ?", - [lastCleanupKey], - ); - - const lastCleanup = result?.values[0]?.[0] as string; - if (!lastCleanup || lastCleanup !== todayKey) { + if (!lastCleanupDate || lastCleanupDate !== todayKey) { const sevenDaysAgo = new Date(); sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7); await platform.dbExec("DELETE FROM logs WHERE date < ?", [ sevenDaysAgo.toDateString(), ]); - - // Update last cleanup date - await platform.dbExec( - "INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)", - [lastCleanupKey, todayKey], - ); } } catch (error) { // Log to console as fallback // eslint-disable-next-line no-console - console.error("Failed to log to database:", error); - // eslint-disable-next-line no-console - console.error("Original message:", message); + console.error( + "Error logging to database:", + error, + " ... for original message:", + message, + ); } } diff --git a/src/services/AbsurdSqlDatabaseService.ts b/src/services/AbsurdSqlDatabaseService.ts index e98d6662..a8df16e3 100644 --- a/src/services/AbsurdSqlDatabaseService.ts +++ b/src/services/AbsurdSqlDatabaseService.ts @@ -143,6 +143,14 @@ class AbsurdSqlDatabaseService implements DatabaseService { } operation.resolve(result); } catch (error) { + console.log( + "Error while processing SQL queue:", + error, + " ... for sql:", + operation.sql, + " ... with params:", + operation.params, + ); operation.reject(error); } } diff --git a/src/views/LogView.vue b/src/views/LogView.vue index e90231e6..bdfe7297 100644 --- a/src/views/LogView.vue +++ b/src/views/LogView.vue @@ -35,8 +35,7 @@ No logs found.
-
-

{{ log.date }}

+
{{ log.message }}