@@ -4,58 +4,82 @@ import { logToDiscord } from "@/utils/logger";
44
55export async function processLeetcodeData (
66 githubId : any ,
7- proof : any ,
7+ proofs : any ,
88 providerName : string
99) {
10- const username = JSON . parse ( proof [ 0 ] . claimData . context ) . extractedParameters
11- . username ;
12- await setUsername ( githubId , {
13- leetcodeUsername : username ,
14- } ) ;
15-
16- const query = `
17- query userProfileUserQuestionProgressV2($userSlug: String! ) {
18- userProfileUserQuestionProgressV2(userSlug: $userSlug) {
19- numAcceptedQuestions {
20- count
21- difficulty
22- }
23- }
10+ try {
11+ let username ;
12+
13+ // Handle different proof structures
14+ if ( Array . isArray ( proofs ) ) {
15+ const contextData = JSON . parse ( proofs [ 0 ] ?. claimData ?. context || '{}' ) ;
16+ username = contextData . extractedParameters ?. username ;
17+ } else if ( proofs . claimData && proofs . claimData . context ) {
18+ const contextData = JSON . parse ( proofs . claimData . context ) ;
19+ username = contextData . extractedParameters ?. username ;
20+ } else {
21+ const extractedParams = proofs ?. extractedParameters ||
22+ JSON . parse ( proofs ?. context || '{}' ) ?. extractedParameters ;
23+ username = extractedParams ?. username ;
2424 }
25- ` ;
2625
27- const variables = {
28- userSlug : username ,
29- } ;
26+ if ( ! username ) {
27+ throw new Error ( "Could not extract username from proof" ) ;
28+ }
3029
31- const url = "https://leetcode.com/graphql/" ;
32- try {
33- const response = await fetch ( url , {
34- method : "POST" ,
35- headers : {
36- "Content-Type" : "application/json" ,
37- } ,
38- body : JSON . stringify ( { query, variables } ) ,
30+ // Save the username
31+ await setUsername ( githubId , {
32+ leetcodeUsername : username ,
3933 } ) ;
4034
41- const data = await response . json ( ) ;
42- const questionData : QuestionData [ ] =
43- data . data . userProfileUserQuestionProgressV2 . numAcceptedQuestions ;
35+ const query = `
36+ query userProfileUserQuestionProgressV2($userSlug: String!) {
37+ userProfileUserQuestionProgressV2(userSlug: $userSlug) {
38+ numAcceptedQuestions {
39+ count
40+ difficulty
41+ }
42+ }
43+ }
44+ ` ;
45+
46+ const variables = {
47+ userSlug : username ,
48+ } ;
49+
50+ const url = "https://leetcode.com/graphql/" ;
51+ try {
52+ const response = await fetch ( url , {
53+ method : "POST" ,
54+ headers : {
55+ "Content-Type" : "application/json" ,
56+ } ,
57+ body : JSON . stringify ( { query, variables } ) ,
58+ } ) ;
59+
60+ const data = await response . json ( ) ;
61+ const questionData : QuestionData [ ] =
62+ data . data . userProfileUserQuestionProgressV2 . numAcceptedQuestions ;
4463
45- const easyQues =
46- questionData . find ( ( q ) => q . difficulty === "EASY" ) ?. count || 0 ;
47- const mediumQues =
48- questionData . find ( ( q ) => q . difficulty === "MEDIUM" ) ?. count || 0 ;
49- const hardQues =
50- questionData . find ( ( q ) => q . difficulty === "HARD" ) ?. count || 0 ;
64+ const easyQues =
65+ questionData . find ( ( q ) => q . difficulty === "EASY" ) ?. count || 0 ;
66+ const mediumQues =
67+ questionData . find ( ( q ) => q . difficulty === "MEDIUM" ) ?. count || 0 ;
68+ const hardQues =
69+ questionData . find ( ( q ) => q . difficulty === "HARD" ) ?. count || 0 ;
5170
52- await setLeetCodeDatabyGithubId ( githubId , easyQues , mediumQues , hardQues ) ;
71+ await setLeetCodeDatabyGithubId ( githubId , easyQues , mediumQues , hardQues ) ;
5372
54- return true ;
73+ return true ;
74+ } catch ( error ) {
75+ await logToDiscord ( `processLeetcodeData: ${ ( error as any ) . message } ` , "ERROR" ) ;
76+
77+ console . error ( "Error fetching Leetcode data:" , error ) ;
78+ return false ;
79+ }
5580 } catch ( error ) {
5681 await logToDiscord ( `processLeetcodeData: ${ ( error as any ) . message } ` , "ERROR" ) ;
57-
58- console . error ( "Error fetching Leetcode data:" , error ) ;
82+ console . error ( "Error processing LeetCode proof:" , error ) ;
5983 return false ;
6084 }
6185}
0 commit comments