feat: load inventory adapters
This commit is contained in:
parent
532c6410e1
commit
711f9abb6b
3 changed files with 92 additions and 2 deletions
|
@ -2,5 +2,91 @@
|
||||||
//
|
//
|
||||||
// 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::inventory::{
|
||||||
|
application::services::{InventoryServices, InventoryServicesObj},
|
||||||
|
domain::{
|
||||||
|
category_aggregate::Category, customization_aggregate::Customization,
|
||||||
|
product_aggregate::Product, store_aggregate::Store,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
use crate::settings::Settings;
|
||||||
|
use output::{
|
||||||
|
db::postgres::{
|
||||||
|
category_view, customization_view, product_view, store_view, InventoryDBPostgresAdapter,
|
||||||
|
},
|
||||||
|
full_text_search::meili::InventoryFTSMeili,
|
||||||
|
};
|
||||||
|
|
||||||
mod input;
|
mod input;
|
||||||
mod output;
|
pub mod output;
|
||||||
|
mod types;
|
||||||
|
|
||||||
|
pub fn load_adapters(pool: PgPool, settings: Settings) -> impl FnOnce(&mut web::ServiceConfig) {
|
||||||
|
let db = InventoryDBPostgresAdapter::new(pool.clone());
|
||||||
|
let fts = InventoryFTSMeili::new(&settings.meili.url, &settings.meili.api_key);
|
||||||
|
|
||||||
|
let services: InventoryServicesObj = InventoryServices::new(
|
||||||
|
Arc::new(db.clone()),
|
||||||
|
Arc::new(db.clone()),
|
||||||
|
Arc::new(db.clone()),
|
||||||
|
Arc::new(db.clone()),
|
||||||
|
Arc::new(db.clone()),
|
||||||
|
Arc::new(db.clone()),
|
||||||
|
Arc::new(db.clone()),
|
||||||
|
Arc::new(db.clone()),
|
||||||
|
Arc::new(db.clone()),
|
||||||
|
Arc::new(fts.clone()),
|
||||||
|
);
|
||||||
|
|
||||||
|
let (category_cqrs_exec, category_cqrs_query) =
|
||||||
|
category_view::init_cqrs(db.clone(), services.clone());
|
||||||
|
let (product_cqrs_exec, product_cqrs_query) =
|
||||||
|
product_view::init_cqrs(db.clone(), services.clone());
|
||||||
|
let (customization_cqrs_exec, customization_cqrs_query) =
|
||||||
|
customization_view::init_cqrs(db.clone(), services.clone());
|
||||||
|
let (store_cqrs_exec, store_cqrs_query) = store_view::init_cqrs(db.clone(), services.clone());
|
||||||
|
let inventory_cqrs_exec = types::WebInventoryCqrsExec::new(Arc::new(
|
||||||
|
types::InventoryCqrsExecBuilder::default()
|
||||||
|
.category(category_cqrs_exec)
|
||||||
|
.product(product_cqrs_exec)
|
||||||
|
.customization(customization_cqrs_exec)
|
||||||
|
.store(store_cqrs_exec)
|
||||||
|
.build()
|
||||||
|
.unwrap(),
|
||||||
|
));
|
||||||
|
|
||||||
|
let f = move |cfg: &mut web::ServiceConfig| {
|
||||||
|
// cfg.configure(input::web::load_ctx());
|
||||||
|
cfg.app_data(Data::new(category_cqrs_query.clone()));
|
||||||
|
cfg.app_data(Data::new(product_cqrs_query.clone()));
|
||||||
|
cfg.app_data(Data::new(customization_cqrs_query.clone()));
|
||||||
|
cfg.app_data(Data::new(store_cqrs_query.clone()));
|
||||||
|
cfg.app_data(inventory_cqrs_exec.clone());
|
||||||
|
};
|
||||||
|
|
||||||
|
Box::new(f)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use crate::db::migrate::*;
|
||||||
|
|
||||||
|
#[actix_rt::test]
|
||||||
|
async fn inventory_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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -2,6 +2,6 @@
|
||||||
//
|
//
|
||||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
mod adapters;
|
pub mod adapters;
|
||||||
mod application;
|
mod application;
|
||||||
mod domain;
|
mod domain;
|
||||||
|
|
|
@ -16,6 +16,10 @@ pub fn load_adapters(pool: PgPool, settings: Settings) -> impl FnOnce(&mut web::
|
||||||
pool.clone(),
|
pool.clone(),
|
||||||
settings.clone(),
|
settings.clone(),
|
||||||
))
|
))
|
||||||
|
.configure(crate::inventory::adapters::load_adapters(
|
||||||
|
pool.clone(),
|
||||||
|
settings.clone(),
|
||||||
|
))
|
||||||
.configure(super::random_string::GenerateRandomString::inject())
|
.configure(super::random_string::GenerateRandomString::inject())
|
||||||
.configure(super::uuid::GenerateUUID::inject());
|
.configure(super::uuid::GenerateUUID::inject());
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue