From 8fed8c753ed4681f2e57f67f9066a0858963e3a9 Mon Sep 17 00:00:00 2001 From: perf3ct Date: Sat, 14 Jun 2025 22:57:43 +0000 Subject: [PATCH] feat(server): fix migration not working --- ...s.sql => 20240101000010_notifications.sql} | 0 src/lib.rs | 1 + src/main.rs | 51 +++++-------------- src/ocr.rs | 4 +- src/ocr_api.rs | 6 +-- 5 files changed, 20 insertions(+), 42 deletions(-) rename migrations/{009_notifications.sql => 20240101000010_notifications.sql} (100%) diff --git a/migrations/009_notifications.sql b/migrations/20240101000010_notifications.sql similarity index 100% rename from migrations/009_notifications.sql rename to migrations/20240101000010_notifications.sql diff --git a/src/lib.rs b/src/lib.rs index c77731c..2ec6f76 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,6 +14,7 @@ pub mod ocr_queue; pub mod ocr_tests; pub mod routes; pub mod seed; +pub mod swagger; pub mod watcher; pub mod webdav_service; pub mod webdav_scheduler; diff --git a/src/main.rs b/src/main.rs index 742ac38..63c8e36 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,34 +9,11 @@ use std::sync::Arc; use tower_http::{cors::CorsLayer, services::{ServeDir, ServeFile}}; use tracing::{info, error}; -mod auth; -mod batch_ingest; -mod config; -mod db; -mod enhanced_ocr; -mod file_service; -mod models; -mod ocr; -mod ocr_queue; -mod routes; -mod seed; -mod swagger; -mod watcher; -mod webdav_service; -mod webdav_scheduler; -mod webdav_xml_parser; +use readur::{config::Config, db::Database, AppState, *}; #[cfg(test)] mod tests; -use config::Config; -use db::Database; - -#[derive(Clone)] -pub struct AppState { - pub db: Database, - pub config: Config, -} #[tokio::main] async fn main() -> Result<(), Box> { @@ -144,16 +121,16 @@ async fn main() -> Result<(), Box> { let app = Router::new() .route("/api/health", get(readur::health_check)) - .nest("/api/auth", routes::auth::router()) - .nest("/api/documents", routes::documents::router()) - .nest("/api/metrics", routes::metrics::router()) - .nest("/api/notifications", routes::notifications::router()) - .nest("/api/queue", routes::queue::router()) - .nest("/api/search", routes::search::router()) - .nest("/api/settings", routes::settings::router()) - .nest("/api/users", routes::users::router()) - .nest("/api/webdav", routes::webdav::router()) - .merge(swagger::create_swagger_router()) + .nest("/api/auth", readur::routes::auth::router()) + .nest("/api/documents", readur::routes::documents::router()) + .nest("/api/metrics", readur::routes::metrics::router()) + .nest("/api/notifications", readur::routes::notifications::router()) + .nest("/api/queue", readur::routes::queue::router()) + .nest("/api/search", readur::routes::search::router()) + .nest("/api/settings", readur::routes::settings::router()) + .nest("/api/users", readur::routes::users::router()) + .nest("/api/webdav", readur::routes::webdav::router()) + .merge(readur::swagger::create_swagger_router()) .nest_service("/", ServeDir::new("/app/frontend").fallback(ServeFile::new("/app/frontend/index.html"))) .fallback(serve_spa) .layer(CorsLayer::permissive()) @@ -161,7 +138,7 @@ async fn main() -> Result<(), Box> { let watcher_config = config.clone(); tokio::spawn(async move { - if let Err(e) = watcher::start_folder_watcher(watcher_config).await { + if let Err(e) = readur::watcher::start_folder_watcher(watcher_config).await { error!("Folder watcher error: {}", e); } }); @@ -170,7 +147,7 @@ async fn main() -> Result<(), Box> { let queue_db = Database::new(&config.database_url).await?; let queue_pool = sqlx::PgPool::connect(&config.database_url).await?; let concurrent_jobs = 4; // TODO: Get from config/settings - let queue_service = Arc::new(ocr_queue::OcrQueueService::new(queue_db, queue_pool, concurrent_jobs)); + let queue_service = Arc::new(readur::ocr_queue::OcrQueueService::new(queue_db, queue_pool, concurrent_jobs)); let queue_worker = queue_service.clone(); tokio::spawn(async move { @@ -199,7 +176,7 @@ async fn main() -> Result<(), Box> { }); // Start WebDAV background sync scheduler - let webdav_scheduler = webdav_scheduler::WebDAVScheduler::new(state.clone()); + let webdav_scheduler = readur::webdav_scheduler::WebDAVScheduler::new(state.clone()); tokio::spawn(async move { info!("Starting WebDAV background sync scheduler"); webdav_scheduler.start().await; diff --git a/src/ocr.rs b/src/ocr.rs index f93b06e..8885ac3 100644 --- a/src/ocr.rs +++ b/src/ocr.rs @@ -26,9 +26,9 @@ impl OcrService { { // Perform health checks first self.health_checker.check_tesseract_installation() - .map_err(|e| anyhow!(e))?; + .map_err(|e: OcrError| anyhow!(e))?; self.health_checker.check_language_data(lang) - .map_err(|e| anyhow!(e))?; + .map_err(|e: OcrError| anyhow!(e))?; let mut tesseract = Tesseract::new(None, Some(lang)) .map_err(|e| anyhow!(OcrError::InitializationFailed { diff --git a/src/ocr_api.rs b/src/ocr_api.rs index 2f79d22..e281778 100644 --- a/src/ocr_api.rs +++ b/src/ocr_api.rs @@ -9,7 +9,7 @@ use axum::{ use serde::{Deserialize, Serialize}; #[derive(Serialize)] -struct OcrHealthResponse { +pub struct OcrHealthResponse { status: String, tesseract_installed: bool, available_languages: Vec, @@ -18,7 +18,7 @@ struct OcrHealthResponse { } #[derive(Serialize)] -struct OcrErrorResponse { +pub struct OcrErrorResponse { error: String, error_code: String, details: Option, @@ -26,7 +26,7 @@ struct OcrErrorResponse { } #[derive(Deserialize)] -struct OcrRequest { +pub struct OcrRequest { file_path: String, language: Option, use_fallback: Option,