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-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
|
||||||
//
|
//
|
||||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
// 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 input;
|
||||||
mod output;
|
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-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
|
||||||
//
|
//
|
||||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
mod postgres;
|
pub(crate) mod postgres;
|
||||||
|
|
|
@ -58,6 +58,10 @@ async fn main() {
|
||||||
.wrap(
|
.wrap(
|
||||||
middleware::DefaultHeaders::new().add(("Permissions-Policy", "interest-cohort=()")),
|
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(auth::adapter::load_adapters(db.pool.clone(), &settings))
|
||||||
.configure(utils::random_string::GenerateRandomString::inject())
|
.configure(utils::random_string::GenerateRandomString::inject())
|
||||||
.configure(utils::uuid::GenerateUUID::inject())
|
.configure(utils::uuid::GenerateUUID::inject())
|
||||||
|
|
Loading…
Reference in a new issue