58 lines
2.3 KiB
Rust
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,
|
|
})
|
|
}
|
|
}
|