From 69ab9d96f7bc01b9bfe0b0a2d13c33e41d283526 Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Tue, 17 Dec 2024 20:09:48 -0500 Subject: [PATCH] [F] Fix userbox --- AquaNet/src/components/UserBox.svelte | 115 +++++++------------------- AquaNet/src/libs/generalTypes.ts | 16 +--- AquaNet/src/libs/sdk.ts | 26 ++---- 3 files changed, 40 insertions(+), 117 deletions(-) diff --git a/AquaNet/src/components/UserBox.svelte b/AquaNet/src/components/UserBox.svelte index c5b44edd..389850cd 100644 --- a/AquaNet/src/components/UserBox.svelte +++ b/AquaNet/src/components/UserBox.svelte @@ -4,7 +4,6 @@ import { UserBoxItemKind, type AquaNetUser, - type ChangeUserBoxReq, } from "../libs/generalTypes"; import { USER, USERBOX } from "../libs/sdk"; import { t, ts } from "../libs/i18n"; @@ -15,7 +14,6 @@ import Icon from "@iconify/svelte"; let user: AquaNetUser; - let aimeId = ""; let loading = true; let error = ""; let submitting = ""; @@ -137,28 +135,20 @@ back: undefined, } as Record; - function submit(body: ChangeUserBoxReq, field: string) { - if (submitting) return; - submitting = body.kind; + function submit(obj: { field: string; value: string }) { + if (submitting) return + submitting = obj.field - USERBOX.setUserBox(body) - .then(() => { - changed = changed.filter((c) => c !== field); - }) - .catch((e) => { - error = e.message; - submitting = ""; - }) - .finally(() => { - submitting = ""; - }); + USERBOX.setUserBox(obj) + .then(() => changed = changed.filter((c) => c !== obj.field)) + .catch(e => error = e.message) + .finally(() => submitting = "") } async function fetchData() { - const currentValues = await USERBOX.getProfile(aimeId).catch((e) => { + const currentValues = await USERBOX.getProfile().catch((e) => { loading = false; error = t("userbox.error.noprofile") - return; }); if(!currentValues) return; @@ -189,7 +179,7 @@ await Promise.all( userBoxItems.map(async (kind) => { // Populate info about the items - return USERBOX.getUnlockedItems(aimeId, kind).then((items) => { + return USERBOX.getUnlockedItems(kind).then((items) => { switch (kind) { case UserBoxItemKind.nameplate: // Add the item id and the label to the available options @@ -291,65 +281,22 @@ loading = false; } + const kindMap: Record = + { nameplate: "nameplateId", frame: "frameId", trophy: "trophyId", mapicon: "mapIconId", voice: "voiceId" } + const categories = ["wear", "head", "face", "skin", "item", "front", "back"] function generateBodyFromKind( - kind: - | "frame" - | "nameplate" - | "trophy" - | "mapicon" - | "voice" - | "wear" - | "head" - | "face" - | "skin" - | "item" - | "front" - | "back", + kind: "frame" | "nameplate" | "trophy" | "mapicon" | "voice" | "wear" | "head" | "face" | "skin" | "item" | "front" | "back", value: number, - aimeId: string, - ): ChangeUserBoxReq { - switch (kind) { - case "frame": - return { kind: "frame", frameId: value, aimeId }; - case "nameplate": - return { kind: "plate", nameplateId: value, aimeId }; - case "trophy": - return { kind: "trophy", trophyId: value, aimeId }; - case "mapicon": - return { kind: "mapicon", mapiconid: value, aimeId }; - case "voice": - return { kind: "sysvoice", voiceId: value, aimeId }; - case "wear": - return { kind: "avatar", accId: value, category: 1, aimeId }; - case "head": - return { kind: "avatar", accId: value, category: 2, aimeId }; - case "face": - return { kind: "avatar", accId: value, category: 3, aimeId }; - case "skin": - return { kind: "avatar", accId: value, category: 4, aimeId }; - case "item": - return { kind: "avatar", accId: value, category: 5, aimeId }; - case "front": - return { kind: "avatar", accId: value, category: 6, aimeId }; - case "back": - return { kind: "avatar", accId: value, category: 7, aimeId }; - } + ) { + if (kind in kindMap) return { field: kindMap[kind], value: `${value}` } + return { field: "avatar", value: `${categories.indexOf(kind) + 1}:${value}` } } - USER.me().then((u) => { - if (u) { - user = u; - const card = user.cards.length > 0 ? user.cards[0].luid : ""; - - aimeId = card; - - if (aimeId) { - fetchData(); - } else { - loading = false; - } - } - }); + USER.me().then(u => { + if (!u) throw new Error(t("userbox.error.noprofile")) + user = u + fetchData() + }).catch((e) => { loading = false; error = e.message }); {#if !loading && !error} @@ -402,7 +349,7 @@ if (newValue === undefined) return; - submit(generateBodyFromKind(key, newValue, aimeId), key); + submit(generateBodyFromKind(key, newValue)); }} > {#if submitting === key} @@ -547,8 +494,8 @@ &.active color: $c-main - - img + + img width: 100% height: auto @@ -596,12 +543,12 @@ img width: auto height: 100% - + .nameplate position: relative width: 400px - + > .trophy position: absolute top: 10px @@ -646,28 +593,28 @@ gap: 12px width: 100% flex-grow: 0 - + label display: flex flex-direction: column select width: 100% - + .field display: flex flex-direction: column width: 100% - + label max-width: max-content - + > div:not(.bool) display: flex align-items: center gap: 1rem margin-top: 0.5rem - + > select flex: 1 diff --git a/AquaNet/src/libs/generalTypes.ts b/AquaNet/src/libs/generalTypes.ts index 072a18b7..9114bdb7 100644 --- a/AquaNet/src/libs/generalTypes.ts +++ b/AquaNet/src/libs/generalTypes.ts @@ -173,18 +173,4 @@ export enum UserBoxItemKind { } // Define type only with the keys -export type UserBoxItemKindStr = keyof typeof UserBoxItemKind; - -type ChangePlateReq = {kind:'plate', nameplateId:number} -type ChangeFrameReq = {kind:'frame', frameId:number} -type ChangeTrophyReq = {kind:'trophy',trophyId:number} -type ChangeMapIconReq = {kind:'mapicon',mapiconid:number} -type ChangeVoiceReq = {kind:'sysvoice',voiceId:number} -type ChangeAvatarReq = { - kind:'avatar', - accId:number, - category:number -} - -export type ChangeUserBoxReq = {aimeId:string} & (ChangePlateReq | ChangeFrameReq | ChangeTrophyReq | ChangeMapIconReq | ChangeVoiceReq | ChangeAvatarReq); - +export type UserBoxItemKindStr = keyof typeof UserBoxItemKind diff --git a/AquaNet/src/libs/sdk.ts b/AquaNet/src/libs/sdk.ts index 45d7ee41..b1b647fd 100644 --- a/AquaNet/src/libs/sdk.ts +++ b/AquaNet/src/libs/sdk.ts @@ -8,7 +8,6 @@ import type { TrendEntry, AquaNetUser, GameOption, UserBox, - ChangeUserBoxReq, UserBoxItemKind } from './generalTypes' import type { GameName } from './scoring' @@ -94,6 +93,7 @@ export async function post(endpoint: string, params: Record = {}, i export async function get(endpoint: string, params:any,init?: RequestInitWithParams): Promise { // Add token if exists const token = localStorage.getItem('token') + if (token && !('token' in params)) params = { ...(params ?? {}), token } if (init?.localCache) { const cached = cache[endpoint + JSON.stringify(init)] @@ -262,23 +262,13 @@ export const USER = { } export const USERBOX = { - getAimeId:(cardId:string):Promise<{luid:string}|null> =>realPost('/api/sega/aime/getByAccessCode',{ accessCode:cardId }), - getProfile:(aimeId:string):Promise =>get('/api/game/chuni/v2/profile',{ aimeId }), - getUnlockedItems:(aimeId:string, itemId: UserBoxItemKind):Promise<{itemKind:number, itemId:number,stock:number,isValid:boolean}[]> => - get(`/api/game/chuni/v2/item/${itemId}`,{ aimeId }), - getItemLabels:() => { - const kinds = [ 'nameplate', 'frame', 'trophy', 'mapicon', 'sysvoice', 'avatar' ] - - return Promise.all(kinds.map(it => - get(`/api/game/chuni/v2/data/${it}`,{}).then((res:{id:number,name:string}[]) => - // Use the id as the key - res.reduce((acc, cur) => ({ ...acc, [cur.id]: cur.name }), {}) as { [index: number]: string } - ))).then(([ nameplate, frame, trophy, mapicon, sysvoice, avatar ]) => ({ - nameplate, frame, trophy, mapicon, sysvoice, avatar - })) - }, - setUserBox:({ kind,...body }:ChangeUserBoxReq) => - put(`/api/game/chuni/v2/profile/${kind}`, body), + getProfile: (): Promise => + get('/api/v2/game/chu3/user-box', {}), + getUnlockedItems: (itemId: UserBoxItemKind): Promise<{ itemKind: number, itemId: number, stock: number, isValid: boolean }[]> => + get(`/api/v2/game/chu3/user-box-item-by-kind`,{ itemId }), + getItemLabels: () => get(`/api/v2/game/chu3/user-box-all-items`, {}), + setUserBox: (d: { field: string, value: number | string }) => + post(`/api/v2/game/chu3/user-detail-set`, d), } export const CARD = {