Skip to content
Clone

feat(issues): add label usecase list_for_issue

zhenyi committed
parent b122e3b commit 6fafdb4 Browse files

1 file changed

+36 −0

Added lib/issues/features/label/usecase/list_for_issue.rs View lib/issues/features/label/usecase/list_for_issue.rs
@@ -0,0 +1,36 @@
1use db::conn::sea_orm::*;
2use db::issue::issue_label as label_entity;
3use db::issue::issue_relation_label as rel_entity;
4use uuid::Uuid;
5
6use crate::error::IssueResult;
7use crate::features::IssueService;
8use crate::features::issue::usecase::load_issue;
9
10use super::helpers::require_authenticated;
11use super::super::types::LabelView;
12
13pub async fn list_labels_for_issue(
14 svc: &IssueService,
15 actor: Uuid,
16 channel_id: Uuid,
17 issue_id: Uuid,
18) -> IssueResult<Vec<LabelView>> {
19 require_authenticated(actor)?;
20 let _issue = load_issue(svc, channel_id, issue_id).await?;
21
22 let db = svc.db.reader();
23 let rels = rel_entity::Entity::find()
24 .filter(rel_entity::COLUMN.issue_id.eq(issue_id))
25 .all(&db)
26 .await?;
27 let label_ids: Vec<Uuid> = rels.into_iter().map(|r| r.label_id).collect();
28 if label_ids.is_empty() {
29 return Ok(Vec::new());
30 }
31 let labels = label_entity::Entity::find()
32 .filter(label_entity::COLUMN.id.is_in(label_ids))
33 .all(&db)
34 .await?;
35 Ok(labels.into_iter().map(LabelView::from).collect())
36}
No newline at end of file