feat: add core OCR API integration (refs #65)
All checks were successful
Deploy to Staging / Build Images (pull_request) Successful in 5m59s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 31s
Deploy to Staging / Verify Staging (pull_request) Successful in 2m19s
Deploy to Staging / Notify Staging Ready (pull_request) Successful in 7s
Deploy to Staging / Notify Staging Failure (pull_request) Has been skipped
All checks were successful
Deploy to Staging / Build Images (pull_request) Successful in 5m59s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 31s
Deploy to Staging / Verify Staging (pull_request) Successful in 2m19s
Deploy to Staging / Notify Staging Ready (pull_request) Successful in 7s
Deploy to Staging / Notify Staging Failure (pull_request) Has been skipped
OCR Service (Python/FastAPI):
- POST /extract for synchronous OCR extraction
- POST /jobs and GET /jobs/{job_id} for async processing
- Image preprocessing (deskew, denoise) for accuracy
- HEIC conversion via pillow-heif
- Redis job queue for async processing
Backend (Fastify):
- POST /api/ocr/extract - authenticated proxy to OCR
- POST /api/ocr/jobs - async job submission
- GET /api/ocr/jobs/:jobId - job polling
- Multipart file upload handling
- JWT authentication required
File size limits: 10MB sync, 200MB async
Processing time target: <3 seconds for typical photos
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
31
backend/src/features/ocr/api/ocr.routes.ts
Normal file
31
backend/src/features/ocr/api/ocr.routes.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* @ai-summary Fastify routes for OCR API
|
||||
*/
|
||||
import { FastifyInstance, FastifyPluginAsync, FastifyPluginOptions } from 'fastify';
|
||||
import { OcrController } from './ocr.controller';
|
||||
|
||||
export const ocrRoutes: FastifyPluginAsync = async (
|
||||
fastify: FastifyInstance,
|
||||
_opts: FastifyPluginOptions
|
||||
) => {
|
||||
const ctrl = new OcrController();
|
||||
const requireAuth = fastify.authenticate.bind(fastify);
|
||||
|
||||
// POST /api/ocr/extract - Synchronous OCR extraction
|
||||
fastify.post('/ocr/extract', {
|
||||
preHandler: [requireAuth],
|
||||
handler: ctrl.extract.bind(ctrl),
|
||||
});
|
||||
|
||||
// POST /api/ocr/jobs - Submit async OCR job
|
||||
fastify.post('/ocr/jobs', {
|
||||
preHandler: [requireAuth],
|
||||
handler: ctrl.submitJob.bind(ctrl),
|
||||
});
|
||||
|
||||
// GET /api/ocr/jobs/:jobId - Get job status
|
||||
fastify.get<{ Params: { jobId: string } }>('/ocr/jobs/:jobId', {
|
||||
preHandler: [requireAuth],
|
||||
handler: ctrl.getJobStatus.bind(ctrl),
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user