a06673b
use db::attachment::attachments::OwnerType;
use db::conn::sea_orm::*;
use object_store::path::Path;
use uuid::Uuid;
use crate::error::IssueResult;
use crate::features::IssueService;
use super::helpers::{load_attachment, require_authenticated};
pub async fn delete_attachment(
svc: &IssueService,
actor: Uuid,
channel_id: Uuid,
owner_type: OwnerType,
owner_id: Uuid,
att_id: Uuid,
) -> IssueResult<()> {
require_authenticated(actor)?;
crate::features::issue::usecase::load_issue(svc, channel_id, owner_id).await?;
let cur = load_attachment(svc, owner_type, owner_id, att_id).await?;
let obj_path = Path::parse(cur.url.clone()).map_err(|e| {
crate::error::IssueError::Internal(format!("invalid stored path {}: {e}", cur.url))
})?;
let _ = svc.storage.delete(&obj_path).await;
let db = svc.db.writer();
let active: db::attachment::attachments::ActiveModel = cur.into();
active.delete(&db).await?;
Ok(())
}