gitdataai/libs/service/project/can_use.rs
2026-04-14 19:02:01 +08:00

43 lines
1.4 KiB
Rust

use crate::AppService;
use crate::error::AppError;
use models::projects::{project, project_members};
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter};
use serde::{Deserialize, Serialize};
use session::Session;
use utoipa::ToSchema;
use uuid::Uuid;
#[derive(Deserialize, Serialize, Debug, ToSchema)]
pub struct CanUseProjectItem {
pub name: String,
pub avatar_url: Option<String>,
pub display_name: String,
pub uid: Uuid,
pub is_public: bool,
}
impl AppService {
pub async fn can_use_project(&self, ctx: &Session) -> Result<Vec<CanUseProjectItem>, AppError> {
let user_uid = ctx.user().ok_or(AppError::Unauthorized)?;
let member = project_members::Entity::find()
.filter(project_members::Column::User.eq(user_uid))
.all(&self.db)
.await?;
let mut result = vec![];
for member in member {
if let Some(project) = project::Entity::find_by_id(member.project)
.one(&self.db)
.await?
{
result.push(CanUseProjectItem {
name: project.name,
avatar_url: project.avatar_url,
display_name: project.display_name,
uid: project.id,
is_public: project.is_public,
});
}
}
Ok(result)
}
}