42 lines
1.8 KiB
Rust
42 lines
1.8 KiB
Rust
pub mod errors;
|
|
pub mod extractors;
|
|
pub mod handlers;
|
|
pub mod routes;
|
|
pub mod state;
|
|
|
|
use std::sync::Arc;
|
|
use sqlx::PgPool;
|
|
use state::AppState;
|
|
|
|
use async_trait::async_trait;
|
|
use domain::{errors::DomainError, events::DomainEvent, ports::EventPublisher};
|
|
|
|
struct NoOpEventPublisher;
|
|
|
|
#[async_trait]
|
|
impl EventPublisher for NoOpEventPublisher {
|
|
async fn publish(&self, _e: &DomainEvent) -> Result<(), DomainError> {
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
pub fn build_state(pool: PgPool, jwt_secret: String) -> AppState {
|
|
AppState {
|
|
users: Arc::new(postgres::user::PgUserRepository::new(pool.clone())),
|
|
thoughts: Arc::new(postgres::thought::PgThoughtRepository::new(pool.clone())),
|
|
likes: Arc::new(postgres::like::PgLikeRepository::new(pool.clone())),
|
|
boosts: Arc::new(postgres::boost::PgBoostRepository::new(pool.clone())),
|
|
follows: Arc::new(postgres::follow::PgFollowRepository::new(pool.clone())),
|
|
blocks: Arc::new(postgres::block::PgBlockRepository::new(pool.clone())),
|
|
tags: Arc::new(postgres::tag::PgTagRepository::new(pool.clone())),
|
|
api_keys: Arc::new(postgres::api_key::PgApiKeyRepository::new(pool.clone())),
|
|
top_friends: Arc::new(postgres::top_friend::PgTopFriendRepository::new(pool.clone())),
|
|
notifications: Arc::new(postgres::notification::PgNotificationRepository::new(pool.clone())),
|
|
remote_actors: Arc::new(postgres::remote_actor::PgRemoteActorRepository::new(pool.clone())),
|
|
feed: Arc::new(postgres::feed::PgFeedRepository::new(pool.clone())),
|
|
auth: Arc::new(auth::JwtAuthService::new(jwt_secret, 86400 * 30)),
|
|
hasher: Arc::new(auth::Argon2PasswordHasher),
|
|
events: Arc::new(NoOpEventPublisher),
|
|
}
|
|
}
|