diff options
| author | Fuwn <[email protected]> | 2026-01-23 22:02:39 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-01-23 22:02:39 -0800 |
| commit | 8492374146f3d7f42d93654d9d7c98b6e02bff34 (patch) | |
| tree | a51c30563d482c5b3082d4bbdff754fa3fe60b3c | |
| parent | chore: Add Supabase schema for reference (diff) | |
| download | due.moe-8492374146f3d7f42d93654d9d7c98b6e02bff34.tar.xz due.moe-8492374146f3d7f42d93654d9d7c98b6e02bff34.zip | |
refactor(Database:User): Align Badge interface with database schema
| -rw-r--r-- | src/lib/Database/SB/User/badges.ts | 21 | ||||
| -rw-r--r-- | src/lib/User/BadgeWall/FallbackBadge.svelte | 16 |
2 files changed, 25 insertions, 12 deletions
diff --git a/src/lib/Database/SB/User/badges.ts b/src/lib/Database/SB/User/badges.ts index 97f30e64..dd6c158e 100644 --- a/src/lib/Database/SB/User/badges.ts +++ b/src/lib/Database/SB/User/badges.ts @@ -2,17 +2,28 @@ import { databaseTimeToDate } from '$lib/Utility/time'; import sb from '../../sb'; export interface Badge { + id: number; + post: string; + image: string; + hidden: boolean; + shadow_hidden: boolean; + click_count: number; + time?: string; + description?: string | null; + category?: string | null; + source?: string | null; + designer?: string | null; +} + +export interface BadgeInput { post?: string; image?: string; description?: string | null; - id?: number; time?: string; category?: string | null; hidden?: boolean; source?: string | null; designer?: string | null; - shadow_hidden?: boolean; - click_count?: number; } const getPagination = (page: number, size: number) => { @@ -39,7 +50,7 @@ export const getUserBadges = async (userId: number, page = 0, size = -1): Promis ) as Badge[]; }; -export const addUserBadge = async (userId: number, badge: Badge) => { +export const addUserBadge = async (userId: number, badge: BadgeInput) => { const { post, image, description, time, category, hidden, source, designer } = badge; if (post === undefined || image === undefined) return; @@ -67,7 +78,7 @@ export const removeUserBadge = async (userId: number, id: number) => { if (!isNaN(id)) await sb.from('user_badges').delete().eq('id', id).eq('user_id', userId); }; -export const updateUserBadge = async (userId: number, id: number, badge: Badge) => { +export const updateUserBadge = async (userId: number, id: number, badge: BadgeInput) => { if (badge.post === undefined || badge.image === undefined) return; await sb diff --git a/src/lib/User/BadgeWall/FallbackBadge.svelte b/src/lib/User/BadgeWall/FallbackBadge.svelte index 3155acc5..bda93e4e 100644 --- a/src/lib/User/BadgeWall/FallbackBadge.svelte +++ b/src/lib/User/BadgeWall/FallbackBadge.svelte @@ -3,6 +3,7 @@ import locale from '$stores/locale'; import { tweened } from 'svelte/motion'; import type { Badge } from '../../Database/SB/User/badges'; + import type { AWCBadge } from '../../Data/awc'; import Tooltip from '../../Tooltip/LinkedTooltip.svelte'; import { databaseTimeToDate } from '../../Utility/time'; import { cubicOut } from 'svelte/easing'; @@ -16,7 +17,7 @@ export let replaceDelay = 1000; export let error = 'https://i2.kym-cdn.com/photos/images/newsfeed/000/290/992/0aa.jpg'; export let hideOnError = false; - export let badge: Badge; + export let badge: Badge | AWCBadge; export let style = ''; export let selectedBadge: Badge | null = null; export let awc = false; @@ -62,30 +63,31 @@ $mouse = { x: 0, y: 0 }; }; - const badgeToAny = (badge: Badge) => badge as any; + const isDBBadge = (b: Badge | AWCBadge): b is Badge => 'id' in b; + const asAWCBadge = (b: Badge | AWCBadge) => b as AWCBadge; </script> {#if replaceCount < maxReplaceCount} <Tooltip - content={`${dev && !awc ? `${badge.id} ${badge.click_count}\n` : ''}${ - badge.time ? $locale().dateFormatter(databaseTimeToDate(badge.time)) : '' + content={`${dev && !awc && isDBBadge(badge) ? `${badge.id} ${badge.click_count}\n` : ''}${ + isDBBadge(badge) && badge.time ? $locale().dateFormatter(databaseTimeToDate(badge.time)) : '' }${badge.description ? `${awc ? '' : '\n'}${badge.description}` : ''}${ badge.designer ? `\nDesigner: ${classifyDesignerName(badge.designer)}` : '' }`} - pin={`badge-${awc ? index : badge.id}`} + pin={`badge-${awc ? index : isDBBadge(badge) ? badge.id : 0}`} pinPosition="top" relative={preferences && preferences.badge_wall_css !== undefined && preferences.badge_wall_css.includes('backdrop-filter')} > <a - href={awc ? badgeToAny(badge).link : '#'} + href={awc ? asAWCBadge(badge).link : '#'} target="_blank" class="badge-container badge" onmousemove={handleMouseMove} onmouseleave={handleMouseLeave} onclick={(e) => { - if (!awc) { + if (!awc && isDBBadge(badge)) { e.preventDefault(); selectedBadge = badge; |