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 { 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 { 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) }