diff options
| author | Fuwn <[email protected]> | 2024-05-27 18:38:30 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-05-27 18:38:30 -0700 |
| commit | c4ec98bc96679586f6867870de8e00e043090354 (patch) | |
| tree | ea3abd178d2387f76b1521d316ce352f0e997335 /src | |
| parent | feat(hololive): parallax image for thumbnails (diff) | |
| download | due.moe-c4ec98bc96679586f6867870de8e00e043090354.tar.xz due.moe-c4ec98bc96679586f6867870de8e00e043090354.zip | |
feat(badges): click counter for badges
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/Database/userBadges.ts | 4 | ||||
| -rw-r--r-- | src/lib/User/BadgeWall/BadgePreview.svelte | 8 | ||||
| -rw-r--r-- | src/lib/User/BadgeWall/FallbackBadge.svelte | 2 | ||||
| -rw-r--r-- | src/routes/api/badges/+server.ts | 9 |
4 files changed, 21 insertions, 2 deletions
diff --git a/src/lib/Database/userBadges.ts b/src/lib/Database/userBadges.ts index 3ce88d29..d21c3527 100644 --- a/src/lib/Database/userBadges.ts +++ b/src/lib/Database/userBadges.ts @@ -12,6 +12,7 @@ export interface Badge { source?: string | null; designer?: string | null; shadow_hidden?: boolean; + click_count?: number; } export const getUserBadges = async (userId: number): Promise<Badge[]> => { @@ -100,3 +101,6 @@ export const setShadowHiddenBadge = async (userId: number, id: number, shadowHid .update({ shadow_hidden: shadowHide }) .eq('id', id) .eq('user_id', userId); + +export const incrementClickCount = async (id: number) => + await supabase.rpc('user_badges_increment_click_count', { user_badge_id: id }); diff --git a/src/lib/User/BadgeWall/BadgePreview.svelte b/src/lib/User/BadgeWall/BadgePreview.svelte index ac9519c5..4e347d3d 100644 --- a/src/lib/User/BadgeWall/BadgePreview.svelte +++ b/src/lib/User/BadgeWall/BadgePreview.svelte @@ -7,6 +7,7 @@ import { onMount } from 'svelte'; import { cubicOut } from 'svelte/easing'; import { tweened } from 'svelte/motion'; + import root from '$lib/Utility/root'; export let selectedBadge: Badge | undefined; export let onNext: () => void = () => {}; @@ -51,6 +52,13 @@ } } + $: { + if (selectedBadge) + fetch(root(`/api/badges?incrementClickCount=${selectedBadge.id}`), { + method: 'PUT' + }); + } + onMount(() => { const handleClickOutside = (event: any) => { if (event.target.classList.contains('popup')) selectedBadge = undefined; diff --git a/src/lib/User/BadgeWall/FallbackBadge.svelte b/src/lib/User/BadgeWall/FallbackBadge.svelte index 083869d7..7e0420ea 100644 --- a/src/lib/User/BadgeWall/FallbackBadge.svelte +++ b/src/lib/User/BadgeWall/FallbackBadge.svelte @@ -67,7 +67,7 @@ {#if replaceCount < maxReplaceCount} <Tooltip - content={`${dev && !awc ? `${badge.id}\n` : ''}${ + content={`${dev && !awc ? `${badge.id} ${badge.click_count}\n` : ''}${ badge.time ? $locale().dateFormatter(databaseTimeToDate(badge.time)) : '' }${badge.description ? `${awc ? '' : '\n'}${badge.description}` : ''}${ badge.designer ? `\nDesigner: ${classifyDesignerName(badge.designer)}` : '' diff --git a/src/routes/api/badges/+server.ts b/src/routes/api/badges/+server.ts index 21561cbb..483d0b9c 100644 --- a/src/routes/api/badges/+server.ts +++ b/src/routes/api/badges/+server.ts @@ -8,7 +8,8 @@ import { type Badge, migrateCategory, setShadowHidden, - setShadowHiddenBadge + setShadowHiddenBadge, + incrementClickCount } from '$lib/Database/userBadges'; import authorisedJson from '$lib/Data/Static/authorised.json'; @@ -48,6 +49,12 @@ export const DELETE = async ({ url, cookies }) => { }; export const PUT = async ({ cookies, url, request }) => { + if (url.searchParams.get('incrementClickCount') || undefined) { + await incrementClickCount(Number(url.searchParams.get('incrementClickCount'))); + + return new Response('Incremented', { status: 200 }); + } + const userCookie = cookies.get('user'); if (!userCookie) return unauthorised; |