perf(web-db): stop re-encrypting records on read
This commit is contained in:
@@ -2,8 +2,7 @@ import { localDb, type LocalAiChatSessionRecord } from "@/services/local-db";
|
||||
import type { WebAiChannel } from "@/services/ai-api";
|
||||
import {
|
||||
decryptAiChatSessionRecord,
|
||||
encryptAiChatSessionRecord,
|
||||
shouldEncryptAiChatSessionRecord
|
||||
encryptAiChatSessionRecord
|
||||
} from "@/services/local-sensitive-codec";
|
||||
|
||||
export type LocalAiChatMessageRecord = {
|
||||
@@ -69,16 +68,6 @@ export async function listLocalAiChatSessions(
|
||||
userId: string
|
||||
): Promise<LocalAiChatSessionSnapshot[]> {
|
||||
const records = await localDb.aiChatSessions.where("userId").equals(userId).toArray();
|
||||
const encryptedRecords = await Promise.all(
|
||||
records
|
||||
.filter(shouldEncryptAiChatSessionRecord)
|
||||
.map((record) => encryptAiChatSessionRecord(record))
|
||||
);
|
||||
|
||||
if (encryptedRecords.length > 0) {
|
||||
await localDb.aiChatSessions.bulkPut(encryptedRecords);
|
||||
}
|
||||
|
||||
const decryptedRecords = await Promise.all(
|
||||
records.map((record) => decryptAiChatSessionRecord(record))
|
||||
);
|
||||
|
||||
@@ -7,10 +7,7 @@
|
||||
import {
|
||||
decryptOpLogRecord,
|
||||
decryptSyncInboxRecord,
|
||||
encryptOpLogRecord,
|
||||
encryptSyncInboxRecord,
|
||||
shouldEncryptOpLogRecord,
|
||||
shouldEncryptSyncInboxRecord
|
||||
encryptSyncInboxRecord
|
||||
} from "@/services/local-sensitive-codec";
|
||||
import type { SyncPullItem } from "@/services/sync-api";
|
||||
|
||||
@@ -18,14 +15,6 @@ export const MAX_SYNC_RETRY_COUNT = 5;
|
||||
|
||||
export async function listPendingSyncOperations(limit = 20): Promise<LocalOpLogRecord[]> {
|
||||
const records = await localDb.opLogs.orderBy("clientTs").toArray();
|
||||
const encryptedRecords = await Promise.all(
|
||||
records.filter(shouldEncryptOpLogRecord).map((record) => encryptOpLogRecord(record))
|
||||
);
|
||||
|
||||
if (encryptedRecords.length > 0) {
|
||||
await localDb.opLogs.bulkPut(encryptedRecords);
|
||||
}
|
||||
|
||||
const pendingRecords = records
|
||||
.filter((record) => record.syncedAt === null && record.retryCount < MAX_SYNC_RETRY_COUNT)
|
||||
.slice(0, limit);
|
||||
@@ -144,14 +133,6 @@ export async function listPendingRemoteOperations(
|
||||
limit = 100
|
||||
): Promise<LocalSyncInboxRecord[]> {
|
||||
const records = await localDb.syncInbox.where("userId").equals(userId).toArray();
|
||||
const encryptedRecords = await Promise.all(
|
||||
records.filter(shouldEncryptSyncInboxRecord).map((record) => encryptSyncInboxRecord(record))
|
||||
);
|
||||
|
||||
if (encryptedRecords.length > 0) {
|
||||
await localDb.syncInbox.bulkPut(encryptedRecords);
|
||||
}
|
||||
|
||||
const pendingRecords = records
|
||||
.filter((record) => record.appliedAt === null)
|
||||
.sort((left, right) => {
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
import { localDb, type LocalTaskDraftRecord } from "@/services/local-db";
|
||||
import {
|
||||
decryptTaskDraftRecord,
|
||||
encryptTaskDraftRecord,
|
||||
shouldEncryptTaskDraft
|
||||
} from "@/services/local-sensitive-codec";
|
||||
import { decryptTaskDraftRecord, encryptTaskDraftRecord } from "@/services/local-sensitive-codec";
|
||||
|
||||
export type SaveLocalTaskDraftInput = {
|
||||
taskId: string;
|
||||
@@ -22,10 +18,6 @@ export async function getLocalTaskDraft(taskId: string): Promise<LocalTaskDraftR
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (shouldEncryptTaskDraft(draft)) {
|
||||
await localDb.taskDrafts.put(await encryptTaskDraftRecord(draft));
|
||||
}
|
||||
|
||||
return decryptTaskDraftRecord(draft);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
import {
|
||||
decryptTaskRecord,
|
||||
encryptOpLogRecord,
|
||||
encryptTaskRecord,
|
||||
shouldEncryptTaskRecord
|
||||
encryptTaskRecord
|
||||
} from "@/services/local-sensitive-codec";
|
||||
|
||||
const DEVICE_ID_STORAGE_KEY = "todolist.web.device-id";
|
||||
@@ -89,14 +88,6 @@ function createSyncTaskPayload(payload: SyncTaskPayload): string {
|
||||
|
||||
export async function listLocalTasksByUser(userId: string): Promise<LocalTaskRecord[]> {
|
||||
const tasks = await localDb.tasks.where("userId").equals(userId).toArray();
|
||||
const encryptedTasks = await Promise.all(
|
||||
tasks.filter(shouldEncryptTaskRecord).map((task) => encryptTaskRecord(task))
|
||||
);
|
||||
|
||||
if (encryptedTasks.length > 0) {
|
||||
await localDb.tasks.bulkPut(encryptedTasks);
|
||||
}
|
||||
|
||||
const decryptedTasks = await Promise.all(tasks.map((task) => decryptTaskRecord(task)));
|
||||
return decryptedTasks
|
||||
.filter((task) => task.deletedAt === null)
|
||||
@@ -109,10 +100,6 @@ export async function getLocalTaskById(id: string): Promise<LocalTaskRecord | un
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (shouldEncryptTaskRecord(task)) {
|
||||
await localDb.tasks.put(await encryptTaskRecord(task));
|
||||
}
|
||||
|
||||
return decryptTaskRecord(task);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user