use crate::handlers::basic::{health_handler, root_handler};
use crate::handlers::v1::buffers::{
create_buffer, delete_buffer, get_buffer, list_buffers, send_examples, train_buffer,
update_buffer,
};
use crate::handlers::v1::humans::{
create_human, delete_human, get_human, list_humans, record_human_response,
request_human_feedback,
};
use crate::handlers::v1::llms::{
chat_llm, create_llm, delete_llm, get_llm, learn_llm, list_llms, patch_llm, train_llm,
};
use crate::middleware::auth_middleware;
use crate::state::AppState;
use axum::{middleware, 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))
.route("/v1/llms", get(list_llms).post(create_llm))
.route(
"/v1/llms/:namespace/:name",
get(get_llm).delete(delete_llm).patch(patch_llm),
)
.route("/v1/llms/:namespace/:name/chat", post(chat_llm))
.route("/v1/llms/:namespace/:name/learn", post(learn_llm))
.route("/v1/llms/:namespace/:name/train", post(train_llm))
.route("/v1/humans", get(list_humans).post(create_human))
.route(
"/v1/humans/:namespace/:name",
get(get_human).delete(delete_human),
)
.route(
"/v1/humans/:namespace/:name/feedback",
post(request_human_feedback),
)
.route(
"/v1/humans/:namespace/:name/feedback/:id",
post(record_human_response),
)
.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)),
)
}