feat(issues): add label usecase unbind
zhenyi committed
Added lib/issues/features/label/usecase/unbind.rs lib/issues/features/label/usecase/unbind.rs +34 −0 View lib/issues/features/label/usecase/unbind.rs
@@ -0,0 +1,34 @@
1use db::conn::sea_orm::*;
2use db::issue::issue_relation_label as rel_entity;
3use uuid::Uuid;
4
5use crate::error::{IssueError, IssueResult};
6use crate::features::IssueService;
7use crate::features::issue::usecase::load_issue;
8
9use super::helpers::require_authenticated;
10
11pub async fn unbind_label_from_issue(
12 svc: &IssueService,
13 actor: Uuid,
14 channel_id: Uuid,
15 issue_id: Uuid,
16 label_id: Uuid,
17) -> IssueResult<()> {
18 require_authenticated(actor)?;
19 let _issue = load_issue(svc, channel_id, issue_id).await?;
20
21 let db = svc.db.writer();
22 let rel = rel_entity::Entity::find()
23 .filter(rel_entity::COLUMN.issue_id.eq(issue_id))
24 .filter(rel_entity::COLUMN.label_id.eq(label_id))
25 .one(&db)
26 .await?
27 .ok_or_else(|| {
28 IssueError::NotFound(format!(
29 "label {label_id} not bound to issue {issue_id}"
30 ))
31 })?;
32 rel.delete(&db).await?;
33 Ok(())
34}
No newline at end of file