pub mod link_issue_pull; pub mod list_issue_pulls; pub mod unlink_issue_pull; use issues::services::issues::IssuePath; use crate::errors::{ApiError, PullError}; use crate::services::service::PullService; /// 校验空间成员与看板/工单可读性,返回工单与其所属空间。 pub(crate) async fn resolve_issue( service: &PullService, uid: i64, path: &IssuePath, ) -> Result<(uuid::Uuid, uuid::Uuid, uuid::Uuid), ApiError> { let issues = &service.issues; let space = issues::share::lookup::lookup_space_by_name(issues, &path.space_name) .await .map_err(PullError::from)?; issues::share::lookup::require_member(issues, &space, uid) .await .map_err(PullError::from)?; let board = issues::share::lookup::lookup_board(issues, &space, path.board_id, uid) .await .map_err(PullError::from)?; let issue = issues::share::lookup::lookup_issue_by_ref(issues, &board, &path.issue_id) .await .map_err(PullError::from)?; Ok((space.id(), board.id, issue.id)) }