| import { | |
| ContestRankingResponse, | |
| UserRatingResponse, | |
| UserData, | |
| DailyProblemData, | |
| SelectProblemData, | |
| ProblemSetQuestionListData, | |
| UserProfileResponse, | |
| } from '../types'; | |
| export function formatUserRating(data: any, username: string): UserRatingResponse { | |
| if (!data || !data.userContestRanking) { | |
| throw new Error('User not found or no contest data'); | |
| } | |
| const ranking = data.userContestRanking; | |
| const rating = Math.round(ranking.rating); | |
| const level = ranking.badge?.name; | |
| return { | |
| username, | |
| platform: 'leetcode', | |
| rating, | |
| contests_participated: ranking.attendedContestsCount, | |
| level, | |
| rank: ranking.globalRanking, | |
| top_percentage: ranking.topPercentage, | |
| }; | |
| } | |
| export function formatContestRanking(data: any): ContestRankingResponse { | |
| return { | |
| userContestRanking: data.userContestRanking, | |
| userContestRankingHistory: data.userContestRankingHistory || [], | |
| }; | |
| } | |
| export const formatUserData = (data: UserData) => ({ | |
| username: data.matchedUser.username, | |
| name: data.matchedUser.profile.realName, | |
| birthday: data.matchedUser.profile.birthday, | |
| avatar: data.matchedUser.profile.userAvatar, | |
| ranking: data.matchedUser.profile.ranking, | |
| reputation: data.matchedUser.profile.reputation, | |
| gitHub: data.matchedUser.githubUrl, | |
| twitter: data.matchedUser.twitterUrl, | |
| linkedIN: data.matchedUser.linkedinUrl, | |
| website: data.matchedUser.profile.websites, | |
| country: data.matchedUser.profile.countryName, | |
| company: data.matchedUser.profile.company, | |
| school: data.matchedUser.profile.school, | |
| skillTags: data.matchedUser.profile.skillTags, | |
| about: data.matchedUser.profile.aboutMe, | |
| }); | |
| export const formatBadgesData = (data: UserData) => ({ | |
| badgesCount: data.matchedUser.badges.length, | |
| badges: data.matchedUser.badges, | |
| upcomingBadges: data.matchedUser.upcomingBadges, | |
| activeBadge: data.matchedUser.activeBadge, | |
| }); | |
| export const formatSolvedProblemsData = (data: UserData) => ({ | |
| solvedProblem: data.matchedUser.submitStats.acSubmissionNum[0].count, | |
| easySolved: data.matchedUser.submitStats.acSubmissionNum[1].count, | |
| mediumSolved: data.matchedUser.submitStats.acSubmissionNum[2].count, | |
| hardSolved: data.matchedUser.submitStats.acSubmissionNum[3].count, | |
| totalSubmissionNum: data.matchedUser.submitStats.totalSubmissionNum, | |
| acSubmissionNum: data.matchedUser.submitStats.acSubmissionNum, | |
| }); | |
| export const formatSubmissionData = (data: UserData) => ({ | |
| count: data.recentSubmissionList.length, | |
| submission: data.recentSubmissionList, | |
| }); | |
| export const formatAcSubmissionData = (data: UserData) => ({ | |
| count: data.recentAcSubmissionList.length, | |
| submission: data.recentAcSubmissionList, | |
| }); | |
| export const formatSubmissionCalendarData = (data: UserData) => ({ | |
| activeYears: data.matchedUser.userCalendar.activeYears, | |
| streak: data.matchedUser.userCalendar.streak, | |
| totalActiveDays: data.matchedUser.userCalendar.totalActiveDays, | |
| dccBadges: data.matchedUser.userCalendar.dccBadge, | |
| submissionCalendar: data.matchedUser.userCalendar.submissionCalendar, | |
| }); | |
| export const formatSkillStats = (data: UserData) => ({ | |
| fundamental: data.matchedUser.tagProblemCounts.fundamental, | |
| intermediate: data.matchedUser.tagProblemCounts.intermediate, | |
| advanced: data.matchedUser.tagProblemCounts.advanced, | |
| }); | |
| export const formatLanguageStats = (data: UserData) => ({ | |
| languageProblemCount: data.matchedUser.languageProblemCount, | |
| }); | |
| export const formatProgressStats = (data: UserData) => ({ | |
| numAcceptedQuestions: data.userProfileUserQuestionProgressV2, | |
| }); | |
| export const formatUserProfileData = (data: UserProfileResponse) => { | |
| return { | |
| totalSolved: data.matchedUser.submitStats.acSubmissionNum[0].count, | |
| totalSubmissions: data.matchedUser.submitStats.totalSubmissionNum, | |
| totalQuestions: data.allQuestionsCount[0].count, | |
| easySolved: data.matchedUser.submitStats.acSubmissionNum[1].count, | |
| totalEasy: data.allQuestionsCount[1].count, | |
| mediumSolved: data.matchedUser.submitStats.acSubmissionNum[2].count, | |
| totalMedium: data.allQuestionsCount[2].count, | |
| hardSolved: data.matchedUser.submitStats.acSubmissionNum[3].count, | |
| totalHard: data.allQuestionsCount[3].count, | |
| ranking: data.matchedUser.profile.ranking, | |
| contributionPoint: data.matchedUser.contributions.points, | |
| reputation: data.matchedUser.profile.reputation, | |
| submissionCalendar: JSON.parse(data.matchedUser.submissionCalendar), | |
| recentSubmissions: data.recentSubmissionList, | |
| matchedUserStats: data.matchedUser.submitStats, | |
| }; | |
| }; | |
| export const formatDailyData = (data: DailyProblemData) => ({ | |
| questionLink: `https://leetcode.com${data.activeDailyCodingChallengeQuestion.link}`, | |
| date: data.activeDailyCodingChallengeQuestion.date, | |
| questionId: data.activeDailyCodingChallengeQuestion.question.questionId, | |
| questionFrontendId: | |
| data.activeDailyCodingChallengeQuestion.question.questionFrontendId, | |
| questionTitle: data.activeDailyCodingChallengeQuestion.question.title, | |
| titleSlug: data.activeDailyCodingChallengeQuestion.question.titleSlug, | |
| difficulty: data.activeDailyCodingChallengeQuestion.question.difficulty, | |
| isPaidOnly: data.activeDailyCodingChallengeQuestion.question.isPaidOnly, | |
| question: data.activeDailyCodingChallengeQuestion.question.content, | |
| exampleTestcases: | |
| data.activeDailyCodingChallengeQuestion.question.exampleTestcases, | |
| topicTags: data.activeDailyCodingChallengeQuestion.question.topicTags, | |
| hints: data.activeDailyCodingChallengeQuestion.question.hints, | |
| solution: data.activeDailyCodingChallengeQuestion.question.solution, | |
| companyTagStats: | |
| data.activeDailyCodingChallengeQuestion.question.companyTagStats, | |
| likes: data.activeDailyCodingChallengeQuestion.question.likes, | |
| dislikes: data.activeDailyCodingChallengeQuestion.question.dislikes, | |
| similarQuestions: | |
| data.activeDailyCodingChallengeQuestion.question.similarQuestions, | |
| }); | |
| export const formatQuestionData = (data: SelectProblemData) => ({ | |
| link: `https://leetcode.com/problems/${data.question.titleSlug}`, | |
| questionId: data.question.questionId, | |
| questionFrontendId: data.question.questionFrontendId, | |
| questionTitle: data.question.title, | |
| titleSlug: data.question.titleSlug, | |
| difficulty: data.question.difficulty, | |
| isPaidOnly: data.question.isPaidOnly, | |
| question: data.question.content, | |
| exampleTestcases: data.question.exampleTestcases, | |
| topicTags: data.question.topicTags, | |
| hints: data.question.hints, | |
| solution: data.question.solution, | |
| companyTagStats: data.question.companyTagStats, | |
| likes: data.question.likes, | |
| dislikes: data.question.dislikes, | |
| similarQuestions: data.question.similarQuestions, | |
| }); | |
| export const formatProblemsData = (data: ProblemSetQuestionListData) => ({ | |
| totalQuestions: data.problemsetQuestionList.total, | |
| count: data.problemsetQuestionList.questions.length, | |
| problemsetQuestionList: data.problemsetQuestionList.questions, | |
| }); | |
| export const formatContestData = (data: any) => ({ | |
| contestAttend: data.userContestRanking?.attendedContestsCount, | |
| contestRating: data.userContestRanking?.rating, | |
| contestGlobalRanking: data.userContestRanking?.globalRanking, | |
| totalParticipants: data.userContestRanking?.totalParticipants, | |
| contestTopPercentage: data.userContestRanking?.topPercentage, | |
| contestBadges: data.userContestRanking?.badge, | |
| contestParticipation: data.userContestRankingHistory.filter( | |
| (obj: any) => obj.attended === true, | |
| ), | |
| }); | |