feat: load billing adapters
This commit is contained in:
parent
8410f27738
commit
f8870594ce
3 changed files with 86 additions and 1 deletions
|
@ -1,6 +1,87 @@
|
|||
// SPDX-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
use std::sync::Arc;
|
||||
|
||||
use actix_web::web::{self, Data};
|
||||
use cqrs_es::{persist::ViewRepository, EventEnvelope, Query, View};
|
||||
use postgres_es::PostgresCqrs;
|
||||
use sqlx::postgres::PgPool;
|
||||
|
||||
use crate::billing::{
|
||||
application::{
|
||||
port::output::db::{
|
||||
bill_id_exists::BillIDExistsDBPortObj,
|
||||
get_line_items_for_bill_id::GetLineItemsForBillIDDBPortObj,
|
||||
line_item_id_exists::LineItemIDExistsDBPortObj, next_token_id::NextTokenIDDBPortObj,
|
||||
store_id_exists::StoreIDExistsDBPortObj, store_name_exists::StoreNameExistsDBPortObj,
|
||||
},
|
||||
services::{BillingServices, BillingServicesObj},
|
||||
},
|
||||
domain::{bill_aggregate::Bill, line_item_aggregate::LineItem, store_aggregate::Store},
|
||||
};
|
||||
use crate::settings::Settings;
|
||||
use output::db::postgres::{bill_view, line_item_view, store_view, BillingDBPostgresAdapter};
|
||||
|
||||
mod input;
|
||||
mod output;
|
||||
mod types;
|
||||
|
||||
pub fn load_adapters(pool: PgPool, settings: Settings) -> impl FnOnce(&mut web::ServiceConfig) {
|
||||
// init DB
|
||||
let db = BillingDBPostgresAdapter::new(pool.clone());
|
||||
let db_bill_id_exists: BillIDExistsDBPortObj = Arc::new(db.clone());
|
||||
let db_line_item_id_exists: LineItemIDExistsDBPortObj = Arc::new(db.clone());
|
||||
let db_store_id_exists: StoreIDExistsDBPortObj = Arc::new(db.clone());
|
||||
let db_store_name_exists: StoreNameExistsDBPortObj = Arc::new(db.clone());
|
||||
let db_get_line_items_for_bill_id: GetLineItemsForBillIDDBPortObj = Arc::new(db.clone());
|
||||
let db_next_token_id: NextTokenIDDBPortObj = Arc::new(db.clone());
|
||||
|
||||
// init services
|
||||
|
||||
let services: BillingServicesObj = Arc::new(BillingServices::new(
|
||||
db_bill_id_exists.clone(),
|
||||
db_line_item_id_exists.clone(),
|
||||
db_store_id_exists.clone(),
|
||||
db_store_name_exists.clone(),
|
||||
db_get_line_items_for_bill_id.clone(),
|
||||
db_next_token_id.clone(),
|
||||
));
|
||||
|
||||
let (bill_cqrs_exec, bill_cqrs_query) = bill_view::init_cqrs(db.clone(), services.clone());
|
||||
let (store_cqrs_exec, store_cqrs_query) = store_view::init_cqrs(db.clone(), services.clone());
|
||||
let (line_item_cqrs_exec, line_item_cqrs_query) =
|
||||
line_item_view::init_cqrs(db.clone(), services.clone());
|
||||
|
||||
let f = move |cfg: &mut web::ServiceConfig| {
|
||||
cfg.configure(input::web::load_ctx());
|
||||
|
||||
cfg.app_data(Data::new(bill_cqrs_exec.clone()));
|
||||
cfg.app_data(Data::new(bill_cqrs_query.clone()));
|
||||
|
||||
cfg.app_data(Data::new(store_cqrs_exec.clone()));
|
||||
cfg.app_data(Data::new(store_cqrs_query.clone()));
|
||||
|
||||
cfg.app_data(Data::new(line_item_cqrs_exec.clone()));
|
||||
cfg.app_data(Data::new(line_item_cqrs_query.clone()));
|
||||
};
|
||||
|
||||
Box::new(f)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::db::migrate::*;
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn billing_load_adapters() {
|
||||
let settings = crate::settings::tests::get_settings().await;
|
||||
settings.create_db().await;
|
||||
|
||||
let db = crate::db::sqlx_postgres::Postgres::init(&settings.database.url).await;
|
||||
db.migrate().await;
|
||||
|
||||
load_adapters(db.pool.clone(), settings.clone());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
mod postgres;
|
||||
pub(crate) mod postgres;
|
||||
|
|
|
@ -58,6 +58,10 @@ async fn main() {
|
|||
.wrap(
|
||||
middleware::DefaultHeaders::new().add(("Permissions-Policy", "interest-cohort=()")),
|
||||
)
|
||||
.configure(billing::adapters::load_adapters(
|
||||
db.pool.clone(),
|
||||
settings.clone(),
|
||||
))
|
||||
// .configure(auth::adapter::load_adapters(db.pool.clone(), &settings))
|
||||
.configure(utils::random_string::GenerateRandomString::inject())
|
||||
.configure(utils::uuid::GenerateUUID::inject())
|
||||
|
|
Loading…
Reference in a new issue