import * as provider from '../provider'; import * as formatters from '../utils/formatters'; import { UserRatingResponse, UserProfileResponse, UserData, } from '../types'; export async function getUserRating(username: string): Promise { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { try { const data = await provider.fetchUserCalendar(username, year); // Calendar formatting might be needed return data.matchedUser.userCalendar; } catch (error: any) { throw new Error('Error fetching LeetCode user calendar'); } } export async function getUserSkill(username: string): Promise { 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 { 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 { try { const data = await provider.fetchUserQuestionProgress(username); return { numAcceptedQuestions: data.userProfileUserQuestionProgressV2, }; } catch (error: any) { throw new Error('Error fetching LeetCode user progress'); } }