Skip to content

Commit d50a303

Browse files
committed
fix: put back caching
1 parent 78b8141 commit d50a303

1 file changed

Lines changed: 34 additions & 22 deletions

File tree

server/api/gravatar.get.ts

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,42 @@ function getQueryParam(event: H3Event, key: string): string {
1111
return Array.isArray(value) ? String(value[0] ?? '') : String(value ?? '')
1212
}
1313

14-
export default defineCachedEventHandler(async event => {
15-
const rawUsername = getQueryParam(event, 'username')
16-
const rawSize = getQueryParam(event, 'size')
14+
export default defineCachedEventHandler(
15+
async event => {
16+
const rawUsername = getQueryParam(event, 'username')
17+
const rawSize = getQueryParam(event, 'size')
1718

18-
try {
19-
const { username, size } = v.parse(GravatarQuerySchema, {
20-
username: rawUsername,
21-
size: rawSize ? rawSize : undefined,
22-
})
19+
try {
20+
const { username, size } = v.parse(GravatarQuerySchema, {
21+
username: rawUsername,
22+
size: rawSize ? rawSize : undefined,
23+
})
24+
25+
const dataUrl = await getGravatarFromUsername(username, size ?? 80)
2326

24-
const dataUrl = await getGravatarFromUsername(username, size ?? 80)
27+
if (!dataUrl) {
28+
throw createError({
29+
statusCode: 404,
30+
message: ERROR_GRAVATAR_EMAIL_UNAVAILABLE,
31+
})
32+
}
2533

26-
if (!dataUrl) {
27-
throw createError({
28-
statusCode: 404,
29-
message: ERROR_GRAVATAR_EMAIL_UNAVAILABLE,
34+
return { url: dataUrl }
35+
} catch (error: unknown) {
36+
handleApiError(error, {
37+
statusCode: 502,
38+
message: ERROR_GRAVATAR_FETCH_FAILED,
3039
})
3140
}
32-
33-
return { url: dataUrl }
34-
} catch (error: unknown) {
35-
handleApiError(error, {
36-
statusCode: 502,
37-
message: ERROR_GRAVATAR_FETCH_FAILED,
38-
})
39-
}
40-
})
41+
},
42+
{
43+
maxAge: CACHE_MAX_AGE_ONE_DAY,
44+
swr: true,
45+
getKey: event => {
46+
const username = getQueryParam(event, 'username').trim().toLowerCase()
47+
const size = getQueryParam(event, 'size') || '80'
48+
const defaultImg = getQueryParam(event, 'default') || '404'
49+
return `gravatar:v1:${username}:${size}:${defaultImg}`
50+
},
51+
},
52+
)

0 commit comments

Comments
 (0)