fix: supprimer le chargement paresseux des données dans le composant Stats et améliorer la gestion des requêtes API

This commit is contained in:
2026-01-04 19:30:48 +01:00
parent e30d956f58
commit 9aabe422b3
2 changed files with 31 additions and 19 deletions

View File

@@ -2,9 +2,7 @@
import type { Stats } from '~~/types'
import { usePrecision } from '@vueuse/math'
const { data: stats } = await useAsyncData<Stats>('stats', () => $fetch('/api/stats'), {
lazy: true
})
const { data: stats } = await useAsyncData<Stats>('stats', () => $fetch('/api/stats'))
const startDate = computed(() => new Date(stats.value!.coding.range.start))
const yearsCollected = useTimeAgo(startDate).value

View File

@@ -1,42 +1,56 @@
import type { H3Event } from 'h3'
const WAKATIME_HEADERS = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Accept': 'application/json'
}
const fetchWakatime = async (url: string) => {
try {
return await $fetch<{ data: unknown[] }>(url, {
headers: WAKATIME_HEADERS,
timeout: 5000
})
}
catch (err) {
console.error(`[Wakatime Error] Failed to fetch ${url}`, err)
return { data: [] }
}
}
const cachedWakatimeCoding = defineCachedFunction(async (event: H3Event) => {
const config = useRuntimeConfig(event)
return await $fetch<{ data: unknown[] }>(`https://wakatime.com/share/${config.wakatime.userId}/${config.wakatime.coding}.json`)
return await fetchWakatime(`https://wakatime.com/share/${config.wakatime.userId}/${config.wakatime.coding}.json`)
}, {
maxAge: 60,
name: 'wakatime',
maxAge: 60 * 50,
name: 'wakatime:coding',
getKey: () => 'coding'
})
const cachedWakatimeEditors = defineCachedFunction(async (event: H3Event) => {
const config = useRuntimeConfig(event)
return await $fetch<{ data: unknown[] }>(`https://wakatime.com/share/${config.wakatime.userId}/${config.wakatime.editors}.json`)
return await fetchWakatime(`https://wakatime.com/share/${config.wakatime.userId}/${config.wakatime.editors}.json`)
}, {
maxAge: 60,
name: 'wakatime',
maxAge: 60 * 60,
name: 'wakatime:editors',
getKey: () => 'editors'
})
const cachedWakatimeOs = defineCachedFunction(async (event: H3Event) => {
const config = useRuntimeConfig(event)
return await $fetch<{ data: unknown[] }>(`https://wakatime.com/share/${config.wakatime.userId}/${config.wakatime.os}.json`)
return await fetchWakatime(`https://wakatime.com/share/${config.wakatime.userId}/${config.wakatime.os}.json`)
}, {
maxAge: 60,
name: 'wakatime',
maxAge: 60 * 60,
name: 'wakatime:os',
getKey: () => 'os'
})
const cachedWakatimeLanguages = defineCachedFunction(async (event: H3Event) => {
const config = useRuntimeConfig(event)
return await $fetch<{ data: unknown[] }>(`https://wakatime.com/share/${config.wakatime.userId}/${config.wakatime.languages}.json`)
return await fetchWakatime(`https://wakatime.com/share/${config.wakatime.userId}/${config.wakatime.languages}.json`)
}, {
maxAge: 60,
name: 'wakatime',
maxAge: 60 * 60,
name: 'wakatime:languages',
getKey: () => 'languages'
})