diff options
Diffstat (limited to 'src/server/routes/sync.ts')
| -rw-r--r-- | src/server/routes/sync.ts | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/server/routes/sync.ts b/src/server/routes/sync.ts index fca099b..c571f8a 100644 --- a/src/server/routes/sync.ts +++ b/src/server/routes/sync.ts @@ -1,6 +1,7 @@ import { zValidator } from "@hono/zod-validator"; import { Hono } from "hono"; import { z } from "zod"; +import { CrdtEntityType } from "../db/schema-crdt.js"; import { authMiddleware, getAuthUser } from "../middleware/index.js"; import { type SyncPullQuery, @@ -95,6 +96,25 @@ const syncNoteFieldValueSchema = z.object({ updatedAt: z.string().datetime(), }); +/** + * Schema for CRDT sync payload + * Used for conflict-free synchronization of entity data + */ +const crdtSyncPayloadSchema = z.object({ + documentId: z.string().min(1), + entityType: z.enum([ + CrdtEntityType.Deck, + CrdtEntityType.NoteType, + CrdtEntityType.NoteFieldType, + CrdtEntityType.Note, + CrdtEntityType.NoteFieldValue, + CrdtEntityType.Card, + CrdtEntityType.ReviewLog, + ]), + entityId: z.uuid(), + binary: z.string().min(1), // Base64-encoded Automerge binary +}); + const syncPushSchema = z.object({ decks: z.array(syncDeckSchema).default([]), cards: z.array(syncCardSchema).default([]), @@ -103,6 +123,7 @@ const syncPushSchema = z.object({ noteFieldTypes: z.array(syncNoteFieldTypeSchema).default([]), notes: z.array(syncNoteSchema).default([]), noteFieldValues: z.array(syncNoteFieldValueSchema).default([]), + crdtChanges: z.array(crdtSyncPayloadSchema).default([]), }); const syncPullQuerySchema = z.object({ |
