feat(server): fix migration not working
This commit is contained in:
parent
b7daa77c02
commit
8fed8c753e
|
|
@ -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;
|
||||
|
|
|
|||
51
src/main.rs
51
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<dyn std::error::Error>> {
|
||||
|
|
@ -144,16 +121,16 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||
|
||||
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<dyn std::error::Error>> {
|
|||
|
||||
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<dyn std::error::Error>> {
|
|||
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<dyn std::error::Error>> {
|
|||
});
|
||||
|
||||
// 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;
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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<String>,
|
||||
|
|
@ -18,7 +18,7 @@ struct OcrHealthResponse {
|
|||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct OcrErrorResponse {
|
||||
pub struct OcrErrorResponse {
|
||||
error: String,
|
||||
error_code: String,
|
||||
details: Option<String>,
|
||||
|
|
@ -26,7 +26,7 @@ struct OcrErrorResponse {
|
|||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct OcrRequest {
|
||||
pub struct OcrRequest {
|
||||
file_path: String,
|
||||
language: Option<String>,
|
||||
use_fallback: Option<bool>,
|
||||
|
|
|
|||
Loading…
Reference in New Issue