Skip to content
Clone
a06673b
162 lines 6.2 KB Rust
use axum::Router;
use axum::middleware::from_fn_with_state;
use axum::routing::{delete, get, patch, post};
use crate::features::IssueService;
use jwt::inject_jwt_ctx;
use rate_limit::ratelimit;
pub fn router(svc: IssueService) -> Router {
let protected: Router<IssueService> = Router::new()
.route("/issues", post(super::issues::create::handler))
.route("/issues", get(super::issues::list::handler))
.route("/issues/:channel_id", get(super::issues::get::handler))
.route("/issues/:channel_id", patch(super::issues::update::handler))
.route("/issues/:channel_id", delete(super::issues::delete::handler))
.route("/issues/:channel_id", post(super::issue::create::handler))
.route(
"/issues/:channel_id/:issue_id",
get(super::issue::get::handler)
.patch(super::issue::update::handler)
.delete(super::issue::delete::handler),
)
.route(
"/issues/:channel_id/:issue_id/close",
post(super::issue::close::handler),
)
.route(
"/issues/:channel_id/:issue_id/comments",
get(super::comment::list::handler).post(super::comment::create::handler),
)
.route(
"/issues/:channel_id/:issue_id/comments/:comment_id",
get(super::comment::get::handler)
.patch(super::comment::update::handler)
.delete(super::comment::delete::handler),
)
.route(
"/issues/:channel_id/labels",
get(super::label::list::handler).post(super::label::create::handler),
)
.route(
"/issues/:channel_id/:issue_id/labels",
get(super::label::list_for_issue::handler),
)
.route(
"/issues/:channel_id/:issue_id/labels/:label_id",
post(super::label::bind::handler).delete(super::label::unbind::handler),
)
.route(
"/issues/:channel_id/labels/:label_id",
get(super::label::get::handler)
.patch(super::label::update::handler)
.delete(super::label::delete::handler),
)
.route(
"/issues/:channel_id/milestones",
get(super::milestone::list::handler).post(super::milestone::create::handler),
)
.route(
"/issues/:channel_id/milestones/:milestone_id",
get(super::milestone::get::handler)
.patch(super::milestone::update::handler)
.delete(super::milestone::delete::handler),
)
.route(
"/issues/:channel_id/:issue_id/reactions",
post(super::issue_reaction::create::handler)
.get(super::issue_reaction::list::handler),
)
.route(
"/issues/:channel_id/:issue_id/comments/:comment_id/reactions",
post(super::issue_reaction::create_comment::handler)
.get(super::issue_reaction::list_comment::handler),
)
.route(
"/issues/:channel_id/:issue_id/reactions/:reaction_id",
delete(super::issue_reaction::delete::handler),
)
.route(
"/issues/:channel_id/:issue_id/watch",
get(super::issue_watch::get::handler)
.put(super::issue_watch::upsert::handler)
.delete(super::issue_watch::delete::handler),
)
.route(
"/issues/:channel_id/:issue_id/members",
get(super::issue_member::list::handler).post(super::issue_member::create::handler),
)
.route(
"/issues/:channel_id/:issue_id/members/:member_id",
delete(super::issue_member::delete::handler),
)
.route(
"/issues/:channel_id/pins",
get(super::issue_pin::list::handler).post(super::issue_pin::create::handler),
)
.route(
"/issues/:channel_id/pins/:pin_id",
delete(super::issue_pin::delete::handler),
)
.route(
"/issues/:channel_id/:issue_id/repo_relations",
get(super::issue_repo_rel::list::handler).post(super::issue_repo_rel::create::handler),
)
.route(
"/issues/:channel_id/:issue_id/repo_relations/:rel_id",
delete(super::issue_repo_rel::delete::handler),
)
.route(
"/issues/:channel_id/:issue_id/users",
get(super::issue_user::list::handler),
)
.route(
"/issues/:channel_id/:issue_id/users/:uid",
patch(super::issue_user::update::handler),
)
.route(
"/issues/:channel_id/:issue_id/events",
get(super::issue_event::list::handler),
)
.route(
"/issues/:channel_id/:issue_id/dependencies",
get(super::issue_dependency::list::handler)
.post(super::issue_dependency::create::handler),
)
.route(
"/issues/:channel_id/:issue_id/dependencies/:dep_id",
delete(super::issue_dependency::delete::handler),
)
.route(
"/issues/:channel_id/:issue_id/content_history",
get(super::issue_content_history::list::handler),
)
.route(
"/issues/:channel_id/:issue_id/stopwatch",
get(super::issue_stopwatch::get::handler)
.post(super::issue_stopwatch::start::handler)
.delete(super::issue_stopwatch::stop::handler),
)
.route(
"/issues/:channel_id/:issue_id/tracked_time",
get(super::issue_tracked_time::list::handler),
)
.route(
"/issues/:channel_id/attachments/:owner_type/:owner_id",
post(super::issue_attachment::upload::handler)
.get(super::issue_attachment::list::handler),
)
.route(
"/issues/:channel_id/attachments/:owner_type/:owner_id/:att_id",
delete(super::issue_attachment::delete::handler),
)
.layer(from_fn_with_state(
svc.clone(),
inject_jwt_ctx::<IssueService>,
));
Router::new()
.merge(protected)
.layer(from_fn_with_state(svc.clone(), ratelimit::<IssueService>))
.with_state(svc)
}