feat: load inventory adapters

This commit is contained in:
Aravinth Manivannan 2025-01-10 18:57:12 +05:30
parent 532c6410e1
commit 711f9abb6b
Signed by: realaravinth
GPG key ID: F8F50389936984FF
3 changed files with 92 additions and 2 deletions

View file

@ -2,5 +2,91 @@
//
// 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 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());
}
}

View file

@ -2,6 +2,6 @@
//
// SPDX-License-Identifier: AGPL-3.0-or-later
mod adapters;
pub mod adapters;
mod application;
mod domain;

View file

@ -16,6 +16,10 @@ pub fn load_adapters(pool: PgPool, settings: Settings) -> impl FnOnce(&mut web::
pool.clone(),
settings.clone(),
))
.configure(crate::inventory::adapters::load_adapters(
pool.clone(),
settings.clone(),
))
.configure(super::random_string::GenerateRandomString::inject())
.configure(super::uuid::GenerateUUID::inject());
};