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