diff --git a/AquaNet/src/components/GameSettingFields.svelte b/AquaNet/src/components/GameSettingFields.svelte
index 895c1d81..84ed5f21 100644
--- a/AquaNet/src/components/GameSettingFields.svelte
+++ b/AquaNet/src/components/GameSettingFields.svelte
@@ -21,26 +21,24 @@
}
-
-
- {#each gameFields as field}
-
- {#if field.type === "Boolean"}
-
- submitGameOption(field.key, field.value)}/>
-
-
- {/if}
-
- {/each}
-
+
+ {#each gameFields as field}
+
+ {#if field.type === "Boolean"}
+
+ submitGameOption(field.key, field.value)}/>
+
+
+ {/if}
+
+ {/each}
+
-
-
+
diff --git a/AquaNet/src/components/WaccaSettings.svelte b/AquaNet/src/components/WaccaSettings.svelte
index a1cfe083..1cd62380 100644
--- a/AquaNet/src/components/WaccaSettings.svelte
+++ b/AquaNet/src/components/WaccaSettings.svelte
@@ -4,8 +4,6 @@
import GameSettingFields from "./GameSettingFields.svelte";
-
-
-
-
-
+
+
+
diff --git a/AquaNet/src/libs/i18n/en_ref.ts b/AquaNet/src/libs/i18n/en_ref.ts
index 2d7a5bb3..957425d7 100644
--- a/AquaNet/src/libs/i18n/en_ref.ts
+++ b/AquaNet/src/libs/i18n/en_ref.ts
@@ -141,6 +141,7 @@ export const EN_REF_SETTINGS = {
'settings.profile.bio': 'Bio',
'settings.profile.unset': 'Unset',
'settings.profile.unchanged': 'Unchanged',
+ 'settings.export': 'Export Player Data',
}
export const EN_REF_USERBOX = {
diff --git a/AquaNet/src/libs/i18n/zh.ts b/AquaNet/src/libs/i18n/zh.ts
index 873aa8ce..ea0dccd0 100644
--- a/AquaNet/src/libs/i18n/zh.ts
+++ b/AquaNet/src/libs/i18n/zh.ts
@@ -150,6 +150,7 @@ const zhSettings: typeof EN_REF_SETTINGS = {
'settings.profile.bio': '简介',
'settings.profile.unset': '未设置',
'settings.profile.unchanged': '未更改',
+ 'settings.export': '导出玩家数据',
}
export const ZH = { ...zhUser, ...zhWelcome, ...zhGeneral,
diff --git a/AquaNet/src/libs/sdk.ts b/AquaNet/src/libs/sdk.ts
index 3a456206..041e7ed0 100644
--- a/AquaNet/src/libs/sdk.ts
+++ b/AquaNet/src/libs/sdk.ts
@@ -46,7 +46,7 @@ export function fetchWithParams(input: URL | RequestInfo, init?: RequestInitWith
const cache: { [index: string]: any } = {}
-export async function post(endpoint: string, params: any, init?: RequestInitWithParams): Promise {
+export async function post(endpoint: string, params: Record = {}, init?: RequestInitWithParams): Promise {
// Add token if exists
const token = localStorage.getItem('token')
if (token && !('token' in params)) params = { ...(params ?? {}), token }
@@ -301,6 +301,8 @@ export const GAME = {
post(`/api/v2/game/${game}/ranking`, { }),
changeName: (game: GameName, newName: string): Promise<{ newName: string }> =>
post(`/api/v2/game/${game}/change-name`, { newName }),
+ export: (game: GameName): Promise> =>
+ post(`/api/v2/game/${game}/export`),
}
export const DATA = {
diff --git a/src/main/java/icu/samnyan/aqua/net/games/ImportController.kt b/src/main/java/icu/samnyan/aqua/net/games/ImportController.kt
index f44ff0d9..1156eaeb 100644
--- a/src/main/java/icu/samnyan/aqua/net/games/ImportController.kt
+++ b/src/main/java/icu/samnyan/aqua/net/games/ImportController.kt
@@ -108,11 +108,11 @@ abstract class ImportController, UserModel:
// Check existing data
userDataRepo.findByCard(u.ghostCard)?.also { gu ->
// Store a backup of the old data
- val fl = "mai2-backup-${u.auId}-${LocalDateTime.now().urlSafeStr()}.json"
+ val fl = "${game}-backup-${u.auId}-${LocalDateTime.now().urlSafeStr()}.json"
(Path(netProps.importBackupPath) / fl).writeText(export(u).toJson())
// Delete the old data (After migration v1000.7, all user-linked entities have ON DELETE CASCADE)
- log.info("Mai2 Import: Deleting old data for user ${u.auId}")
+ log.info("$game Import: Deleting old data for user ${u.auId}")
userDataRepo.delete(gu)
userDataRepo.flush()
}