aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/client/sync
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-25 23:02:35 +0900
committernsfisis <nsfisis@gmail.com>2026-02-25 23:02:35 +0900
commit38b8fc0e9927c4146b4c8b309b2bcc644abd63d0 (patch)
treef76ba23251645e552fccd201362064b06de50bdd /src/client/sync
parent7a77e72bb49ed3990a0c4581292a37a8a4f35231 (diff)
downloadkioku-38b8fc0e9927c4146b4c8b309b2bcc644abd63d0.tar.gz
kioku-38b8fc0e9927c4146b4c8b309b2bcc644abd63d0.tar.zst
kioku-38b8fc0e9927c4146b4c8b309b2bcc644abd63d0.zip
feat(decks): add default note type setting per deckHEADmain
Allow each deck to specify a default note type that is auto-selected when creating new notes. Includes DB schema migration, server API updates, sync layer support, and UI for editing the default in the deck settings modal. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'src/client/sync')
-rw-r--r--src/client/sync/conflict.test.ts20
-rw-r--r--src/client/sync/conflict.ts1
-rw-r--r--src/client/sync/crdt/concurrent-edits.test.ts1
-rw-r--r--src/client/sync/crdt/document-manager.test.ts9
-rw-r--r--src/client/sync/crdt/document-manager.ts3
-rw-r--r--src/client/sync/crdt/migration.test.ts1
-rw-r--r--src/client/sync/crdt/repositories.test.ts6
-rw-r--r--src/client/sync/crdt/types.test.ts2
-rw-r--r--src/client/sync/crdt/types.ts1
-rw-r--r--src/client/sync/manager.test.ts2
-rw-r--r--src/client/sync/pull.test.ts21
-rw-r--r--src/client/sync/pull.ts2
-rw-r--r--src/client/sync/push.test.ts17
-rw-r--r--src/client/sync/push.ts2
-rw-r--r--src/client/sync/queue.test.ts12
15 files changed, 100 insertions, 0 deletions
diff --git a/src/client/sync/conflict.test.ts b/src/client/sync/conflict.test.ts
index d11e150..ba6586f 100644
--- a/src/client/sync/conflict.test.ts
+++ b/src/client/sync/conflict.test.ts
@@ -155,6 +155,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Local Name",
description: "Local description",
+ defaultNoteTypeId: null,
});
const serverDeck = {
@@ -165,6 +166,7 @@ describe("ConflictResolver", () => {
createdAt: new Date("2024-01-01"),
updatedAt: new Date("2024-01-03"),
deletedAt: null,
+ defaultNoteTypeId: null,
syncVersion: 5,
};
@@ -186,6 +188,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const localCard = await localCardRepository.create({
@@ -236,11 +239,13 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Local Deck 1",
description: null,
+ defaultNoteTypeId: null,
});
const deck2 = await localDeckRepository.create({
userId: "user-1",
name: "Local Deck 2",
description: null,
+ defaultNoteTypeId: null,
});
const pushResult: SyncPushResult = {
@@ -267,6 +272,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Server Deck 1",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
@@ -277,6 +283,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Server Deck 2",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
@@ -306,6 +313,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const card = await localCardRepository.create({
@@ -388,6 +396,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Server Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
@@ -415,6 +424,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Local Only Deck",
description: null,
+ defaultNoteTypeId: null,
});
const pushResult: SyncPushResult = {
@@ -451,6 +461,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Local Name",
description: null,
+ defaultNoteTypeId: null,
});
const pushResult: SyncPushResult = {
@@ -471,6 +482,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Server Name",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
@@ -501,6 +513,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Local Deck Name",
description: "Local description",
+ defaultNoteTypeId: null,
});
// Store local CRDT document
@@ -518,6 +531,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Server Deck Name",
description: "Server description",
+ defaultNoteTypeId: null,
createdAt: localDeck.createdAt,
updatedAt: new Date(Date.now() + 1000),
deletedAt: null,
@@ -575,6 +589,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Local Name",
description: null,
+ defaultNoteTypeId: null,
});
const serverDeck = {
@@ -582,6 +597,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Server Name",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
@@ -632,6 +648,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Local Name",
description: null,
+ defaultNoteTypeId: null,
});
const serverDeck = {
@@ -639,6 +656,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Server Name",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
@@ -680,6 +698,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Local Name",
description: null,
+ defaultNoteTypeId: null,
});
const serverDeck = {
@@ -687,6 +706,7 @@ describe("ConflictResolver", () => {
userId: "user-1",
name: "Server Name",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
diff --git a/src/client/sync/conflict.ts b/src/client/sync/conflict.ts
index 64287a1..fcb5bf4 100644
--- a/src/client/sync/conflict.ts
+++ b/src/client/sync/conflict.ts
@@ -67,6 +67,7 @@ function serverDeckToLocal(deck: ServerDeck): LocalDeck {
userId: deck.userId,
name: deck.name,
description: deck.description,
+ defaultNoteTypeId: deck.defaultNoteTypeId,
createdAt: new Date(deck.createdAt),
updatedAt: new Date(deck.updatedAt),
deletedAt: deck.deletedAt ? new Date(deck.deletedAt) : null,
diff --git a/src/client/sync/crdt/concurrent-edits.test.ts b/src/client/sync/crdt/concurrent-edits.test.ts
index d55b233..e9d7b58 100644
--- a/src/client/sync/crdt/concurrent-edits.test.ts
+++ b/src/client/sync/crdt/concurrent-edits.test.ts
@@ -34,6 +34,7 @@ function createTestDeck(overrides: Partial<LocalDeck> = {}): LocalDeck {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: now,
updatedAt: now,
deletedAt: null,
diff --git a/src/client/sync/crdt/document-manager.test.ts b/src/client/sync/crdt/document-manager.test.ts
index b578c77..2da92a1 100644
--- a/src/client/sync/crdt/document-manager.test.ts
+++ b/src/client/sync/crdt/document-manager.test.ts
@@ -51,6 +51,7 @@ describe("createDocument", () => {
userId: "user-1",
name: "My Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: Date.now(),
deletedAt: null,
},
@@ -153,6 +154,7 @@ describe("saveDocument and loadDocument", () => {
userId: "user-1",
name: "Test Deck",
description: "A test deck",
+ defaultNoteTypeId: null,
createdAt: 1234567890,
deletedAt: null,
},
@@ -222,6 +224,7 @@ describe("deckToCrdtDocument and crdtDocumentToDeck", () => {
userId: "user-1",
name: "My Deck",
description: "A deck for testing",
+ defaultNoteTypeId: null,
createdAt: now,
updatedAt: now,
deletedAt: null,
@@ -246,6 +249,7 @@ describe("deckToCrdtDocument and crdtDocumentToDeck", () => {
userId: "user-1",
name: "Deleted Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: now,
updatedAt: deletedAt,
deletedAt: deletedAt,
@@ -271,6 +275,7 @@ describe("deckToCrdtDocument and crdtDocumentToDeck", () => {
userId: "user-2",
name: "Converted Deck",
description: "Converted from CRDT",
+ defaultNoteTypeId: null,
createdAt: now - 10000,
deletedAt: null,
},
@@ -456,6 +461,7 @@ describe("createDocumentFromEntity", () => {
userId: "user-1",
name: "Test",
description: null,
+ defaultNoteTypeId: null,
createdAt: now,
updatedAt: now,
deletedAt: null,
@@ -536,6 +542,7 @@ describe("getLastModified", () => {
userId: "user-1",
name: "Test",
description: null,
+ defaultNoteTypeId: null,
createdAt: timestamp,
deletedAt: null,
},
@@ -558,6 +565,7 @@ describe("isDeleted", () => {
userId: "user-1",
name: "Test",
description: null,
+ defaultNoteTypeId: null,
createdAt: Date.now(),
deletedAt: null,
},
@@ -578,6 +586,7 @@ describe("isDeleted", () => {
userId: "user-1",
name: "Test",
description: null,
+ defaultNoteTypeId: null,
createdAt: Date.now(),
deletedAt: Date.now(),
},
diff --git a/src/client/sync/crdt/document-manager.ts b/src/client/sync/crdt/document-manager.ts
index b753d88..ab121ec 100644
--- a/src/client/sync/crdt/document-manager.ts
+++ b/src/client/sync/crdt/document-manager.ts
@@ -187,6 +187,7 @@ function getEmptyDocumentData(
userId: "",
name: "",
description: null,
+ defaultNoteTypeId: null,
createdAt: 0,
deletedAt: null,
},
@@ -300,6 +301,7 @@ export function deckToCrdtDocument(deck: LocalDeck): CrdtDeckDocument {
userId: deck.userId,
name: deck.name,
description: deck.description,
+ defaultNoteTypeId: deck.defaultNoteTypeId,
createdAt: deck.createdAt.getTime(),
deletedAt: deck.deletedAt?.getTime() ?? null,
},
@@ -317,6 +319,7 @@ export function crdtDocumentToDeck(
userId: doc.data.userId,
name: doc.data.name,
description: doc.data.description,
+ defaultNoteTypeId: doc.data.defaultNoteTypeId ?? null,
createdAt: new Date(doc.data.createdAt),
updatedAt: new Date(doc.meta.lastModified),
deletedAt: doc.data.deletedAt ? new Date(doc.data.deletedAt) : null,
diff --git a/src/client/sync/crdt/migration.test.ts b/src/client/sync/crdt/migration.test.ts
index ba90be2..531e8fe 100644
--- a/src/client/sync/crdt/migration.test.ts
+++ b/src/client/sync/crdt/migration.test.ts
@@ -109,6 +109,7 @@ describe("migration", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
diff --git a/src/client/sync/crdt/repositories.test.ts b/src/client/sync/crdt/repositories.test.ts
index f7b75b3..c400b22 100644
--- a/src/client/sync/crdt/repositories.test.ts
+++ b/src/client/sync/crdt/repositories.test.ts
@@ -35,6 +35,7 @@ describe("crdtDeckRepository", () => {
userId: "user-1",
name: "Test Deck",
description: "A test deck",
+ defaultNoteTypeId: null,
createdAt: now,
updatedAt: now,
deletedAt: null,
@@ -378,6 +379,7 @@ describe("entitiesToCrdtDocuments", () => {
userId: "user-1",
name: "Deck 1",
description: null,
+ defaultNoteTypeId: null,
createdAt: now,
updatedAt: now,
deletedAt: null,
@@ -389,6 +391,7 @@ describe("entitiesToCrdtDocuments", () => {
userId: "user-1",
name: "Deck 2",
description: "Second deck",
+ defaultNoteTypeId: null,
createdAt: now,
updatedAt: now,
deletedAt: null,
@@ -415,6 +418,7 @@ describe("mergeAndConvert", () => {
userId: "user-1",
name: "Remote Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: now,
updatedAt: now,
deletedAt: null,
@@ -436,6 +440,7 @@ describe("mergeAndConvert", () => {
userId: "user-1",
name: "Original",
description: null,
+ defaultNoteTypeId: null,
createdAt: now,
updatedAt: now,
deletedAt: null,
@@ -476,6 +481,7 @@ describe("mergeAndConvert", () => {
userId: "user-1",
name: "Same",
description: null,
+ defaultNoteTypeId: null,
createdAt: now,
updatedAt: now,
deletedAt: null,
diff --git a/src/client/sync/crdt/types.test.ts b/src/client/sync/crdt/types.test.ts
index 07ae0f2..7a501b2 100644
--- a/src/client/sync/crdt/types.test.ts
+++ b/src/client/sync/crdt/types.test.ts
@@ -149,6 +149,7 @@ describe("CRDT Document type structures", () => {
userId: "user-1",
name: "My Deck",
description: "A test deck",
+ defaultNoteTypeId: null,
createdAt: now,
deletedAt: null,
},
@@ -303,6 +304,7 @@ describe("CRDT Document type structures", () => {
userId: "user-1",
name: "Deleted Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: now - 86400000,
deletedAt: now,
},
diff --git a/src/client/sync/crdt/types.ts b/src/client/sync/crdt/types.ts
index e2f5d4c..434f3b0 100644
--- a/src/client/sync/crdt/types.ts
+++ b/src/client/sync/crdt/types.ts
@@ -36,6 +36,7 @@ export interface CrdtDeckDocument {
userId: string;
name: string;
description: string | null;
+ defaultNoteTypeId: string | null;
createdAt: number; // Unix timestamp in ms
deletedAt: number | null;
};
diff --git a/src/client/sync/manager.test.ts b/src/client/sync/manager.test.ts
index a9be10d..97e99d2 100644
--- a/src/client/sync/manager.test.ts
+++ b/src/client/sync/manager.test.ts
@@ -83,6 +83,7 @@ describe("SyncManager", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
}
@@ -411,6 +412,7 @@ describe("SyncManager", () => {
userId: "user-1",
name: "Server Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
diff --git a/src/client/sync/pull.test.ts b/src/client/sync/pull.test.ts
index 0f1b689..56213bb 100644
--- a/src/client/sync/pull.test.ts
+++ b/src/client/sync/pull.test.ts
@@ -48,6 +48,7 @@ describe("pullResultToLocalData", () => {
userId: "user-1",
name: "Test Deck",
description: "A description",
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"),
deletedAt: null,
@@ -68,6 +69,7 @@ describe("pullResultToLocalData", () => {
userId: "user-1",
name: "Test Deck",
description: "A description",
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"),
deletedAt: null,
@@ -83,6 +85,7 @@ describe("pullResultToLocalData", () => {
userId: "user-1",
name: "Deleted Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-03T12:00:00Z"),
deletedAt: new Date("2024-01-03T12:00:00Z"),
@@ -535,6 +538,7 @@ describe("PullService", () => {
userId: "user-1",
name: "Server Deck",
description: "From server",
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T10:00:00Z"),
deletedAt: null,
@@ -567,6 +571,7 @@ describe("PullService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
await localDeckRepository.markSynced(deck.id, 1);
@@ -668,6 +673,7 @@ describe("PullService", () => {
userId: "user-1",
name: "Old Name",
description: null,
+ defaultNoteTypeId: null,
});
const pullFromServer = vi.fn().mockResolvedValue({
@@ -677,6 +683,7 @@ describe("PullService", () => {
userId: "user-1",
name: "Updated Name",
description: "Updated description",
+ defaultNoteTypeId: null,
createdAt: existingDeck.createdAt,
updatedAt: new Date(),
deletedAt: null,
@@ -709,6 +716,7 @@ describe("PullService", () => {
userId: "user-1",
name: "Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
@@ -865,6 +873,7 @@ describe("PullService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
await localDeckRepository.markSynced(deck.id, 1);
@@ -919,6 +928,7 @@ describe("PullService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
await localDeckRepository.markSynced(deck.id, 1);
@@ -988,6 +998,7 @@ describe("PullService", () => {
userId: "user-1",
name: "Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
@@ -1167,6 +1178,7 @@ describe("applyCrdtChanges", () => {
userId: "user-1",
name: "Test Deck",
description: "A test description",
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"),
deletedAt: null,
@@ -1199,6 +1211,7 @@ describe("applyCrdtChanges", () => {
userId: "user-1",
name: "Local Deck",
description: "Local description",
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-01T12:00:00Z"),
deletedAt: null,
@@ -1221,6 +1234,7 @@ describe("applyCrdtChanges", () => {
userId: "user-1",
name: "Remote Deck",
description: "Remote description",
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"), // Later timestamp
deletedAt: null,
@@ -1251,6 +1265,7 @@ describe("applyCrdtChanges", () => {
userId: "user-1",
name: "Deck 1",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"),
deletedAt: null,
@@ -1262,6 +1277,7 @@ describe("applyCrdtChanges", () => {
userId: "user-1",
name: "Deck 2",
description: "Second deck",
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"),
deletedAt: null,
@@ -1300,6 +1316,7 @@ describe("applyCrdtChanges", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"),
deletedAt: null,
@@ -1354,6 +1371,7 @@ describe("applyCrdtChanges", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"),
deletedAt: null,
@@ -1451,6 +1469,7 @@ describe("PullService with CRDT changes", () => {
userId: "user-1",
name: "CRDT Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"),
deletedAt: null,
@@ -1501,6 +1520,7 @@ describe("PullService with CRDT changes", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
@@ -1577,6 +1597,7 @@ describe("PullService with CRDT changes", () => {
userId: "user-1",
name: "Regular Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
diff --git a/src/client/sync/pull.ts b/src/client/sync/pull.ts
index ce4d992..5fa561b 100644
--- a/src/client/sync/pull.ts
+++ b/src/client/sync/pull.ts
@@ -30,6 +30,7 @@ export interface ServerDeck {
userId: string;
name: string;
description: string | null;
+ defaultNoteTypeId: string | null;
createdAt: Date;
updatedAt: Date;
deletedAt: Date | null;
@@ -167,6 +168,7 @@ function serverDeckToLocal(deck: ServerDeck): LocalDeck {
userId: deck.userId,
name: deck.name,
description: deck.description,
+ defaultNoteTypeId: deck.defaultNoteTypeId,
createdAt: new Date(deck.createdAt),
updatedAt: new Date(deck.updatedAt),
deletedAt: deck.deletedAt ? new Date(deck.deletedAt) : null,
diff --git a/src/client/sync/push.test.ts b/src/client/sync/push.test.ts
index 8605ede..0efc796 100644
--- a/src/client/sync/push.test.ts
+++ b/src/client/sync/push.test.ts
@@ -81,6 +81,7 @@ describe("pendingChangesToPushData", () => {
userId: "user-1",
name: "Test Deck",
description: "A description",
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"),
deletedAt: null,
@@ -101,6 +102,7 @@ describe("pendingChangesToPushData", () => {
id: "deck-1",
name: "Test Deck",
description: "A description",
+ defaultNoteTypeId: null,
createdAt: "2024-01-01T10:00:00.000Z",
updatedAt: "2024-01-02T15:30:00.000Z",
deletedAt: null,
@@ -114,6 +116,7 @@ describe("pendingChangesToPushData", () => {
userId: "user-1",
name: "Deleted Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-03T12:00:00Z"),
deletedAt: new Date("2024-01-03T12:00:00Z"),
@@ -527,6 +530,7 @@ describe("PushService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const pushToServer = vi.fn().mockResolvedValue({
@@ -565,6 +569,7 @@ describe("PushService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
await localDeckRepository.markSynced(deck.id, 1);
@@ -611,6 +616,7 @@ describe("PushService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
await localDeckRepository.markSynced(deck.id, 1);
@@ -668,6 +674,7 @@ describe("PushService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const pushToServer = vi.fn().mockResolvedValue({
@@ -695,6 +702,7 @@ describe("PushService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const pushToServer = vi.fn().mockResolvedValue({
@@ -720,6 +728,7 @@ describe("PushService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const pushToServer = vi
@@ -739,6 +748,7 @@ describe("PushService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const card = await localCardRepository.create({
@@ -884,6 +894,7 @@ describe("PushService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
await localDeckRepository.markSynced(deck.id, 1);
@@ -931,6 +942,7 @@ describe("PushService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
await localDeckRepository.markSynced(deck.id, 1);
@@ -994,6 +1006,7 @@ describe("PushService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const noteType = await localNoteTypeRepository.create({
@@ -1080,6 +1093,7 @@ describe("PushService", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const pushService = new PushService({
@@ -1102,6 +1116,7 @@ describe("generateCrdtChanges", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"),
deletedAt: null,
@@ -1339,6 +1354,7 @@ describe("generateCrdtChanges", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"),
deletedAt: null,
@@ -1480,6 +1496,7 @@ describe("pendingChangesToPushData with crdtChanges", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date("2024-01-01T10:00:00Z"),
updatedAt: new Date("2024-01-02T15:30:00Z"),
deletedAt: null,
diff --git a/src/client/sync/push.ts b/src/client/sync/push.ts
index e5c5fd4..79df825 100644
--- a/src/client/sync/push.ts
+++ b/src/client/sync/push.ts
@@ -39,6 +39,7 @@ export interface SyncDeckData {
id: string;
name: string;
description: string | null;
+ defaultNoteTypeId: string | null;
createdAt: string;
updatedAt: string;
deletedAt: string | null;
@@ -153,6 +154,7 @@ function deckToSyncData(deck: LocalDeck): SyncDeckData {
id: deck.id,
name: deck.name,
description: deck.description,
+ defaultNoteTypeId: deck.defaultNoteTypeId,
createdAt: deck.createdAt.toISOString(),
updatedAt: deck.updatedAt.toISOString(),
deletedAt: deck.deletedAt?.toISOString() ?? null,
diff --git a/src/client/sync/queue.test.ts b/src/client/sync/queue.test.ts
index 436046b..dd4e116 100644
--- a/src/client/sync/queue.test.ts
+++ b/src/client/sync/queue.test.ts
@@ -68,6 +68,7 @@ describe("SyncQueue", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const changes = await syncQueue.getPendingChanges();
@@ -80,6 +81,7 @@ describe("SyncQueue", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
await localCardRepository.create({
deckId: deck.id,
@@ -99,6 +101,7 @@ describe("SyncQueue", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const card = await localCardRepository.create({
deckId: deck.id,
@@ -127,6 +130,7 @@ describe("SyncQueue", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
await localDeckRepository.markSynced(deck.id, 1);
@@ -141,6 +145,7 @@ describe("SyncQueue", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
await localCardRepository.create({
deckId: deck.id,
@@ -174,6 +179,7 @@ describe("SyncQueue", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const hasPending = await syncQueue.hasPendingChanges();
@@ -298,6 +304,7 @@ describe("SyncQueue", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
await syncQueue.markSynced({
@@ -320,6 +327,7 @@ describe("SyncQueue", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const card = await localCardRepository.create({
deckId: deck.id,
@@ -349,6 +357,7 @@ describe("SyncQueue", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const card = await localCardRepository.create({
deckId: deck.id,
@@ -408,6 +417,7 @@ describe("SyncQueue", () => {
userId: "user-1",
name: "Server Deck",
description: null,
+ defaultNoteTypeId: null,
createdAt: new Date(),
updatedAt: new Date(),
deletedAt: null,
@@ -435,6 +445,7 @@ describe("SyncQueue", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
await localDeckRepository.markSynced(deck.id, 1);
@@ -481,6 +492,7 @@ describe("SyncQueue", () => {
userId: "user-1",
name: "Test Deck",
description: null,
+ defaultNoteTypeId: null,
});
const card = await localCardRepository.create({
deckId: deck.id,