Skip to main content

mneme/http/
router.rs

1use std::sync::Arc;
2
3use axum::routing::{delete, get, post, put};
4use axum::{Extension, Router};
5use tower_http::cors::CorsLayer;
6use tower_http::trace::TraceLayer;
7
8use crate::config::settings::Settings;
9use crate::http::handlers;
10use crate::store::db::Database;
11
12/// Crea el router HTTP para la API REST.
13pub fn create_router(
14    db: Arc<Database>,
15    embeddings: Option<Arc<crate::embeddings::engine::EmbeddingEngine>>,
16) -> Router {
17    Router::new()
18        .route("/", get(handlers::dashboard))
19        .route("/favicon.ico", get(handlers::favicon))
20        .route("/health", get(handlers::health))
21        .route("/api/v1/memories", get(handlers::list_memories))
22        .route("/api/v1/memories", post(handlers::create_memory))
23        .route("/api/v1/memories/search", post(handlers::search_memories))
24        .route("/api/v1/memories/similar", post(handlers::similar_memories))
25        .route("/api/v1/memories/:id", get(handlers::get_memory))
26        .route("/api/v1/memories/:id", put(handlers::update_memory))
27        .route("/api/v1/memories/:id", delete(handlers::delete_memory))
28        .route(
29            "/api/v1/memories/:id/relations",
30            get(handlers::get_relations),
31        )
32        .route(
33            "/api/v1/memories/:id/relations",
34            post(handlers::create_relation),
35        )
36        .route(
37            "/api/v1/relations/:relation_id",
38            delete(handlers::delete_relation),
39        )
40        .route("/api/v1/stats", get(handlers::get_stats))
41        .route("/api/v1/projects", get(handlers::list_projects))
42        .route("/api/v1/sessions/start", post(handlers::start_session))
43        .route("/api/v1/sessions/:id/end", post(handlers::end_session))
44        .route("/api/v1/sessions/active", get(handlers::get_active_session))
45        .route("/api/v1/context", get(handlers::get_context))
46        .route("/api/v1/export", get(handlers::export_memories))
47        .route("/api/v1/import", post(handlers::import_memories))
48        .route("/api/v1/doctor", get(handlers::run_doctor))
49        .route(
50            "/api/v1/embeddings/reindex",
51            post(handlers::reindex_embeddings),
52        )
53        .route("/api/v1/memories/batch", post(handlers::batch_save))
54        .route("/api/v1/audit", get(handlers::get_audit))
55        .route("/api/v1/deduplicate", post(handlers::deduplicate))
56        .route("/api/v1/feedback", post(handlers::add_feedback))
57        .route("/api/v1/deprecate", post(handlers::deprecate))
58        .route("/api/v1/graph", get(handlers::get_graph))
59        .route("/api/v1/summarize", get(handlers::get_summarize))
60        .route("/api/v1/inject-context", get(handlers::inject_context))
61        .route("/api/v1/forget-project", post(handlers::forget_project))
62        .route("/api/v1/health", get(handlers::get_health))
63        .route("/api/v1/remind", get(handlers::get_remind))
64        .route("/api/v1/tag-suggest", post(handlers::tag_suggest))
65        .route("/api/v1/knowledge-gaps", get(handlers::get_knowledge_gaps))
66        .route(
67            "/api/v1/memories/:id/encrypt",
68            post(handlers::encrypt_memory),
69        )
70        .route(
71            "/api/v1/memories/:id/decrypt",
72            post(handlers::decrypt_memory),
73        )
74        .route("/api/v1/keys", get(handlers::list_keys))
75        .route("/api/v1/keys", post(handlers::add_key))
76        .route("/api/v1/keys/:id", delete(handlers::remove_key))
77        .route("/api/v1/keys/status", get(handlers::keys_status))
78        .route("/api/v1/sync/hello", post(handlers::sync_hello))
79        .route("/api/v1/sync/pull", post(handlers::sync_pull))
80        .route("/api/v1/sync/push", post(handlers::sync_push))
81        .route("/api/v1/cloud/enroll", post(handlers::cloud_enroll))
82        .route("/api/v1/cloud/sync", post(handlers::cloud_sync))
83        .route("/api/v1/cloud/status", get(handlers::cloud_status))
84        .layer(Extension(embeddings))
85        .layer(Extension(Arc::new(Settings::load().unwrap_or_default())))
86        .layer(CorsLayer::permissive())
87        .layer(TraceLayer::new_for_http())
88        .with_state(db)
89}