Skip to content

Commit f2bd9e3

Browse files
committed
refactor: add Provider::from_config
1 parent 22bb98e commit f2bd9e3

File tree

5 files changed

+28
-36
lines changed

5 files changed

+28
-36
lines changed

academy/src/commands/admin/coin.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@ use academy_persistence_contracts::{Database, Transaction};
55
use clap::Subcommand;
66
use uuid::Uuid;
77

8-
use crate::{
9-
cache, database, email,
10-
environment::{ConfigProvider, Provider, types},
11-
};
8+
use crate::environment::{Provider, types};
129

1310
#[derive(Debug, Subcommand)]
1411
pub enum AdminCoinCommand {
@@ -62,11 +59,7 @@ async fn add(
6259
description: Option<String>,
6360
no_credit_note: bool,
6461
) -> anyhow::Result<()> {
65-
let database = database::connect(&config.database).await?;
66-
let cache = cache::connect(&config.cache).await?;
67-
let email_service = email::connect(&config.email).await?;
68-
let config_provider = ConfigProvider::new(&config)?;
69-
let mut provider = Provider::new(config_provider, database, cache, email_service);
62+
let mut provider = Provider::from_config(&config).await?;
7063

7164
let db: types::Database = provider.provide();
7265
let mut txn = db.begin_transaction().await?;

academy/src/commands/admin/invoice.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ use clap::Subcommand;
66
use futures::TryStreamExt;
77
use indicatif::ProgressBar;
88

9-
use crate::{
10-
cache, database, email,
11-
environment::{ConfigProvider, Provider, types},
12-
};
9+
use crate::environment::{Provider, types};
1310

1411
#[derive(Debug, Subcommand)]
1512
pub enum AdminInvoiceCommand {
@@ -27,11 +24,7 @@ impl AdminInvoiceCommand {
2724
}
2825

2926
async fn generate(config: Config) -> anyhow::Result<()> {
30-
let database = database::connect(&config.database).await?;
31-
let cache = cache::connect(&config.cache).await?;
32-
let email_service = email::connect(&config.email).await?;
33-
let config_provider = ConfigProvider::new(&config)?;
34-
let mut provider = Provider::new(config_provider, database, cache, email_service);
27+
let mut provider = Provider::from_config(&config).await?;
3528

3629
let db: types::Database = provider.provide();
3730
let mut txn = db.begin_transaction().await?;

academy/src/commands/admin/user.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,9 @@ use anyhow::Context;
66
use clap::Subcommand;
77
use tracing::info;
88

9-
use crate::{
10-
cache, database, email,
11-
environment::{
12-
ConfigProvider, Provider,
13-
types::{self, Database},
14-
},
9+
use crate::environment::{
10+
Provider,
11+
types::{self, Database},
1512
};
1613

1714
#[derive(Debug, Subcommand)]
@@ -61,11 +58,7 @@ async fn create(
6158
enabled: bool,
6259
email_verified: bool,
6360
) -> anyhow::Result<()> {
64-
let database = database::connect(&config.database).await?;
65-
let cache = cache::connect(&config.cache).await?;
66-
let email_service = email::connect(&config.email).await?;
67-
let config_provider = ConfigProvider::new(&config)?;
68-
let mut provider = Provider::new(config_provider, database, cache, email_service);
61+
let mut provider = Provider::from_config(&config).await?;
6962

7063
let db: Database = provider.provide();
7164
let mut txn = db.begin_transaction().await?;

academy/src/commands/tasks/mod.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ use clap::Subcommand;
1111
use tracing::info;
1212

1313
use crate::{
14-
cache, database, email,
15-
environment::{ConfigProvider, Provider, types},
14+
database,
15+
environment::{Provider, types},
1616
};
1717

1818
#[derive(Debug, Subcommand)]
@@ -50,11 +50,7 @@ async fn prune_database(config: Config) -> anyhow::Result<()> {
5050
}
5151

5252
async fn refresh_premium(config: Config) -> anyhow::Result<()> {
53-
let database = database::connect(&config.database).await?;
54-
let cache = cache::connect(&config.cache).await?;
55-
let email_service = email::connect(&config.email).await?;
56-
let config_provider = ConfigProvider::new(&config)?;
57-
let mut provider = Provider::new(config_provider, database, cache, email_service);
53+
let mut provider = Provider::from_config(&config).await?;
5854

5955
let db: types::Database = provider.provide();
6056
let mut txn = db.begin_transaction().await?;

academy/src/environment/mod.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use academy_shared_impl::{
2323
jwt::JwtServiceConfig,
2424
totp::TotpServiceConfig,
2525
};
26+
use anyhow::Context;
2627
use types::{Cache, Database, Email};
2728

2829
pub mod types;
@@ -75,6 +76,22 @@ impl Provider {
7576
config,
7677
}
7778
}
79+
80+
pub async fn from_config(config: &Config) -> anyhow::Result<Self> {
81+
let config_provider =
82+
ConfigProvider::new(config).context("Failed to build config provider")?;
83+
let database = crate::database::connect(&config.database)
84+
.await
85+
.context("Failed to connect to database")?;
86+
let cache = crate::cache::connect(&config.cache)
87+
.await
88+
.context("Failed to connect to cache")?;
89+
let email = crate::email::connect(&config.email)
90+
.await
91+
.context("Failed to connect to email server")?;
92+
93+
Ok(Self::new(config_provider, database, cache, email))
94+
}
7895
}
7996

8097
provider! {

0 commit comments

Comments
 (0)