Skip to content
Clone
a06673b
35 lines 1.0 KB Rust
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<MemberView> {
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))
}