aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-02-05 19:06:32 -0800
committerFuwn <[email protected]>2024-02-05 19:06:32 -0800
commita4d58fa25d6053419506d6e7e5b53d8268845990 (patch)
tree9780bf9fa5cbef14d99bd3953967f3d297f6a079 /src
parentrefactor(locale): specify import method (diff)
downloaddue.moe-a4d58fa25d6053419506d6e7e5b53d8268845990.tar.xz
due.moe-a4d58fa25d6053419506d6e7e5b53d8268845990.zip
feat(badges): delete all
Diffstat (limited to 'src')
-rw-r--r--src/lib/Database/badges.ts4
-rw-r--r--src/lib/Locale/english.ts3
-rw-r--r--src/lib/Locale/japanese.ts3
-rw-r--r--src/lib/Locale/layout.ts1
-rw-r--r--src/routes/api/badges/+server.ts13
-rw-r--r--src/routes/user/[user]/badges/+page.svelte34
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 />