a06673b
use db::conn::sea_orm::*;
use db::issue::issue_member as member_entity;
use db::issue::issue_member::IssueMemberKind;
use uuid::Uuid;
use crate::error::{IssueError, IssueResult};
use crate::features::IssueService;
pub fn require_authenticated(actor: Uuid) -> IssueResult<()> {
if actor.is_nil() {
return Err(IssueError::Unauthorized("authentication required".into()));
}
Ok(())
}
pub fn parse_kind(s: &str) -> IssueResult<IssueMemberKind> {
Ok(match s {
"assignee" | "Assignee" => IssueMemberKind::Assignee,
"watcher" | "Watcher" => IssueMemberKind::Watcher,
"mentioned" | "Mentioned" => IssueMemberKind::Mentioned,
"participant" | "Participant" => IssueMemberKind::Participant,
other => {
return Err(IssueError::BadRequest(format!(
"invalid member kind: {other}"
)));
}
})
}
pub async fn load_member(
svc: &IssueService,
member_id: Uuid,
) -> IssueResult<member_entity::Model> {
let db = svc.db.reader();
let m = member_entity::Entity::find_by_id(member_id)
.one(&db)
.await?
.ok_or_else(|| IssueError::NotFound(format!("member {member_id}")))?;
Ok(m)
}