puerto 0.7.1

Puerto — Rust full-stack DDD framework CLI. Scaffolds Clean Architecture projects with auto-wired DI, SQLx support, and zero manual wiring. Formerly puerto-framework.
// AUTO-GENERATED by puerto. Edit puerto.toml, then run `puerto generate bootstrap`.
use std::sync::Arc;

use business::application::greeting::get_greeting::GetGreetingUseCaseImpl;

use infrastructure::greeting::repository::InMemoryGreetingRepository;
use infrastructure::logger::TracingLogger;
use business::domain::logger::LoggerTrait;

use poem::{EndpointExt, Route, middleware::Tracing};
use poem_openapi::OpenApiService;

use crate::api::greeting::routes::GreetingApi;

pub async fn build_app() -> impl poem::Endpoint {
    let logger: Arc<dyn LoggerTrait> = Arc::new(TracingLogger);

    let get_greeting = Arc::new(GetGreetingUseCaseImpl {
        repository: Arc::new(InMemoryGreetingRepository::new(Arc::clone(&logger))),
        logger: Arc::clone(&logger),
    });
    let greeting_api = GreetingApi { get_greeting, logger: Arc::clone(&logger) };

    let api_service = OpenApiService::new(
        greeting_api,
        env!("CARGO_PKG_NAME"),
        env!("CARGO_PKG_VERSION"),
    )
    .server("http://localhost:8080/api");
    let ui = api_service.swagger_ui();

    Route::new().nest("/api", api_service).nest("/", ui).with(Tracing)
}