use crate::middleware::auth_middleware;
use crate::state::AppState;
use crate::handlers::v1::buffers::{
create_buffer, delete_buffer, get_buffer,
list_buffers, send_examples, train_buffer, update_buffer,
};
use crate::handlers::basic::{health_handler, root_handler};
use axum::{middleware, routing::delete, routing::get, routing::post, Router};
use tower_http::trace::{self, TraceLayer};
use tracing::Level;
pub fn create_routes(app_state: AppState) -> Router<AppState> {
let public_routes = Router::new()
.route("/", get(root_handler))
.route("/health", get(health_handler));
let private_routes = Router::new()
.route("/v1/buffers", get(list_buffers).post(create_buffer))
.route(
"/v1/buffers/:namespace/:name",
get(get_buffer).delete(delete_buffer).patch(update_buffer),
)
.route("/v1/buffers/:namespace/:name/examples", post(send_examples))
.route("/v1/buffers/:namespace/:name/train", post(train_buffer))
.layer(middleware::from_fn_with_state(
app_state.clone(),
auth_middleware,
));
public_routes.merge(private_routes).layer(
TraceLayer::new_for_http()
.make_span_with(trace::DefaultMakeSpan::new().level(Level::INFO))
.on_response(trace::DefaultOnResponse::new().level(Level::INFO)),
)
}