diff --git a/apps/server/src/application/services/backup-service.ts b/apps/server/src/application/services/backup-service.ts index 792db8d2b..ddb8567bf 100644 --- a/apps/server/src/application/services/backup-service.ts +++ b/apps/server/src/application/services/backup-service.ts @@ -10,6 +10,7 @@ import { getErrorMessage } from "@solid-imager/core/utils/get-error-message"; import type { Table } from "drizzle-orm"; import { and, asc, eq, gt, inArray, lt, or, sql } from "drizzle-orm"; import type { PgColumn } from "drizzle-orm/pg-core"; +import { LANCEDB_DUMP_VERSION } from "~/application/services/lancedb-dump-service"; import { db } from "~/infrastructure/db"; import { authorAccounts, @@ -1194,7 +1195,7 @@ export const BackupService = { try { const content = await fs.readFile(manifestPath, "utf-8"); const manifest = JSON.parse(content) as { version?: unknown }; - if (manifest.version !== 3) { + if (manifest.version !== LANCEDB_DUMP_VERSION) { if (!config.lancedb?.autoFullSync) { logger.warn( { mediaSourceId }, diff --git a/apps/server/src/application/services/lancedb-dump-service.ts b/apps/server/src/application/services/lancedb-dump-service.ts index 67e2d0ab4..16d5ebe4e 100644 --- a/apps/server/src/application/services/lancedb-dump-service.ts +++ b/apps/server/src/application/services/lancedb-dump-service.ts @@ -1,6 +1,10 @@ -import { createLanceDbDumpService } from "@solid-imager/application/services/lancedb-dump-service"; +import { + createLanceDbDumpService, + LANCEDB_DUMP_VERSION, +} from "@solid-imager/application/services/lancedb-dump-service"; export type { MediaDumpItemWithImageData } from "@solid-imager/application/ports/lancedb-dump-service"; +export { LANCEDB_DUMP_VERSION }; import { logger } from "~/infrastructure/logger"; diff --git a/apps/server/src/application/services/maintenance-service.ts b/apps/server/src/application/services/maintenance-service.ts index 53f6b43b9..88e0a4f64 100644 --- a/apps/server/src/application/services/maintenance-service.ts +++ b/apps/server/src/application/services/maintenance-service.ts @@ -202,7 +202,10 @@ export class MaintenanceService { try { const content = await fs.readFile(manifestPath, "utf-8"); const manifest = JSON.parse(content) as { version?: unknown }; - return manifest.version === 3; + const { LANCEDB_DUMP_VERSION } = await import( + "~/application/services/lancedb-dump-service" + ); + return manifest.version === LANCEDB_DUMP_VERSION; } catch { return false; } diff --git a/apps/server/src/tests/unit/application/services/maintenance-service.test.ts b/apps/server/src/tests/unit/application/services/maintenance-service.test.ts index c0e02591f..56695aa7f 100644 --- a/apps/server/src/tests/unit/application/services/maintenance-service.test.ts +++ b/apps/server/src/tests/unit/application/services/maintenance-service.test.ts @@ -40,9 +40,13 @@ vi.mock("~/application/registry", () => ({ // Mock lancedb-dump-service const mockReadMediaIds = vi.fn(); -vi.mock("~/application/services/lancedb-dump-service", () => ({ - readMediaIds: mockReadMediaIds, -})); +vi.mock("~/application/services/lancedb-dump-service", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + readMediaIds: mockReadMediaIds, + }; +}); // Mock backup-service const mockQueueSourceLanceDBDelta = vi.fn(); @@ -387,9 +391,9 @@ describe("MaintenanceService", () => { ]); mockJobRepo.createIfUnique.mockResolvedValue({ id: "job-new" }); - // Simulate manifest.json exists (version: 3) + // Simulate a current manifest.json. (fs.readFile as unknown as Mock).mockResolvedValue( - JSON.stringify({ version: 3 }), + JSON.stringify({ version: 4 }), ); // Both LanceDB and Postgres have media-1 @@ -417,9 +421,9 @@ describe("MaintenanceService", () => { ]); mockJobRepo.createIfUnique.mockResolvedValue({ id: "job-new" }); - // Simulate manifest.json exists (version: 3) + // Simulate a current manifest.json. (fs.readFile as unknown as Mock).mockResolvedValue( - JSON.stringify({ version: 3 }), + JSON.stringify({ version: 4 }), ); // Postgres: media-1, media-2 @@ -465,9 +469,9 @@ describe("MaintenanceService", () => { ]); mockJobRepo.createIfUnique.mockResolvedValue({ id: "job-new" }); - // Simulate manifest.json exists (version: 3) + // Simulate a current manifest.json. (fs.readFile as unknown as Mock).mockResolvedValue( - JSON.stringify({ version: 3 }), + JSON.stringify({ version: 4 }), ); // readMediaIds throws error diff --git a/packages/application/src/services/lancedb-dump-service.ts b/packages/application/src/services/lancedb-dump-service.ts index c840221f6..16c57cc35 100644 --- a/packages/application/src/services/lancedb-dump-service.ts +++ b/packages/application/src/services/lancedb-dump-service.ts @@ -14,7 +14,7 @@ import type { const ROW_CHUNK_SIZE = 5000; const READ_CHUNK_SIZE = 5000; -const LANCEDB_DUMP_VERSION = 4; +export const LANCEDB_DUMP_VERSION = 4; async function updateLanceDbManifestVersion(lanceDbDir: string): Promise { const manifestPath = path.join(lanceDbDir, "manifest.json");