From 74e7979764f2688984d7fe40864253c5c64da775 Mon Sep 17 00:00:00 2001 From: icarus Date: Mon, 20 Oct 2025 20:58:08 +0800 Subject: [PATCH] refactor(ocr): simplify response handling by removing wrapper objects Remove unnecessary response wrapper objects ({ data: ... }) from OCR service methods and update types accordingly Update API handlers to maintain consistent response structure --- src/main/data/api/handlers/index.ts | 15 +++++--- .../repositories/OcrProviderRepository.ts | 7 ++-- src/main/services/ocr/OcrService.ts | 34 ++++++++----------- src/renderer/src/types/ocr/api.ts | 11 ++++++ 4 files changed, 39 insertions(+), 28 deletions(-) diff --git a/src/main/data/api/handlers/index.ts b/src/main/data/api/handlers/index.ts index 5bba22e99b..258e099331 100644 --- a/src/main/data/api/handlers/index.ts +++ b/src/main/data/api/handlers/index.ts @@ -213,28 +213,33 @@ export const apiHandlers: ApiImplementation = { '/ocr/providers': { GET: async ({ query }) => { - return ocrService.listProviders(query) + const result = await ocrService.listProviders(query) + return { data: result } }, POST: async ({ body }) => { - return ocrService.createProvider(body) + const result = await ocrService.createProvider(body) + return { data: result } } }, '/ocr/providers/:id': { GET: async ({ params }) => { - return ocrService.getProvider(params.id) + const result = await ocrService.getProvider(params.id) + return { data: result } }, PATCH: async ({ params, body }) => { if (params.id !== body.id) { throw new Error('Provider ID in path does not match ID in body') } - return ocrService.updateProvider(params.id, body) + const result = await ocrService.updateProvider(params.id, body) + return { data: result } }, PUT: async ({ params, body }) => { if (params.id !== body.id) { throw new Error('Provider ID in path does not match ID in body') } - return ocrService.replaceProvider(body) + const result = await ocrService.replaceProvider(body) + return { data: result } }, DELETE: async ({ params }) => { return ocrService.deleteProvider(params.id) diff --git a/src/main/data/repositories/OcrProviderRepository.ts b/src/main/data/repositories/OcrProviderRepository.ts index 45d49e010f..bf0bde7af0 100644 --- a/src/main/data/repositories/OcrProviderRepository.ts +++ b/src/main/data/repositories/OcrProviderRepository.ts @@ -6,8 +6,7 @@ import type { DbOcrProviderCreate, DbOcrProviderReplace, DbOcrProviderUpdate, - OcrProviderId, - UpdateOcrProviderResponse + OcrProviderId } from '@types' import { BuiltinOcrProviderIds, isDbOcrProvider } from '@types' import dayjs from 'dayjs' @@ -112,7 +111,7 @@ export class OcrProviderRepository { /** * Update OCR provider (partial update) */ - public async update(id: OcrProviderId, update: DbOcrProviderUpdate): Promise { + public async update(id: OcrProviderId, update: DbOcrProviderUpdate): Promise { try { const existing = await this.findById(id) @@ -134,7 +133,7 @@ export class OcrProviderRepository { .returning() logger.info(`Updated OCR provider: ${id}`) - return { data: updated } + return updated } catch (error) { logger.error(`Failed to update OCR provider ${id}`, error as Error) throw error diff --git a/src/main/services/ocr/OcrService.ts b/src/main/services/ocr/OcrService.ts index a2efd500a3..9556877f77 100644 --- a/src/main/services/ocr/OcrService.ts +++ b/src/main/services/ocr/OcrService.ts @@ -1,21 +1,17 @@ import { loggerService } from '@logger' import { ocrProviderRepository } from '@main/data/repositories/OcrProviderRepository' import type { - CreateOcrProviderRequest, - CreateOcrProviderResponse, DbOcrProvider, - GetOcrProviderResponse, ListOcrProvidersQuery, - ListOcrProvidersResponse, OcrParams, OcrProvider, + OcrProviderBusiness, + OcrProviderCreateBusiness, OcrProviderKeyBusiness, + OcrProviderReplaceBusiness, + OcrProviderUpdateBusiness, OcrResult, - ReplaceOcrProviderRequest, - ReplaceOcrProviderResponse, - SupportedOcrFile, - UpdateOcrProviderRequest, - UpdateOcrProviderResponse + SupportedOcrFile } from '@types' import { BuiltinOcrProviderIdMap } from '@types' @@ -119,7 +115,7 @@ class OcrService { /** * Get list of OCR providers */ - public async listProviders(query?: ListOcrProvidersQuery): Promise { + public async listProviders(query?: ListOcrProvidersQuery): Promise { try { await this.ensureInitialized() const providers = await ocrProviderRepository.findAll() @@ -132,7 +128,7 @@ class OcrService { } logger.debug(`Listed ${result.length} OCR providers`) - return { data: result } + return result } catch (error) { logger.error('Failed to list OCR providers', error as Error) throw error @@ -142,12 +138,12 @@ class OcrService { /** * Get OCR provider by ID */ - public async getProvider(providerId: OcrProviderKeyBusiness): Promise { + public async getProvider(providerId: OcrProviderKeyBusiness): Promise { try { await this.ensureInitialized() const provider = await ocrProviderRepository.findById(providerId) logger.debug(`Retrieved OCR provider: ${providerId}`) - return { data: provider } + return provider } catch (error) { logger.error(`Failed to get OCR provider ${providerId}`, error as Error) throw error @@ -157,12 +153,12 @@ class OcrService { /** * Create new OCR provider */ - public async createProvider(data: CreateOcrProviderRequest): Promise { + public async createProvider(data: OcrProviderCreateBusiness): Promise { try { await this.ensureInitialized() const result = await ocrProviderRepository.create(data) logger.info(`Created OCR provider: ${data.id}`) - return { data: result } + return result } catch (error) { logger.error(`Failed to create OCR provider ${data.id}`, error as Error) throw error @@ -174,8 +170,8 @@ class OcrService { */ public async updateProvider( id: OcrProviderKeyBusiness, - data: UpdateOcrProviderRequest - ): Promise { + data: OcrProviderUpdateBusiness + ): Promise { try { await this.ensureInitialized() const result = await ocrProviderRepository.update(id, data) @@ -190,7 +186,7 @@ class OcrService { /** * Replace OCR provider (full update) */ - public async replaceProvider(data: ReplaceOcrProviderRequest): Promise { + public async replaceProvider(data: OcrProviderReplaceBusiness): Promise { try { await this.ensureInitialized() const result = await ocrProviderRepository.replace(data) @@ -285,7 +281,7 @@ class OcrService { const availableProviders: DbOcrProvider[] = [] const capFilter = (provider: OcrProvider) => provider.capabilities.image - for (const provider of providers.data.filter(capFilter)) { + for (const provider of providers.filter(capFilter)) { if (await this._isProviderAvailable(provider)) { availableProviders.push(provider) } diff --git a/src/renderer/src/types/ocr/api.ts b/src/renderer/src/types/ocr/api.ts index 8c65957cc0..4039845616 100644 --- a/src/renderer/src/types/ocr/api.ts +++ b/src/renderer/src/types/ocr/api.ts @@ -33,20 +33,31 @@ export const UpdateOcrProviderRequestSchema = z.object({ name: OcrProviderNameSchema.optional(), config: OcrProviderConfigSchema.partial().optional() }) + export type UpdateOcrProviderRequest = z.infer + export const UpdateOcrProviderResponseSchema = z.object({ data: DbOcrProviderSchema }) + export type UpdateOcrProviderResponse = z.infer + export const CreateOcrProviderRequestSchema = OcrProviderSchema + export type CreateOcrProviderRequest = z.infer + export const CreateOcrProviderResponseSchema = z.object({ data: DbOcrProviderSchema }) + export type CreateOcrProviderResponse = z.infer + export const ReplaceOcrProviderRequestSchema = OcrProviderSchema + export type ReplaceOcrProviderRequest = z.infer + export const ReplaceOcrProviderResponseSchema = z.object({ data: DbOcrProviderSchema }) + export type ReplaceOcrProviderResponse = z.infer