forked from mirrored/github-readme-stats
refactor: remove WakaTime range loop
This commit is contained in:
+1
-2
@@ -28,7 +28,6 @@ export default async (req, res) => {
|
||||
langs_count,
|
||||
hide,
|
||||
api_domain,
|
||||
range,
|
||||
border_radius,
|
||||
border_color,
|
||||
} = req.query;
|
||||
@@ -40,7 +39,7 @@ export default async (req, res) => {
|
||||
}
|
||||
|
||||
try {
|
||||
const stats = await fetchWakatimeStats({ username, api_domain, range });
|
||||
const stats = await fetchWakatimeStats({ username, api_domain });
|
||||
|
||||
let cacheSeconds = clampValue(
|
||||
parseInt(cache_seconds || CONSTANTS.FOUR_HOURS, 10),
|
||||
|
||||
@@ -5,29 +5,33 @@ import { MissingParamError } from "../common/utils.js";
|
||||
* WakaTime data fetcher.
|
||||
*
|
||||
* @param {{username: string, api_domain: string}} props Fetcher props.
|
||||
* @returns {Promise<WakaTimeData>} WakaTime data response.
|
||||
* @returns {Promise<wakaTimeStatsRangeData>} WakaTime data response.
|
||||
*/
|
||||
const fetchWakatimeStats = async ({ username, api_domain }) => {
|
||||
if (!username) throw new MissingParamError(["username"]);
|
||||
|
||||
// Loop through available ranges to get user data.
|
||||
for (const range of ["all_time", "last_year", "last_7_days"]) {
|
||||
try {
|
||||
const { data } = await axios.get(
|
||||
`https://${
|
||||
api_domain ? api_domain.replace(/\/$/gi, "") : "wakatime.com"
|
||||
}/api/v1/users/${username}/stats/${range}?is_including_today=true`,
|
||||
);
|
||||
// Retrieve user range.
|
||||
const { data: userdata } = await axios.get(
|
||||
`https://${
|
||||
api_domain ? api_domain.replace(/\/$/gi, "") : "wakatime.com"
|
||||
}/api/v1/users/${username}/stats`,
|
||||
);
|
||||
const range = userdata.data.range;
|
||||
|
||||
return data.data;
|
||||
} catch (err) {
|
||||
if (err.response.status === 403 && range !== "last_year") {
|
||||
continue;
|
||||
} else if (err.response.status < 200 || err.response.status > 299) {
|
||||
throw new Error(i18n.t("wakatimecard.nouser"));
|
||||
}
|
||||
throw err;
|
||||
// Loop through available ranges to get user data.
|
||||
try {
|
||||
const { data } = await axios.get(
|
||||
`https://${
|
||||
api_domain ? api_domain.replace(/\/$/gi, "") : "wakatime.com"
|
||||
}/api/v1/users/${username}/stats/${range}?is_including_today=true`,
|
||||
);
|
||||
|
||||
return data.data;
|
||||
} catch (err) {
|
||||
if (err.response.status < 200 || err.response.status > 299) {
|
||||
throw new Error(i18n.t("wakatimecard.nouser"));
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -8,6 +8,37 @@ afterEach(() => {
|
||||
mock.reset();
|
||||
});
|
||||
|
||||
const wakaTimeUserData = {
|
||||
data: {
|
||||
id: "aa437823-82d1-4b37-9b84-ab4ed89c8688",
|
||||
user_id: "c7e2e900-858b-400e-bc1c-016345cf59b6",
|
||||
range: "all_time",
|
||||
timeout: 15,
|
||||
writes_only: false,
|
||||
holidays: 134,
|
||||
status: "ok",
|
||||
is_up_to_date: true,
|
||||
days_minus_holidays: 231,
|
||||
days_including_holidays: 365,
|
||||
percent_calculated: 100,
|
||||
human_readable_total: "691 hrs 5 mins",
|
||||
is_already_updating: false,
|
||||
is_stuck: false,
|
||||
total_seconds_including_other_language: 2508467.924346,
|
||||
is_up_to_date_pending_future: false,
|
||||
total_seconds: 2487938.453846,
|
||||
human_readable_daily_average: "2 hrs 59 mins",
|
||||
human_readable_total_including_other_language: "696 hrs 47 mins",
|
||||
daily_average_including_other_language: 10859.0,
|
||||
daily_average: 10770.0,
|
||||
human_readable_daily_average_including_other_language: "3 hrs",
|
||||
username: "rickstaa",
|
||||
is_including_today: false,
|
||||
human_readable_range: "last year",
|
||||
is_coding_activity_visible: true,
|
||||
is_other_usage_visible: false,
|
||||
},
|
||||
};
|
||||
const wakaTimeData = {
|
||||
data: {
|
||||
categories: [
|
||||
@@ -103,6 +134,9 @@ const wakaTimeData = {
|
||||
describe("Wakatime fetcher", () => {
|
||||
it("should fetch correct wakatime data", async () => {
|
||||
const username = "anuraghazra";
|
||||
mock
|
||||
.onGet(`https://wakatime.com/api/v1/users/${username}/stats`)
|
||||
.reply(200, wakaTimeUserData);
|
||||
mock
|
||||
.onGet(
|
||||
`https://wakatime.com/api/v1/users/${username}/stats/all_time?is_including_today=true`,
|
||||
|
||||
Reference in New Issue
Block a user