|
|
import * as provider from '../provider'; |
|
|
import * as formatters from '../utils/formatters'; |
|
|
import { |
|
|
UserRatingResponse, |
|
|
UserProfileResponse, |
|
|
UserData, |
|
|
} from '../types'; |
|
|
|
|
|
export async function getUserRating(username: string): Promise<UserRatingResponse> { |
|
|
try { |
|
|
const data = await provider.fetchUserRating(username); |
|
|
if (!data || !data.userContestRanking) { |
|
|
throw new Error('User not found or no contest data'); |
|
|
} |
|
|
return formatters.formatUserRating(data, username); |
|
|
} catch (error: any) { |
|
|
console.error(`LeetCode Error for ${username}:`, error.message); |
|
|
throw new Error(error.message || 'Error fetching LeetCode rating'); |
|
|
} |
|
|
} |
|
|
|
|
|
export async function getUserProfile(username: string): Promise<any> { |
|
|
try { |
|
|
const data = await provider.fetchUserProfile(username); |
|
|
return formatters.formatUserProfileData(data); |
|
|
} catch (error: any) { |
|
|
console.error('LeetCode User Profile Error:', error.message); |
|
|
throw new Error('Error fetching LeetCode user profile'); |
|
|
} |
|
|
} |
|
|
|
|
|
export async function getUserDetails(username: string): Promise<any> { |
|
|
try { |
|
|
const data = await provider.fetchUserData(username); |
|
|
return formatters.formatUserData(data); |
|
|
} catch (error: any) { |
|
|
console.error('LeetCode User Details Error:', error.message); |
|
|
throw new Error('Error fetching LeetCode user details'); |
|
|
} |
|
|
} |
|
|
|
|
|
export async function getUserBadges(username: string): Promise<any> { |
|
|
try { |
|
|
const data = await provider.fetchUserBadges(username); |
|
|
return formatters.formatBadgesData(data); |
|
|
} catch (error: any) { |
|
|
throw new Error('Error fetching LeetCode user badges'); |
|
|
} |
|
|
} |
|
|
|
|
|
export async function getUserSolved(username: string): Promise<any> { |
|
|
try { |
|
|
const data = await provider.fetchUserSolved(username); |
|
|
return formatters.formatSolvedProblemsData(data); |
|
|
} catch (error: any) { |
|
|
throw new Error('Error fetching LeetCode user solved problems'); |
|
|
} |
|
|
} |
|
|
|
|
|
export async function getUserContest(username: string): Promise<any> { |
|
|
try { |
|
|
const data = await provider.fetchContestData(username); |
|
|
return formatters.formatContestData(data); |
|
|
} catch (error: any) { |
|
|
throw new Error('Error fetching LeetCode user contest details'); |
|
|
} |
|
|
} |
|
|
|
|
|
export async function getUserContestHistory(username: string): Promise<any> { |
|
|
try { |
|
|
const data = await provider.fetchUserContestRanking(username); |
|
|
return { |
|
|
count: data.userContestRankingHistory.length, |
|
|
contestHistory: data.userContestRankingHistory, |
|
|
}; |
|
|
} catch (error: any) { |
|
|
throw new Error('Error fetching LeetCode user contest history'); |
|
|
} |
|
|
} |
|
|
|
|
|
export async function getUserSubmission(username: string, limit: number): Promise<any> { |
|
|
try { |
|
|
const data = await provider.fetchSubmissions(username, limit); |
|
|
return { |
|
|
count: data.recentSubmissionList.length, |
|
|
submission: data.recentSubmissionList, |
|
|
}; |
|
|
} catch (error: any) { |
|
|
throw new Error('Error fetching LeetCode user submissions'); |
|
|
} |
|
|
} |
|
|
|
|
|
export async function getUserAcSubmission(username: string, limit: number): Promise<any> { |
|
|
try { |
|
|
const data = await provider.fetchAcSubmissions(username, limit); |
|
|
return { |
|
|
count: data.recentAcSubmissionList.length, |
|
|
submission: data.recentAcSubmissionList, |
|
|
}; |
|
|
} catch (error: any) { |
|
|
throw new Error('Error fetching LeetCode user AC submissions'); |
|
|
} |
|
|
} |
|
|
|
|
|
export async function getUserCalendar(username: string, year: number): Promise<any> { |
|
|
try { |
|
|
const data = await provider.fetchUserCalendar(username, year); |
|
|
|
|
|
return data.matchedUser.userCalendar; |
|
|
} catch (error: any) { |
|
|
throw new Error('Error fetching LeetCode user calendar'); |
|
|
} |
|
|
} |
|
|
|
|
|
export async function getUserSkill(username: string): Promise<any> { |
|
|
try { |
|
|
const data = await provider.fetchSkillStats(username); |
|
|
return formatters.formatSkillStats({ matchedUser: data.matchedUser } as any); |
|
|
} catch (error: any) { |
|
|
throw new Error('Error fetching LeetCode user skills'); |
|
|
} |
|
|
} |
|
|
|
|
|
export async function getUserLanguage(username: string): Promise<any> { |
|
|
try { |
|
|
const data = await provider.fetchLanguageStats(username); |
|
|
return formatters.formatLanguageStats({ matchedUser: data.matchedUser } as any); |
|
|
} catch (error: any) { |
|
|
throw new Error('Error fetching LeetCode user languages'); |
|
|
} |
|
|
} |
|
|
|
|
|
export async function getUserProgress(username: string): Promise<any> { |
|
|
try { |
|
|
const data = await provider.fetchUserQuestionProgress(username); |
|
|
return { |
|
|
numAcceptedQuestions: data.userProfileUserQuestionProgressV2, |
|
|
}; |
|
|
} catch (error: any) { |
|
|
throw new Error('Error fetching LeetCode user progress'); |
|
|
} |
|
|
} |
|
|
|