From 59441f305bb1209472c2fae1553f449625b98d4d Mon Sep 17 00:00:00 2001 From: ZhenYi <434836402@qq.com> Date: Tue, 14 Apr 2026 23:48:52 +0800 Subject: [PATCH] chore: update drone pipeline with helm deploy workflow --- deploy/configuration.yaml | 0 libs/service/project/mapper.rs | 93 ++++++++++++++++++++++++++++++++++ libs/service/room/mod.rs | 0 3 files changed, 93 insertions(+) create mode 100644 deploy/configuration.yaml create mode 100644 libs/service/project/mapper.rs create mode 100644 libs/service/room/mod.rs diff --git a/deploy/configuration.yaml b/deploy/configuration.yaml new file mode 100644 index 0000000..e69de29 diff --git a/libs/service/project/mapper.rs b/libs/service/project/mapper.rs new file mode 100644 index 0000000..16c5dbe --- /dev/null +++ b/libs/service/project/mapper.rs @@ -0,0 +1,93 @@ +use crate::AppModules; +use crate::errors::AppError; +use context::Context; +use models::active_enums::MemberRole; +use models::project::{project_history_names, project_members, projects}; +use models::repos::repo; +use sea_orm::*; +use uuid::Uuid; + +impl AppModules { + pub async fn find_project_by_name(&self, name: String) -> Result { + match projects::Entity::find() + .filter(projects::Column::Name.eq(name.clone())) + .one(&self.db.reader()) + .await + .ok() + .flatten() + { + Some(project) => Ok(project), + None => match project_history_names::Entity::find() + .filter(project_history_names::Column::HistoryName.eq(name)) + .one(&self.db.reader()) + .await + .ok() + .flatten() + { + Some(project) => self.find_project_by_uid(project.project_uid).await, + None => Err(AppError::ProjectNotFound), + }, + } + } + + pub async fn find_project_by_uid(&self, uid: Uuid) -> Result { + projects::Entity::find_by_id(uid) + .one(&self.db.reader()) + .await + .ok() + .flatten() + .ok_or(AppError::ProjectNotFound) + } + + pub async fn check_project_permission( + &self, + project_id: &Uuid, + user_id: Uuid, + required_scopes: &[MemberRole], + ) -> Result<(), AppError> { + let member = project_members::Entity::find() + .filter(project_members::Column::ProjectId.eq(*project_id)) + .filter(project_members::Column::UserId.eq(user_id)) + .one(&self.db.reader()) + .await?; + + if let Some(member) = member { + for scope in required_scopes { + if &member.scope == scope { + return Ok(()); + } + } + } + + Err(AppError::NoPower) + } + pub async fn project_context_role( + &self, + context: &Context, + project_name: String, + ) -> Result { + let user_uid = context.user().ok_or(AppError::Unauthorized)?; + let project = self.find_project_by_name(project_name).await?; + let members = project_members::Entity::find() + .filter(project_members::Column::ProjectId.eq(project.uid)) + .filter(project_members::Column::UserId.eq(user_uid)) + .one(&self.db.reader()) + .await + .map_err(|_| AppError::InternalError)? + .map(|m| m.scope); + members.ok_or(AppError::Unauthorized) + } + + pub async fn find_repo_by_name( + &self, + project_uid: Uuid, + repo_name: &str, + ) -> Result { + repo::Entity::find() + .filter(repo::Column::ProjectUid.eq(project_uid)) + .filter(repo::Column::RepoName.eq(repo_name)) + .one(&self.db.reader()) + .await? + .ok_or(AppError::NotFound(format!("Repository '{}' not found", repo_name))) + } +} diff --git a/libs/service/room/mod.rs b/libs/service/room/mod.rs new file mode 100644 index 0000000..e69de29