feat(project): add project route registration
zhenyi committed
Added lib/project/handler/routes.rs lib/project/handler/routes.rs +81 −0 View lib/project/handler/routes.rs
@@ -0,0 +1,81 @@
1use axum::Router;
2use axum::middleware::from_fn_with_state;
3use axum::routing::{delete, get, post};
4
5use crate::features::ProjectService;
6use jwt::inject_jwt_ctx;
7use rate_limit::ratelimit;
8
9pub fn router(svc: ProjectService) -> Router {
10 let protected: Router<ProjectService> = Router::new()
11 .route(
12 "/spaces/:space_id/projects",
13 post(super::lifecycle::create::handler).get(super::lifecycle::list::handler),
14 )
15 .route(
16 "/spaces/:space_id/projects/:project_id",
17 get(super::lifecycle::get::handler)
18 .patch(super::lifecycle::update::handler)
19 .delete(super::lifecycle::delete::handler),
20 )
21 .route(
22 "/spaces/:space_id/projects/:project_id/members",
23 post(super::members::add::handler).get(super::members::list::handler),
24 )
25 .route(
26 "/spaces/:space_id/projects/:project_id/members/:user_id",
27 get(super::members::get::handler)
28 .patch(super::members::update::handler)
29 .delete(super::members::remove::handler),
30 )
31 .route(
32 "/spaces/:space_id/projects/:project_id/views",
33 post(super::views::create::handler).get(super::views::list::handler),
34 )
35 .route(
36 "/spaces/:space_id/projects/:project_id/views/:view_id",
37 get(super::views::get::handler)
38 .patch(super::views::update::handler)
39 .delete(super::views::delete::handler),
40 )
41 .route(
42 "/spaces/:space_id/projects/:project_id/documents",
43 post(super::documents::create::handler).get(super::documents::list::handler),
44 )
45 .route(
46 "/spaces/:space_id/projects/:project_id/documents/:doc_id",
47 get(super::documents::get::handler)
48 .patch(super::documents::update::handler)
49 .delete(super::documents::delete::handler),
50 )
51 .route(
52 "/spaces/:space_id/projects/:project_id/links",
53 post(super::links::add::handler).get(super::links::list::handler),
54 )
55 .route(
56 "/spaces/:space_id/projects/:project_id/links/:link_id",
57 delete(super::links::remove::handler),
58 )
59 .route(
60 "/spaces/:space_id/projects/:project_id/favorites",
61 post(super::favorites::add::handler).get(super::favorites::list::handler),
62 )
63 .route(
64 "/spaces/:space_id/projects/:project_id/favorites/:favorite_id",
65 delete(super::favorites::remove::handler),
66 )
67 .route(
68 "/spaces/:space_id/projects/:project_id/activities",
69 get(super::activities::list::handler),
70 );
71
72 let protected = protected.layer(from_fn_with_state(
73 svc.clone(),
74 inject_jwt_ctx::<ProjectService>,
75 ));
76
77 Router::new()
78 .merge(protected)
79 .layer(from_fn_with_state(svc.clone(), ratelimit::<ProjectService>))
80 .with_state(svc)
81}
No newline at end of file