cala_server/app/
mod.rs

1mod config;
2mod error;
3
4use job::Jobs;
5use sqlx::PgPool;
6
7use cala_ledger::CalaLedger;
8
9use super::extension::cala_outbox_import::{
10    CalaOutboxImportJobInitializer, CalaOutboxImportJobSpawner,
11};
12
13pub use config::*;
14pub use error::*;
15
16pub struct CalaApp {
17    _pool: PgPool,
18    ledger: CalaLedger,
19    _jobs: job::Jobs,
20    spawner: CalaOutboxImportJobSpawner,
21}
22
23impl CalaApp {
24    pub(crate) async fn run(
25        pool: PgPool,
26        config: AppConfig,
27        ledger: CalaLedger,
28    ) -> Result<Self, ApplicationError> {
29        let mut jobs = Jobs::init(
30            job::JobSvcConfig::builder()
31                .pool(pool.clone())
32                .poller_config(config.jobs)
33                .build()
34                .expect("JobSvcConfig"),
35        )
36        .await?;
37        let spawner = jobs.add_initializer(CalaOutboxImportJobInitializer::new(ledger.clone()));
38        jobs.start_poll().await?;
39
40        Ok(Self {
41            _pool: pool,
42            ledger,
43            _jobs: jobs,
44            spawner,
45        })
46    }
47
48    pub fn ledger(&self) -> &CalaLedger {
49        &self.ledger
50    }
51
52    pub fn spawner(&self) -> &CalaOutboxImportJobSpawner {
53        &self.spawner
54    }
55}