1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//! Sous-router `/api/v1` — routes MCP read/write + notes sync + jobs F-16.
//!
//! Le routeur est construit via [`router`] et nesté sous `/api/v1` dans
//! `crate::router::build_router`.
//!
//! # Routes Read (T8 P2.0a)
//!
//! | Méthode | Path | Handler |
//! |---------|------|---------|
//! | GET | `/vault_status` | [`handlers::vault_status`] |
//! | GET | `/vault_authors` | [`handlers::vault_authors`] |
//! | GET | `/vault_tags` | [`handlers::vault_tags`] |
//! | POST | `/vault_search` | [`handlers::vault_search`] |
//! | POST | `/vault_read` | [`handlers::vault_read`] |
//! | POST | `/vault_list` | [`handlers::vault_list`] |
//! | POST | `/vault_graph` | [`handlers::vault_graph`] |
//! | POST | `/vault_links` | [`handlers::vault_links`] |
//! | POST | `/vault_trace` | [`handlers::vault_trace`] |
//! | POST | `/vault_context` | [`handlers::vault_context`] |
//!
//! # Routes Write async (T3 P2.0b — async 202 Accepted)
//!
//! | Méthode | Path | Handler |
//! |---------|------|---------|
//! | POST | `/vault_write` | [`write::vault_write`] |
//! | POST | `/vault_classify` | [`write::vault_classify`] |
//!
//! # Routes Notes sync (Phase 2.1.2 alpha.9 — synchrones 200/204)
//!
//! | Méthode | Path | Handler |
//! |---------|------|---------|
//! | POST | `/vault_downgrade` | [`notes::vault_downgrade`] |
//! | PATCH | `/notes/{id}` | [`notes::patch_note`] |
//!
//! # Routes Jobs v1 Poll (T3 P2.0b — handler legacy)
//!
//! | Méthode | Path | Handler |
//! |---------|------|---------|
//! | GET | `/jobs/{id}` | [`jobs::get_job`] (déprécié — utiliser `/jobs/v2/{id}`) |
//!
//! # Routes Jobs F-16 (Phase 3 v0.2.0)
//!
//! | Méthode | Path | Handler |
//! |---------|------|---------|
//! | GET | `/jobs` | [`jobs_v2::list_jobs`] — liste paginée cursor-based |
//! | POST | `/jobs` | [`jobs_v2::create_job`] — création avec Idempotency-Key |
//! | GET | `/jobs/{id}/v2` | [`jobs_v2::get_job_v2`] — détail (fix E-12) |
//! | POST | `/jobs/{id}/cancel` | [`jobs_v2::cancel_job`] — annulation |
//! | GET | `/jobs/{id}/events` | [`jobs_v2::job_events`] — SSE stream |
//!
//! Note : les routes fixes (`/jobs`) sont définies AVANT les routes paramétriques
//! (`/jobs/{id}`). Les sous-routes paramétriques (`/jobs/{id}/cancel`,
//! `/jobs/{id}/events`) respectent l'ordre fixed-before-parametric.
use ;
use crateAppState;
/// Construit et retourne le sous-routeur `/api/v1`.
///
/// Ce routeur est nesté sous `/api/v1` par le routeur principal (`build_router`).
/// L'[`AppState`] est injecté via `Router::with_state`.
///
/// Le [`TrustContext`] est extrait par le middleware `trust_layer` (configuré dans
/// le routeur principal) et disponible via `Extension<TrustContext>` dans chaque handler.
///
/// [`TrustContext`]: gradatum_core::trust::TrustContext