Skip to main content

mentedb_server/
routes.rs

1//! Route definitions for the MenteDB REST API.
2
3use std::sync::Arc;
4
5use axum::Router;
6use axum::routing::{delete, get, post};
7
8use crate::handlers;
9use crate::hosting;
10use crate::state::AppState;
11use crate::websocket;
12
13/// Routes that act on one database. Mounted twice: under `/v1` for the
14/// default database and under `/v1/db/{db}` for a named one.
15fn database_routes() -> Router<Arc<AppState>> {
16    Router::new()
17        .route(
18            "/memories",
19            post(handlers::store_memory).get(hosting::list_memories),
20        )
21        .route(
22            "/memories/{id}",
23            get(handlers::get_memory)
24                .delete(handlers::forget_memory)
25                .patch(hosting::patch_memory),
26        )
27        .route("/recall", post(handlers::recall_memories))
28        .route("/search", post(handlers::search_similar))
29        .route("/edges", post(handlers::create_edge))
30        .route("/stats", get(handlers::stats))
31        .route("/ingest", post(handlers::ingest_conversation))
32        .route("/process_turn", post(handlers::process_turn))
33        .route("/admin/memories", get(handlers::admin_list_memories))
34        .route(
35            "/admin/memories/{id}",
36            delete(handlers::admin_delete_memory),
37        )
38        .route("/admin/mql", post(handlers::admin_run_mql))
39        .merge(crate::handlers_memory::routes())
40        .merge(crate::handlers_ops::routes())
41        .merge(hosting::routes())
42}
43
44/// Build the complete axum router with all v1 API routes.
45pub fn build_router(state: Arc<AppState>) -> Router {
46    Router::new()
47        .route("/v1/health", get(handlers::health))
48        .route("/v1/auth/token", post(crate::auth::generate_token))
49        .route(
50            "/v1/spaces",
51            post(handlers::create_space).get(handlers::list_spaces),
52        )
53        .route("/v1/spaces/{id}/grant", post(handlers::grant_space_access))
54        .route("/v1/ws/stream", get(websocket::ws_handler))
55        .route(
56            crate::cluster::GOSSIP_PATH,
57            post(crate::cluster::gossip_handler),
58        )
59        .route("/metrics", get(crate::metrics::handler))
60        .route("/console", get(crate::console::handler))
61        .merge(crate::handlers_ops::global_routes())
62        .merge(hosting::global_routes())
63        .nest("/v1", database_routes())
64        .nest("/v1/db/{db}", database_routes())
65        .with_state(state)
66}