framework_cqrs_lib/cqrs/infra/api_key/
component.rs

1use crate::cqrs::core::api_key::services::api_key_service::ApiKeyService;
2use crate::cqrs::core::api_key::services::impl_api_key_service::ImplApiKeyService;
3use crate::cqrs::infra::api_key::dao::MongoApiKeyDAO;
4use crate::cqrs::infra::api_key::dbo::ApiKeyDbo;
5use crate::cqrs::infra::api_key::mongo_repository::MongoApiKeyRepository;
6use crate::cqrs::infra::repositories::mongo_entity_repository::MongoEntityRepository;
7use std::sync::Arc;
8use crate::cqrs::infra::daos::database_mongo::DatabaseMongo;
9
10pub struct ApiKeyComponent {
11    pub service: Arc<dyn ApiKeyService>,
12}
13
14impl ApiKeyComponent {
15    pub async fn new(dbname: &str, aggregat_name: &str) -> Self {
16        let db = DatabaseMongo::new(dbname).await;
17        let api_key_dao = Arc::new(
18            MongoApiKeyDAO::new(&db.underlying, &format!("{aggregat_name}_api_key")).await
19        );
20        let api_key_repository: Arc<MongoEntityRepository<ApiKeyDbo>> = Arc::new(
21            MongoApiKeyRepository {
22                dao: api_key_dao.clone(),
23                database: db.underlying,
24            }
25        );
26        let api_key_service: Arc<dyn ApiKeyService> = Arc::new(ImplApiKeyService { repo: api_key_repository.clone() });
27
28        Self {
29            service: api_key_service
30        }
31    }
32}