feat(issues): add issues route registration
zhenyi committed
Added lib/issues/handler/routes.rs lib/issues/handler/routes.rs +162 −0 View lib/issues/handler/routes.rs
@@ -0,0 +1,162 @@
1use axum::Router;
2use axum::middleware::from_fn_with_state;
3use axum::routing::{delete, get, patch, post};
4
5use crate::features::IssueService;
6use jwt::inject_jwt_ctx;
7use rate_limit::ratelimit;
8
9pub fn router(svc: IssueService) -> Router {
10 let protected: Router<IssueService> = Router::new()
11 .route("/issues", post(super::issues::create::handler))
12 .route("/issues", get(super::issues::list::handler))
13 .route("/issues/:channel_id", get(super::issues::get::handler))
14 .route("/issues/:channel_id", patch(super::issues::update::handler))
15 .route("/issues/:channel_id", delete(super::issues::delete::handler))
16 .route("/issues/:channel_id", post(super::issue::create::handler))
17 .route(
18 "/issues/:channel_id/:issue_id",
19 get(super::issue::get::handler)
20 .patch(super::issue::update::handler)
21 .delete(super::issue::delete::handler),
22 )
23 .route(
24 "/issues/:channel_id/:issue_id/close",
25 post(super::issue::close::handler),
26 )
27 .route(
28 "/issues/:channel_id/:issue_id/comments",
29 get(super::comment::list::handler).post(super::comment::create::handler),
30 )
31 .route(
32 "/issues/:channel_id/:issue_id/comments/:comment_id",
33 get(super::comment::get::handler)
34 .patch(super::comment::update::handler)
35 .delete(super::comment::delete::handler),
36 )
37 .route(
38 "/issues/:channel_id/labels",
39 get(super::label::list::handler).post(super::label::create::handler),
40 )
41 .route(
42 "/issues/:channel_id/:issue_id/labels",
43 get(super::label::list_for_issue::handler),
44 )
45 .route(
46 "/issues/:channel_id/:issue_id/labels/:label_id",
47 post(super::label::bind::handler).delete(super::label::unbind::handler),
48 )
49 .route(
50 "/issues/:channel_id/labels/:label_id",
51 get(super::label::get::handler)
52 .patch(super::label::update::handler)
53 .delete(super::label::delete::handler),
54 )
55 .route(
56 "/issues/:channel_id/milestones",
57 get(super::milestone::list::handler).post(super::milestone::create::handler),
58 )
59 .route(
60 "/issues/:channel_id/milestones/:milestone_id",
61 get(super::milestone::get::handler)
62 .patch(super::milestone::update::handler)
63 .delete(super::milestone::delete::handler),
64 )
65 .route(
66 "/issues/:channel_id/:issue_id/reactions",
67 post(super::issue_reaction::create::handler)
68 .get(super::issue_reaction::list::handler),
69 )
70 .route(
71 "/issues/:channel_id/:issue_id/comments/:comment_id/reactions",
72 post(super::issue_reaction::create_comment::handler)
73 .get(super::issue_reaction::list_comment::handler),
74 )
75 .route(
76 "/issues/:channel_id/:issue_id/reactions/:reaction_id",
77 delete(super::issue_reaction::delete::handler),
78 )
79 .route(
80 "/issues/:channel_id/:issue_id/watch",
81 get(super::issue_watch::get::handler)
82 .put(super::issue_watch::upsert::handler)
83 .delete(super::issue_watch::delete::handler),
84 )
85 .route(
86 "/issues/:channel_id/:issue_id/members",
87 get(super::issue_member::list::handler).post(super::issue_member::create::handler),
88 )
89 .route(
90 "/issues/:channel_id/:issue_id/members/:member_id",
91 delete(super::issue_member::delete::handler),
92 )
93 .route(
94 "/issues/:channel_id/pins",
95 get(super::issue_pin::list::handler).post(super::issue_pin::create::handler),
96 )
97 .route(
98 "/issues/:channel_id/pins/:pin_id",
99 delete(super::issue_pin::delete::handler),
100 )
101 .route(
102 "/issues/:channel_id/:issue_id/repo_relations",
103 get(super::issue_repo_rel::list::handler).post(super::issue_repo_rel::create::handler),
104 )
105 .route(
106 "/issues/:channel_id/:issue_id/repo_relations/:rel_id",
107 delete(super::issue_repo_rel::delete::handler),
108 )
109 .route(
110 "/issues/:channel_id/:issue_id/users",
111 get(super::issue_user::list::handler),
112 )
113 .route(
114 "/issues/:channel_id/:issue_id/users/:uid",
115 patch(super::issue_user::update::handler),
116 )
117 .route(
118 "/issues/:channel_id/:issue_id/events",
119 get(super::issue_event::list::handler),
120 )
121 .route(
122 "/issues/:channel_id/:issue_id/dependencies",
123 get(super::issue_dependency::list::handler)
124 .post(super::issue_dependency::create::handler),
125 )
126 .route(
127 "/issues/:channel_id/:issue_id/dependencies/:dep_id",
128 delete(super::issue_dependency::delete::handler),
129 )
130 .route(
131 "/issues/:channel_id/:issue_id/content_history",
132 get(super::issue_content_history::list::handler),
133 )
134 .route(
135 "/issues/:channel_id/:issue_id/stopwatch",
136 get(super::issue_stopwatch::get::handler)
137 .post(super::issue_stopwatch::start::handler)
138 .delete(super::issue_stopwatch::stop::handler),
139 )
140 .route(
141 "/issues/:channel_id/:issue_id/tracked_time",
142 get(super::issue_tracked_time::list::handler),
143 )
144 .route(
145 "/issues/:channel_id/attachments/:owner_type/:owner_id",
146 post(super::issue_attachment::upload::handler)
147 .get(super::issue_attachment::list::handler),
148 )
149 .route(
150 "/issues/:channel_id/attachments/:owner_type/:owner_id/:att_id",
151 delete(super::issue_attachment::delete::handler),
152 )
153 .layer(from_fn_with_state(
154 svc.clone(),
155 inject_jwt_ctx::<IssueService>,
156 ));
157
158 Router::new()
159 .merge(protected)
160 .layer(from_fn_with_state(svc.clone(), ratelimit::<IssueService>))
161 .with_state(svc)
162}
No newline at end of file