diff options
| author | Fuwn <[email protected]> | 2024-02-05 19:06:32 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-02-05 19:06:32 -0800 |
| commit | a4d58fa25d6053419506d6e7e5b53d8268845990 (patch) | |
| tree | 9780bf9fa5cbef14d99bd3953967f3d297f6a079 /src | |
| parent | refactor(locale): specify import method (diff) | |
| download | due.moe-a4d58fa25d6053419506d6e7e5b53d8268845990.tar.xz due.moe-a4d58fa25d6053419506d6e7e5b53d8268845990.zip | |
feat(badges): delete all
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/Database/badges.ts | 4 | ||||
| -rw-r--r-- | src/lib/Locale/english.ts | 3 | ||||
| -rw-r--r-- | src/lib/Locale/japanese.ts | 3 | ||||
| -rw-r--r-- | src/lib/Locale/layout.ts | 1 | ||||
| -rw-r--r-- | src/routes/api/badges/+server.ts | 13 | ||||
| -rw-r--r-- | src/routes/user/[user]/badges/+page.svelte | 34 |
6 files changed, 54 insertions, 4 deletions
diff --git a/src/lib/Database/badges.ts b/src/lib/Database/badges.ts index e7103185..6df9fd8e 100644 --- a/src/lib/Database/badges.ts +++ b/src/lib/Database/badges.ts @@ -57,3 +57,7 @@ export const updateUserBadge = async (userId: number, id: number, badge: Badge) export const renameCategory = async (userId: number, oldName: string, newName: string) => { await sql`UPDATE user_badges SET category = ${newName} WHERE category = ${oldName} AND user_id = ${userId};`; }; + +export const removeAllUserBadges = async (userId: number) => { + await sql`DELETE FROM user_badges WHERE user_id = ${userId};`; +}; diff --git a/src/lib/Locale/english.ts b/src/lib/Locale/english.ts index ec28f2cb..f3ea3c76 100644 --- a/src/lib/Locale/english.ts +++ b/src/lib/Locale/english.ts @@ -148,7 +148,8 @@ const English: Locale = { add: 'Add', update: 'Update', or: 'or', - delete: 'Delete (Click Twice)' + delete: 'Delete (Click Twice)', + deleteAll: 'Delete All Badges (Click {times} Times)' }, importMode: { enable: 'Import from AniList', diff --git a/src/lib/Locale/japanese.ts b/src/lib/Locale/japanese.ts index 5e288df8..1357971c 100644 --- a/src/lib/Locale/japanese.ts +++ b/src/lib/Locale/japanese.ts @@ -149,7 +149,8 @@ const Japanese: Locale = { add: 'バッジを追加', update: 'バッジを更新', or: 'または', - delete: 'バッジを削除する(2回クリック)' + delete: 'バッジを削除する(2回クリック)', + deleteAll: 'すべてのバッジを削除する({times}回クリック)' }, importMode: { enable: 'AniListからインポートする', diff --git a/src/lib/Locale/layout.ts b/src/lib/Locale/layout.ts index ec44391b..a5aad8cd 100644 --- a/src/lib/Locale/layout.ts +++ b/src/lib/Locale/layout.ts @@ -153,6 +153,7 @@ export interface Locale { update: LocaleValue; or: LocaleValue; delete: LocaleValue; + deleteAll: LocaleValue; }; importMode: { enable: LocaleValue; diff --git a/src/routes/api/badges/+server.ts b/src/routes/api/badges/+server.ts index dedb84b3..c1e2afc8 100644 --- a/src/routes/api/badges/+server.ts +++ b/src/routes/api/badges/+server.ts @@ -1,5 +1,10 @@ import { userIdentity } from '$lib/AniList/identity'; -import { removeUserBadge, updateUserBadge, type Badge } from '$lib/Database/badges'; +import { + removeAllUserBadges, + removeUserBadge, + updateUserBadge, + type Badge +} from '$lib/Database/badges'; import { getUserBadges } from '$lib/Database/badges'; import { addUserBadge } from '$lib/Database/badges'; @@ -29,7 +34,11 @@ export const DELETE = async ({ url, cookies }) => { refreshToken: user['refresh_token'] }); - await removeUserBadge(identity.id, Number(url.searchParams.get('id'))); + if ((url.searchParams.get('prune') || 0) === 'true') { + await removeAllUserBadges(identity.id); + } else { + await removeUserBadge(identity.id, Number(url.searchParams.get('id'))); + } return await badges(identity.id); }; diff --git a/src/routes/user/[user]/badges/+page.svelte b/src/routes/user/[user]/badges/+page.svelte index 6ad6e845..21beb415 100644 --- a/src/routes/user/[user]/badges/+page.svelte +++ b/src/routes/user/[user]/badges/+page.svelte @@ -37,6 +37,7 @@ // let dark = true; // let transparent = false; let confirmDelete = 0; + let confirmPrune = 0; let selectedBadge: Badge | undefined = undefined; let loadError: string | null = null; const isId = /^\d+$/.test(data.username); @@ -206,6 +207,25 @@ selectedBadge = undefined; }; + const removeAllBadges = () => { + if (confirmPrune === 2) { + confirmPrune = 0; + } else if (confirmPrune === 0) { + confirmPrune = 1; + + return; + } else { + confirmPrune = 2; + + return; + } + + selectedBadge = undefined; + badgesPromise = fetch(root(`/api/badges?prune=true`), { + method: 'DELETE' + }); + }; + const removeBadge = (badge: Badge) => { if (!badge.id) return; @@ -733,6 +753,20 @@ {$locale().user.badges.importMode.fetch} </button> + <p /> + + <details> + <summary>Dangerous</summary> + + <button class="button-lined no-shadow" on:click={removeAllBadges}> + {$locale({ + values: { + times: 3 - confirmPrune + } + }).user.badges.editMode.deleteAll} + </button> + </details> + {#if importImages && importImages.length > 0} <p /> |