1use crate::config::AnzarConfiguration;
2use crate::infrastructure::{cache::CacheAdapters, database::DatabaseAdapters};
3
4use crate::domain::repositories::{
5 AccountRepository, EmailVerificationTokenRepository, PasswordResetTokenRepository,
6 UserRepository,
7};
8
9use crate::utils::crypto::Crypto;
10
11#[derive(Clone)]
12pub struct AuthService {
13 pub(crate) user_repository: UserRepository,
14 pub(crate) account_repository: AccountRepository,
15 pub(crate) password_reset_token_repository: PasswordResetTokenRepository,
16 pub(crate) email_verification_token_repository: EmailVerificationTokenRepository,
17 pub(crate) crypto: Crypto,
18 pub(crate) configuration: AnzarConfiguration,
19}
20
21pub struct AuthContext<'a> {
22 pub service: &'a AuthService,
23 pub crypto: &'a Crypto,
24 pub configuration: &'a AnzarConfiguration,
25}
26
27impl AuthService {
28 pub fn new(
29 database_adapters: &DatabaseAdapters,
30 cache_adapters: &CacheAdapters,
31 crypto: &Crypto,
32 configuration: &AnzarConfiguration,
33 ) -> Self {
34 Self {
35 user_repository: UserRepository::new(
36 database_adapters.user_adapter.clone(),
37 cache_adapters.cache_adapter.clone(),
38 ),
39 account_repository: AccountRepository::new(database_adapters.account_adapter.clone()),
40 password_reset_token_repository: PasswordResetTokenRepository::new(
41 database_adapters.reset_token_adapter.clone(),
42 ),
43 email_verification_token_repository: EmailVerificationTokenRepository::new(
44 database_adapters.email_verification_token.clone(),
45 ),
46 crypto: crypto.clone(),
47 configuration: configuration.clone(),
48 }
49 }
50}