From 4ab6961fcc8d71c6db69f5a61cff2564243096dd Mon Sep 17 00:00:00 2001 From: icarus Date: Mon, 20 Oct 2025 07:23:41 +0800 Subject: [PATCH] feat(ocr): add type for OcrProviderId and getProvider method Add OcrProviderId type definition and implement getProvider method in OcrService to fetch a single OCR provider by ID --- packages/shared/data/api/apiSchemas.ts | 2 ++ src/main/data/api/handlers/index.ts | 4 ++-- src/main/services/ocr/OcrService.ts | 16 ++++++++++++++++ src/renderer/src/types/ocr.ts | 3 +++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/shared/data/api/apiSchemas.ts b/packages/shared/data/api/apiSchemas.ts index f6d94be9cd..22f3436772 100644 --- a/packages/shared/data/api/apiSchemas.ts +++ b/packages/shared/data/api/apiSchemas.ts @@ -3,6 +3,7 @@ import type { GetOcrProviderResponse, ListOcrProvidersResponse, + OcrProviderId, PatchOcrProviderRequest, PatchOcrProviderResponse } from '@types' @@ -366,6 +367,7 @@ export interface ApiSchemas { '/ocr/providers/:id': { GET: { + params: { id: OcrProviderId } response: GetOcrProviderResponse } PATCH: { diff --git a/src/main/data/api/handlers/index.ts b/src/main/data/api/handlers/index.ts index adf4dac27b..0e843622c4 100644 --- a/src/main/data/api/handlers/index.ts +++ b/src/main/data/api/handlers/index.ts @@ -221,8 +221,8 @@ export const apiHandlers: ApiImplementation = { }, '/ocr/providers/:id': { - GET: async () => { - throw new Error('Not implemented') + GET: async ({ params }) => { + return ocrService.getProvider(params.id) }, PATCH: async ({ body }) => { return ocrService.patchProvider(body) diff --git a/src/main/services/ocr/OcrService.ts b/src/main/services/ocr/OcrService.ts index ad631f83d4..0ea6fd8dd7 100644 --- a/src/main/services/ocr/OcrService.ts +++ b/src/main/services/ocr/OcrService.ts @@ -58,6 +58,22 @@ export class OcrService { return { data: providers.filter((p) => registeredKeys.includes(p.id)) } } + public async getProvider(providerId: string) { + if (!this.registry.has(providerId)) { + throw new Error(`OCR provider ${providerId} is not registered`) + } + const providers = await dbService + .getDb() + .select() + .from(ocrProviderTable) + .where(eq(ocrProviderTable.id, providerId)) + .limit(1) + if (providers.length === 0) { + throw new Error(`OCR provider ${providerId} not found`) + } + return { data: providers[0] } + } + public async patchProvider(update: PatchOcrProviderRequest): Promise { const providers = await dbService .getDb() diff --git a/src/renderer/src/types/ocr.ts b/src/renderer/src/types/ocr.ts index 6ce01dc3fb..e469314179 100644 --- a/src/renderer/src/types/ocr.ts +++ b/src/renderer/src/types/ocr.ts @@ -82,6 +82,9 @@ export const OcrProviderConfigSchema = OcrProviderBaseConfigSchema.loose() export type OcrProviderConfig = z.infer const OcrProviderIdSchema = z.string() + +export type OcrProviderId = z.infer + const OcrProviderNameSchema = z.string() export const OcrProviderSchema = z.object({