refactor: split bootstrap factory into per-context service builders
This commit is contained in:
35
crates/bootstrap/src/services/identity.rs
Normal file
35
crates/bootstrap/src/services/identity.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use adapters_auth::{BcryptPasswordHasher, JwtTokenIssuer};
|
||||
use adapters_postgres::{PgPool, PostgresUserRepository};
|
||||
use application::identity::{GetProfileHandler, LoginUserHandler, RegisterUserHandler};
|
||||
use domain::ports::TokenIssuer;
|
||||
use presentation::state::IdentityHandlers;
|
||||
|
||||
pub struct IdentityServices {
|
||||
pub handlers: IdentityHandlers,
|
||||
pub token_issuer: Arc<dyn TokenIssuer>,
|
||||
}
|
||||
|
||||
pub fn build(pool: &PgPool, jwt_secret: &str) -> IdentityServices {
|
||||
let user_repo = Arc::new(PostgresUserRepository::new(pool.clone()));
|
||||
let hasher = Arc::new(BcryptPasswordHasher);
|
||||
let issuer: Arc<JwtTokenIssuer> = Arc::new(JwtTokenIssuer::new(jwt_secret));
|
||||
|
||||
let register = Arc::new(RegisterUserHandler::new(user_repo.clone(), hasher.clone()));
|
||||
let login = Arc::new(LoginUserHandler::new(
|
||||
user_repo.clone(),
|
||||
hasher,
|
||||
issuer.clone(),
|
||||
));
|
||||
let get_profile = Arc::new(GetProfileHandler::new(user_repo));
|
||||
|
||||
IdentityServices {
|
||||
handlers: IdentityHandlers {
|
||||
register,
|
||||
login,
|
||||
get_profile,
|
||||
},
|
||||
token_issuer: issuer,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user