potree-auth 0.1.0

Authentication and project management for `potree` point clouds.
Documentation
use std::path::PathBuf;
use std::sync::LazyLock;

use axum::Extension;
use axum::Router;
use axum::routing::get;
use web_route::ParameterizedRoute;

use super::super::application::service::ProjectAssetService;
use super::route_handlers;
use super::state::State;
use crate::project::domain::ProjectId;
use crate::project_asset::http::middleware::set_cache_control::set_cache_control;

pub static ASSET_PATH: LazyLock<ParameterizedRoute> =
    LazyLock::new(|| ParameterizedRoute::new("/{project_id}/{*path}"));

#[derive(serde::Deserialize)]
pub(crate) struct AssetPathParams {
    pub project_id: ProjectId,
    pub path: PathBuf,
}

pub fn build_router(project_asset_service: ProjectAssetService) -> Router {
    let state = State {
        project_asset_service,
    };

    Router::new()
        .route(
            &ASSET_PATH,
            get(route_handlers::project_asset).layer(set_cache_control()),
        )
        .layer(Extension(state))
}