use db::conn::sea_orm::*; use time::OffsetDateTime; use uuid::Uuid; use crate::error::IssueResult; use crate::features::IssueService; use super::super::{CloseIssueOption, IssueView}; use super::helpers::{load_issue, require_authenticated}; pub async fn close_issue( svc: &IssueService, actor: Uuid, channel_id: Uuid, issue_id: Uuid, input: CloseIssueOption, ) -> IssueResult { require_authenticated(actor)?; let cur = load_issue(svc, channel_id, issue_id).await?; let db = svc.db.writer(); let mut active: db::issue::issue::ActiveModel = cur.into(); active.closed_at = Set(if input.closed { Some(OffsetDateTime::now_utc()) } else { None }); active.updated_at = Set(Some(OffsetDateTime::now_utc())); let saved = active.update(&db).await?; Ok(IssueView::from(saved)) }