use db::conn::sea_orm::*; use db::issue::issue_member as member_entity; use time::OffsetDateTime; use uuid::Uuid; use crate::error::{IssueResult}; use crate::features::IssueService; use super::super::{CreateMemberOption, MemberView}; use super::helpers::{parse_kind, require_authenticated}; pub async fn create_member( svc: &IssueService, actor: Uuid, channel_id: Uuid, issue_id: Uuid, input: CreateMemberOption, ) -> IssueResult { require_authenticated(actor)?; crate::features::issue::usecase::load_issue(svc, channel_id, issue_id).await?; let kind = parse_kind(&input.kind)?; let db = svc.db.writer(); let now = OffsetDateTime::now_utc(); let id = Uuid::new_v4(); let active: member_entity::ActiveModel = member_entity::ActiveModel::builder() .set_id(id) .set_issue_id(issue_id) .set_user_id(input.user_id) .set_kind(kind) .set_created_at(now) .set_updated_at(None) .into(); let saved = active.insert(&db).await?; Ok(MemberView::from(saved)) }