97 lines
3 KiB
Rust
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());
|
|
}
|
|
}
|