use axum::{extract::DefaultBodyLimit, middleware, routing::get, Router};
use crate::client_server::{
cache_policy::private_cache_policy, middleware::storage_metrics, AppState,
};
use crate::observability::Metrics;
pub mod read;
pub mod write;
pub fn router(metrics: Metrics) -> Router<AppState> {
Router::new()
.route(
"/storage/{user_z32}/{*path}",
get(read::get)
.head(read::head)
.put(write::put)
.delete(write::delete),
)
.route(
"/{*path}",
get(read::legacy_get)
.head(read::legacy_head)
.put(write::legacy_put)
.delete(write::legacy_delete),
)
.layer(DefaultBodyLimit::max(100 * 1024 * 1024))
.layer(middleware::from_fn(private_cache_policy))
.layer(middleware::from_fn_with_state(
metrics,
storage_metrics::record_request,
))
}