100 lines
2.9 KiB
Rust
100 lines
2.9 KiB
Rust
use super::chpc::{ContributionHeatmapQuery, ContributionHeatmapResponse};
|
|
use super::projects::{UserProjectInfo, UserProjectsQuery};
|
|
use super::repository::{UserRepoInfo, UserReposQuery};
|
|
use super::user_activity::{UserActivityItem, UserActivityQuery};
|
|
use super::user_info::UserInfoExternal;
|
|
use crate::AppService;
|
|
use crate::error::AppError;
|
|
use serde::{Deserialize, Serialize};
|
|
use session::Session;
|
|
use utoipa::ToSchema;
|
|
|
|
#[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,
|
|
})
|
|
}
|
|
}
|