use db::conn::sea_orm::*; use uuid::Uuid; use crate::error::{IssueError, IssueResult}; use crate::features::IssueService; use crate::metrics; use super::helpers::{load_comment, require_authenticated}; pub async fn delete_comment( svc: &IssueService, actor: Uuid, channel_id: Uuid, issue_id: Uuid, comment_id: Uuid, ) -> IssueResult<()> { let _timer = metrics::Timer::start(metrics::FEATURE_COMMENTS_DELETE); let result: IssueResult<()> = async { require_authenticated(actor)?; let cur = load_comment(svc, channel_id, issue_id, comment_id).await?; if cur.poster_id != actor { return Err(IssueError::Forbidden( "only the poster can delete the comment".into(), )); } let db = svc.db.writer(); let active: db::issue::comment::ActiveModel = cur.into(); active.delete(&db).await?; Ok(()) } .await; metrics::record_outcome(metrics::FEATURE_COMMENTS_DELETE, &result); result }