feat(issues): add issue list handler
zhenyi committed
Added lib/issues/handler/issue/list.rs lib/issues/handler/issue/list.rs +34 −0 View lib/issues/handler/issue/list.rs
@@ -0,0 +1,34 @@
1use axum::extract::{Path, Query, State};
2use export::data::AppResponseData;
3use jwt::extractor::AuthUser;
4use uuid::Uuid;
5
6use crate::error::IssueResult;
7use crate::features::IssueService;
8use crate::features::issue::{IssuePage, ListIssueQuery};
9
10#[utoipa::path(
11 get,
12 path = "/issues/{space_name}/{issues_id}",
13 tag = "issues",
14 params(
15 ("space_name" = String, Path),
16 ("issues_id" = Uuid, Path, description = "Board (issues collection) id"),
17 ListIssueQuery,
18 ),
19 responses((status = 200, description = "List issues in this board", body = AppResponseData<IssuePage>)),
20 security(("bearer_auth" = []))
21)]
22pub(crate) async fn handler(
23 State(svc): State<IssueService>,
24 AuthUser { claims }: AuthUser,
25 Path((space_name, issues_id)): Path<(String, Uuid)>,
26 Query(q): Query<ListIssueQuery>,
27) -> IssueResult<AppResponseData<IssuePage>> {
28 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
29 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
30 let channel_id =
31 crate::features::lookup::channel_for_collection(&svc, space_id, issues_id).await?;
32 let page = svc.list_issues(claims.sub, channel_id, q).await?;
33 Ok(AppResponseData::ok(page))
34}