vanikam/src/identity/adapters/mod.rs

97 lines
3 KiB
Rust

// 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::identity::{
application::{
services::{IdentityServices, IdentityServicesObj},
},
domain::{aggregate::User, employee_aggregate::Employee, store_aggregate::Store},
};
use crate::settings::Settings;
use output::{
db::postgres::{employee_view, store_view, user_view, DBOutPostgresAdapter},
mailer::lettre::LettreMailer,
phone::twilio::Phone,
};
mod input;
pub mod output;
mod types;
pub fn load_adapters(pool: PgPool, settings: Settings) -> impl FnOnce(&mut web::ServiceConfig) {
// init DB
let db = DBOutPostgresAdapter::new(pool.clone());
let mailer = LettreMailer::new(&settings);
let phone = Phone::new(&settings);
let services: IdentityServicesObj = IdentityServices::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(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(mailer.clone()),
Arc::new(phone.clone()),
Arc::new(phone.clone()),
crate::utils::uuid::GenerateUUID::new(),
crate::utils::random_string::GenerateRandomString::new(),
crate::utils::random_number::GenerateRandomNumber::new(),
);
let (user_cqrs_exec, user_cqrs_query) = user_view::init_cqrs(db.clone(), services.clone());
let (store_cqrs_exec, store_cqrs_query) = store_view::init_cqrs(db.clone(), services.clone());
let (employee_cqrs_exec, employee_cqrs_query) =
employee_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(user_cqrs_exec.clone()));
cfg.app_data(Data::new(user_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(employee_cqrs_exec.clone()));
cfg.app_data(Data::new(employee_cqrs_query.clone()));
};
Box::new(f)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::db::migrate::*;
#[actix_rt::test]
async fn identity_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());
}
}