Skip to content
Clone
a06673b
34 lines 952 B Rust
use db::conn::sea_orm::*;
use db::issue::issue_relation_label as rel_entity;
use uuid::Uuid;
use crate::error::{IssueError, IssueResult};
use crate::features::IssueService;
use crate::features::issue::usecase::load_issue;
use super::helpers::require_authenticated;
pub async fn unbind_label_from_issue(
svc: &IssueService,
actor: Uuid,
channel_id: Uuid,
issue_id: Uuid,
label_id: Uuid,
) -> IssueResult<()> {
require_authenticated(actor)?;
let _issue = load_issue(svc, channel_id, issue_id).await?;
let db = svc.db.writer();
let rel = rel_entity::Entity::find()
.filter(rel_entity::COLUMN.issue_id.eq(issue_id))
.filter(rel_entity::COLUMN.label_id.eq(label_id))
.one(&db)
.await?
.ok_or_else(|| {
IssueError::NotFound(format!(
"label {label_id} not bound to issue {issue_id}"
))
})?;
rel.delete(&db).await?;
Ok(())
}