feat: load identity adapters into actix web
This commit is contained in:
parent
82c9c6b95d
commit
104961ed76
5 changed files with 456 additions and 84 deletions
|
@ -2,5 +2,96 @@
|
|||
//
|
||||
// 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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ use postgres_es::PostgresCqrs;
|
|||
|
||||
use crate::identity::{
|
||||
adapters::{
|
||||
// input::web::RoutesRepository,
|
||||
input::web::RoutesRepository,
|
||||
output::db::postgres::{
|
||||
employee_view::EmployeeView, store_view::StoreView, user_view::UserView,
|
||||
DBOutPostgresAdapter,
|
||||
|
@ -21,8 +21,8 @@ use crate::identity::{
|
|||
application::services::{errors::IdentityError, IdentityCommand, IdentityServicesObj},
|
||||
domain::{aggregate::User, employee_aggregate::Employee, store_aggregate::Store},
|
||||
};
|
||||
//
|
||||
////pub type WebIdentityRoutesRepository = Data<Arc<RoutesRegit.batspository>>;
|
||||
|
||||
pub type WebIdentityRoutesRepository = Data<Arc<RoutesRepository>>;
|
||||
|
||||
pub type IdentityUserCqrsExec = Arc<PostgresCqrs<User>>;
|
||||
pub type IdentityUserCqrsView = Arc<dyn ViewRepository<UserView, User>>;
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
use std::hash::RandomState;
|
||||
// SPDX-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
use std::sync::Arc;
|
||||
|
||||
use derive_builder::Builder;
|
||||
use mockall::predicate::*;
|
||||
|
@ -8,7 +10,7 @@ use mockall::*;
|
|||
use serde::{Deserialize, Serialize};
|
||||
|
||||
pub mod delete_user;
|
||||
pub mod employee_accept_invite_service;
|
||||
//pub mod employee_accept_invite_service;
|
||||
pub mod employee_exit_organization_service;
|
||||
pub mod employee_login_service;
|
||||
pub mod employee_register_service;
|
||||
|
@ -25,10 +27,46 @@ pub mod set_user_admin;
|
|||
pub mod update_email;
|
||||
pub mod update_password;
|
||||
|
||||
pub mod add_store_service;
|
||||
pub mod update_store_service;
|
||||
|
||||
use add_store_service::*;
|
||||
use delete_user::{service::*, *};
|
||||
//use employee_accept_invite_service::*;
|
||||
use employee_exit_organization_service::*;
|
||||
use employee_login_service::*;
|
||||
use employee_register_service::*;
|
||||
use employee_resend_login_otp_service::*;
|
||||
use employee_resend_verification_otp_service::*;
|
||||
use employee_verify_phone_number_service::*;
|
||||
use login::{service::*, *};
|
||||
use mark_user_verified::{service::*, *};
|
||||
use register_user::{service::*, *};
|
||||
use resend_verification_email::{service::*, *};
|
||||
use set_user_admin::{service::*, *};
|
||||
use update_email::{service::*, *};
|
||||
use update_password::{service::*, *};
|
||||
use update_store_service::*;
|
||||
|
||||
use errors::*;
|
||||
use events::*;
|
||||
|
||||
use crate::identity::domain::{
|
||||
accept_invite_command::*, change_phone_number_command::*, employee_login_command::*,
|
||||
employee_register_command::*, exit_organization_command::*, resend_login_otp_command::*,
|
||||
resend_verification_otp_command::*, verify_phone_number_command::*,
|
||||
// accept_invite_command::*,
|
||||
add_store_command::*,
|
||||
change_phone_number_command::*,
|
||||
employee_login_command::*,
|
||||
employee_register_command::*,
|
||||
exit_organization_command::*,
|
||||
resend_login_otp_command::*,
|
||||
resend_verification_otp_command::*,
|
||||
update_store_command::*,
|
||||
verify_phone_number_command::*,
|
||||
};
|
||||
use crate::utils::{
|
||||
random_number::{self, *},
|
||||
random_string::*,
|
||||
uuid::*,
|
||||
};
|
||||
use delete_user::command::*;
|
||||
use login::command::*;
|
||||
|
@ -39,6 +77,18 @@ use set_user_admin::command::*;
|
|||
use update_email::command::*;
|
||||
use update_password::command::*;
|
||||
|
||||
use crate::identity::application::port::output::{
|
||||
db::{
|
||||
create_login_otp::*, create_verification_otp::*, create_verification_secret::*,
|
||||
delete_login_otp::*, delete_verification_otp::*, delete_verification_secret::*,
|
||||
email_exists::*, emp_id_exists::*, get_emp_id_from_phone_number::*, get_login_otp::*,
|
||||
get_verification_otp::*, get_verification_secret::*, phone_exists::*, store_id_exists::*,
|
||||
store_name_exists::*, user_id_exists::*, verification_secret_exists::*,
|
||||
},
|
||||
mailer::account_validation_link::*,
|
||||
phone::{account_login_otp::*, account_validation_otp::*},
|
||||
};
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq, Ord, PartialOrd)]
|
||||
pub enum IdentityCommand {
|
||||
RegisterUser(RegisterUserCommand),
|
||||
|
@ -57,125 +107,348 @@ pub enum IdentityCommand {
|
|||
EmployeeVerifyPhoneNumber(VerifyPhoneNumberCommand),
|
||||
EmployeeResendVerificationOTP(ResendVerificationOTPCommand),
|
||||
EmployeeChangePhoneNumber(ChangePhoneNumberCommand),
|
||||
EmployeeAcceptInvite(AcceptInviteCommand),
|
||||
// EmployeeAcceptInvite(AcceptInviteCommand),
|
||||
EmployeeExitOrganization(ExitOrganizationCommand),
|
||||
|
||||
AddStore(AddStoreCommand),
|
||||
UpdateStore(UpdateStoreCommand),
|
||||
}
|
||||
|
||||
#[automock]
|
||||
pub trait IdentityServicesInterface: Send + Sync {
|
||||
fn delete_user(&self) -> delete_user::DeleteUserServiceObj;
|
||||
fn login(&self) -> login::LoginServiceObj;
|
||||
fn mark_user_verified(&self) -> mark_user_verified::MarkUserVerifiedServiceObj;
|
||||
fn register_user(&self) -> register_user::RegisterUserServiceObj;
|
||||
fn resend_verification_email(
|
||||
&self,
|
||||
) -> resend_verification_email::ResendVerificationEmailServiceObj;
|
||||
fn set_user_admin(&self) -> set_user_admin::SetUserAdminServiceObj;
|
||||
fn update_email(&self) -> update_email::UpdateEmailServiceObj;
|
||||
fn update_password(&self) -> update_password::UpdatePasswordServiceObj;
|
||||
fn delete_user(&self) -> DeleteUserServiceObj;
|
||||
fn login(&self) -> LoginServiceObj;
|
||||
fn mark_user_verified(&self) -> MarkUserVerifiedServiceObj;
|
||||
fn register_user(&self) -> RegisterUserServiceObj;
|
||||
fn resend_verification_email(&self) -> ResendVerificationEmailServiceObj;
|
||||
fn set_user_admin(&self) -> SetUserAdminServiceObj;
|
||||
fn update_email(&self) -> UpdateEmailServiceObj;
|
||||
fn update_password(&self) -> UpdatePasswordServiceObj;
|
||||
|
||||
// employee
|
||||
fn employee_accept_invite_service(
|
||||
&self,
|
||||
) -> employee_accept_invite_service::EmployeeAcceptInviteServiceObj;
|
||||
fn employee_exit_organization_service(
|
||||
&self,
|
||||
) -> employee_exit_organization_service::EmployeeExitOrganizationServiceObj;
|
||||
fn employee_login_service(&self) -> employee_login_service::EmployeeLoginServiceObj;
|
||||
fn employee_register_service(&self) -> employee_register_service::EmployeeRegisterServiceObj;
|
||||
fn employee_resend_login_otp_service(
|
||||
&self,
|
||||
) -> employee_resend_login_otp_service::EmployeeResendLoginOTPServiceObj;
|
||||
fn employee_resend_verification_otp_service(
|
||||
&self,
|
||||
) -> employee_resend_verification_otp_service::EmployeeResendVerificationOTPServiceObj;
|
||||
fn employee_verify_phone_number_service(
|
||||
&self,
|
||||
) -> employee_verify_phone_number_service::EmployeeVerifyPhoneNumberServiceObj;
|
||||
// fn employee_accept_invite_service(&self) -> EmployeeAcceptInviteServiceObj;
|
||||
fn employee_exit_organization_service(&self) -> EmployeeExitOrganizationServiceObj;
|
||||
fn employee_login_service(&self) -> EmployeeLoginServiceObj;
|
||||
fn employee_register_service(&self) -> EmployeeRegisterServiceObj;
|
||||
fn employee_resend_login_otp_service(&self) -> EmployeeResendLoginOTPServiceObj;
|
||||
fn employee_resend_verification_otp_service(&self) -> EmployeeResendVerificationOTPServiceObj;
|
||||
fn employee_verify_phone_number_service(&self) -> EmployeeVerifyPhoneNumberServiceObj;
|
||||
|
||||
// store
|
||||
fn add_store(&self) -> AddStoreServiceObj;
|
||||
fn update_store(&self) -> UpdateStoreServiceObj;
|
||||
}
|
||||
|
||||
pub type IdentityServicesObj = Arc<dyn IdentityServicesInterface>;
|
||||
|
||||
#[derive(Clone, Builder)]
|
||||
pub struct IdentityServices {
|
||||
delete_user: delete_user::DeleteUserServiceObj,
|
||||
login: login::LoginServiceObj,
|
||||
mark_user_verified: mark_user_verified::MarkUserVerifiedServiceObj,
|
||||
register_user: register_user::RegisterUserServiceObj,
|
||||
resend_verification_email: resend_verification_email::ResendVerificationEmailServiceObj,
|
||||
set_user_admin: set_user_admin::SetUserAdminServiceObj,
|
||||
update_email: update_email::UpdateEmailServiceObj,
|
||||
update_password: update_password::UpdatePasswordServiceObj,
|
||||
delete_user: DeleteUserServiceObj,
|
||||
login: LoginServiceObj,
|
||||
mark_user_verified: MarkUserVerifiedServiceObj,
|
||||
register_user: RegisterUserServiceObj,
|
||||
resend_verification_email: ResendVerificationEmailServiceObj,
|
||||
set_user_admin: SetUserAdminServiceObj,
|
||||
update_email: UpdateEmailServiceObj,
|
||||
update_password: UpdatePasswordServiceObj,
|
||||
|
||||
employee_accept_invite_service: employee_accept_invite_service::EmployeeAcceptInviteServiceObj,
|
||||
employee_exit_organization_service:
|
||||
employee_exit_organization_service::EmployeeExitOrganizationServiceObj,
|
||||
employee_login_service: employee_login_service::EmployeeLoginServiceObj,
|
||||
employee_register_service: employee_register_service::EmployeeRegisterServiceObj,
|
||||
employee_resend_login_otp_service:
|
||||
employee_resend_login_otp_service::EmployeeResendLoginOTPServiceObj,
|
||||
employee_resend_verification_otp_service:
|
||||
employee_resend_verification_otp_service::EmployeeResendVerificationOTPServiceObj,
|
||||
employee_verify_phone_number_service:
|
||||
employee_verify_phone_number_service::EmployeeVerifyPhoneNumberServiceObj,
|
||||
// employee_accept_invite_service: EmployeeAcceptInviteServiceObj,
|
||||
employee_exit_organization_service: EmployeeExitOrganizationServiceObj,
|
||||
employee_login_service: EmployeeLoginServiceObj,
|
||||
employee_register_service: EmployeeRegisterServiceObj,
|
||||
employee_resend_login_otp_service: EmployeeResendLoginOTPServiceObj,
|
||||
employee_resend_verification_otp_service: EmployeeResendVerificationOTPServiceObj,
|
||||
employee_verify_phone_number_service: EmployeeVerifyPhoneNumberServiceObj,
|
||||
|
||||
add_store: AddStoreServiceObj,
|
||||
update_store: UpdateStoreServiceObj,
|
||||
}
|
||||
|
||||
impl IdentityServicesInterface for IdentityServices {
|
||||
fn delete_user(&self) -> delete_user::DeleteUserServiceObj {
|
||||
fn delete_user(&self) -> DeleteUserServiceObj {
|
||||
self.delete_user.clone()
|
||||
}
|
||||
fn login(&self) -> login::LoginServiceObj {
|
||||
fn login(&self) -> LoginServiceObj {
|
||||
self.login.clone()
|
||||
}
|
||||
fn mark_user_verified(&self) -> mark_user_verified::MarkUserVerifiedServiceObj {
|
||||
fn mark_user_verified(&self) -> MarkUserVerifiedServiceObj {
|
||||
self.mark_user_verified.clone()
|
||||
}
|
||||
fn register_user(&self) -> register_user::RegisterUserServiceObj {
|
||||
fn register_user(&self) -> RegisterUserServiceObj {
|
||||
self.register_user.clone()
|
||||
}
|
||||
fn resend_verification_email(
|
||||
&self,
|
||||
) -> resend_verification_email::ResendVerificationEmailServiceObj {
|
||||
fn resend_verification_email(&self) -> ResendVerificationEmailServiceObj {
|
||||
self.resend_verification_email.clone()
|
||||
}
|
||||
fn set_user_admin(&self) -> set_user_admin::SetUserAdminServiceObj {
|
||||
fn set_user_admin(&self) -> SetUserAdminServiceObj {
|
||||
self.set_user_admin.clone()
|
||||
}
|
||||
fn update_email(&self) -> update_email::UpdateEmailServiceObj {
|
||||
fn update_email(&self) -> UpdateEmailServiceObj {
|
||||
self.update_email.clone()
|
||||
}
|
||||
fn update_password(&self) -> update_password::UpdatePasswordServiceObj {
|
||||
fn update_password(&self) -> UpdatePasswordServiceObj {
|
||||
self.update_password.clone()
|
||||
}
|
||||
|
||||
// employee
|
||||
fn employee_accept_invite_service(
|
||||
&self,
|
||||
) -> employee_accept_invite_service::EmployeeAcceptInviteServiceObj {
|
||||
self.employee_accept_invite_service.clone()
|
||||
}
|
||||
fn employee_exit_organization_service(
|
||||
&self,
|
||||
) -> employee_exit_organization_service::EmployeeExitOrganizationServiceObj {
|
||||
// fn employee_accept_invite_service(&self) -> EmployeeAcceptInviteServiceObj {
|
||||
// self.employee_accept_invite_service.clone()
|
||||
// }
|
||||
fn employee_exit_organization_service(&self) -> EmployeeExitOrganizationServiceObj {
|
||||
self.employee_exit_organization_service.clone()
|
||||
}
|
||||
fn employee_login_service(&self) -> employee_login_service::EmployeeLoginServiceObj {
|
||||
fn employee_login_service(&self) -> EmployeeLoginServiceObj {
|
||||
self.employee_login_service.clone()
|
||||
}
|
||||
fn employee_register_service(&self) -> employee_register_service::EmployeeRegisterServiceObj {
|
||||
fn employee_register_service(&self) -> EmployeeRegisterServiceObj {
|
||||
self.employee_register_service.clone()
|
||||
}
|
||||
fn employee_resend_login_otp_service(
|
||||
&self,
|
||||
) -> employee_resend_login_otp_service::EmployeeResendLoginOTPServiceObj {
|
||||
fn employee_resend_login_otp_service(&self) -> EmployeeResendLoginOTPServiceObj {
|
||||
self.employee_resend_login_otp_service.clone()
|
||||
}
|
||||
fn employee_resend_verification_otp_service(
|
||||
&self,
|
||||
) -> employee_resend_verification_otp_service::EmployeeResendVerificationOTPServiceObj {
|
||||
fn employee_resend_verification_otp_service(&self) -> EmployeeResendVerificationOTPServiceObj {
|
||||
self.employee_resend_verification_otp_service.clone()
|
||||
}
|
||||
fn employee_verify_phone_number_service(
|
||||
&self,
|
||||
) -> employee_verify_phone_number_service::EmployeeVerifyPhoneNumberServiceObj {
|
||||
fn employee_verify_phone_number_service(&self) -> EmployeeVerifyPhoneNumberServiceObj {
|
||||
self.employee_verify_phone_number_service.clone()
|
||||
}
|
||||
|
||||
fn add_store(&self) -> AddStoreServiceObj {
|
||||
self.add_store.clone()
|
||||
}
|
||||
fn update_store(&self) -> UpdateStoreServiceObj {
|
||||
self.update_store.clone()
|
||||
}
|
||||
}
|
||||
|
||||
impl IdentityServices {
|
||||
pub fn new(
|
||||
out_db_create_login_otp: CreateLoginOTPOutDBPortObj,
|
||||
out_db_create_verification_otp: CreateVerificationOTPOutDBPortObj,
|
||||
out_db_create_verification_secret: CreateVerificationSecretOutDBPortObj,
|
||||
out_db_delete_login_otp: DeleteLoginOTPOutDBPortObj,
|
||||
out_db_delete_verification_otp: DeleteVerificationOTPOutDBPortObj,
|
||||
out_db_delete_verification_secret: DeleteVerificationSecretOutDBPortObj,
|
||||
out_db_email_exists: EmailExistsOutDBPortObj,
|
||||
out_db_emp_id_exists: EmpIDExistsOutDBPortObj,
|
||||
out_db_get_emp_id_from_phone_number: GetEmpIDFromPhoneNumberOutDBPortObj,
|
||||
out_db_get_login_otp: GetLoginOTPOutDBPortObj,
|
||||
out_db_get_verification_otp: GetVerificationOTPOutDBPortObj,
|
||||
out_db_get_verification_secret: GetVerificationSecretOutDBPortObj,
|
||||
out_db_phone_exists: PhoneNumberExistsOutDBPortObj,
|
||||
out_db_store_id_exists: StoreIDExistsDBPortObj,
|
||||
out_db_store_name_exists: StoreNameExistsDBPortObj,
|
||||
out_db_user_id_exists: UserIDExistsOutDBPortObj,
|
||||
out_db_verification_secret_exists: VerificationSecretExistsOutDBPortObj,
|
||||
|
||||
out_mailer_account_validating_link: AccountValidationLinkOutMailerPortObj,
|
||||
|
||||
out_phone_account_validation_otp: AccountValidationOTPOutPhonePortObj,
|
||||
out_phone_account_login_otp: AccountLoginOTPOutPhonePortObj,
|
||||
|
||||
get_uuid: GetUUIDInterfaceObj,
|
||||
random_string: GenerateRandomStringInterfaceObj,
|
||||
random_number: GenerateRandomNumberInterfaceObj,
|
||||
) -> IdentityServicesObj {
|
||||
let delete_user: DeleteUserServiceObj = Arc::new(DeleteUserService);
|
||||
let login: LoginServiceObj = Arc::new(LoginService {});
|
||||
|
||||
let mark_user_verified: MarkUserVerifiedServiceObj = Arc::new(
|
||||
MarkUserVerifiedServiceBuilder::default()
|
||||
.db_verification_secret_exists_adapter(out_db_verification_secret_exists.clone())
|
||||
.db_delete_verification_secret_adapter(out_db_delete_verification_secret.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
let register_user: RegisterUserServiceObj = Arc::new(
|
||||
RegisterUserServiceBuilder::default()
|
||||
.db_email_exists_adapter(out_db_email_exists.clone())
|
||||
.db_user_id_exists_adapter(out_db_user_id_exists.clone())
|
||||
.db_create_verification_secret_adapter(out_db_create_verification_secret.clone())
|
||||
.mailer_account_validation_link_adapter(out_mailer_account_validating_link.clone())
|
||||
.get_uuid(get_uuid.clone())
|
||||
.random_string_adapter(random_string.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let resend_verification_email: ResendVerificationEmailServiceObj = Arc::new(
|
||||
ResendVerificationEmailServiceBuilder::default()
|
||||
.db_email_exists_adapter(out_db_email_exists.clone())
|
||||
.db_get_verification_secret_adapter(out_db_get_verification_secret.clone())
|
||||
.mailer_account_validation_link_adapter(out_mailer_account_validating_link.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let set_user_admin: SetUserAdminServiceObj = Arc::new(SetUserAdminService);
|
||||
|
||||
let update_email: UpdateEmailServiceObj = Arc::new(
|
||||
UpdateEmailServiceBuilder::default()
|
||||
.db_email_exists_adapter(out_db_email_exists.clone())
|
||||
.db_create_verification_secret_adapter(out_db_create_verification_secret.clone())
|
||||
.mailer_account_validation_link_adapter(out_mailer_account_validating_link.clone())
|
||||
.random_string_adapter(random_string.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let update_password: UpdatePasswordServiceObj = Arc::new(UpdatePasswordService);
|
||||
|
||||
// let employee_accept_invite_service: EmployeeAcceptInviteServiceObj = Arc::new(
|
||||
// EmployeeAcceptInviteServiceBuilder::default()
|
||||
// .db_get_invite_adapter(unimplemented!())
|
||||
// .db_emp_id_exists_adapter(out_db_emp_id_exists.clone())
|
||||
// .build()
|
||||
// .unwrap(),
|
||||
// );
|
||||
let employee_exit_organization_service: EmployeeExitOrganizationServiceObj = Arc::new(
|
||||
EmployeeExitOrganizationServiceBuilder::default()
|
||||
.db_emp_id_exists_adapter(out_db_emp_id_exists.clone())
|
||||
.db_store_id_exists_adapter(out_db_store_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let employee_login_service: EmployeeLoginServiceObj = Arc::new(
|
||||
EmployeeLoginServiceBuilder::default()
|
||||
.db_phone_exists_adapter(out_db_phone_exists.clone())
|
||||
.db_get_emp_id_from_phone_number_adapter(
|
||||
out_db_get_emp_id_from_phone_number.clone(),
|
||||
)
|
||||
.db_create_login_otp_adapter(out_db_create_login_otp.clone())
|
||||
.db_delete_login_otp(out_db_delete_login_otp.clone())
|
||||
.db_get_login_otp(out_db_get_login_otp.clone())
|
||||
.random_number_adapter(random_number.clone())
|
||||
.phone_login_otp_adapter(out_phone_account_login_otp.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let employee_register_service: EmployeeRegisterServiceObj = Arc::new(
|
||||
EmployeeRegisterUserServiceBuilder::default()
|
||||
.db_phone_exists_adapter(out_db_phone_exists.clone())
|
||||
.db_emp_id_exists_adapter(out_db_emp_id_exists.clone())
|
||||
.db_create_verification_otp_adapter(out_db_create_verification_otp.clone())
|
||||
.phone_account_validation_otp_adapter(out_phone_account_validation_otp.clone())
|
||||
.random_number_adapter(random_number.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let employee_resend_login_otp_service: EmployeeResendLoginOTPServiceObj = Arc::new(
|
||||
EmployeeResendLoginOTPServiceBuilder::default()
|
||||
.db_phone_exists_adapter(out_db_phone_exists.clone())
|
||||
.db_get_emp_id_from_phone_number_adapter(
|
||||
out_db_get_emp_id_from_phone_number.clone(),
|
||||
)
|
||||
.db_get_login_otp(out_db_get_login_otp.clone())
|
||||
.phone_login_otp_adapter(out_phone_account_login_otp.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let employee_resend_verification_otp_service: EmployeeResendVerificationOTPServiceObj =
|
||||
Arc::new(
|
||||
EmployeeResendVerificationOTPServiceBuilder::default()
|
||||
.db_phone_exists_adapter(out_db_phone_exists.clone())
|
||||
.db_get_emp_id_from_phone_number_adapter(
|
||||
out_db_get_emp_id_from_phone_number.clone(),
|
||||
)
|
||||
.db_get_verification_otp(out_db_get_verification_otp.clone())
|
||||
.phone_account_validation_otp_adapter(out_phone_account_validation_otp.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let employee_verify_phone_number_service: EmployeeVerifyPhoneNumberServiceObj = Arc::new(
|
||||
EmployeeVerifyPhoneNumberServiceBuilder::default()
|
||||
.db_get_emp_id_from_phone_number_adapter(
|
||||
out_db_get_emp_id_from_phone_number.clone(),
|
||||
)
|
||||
.db_delete_verification_otp(out_db_delete_verification_otp.clone())
|
||||
.db_get_verification_otp(out_db_get_verification_otp.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let add_store: AddStoreServiceObj = Arc::new(
|
||||
AddStoreServiceBuilder::default()
|
||||
.db_store_id_exists(out_db_store_id_exists.clone())
|
||||
.db_store_name_exists(out_db_store_name_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let update_store: UpdateStoreServiceObj = Arc::new(
|
||||
UpdateStoreServiceBuilder::default()
|
||||
.db_store_id_exists(out_db_store_id_exists.clone())
|
||||
.db_store_name_exists(out_db_store_name_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
Arc::new(Self {
|
||||
delete_user,
|
||||
login,
|
||||
mark_user_verified,
|
||||
register_user,
|
||||
resend_verification_email,
|
||||
set_user_admin,
|
||||
update_email,
|
||||
update_password,
|
||||
|
||||
// employee_accept_invite_service,
|
||||
employee_exit_organization_service,
|
||||
employee_login_service,
|
||||
employee_register_service,
|
||||
employee_resend_login_otp_service,
|
||||
employee_resend_verification_otp_service,
|
||||
employee_verify_phone_number_service,
|
||||
|
||||
add_store,
|
||||
update_store,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use random_number::tests::mock_generate_random_number;
|
||||
|
||||
use crate::{
|
||||
tests::bdd::IS_NEVER_CALLED,
|
||||
utils::{random_string::tests::mock_generate_random_string, uuid::tests::mock_get_uuid},
|
||||
};
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn services_init_works() {
|
||||
let s = IdentityServices::new(
|
||||
mock_create_login_otp_db_port(IS_NEVER_CALLED),
|
||||
mock_create_verification_otp_db_port(IS_NEVER_CALLED),
|
||||
mock_create_verification_secret_db_port(IS_NEVER_CALLED),
|
||||
mock_delete_login_otp_db_port(IS_NEVER_CALLED),
|
||||
mock_delete_verification_otp_db_port(IS_NEVER_CALLED),
|
||||
mock_delete_verification_secret_db_port(IS_NEVER_CALLED),
|
||||
mock_email_exists_db_port(IS_NEVER_CALLED, false),
|
||||
mock_emp_id_exists_db_port(IS_NEVER_CALLED, false),
|
||||
mock_get_emp_id_from_phone_number_db_port(IS_NEVER_CALLED),
|
||||
mock_get_login_otp_db_port(IS_NEVER_CALLED),
|
||||
mock_get_verification_otp_db_port(IS_NEVER_CALLED),
|
||||
mock_get_verification_secret_db_port(IS_NEVER_CALLED, "".into()),
|
||||
mock_phone_exists_db_port(IS_NEVER_CALLED, false),
|
||||
mock_store_id_exists_db_port_true(IS_NEVER_CALLED),
|
||||
mock_store_name_exists_db_port_true(IS_NEVER_CALLED),
|
||||
mock_user_id_exists_db_port(IS_NEVER_CALLED, false),
|
||||
mock_verification_secret_exists_db_port(IS_NEVER_CALLED, false),
|
||||
mock_account_validation_link_mailer_port(IS_NEVER_CALLED),
|
||||
mock_account_validation_otp_phone_port(IS_NEVER_CALLED),
|
||||
mock_account_login_otp_phone_port(IS_NEVER_CALLED),
|
||||
mock_get_uuid(IS_NEVER_CALLED),
|
||||
mock_generate_random_string(IS_NEVER_CALLED, "".into()),
|
||||
mock_generate_random_number(IS_NEVER_CALLED, 0),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
mod adapters;
|
||||
pub(crate) mod adapters;
|
||||
mod application;
|
||||
mod domain;
|
||||
|
|
|
@ -62,6 +62,14 @@ async fn main() {
|
|||
db.pool.clone(),
|
||||
settings.clone(),
|
||||
))
|
||||
.configure(identity::adapters::load_adapters(
|
||||
db.pool.clone(),
|
||||
settings.clone(),
|
||||
))
|
||||
.configure(billing::adapters::load_adapters(
|
||||
db.pool.clone(),
|
||||
settings.clone(),
|
||||
))
|
||||
// .configure(auth::adapter::load_adapters(db.pool.clone(), &settings))
|
||||
.configure(utils::random_string::GenerateRandomString::inject())
|
||||
.configure(utils::uuid::GenerateUUID::inject())
|
||||
|
|
Loading…
Reference in a new issue