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                .clock(ledger.clock().clone())
34                .build()
35                .expect("JobSvcConfig"),
36        )
37        .await?;
38        let spawner = jobs.add_initializer(CalaOutboxImportJobInitializer::new(ledger.clone()));
39        jobs.start_poll().await?;
40
41        Ok(Self {
42            _pool: pool,
43            ledger,
44            _jobs: jobs,
45            spawner,
46        })
47    }
48
49    pub fn ledger(&self) -> &CalaLedger {
50        &self.ledger
51    }
52
53    pub fn spawner(&self) -> &CalaOutboxImportJobSpawner {
54        &self.spawner
55    }
56}