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}