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}