gitdataai/libs/service/user/summary.rs

58 lines
2.3 KiB
Rust

use crate::AppService;
use crate::error::AppError;
use serde::{Deserialize, Serialize};
use session::Session;
use utoipa::ToSchema;
use super::user_info::UserInfoExternal;
use super::repository::{UserRepoInfo, UserReposQuery};
use super::projects::{UserProjectInfo, UserProjectsQuery};
use super::user_activity::{UserActivityItem, UserActivityQuery};
use super::chpc::{ContributionHeatmapResponse, ContributionHeatmapQuery};
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct UserSummaryResponse {
pub info: UserInfoExternal,
pub repos: Vec<UserRepoInfo>,
pub projects: Vec<UserProjectInfo>,
pub activity: Vec<UserActivityItem>,
pub heatmap: ContributionHeatmapResponse,
pub follower_count: u64,
pub following_count: u64,
pub stars_count: u64,
}
impl AppService {
pub async fn user_get_summary(
&self,
context: Session,
username: String,
) -> Result<UserSummaryResponse, AppError> {
let info = self.user_info(context.clone(), username.clone()).await?;
let repos_resp = self.get_user_repos(context.clone(), username.clone(), UserReposQuery { page: Some(1), per_page: Some(4) }).await?;
let projects_resp = self.get_user_projects(context.clone(), username.clone(), UserProjectsQuery { page: Some(1), per_page: Some(4) }).await?;
let activity_resp = self.get_user_activity(context.clone(), username.clone(), UserActivityQuery { page: Some(1), per_page: Some(8) }).await?;
let heatmap = self.get_user_contribution_heatmap(context.clone(), username.clone(), ContributionHeatmapQuery { start_date: None, end_date: None }).await?;
let follower_count = self.user_get_subscriber_count(context.clone(), username.clone()).await?;
let following_count = self.user_get_subscription_count(context.clone(), username.clone()).await?;
let stars_resp = self.get_user_stars(context.clone(), username.clone()).await?;
let stars_count = stars_resp.total;
Ok(UserSummaryResponse {
info,
repos: repos_resp.repos,
projects: projects_resp.projects,
activity: activity_resp.items,
heatmap,
follower_count,
following_count,
stars_count,
})
}
}