irongit

A Neovim plugin enabling you to solve LeetCode problems.

101 lines2.6 KBLua
1local log = require("leetcode.logger")
2local config = require("leetcode.config")
3local statistics = require("leetcode.api.statistics")
4local queries = require("leetcode.api.queries")
5local urls = require("leetcode.api.urls")
6local utils = require("leetcode.api.utils")
7local cn_utils = require("leetcode-plugins.cn.utils")
8
9---@param cb fun(res: lc.Stats.Res|nil, err: lc.err)
10statistics.solved = function(cb) ---@diagnostic disable-line
11 local variables = {
12 username = config.auth.name,
13 }
14
15 local query = queries.solved
16
17 utils.query(query, variables, {
18 endpoint = urls.solved,
19 callback = function(res, err)
20 if err then
21 return cb(nil, err)
22 end
23
24 local data = res.data
25 local submit_stats = data["submit_stats"]
26 local stats = cn_utils.calc_question_count(submit_stats)
27
28 cb(stats, nil)
29 end,
30 })
31end
32
33---@param cb fun(res: lc.Stats.QuestionCount[], err: lc.err)
34statistics.session_progress = function(cb)
35 local variables = {
36 userSlug = config.auth.name,
37 }
38
39 local query = queries.session_progress
40
41 utils.query(query, variables, {
42 callback = function(res, err)
43 if err then
44 return cb(nil, err)
45 end
46
47 local data = res.data
48 local session_progress = data["userProfileUserQuestionProgress"]["numAcceptedQuestions"]
49 cb(session_progress)
50 end,
51 })
52end
53
54statistics.calendar = function(cb) ---@diagnostic disable-line
55 local variables = {
56 username = config.auth.name,
57 }
58
59 local query = queries.calendar
60
61 utils.query(query, variables, {
62 endpoint = urls.calendar,
63 callback = function(res, err)
64 if err then
65 return cb(nil, err)
66 end
67
68 local data = res.data
69 local calendar = data["calendar"]
70
71 calendar.submission_calendar =
72 select(2, pcall(utils.decode, calendar.submission_calendar))
73
74 cb({
75 calendar = calendar,
76 }, nil)
77 end,
78 })
79end
80
81---@param cb fun(res: lc.Languages.Res|nil, err: lc.err)
82statistics.languages = function(cb) ---@diagnostic disable-line
83 local variables = {
84 username = config.auth.name,
85 }
86
87 local query = queries.languages
88
89 utils.query(query, variables, {
90 endpoint = urls.languages,
91 callback = function(res, err)
92 if err then
93 return cb(nil, err)
94 end
95
96 local data = res.data
97 local lang_prob_count = data["languageProblemCount"]
98 cb(lang_prob_count)
99 end,
100 })
101end