use tokio_util::sync::CancellationToken;
use ceres_client::{EmbeddingProviderEnum, PortalClientFactoryEnum};
use ceres_core::{ExportService, HarvestPipeline, PortalsConfig, SearchService};
use ceres_db::{DatasetRepository, JobRepository};
#[derive(Clone)]
pub struct AppState {
pub search_service: SearchService<DatasetRepository, EmbeddingProviderEnum>,
pub harvest_pipeline:
HarvestPipeline<DatasetRepository, EmbeddingProviderEnum, PortalClientFactoryEnum>,
pub export_service: ExportService<DatasetRepository>,
pub dataset_repo: DatasetRepository,
pub job_repo: JobRepository,
pub portals_config: Option<PortalsConfig>,
pub shutdown_token: CancellationToken,
pub admin_token: Option<String>,
}
impl AppState {
pub fn new(
pool: sqlx::PgPool,
embedding_client: EmbeddingProviderEnum,
portals_config: Option<PortalsConfig>,
shutdown_token: CancellationToken,
admin_token: Option<String>,
) -> Self {
let dataset_repo = DatasetRepository::new(pool.clone());
let job_repo = JobRepository::new(pool);
let portal_factory = PortalClientFactoryEnum::new();
Self {
search_service: SearchService::new(dataset_repo.clone(), embedding_client.clone()),
harvest_pipeline: HarvestPipeline::new(
dataset_repo.clone(),
embedding_client,
portal_factory,
),
export_service: ExportService::new(dataset_repo.clone()),
dataset_repo,
job_repo,
portals_config,
shutdown_token,
admin_token,
}
}
}