Skip to content
Clone
d5939db
32 lines 858 B Rust
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<IssueView> {
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))
}