From 8492374146f3d7f42d93654d9d7c98b6e02bff34 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Fri, 23 Jan 2026 22:02:39 -0800 Subject: refactor(Database:User): Align Badge interface with database schema --- src/lib/Database/SB/User/badges.ts | 21 ++++++++++++++++----- src/lib/User/BadgeWall/FallbackBadge.svelte | 16 +++++++++------- 2 files changed, 25 insertions(+), 12 deletions(-) (limited to 'src/lib') 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; {#if replaceCount < maxReplaceCount} { - if (!awc) { + if (!awc && isDBBadge(badge)) { e.preventDefault(); selectedBadge = badge; -- cgit v1.2.3