From cd101758fd0ed5e5baff25ecf520707bbcae5901 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Mon, 8 Jun 2026 11:13:15 -0400 Subject: [PATCH] cleanup for simplicity --- backend/endpoints/responses/rom.py | 39 ++++++++++--------- backend/tests/endpoints/roms/test_rom.py | 1 - .../__generated__/models/DetailedRomSchema.ts | 2 +- .../__generated__/models/SimpleRomSchema.ts | 2 +- .../src/components/Details/Info/FileInfo.vue | 2 +- .../components/Details/VersionSwitcher.vue | 2 +- .../src/components/common/Game/Card/Base.vue | 4 +- .../components/common/Game/VirtualTable.vue | 4 +- frontend/src/services/api/firmware.ts | 4 +- frontend/src/services/api/save.ts | 7 +++- frontend/src/services/api/state.ts | 7 +++- frontend/src/utils/formData.ts | 2 +- 12 files changed, 41 insertions(+), 35 deletions(-) diff --git a/backend/endpoints/responses/rom.py b/backend/endpoints/responses/rom.py index 682cb1d43..19105d8e7 100644 --- a/backend/endpoints/responses/rom.py +++ b/backend/endpoints/responses/rom.py @@ -301,21 +301,23 @@ class RomSchema(BaseModel): merged_screenshots: list[str] merged_ra_metadata: RomRAMetadata | None - files: list[RomFileSchema] - siblings: list[SiblingRomSchema] + files: list[RomFileSchema] = Field(validation_alias="included_files") + sibling_roms: list[SiblingRomSchema] = Field( + validation_alias="included_sibling_roms" + ) @field_validator("files") def sort_files(cls, v: list[RomFileSchema]) -> list[RomFileSchema]: return sorted(v, key=lambda x: x.file_name) - @field_validator("siblings") - def sort_siblings(cls, v: list[SiblingRomSchema]) -> list[SiblingRomSchema]: + @field_validator("sibling_roms") + def sort_sibling_roms(cls, v: list[SiblingRomSchema]) -> list[SiblingRomSchema]: return sorted(v, key=lambda x: x.sort_comparator) @classmethod def populate_properties(cls, db_rom: Rom, request: Request) -> Rom: - db_rom.rom_user = RomUserSchema.for_user(request.user.id, db_rom) # type: ignore - db_rom.has_notes = any( # type: ignore + db_rom.rom_user = RomUserSchema.for_user(request.user.id, db_rom) # type: ignore[assignment] + db_rom.has_notes = any( # type: ignore[assignment] note.is_public or note.user_id == request.user.id for note in db_rom.notes ) return db_rom @@ -367,18 +369,18 @@ class SimpleRomSchema(RomSchema): siblings: Sequence[Rom] | None = None, ) -> SimpleRomSchema: db_rom = cls.populate_properties(db_rom, request) - db_rom.files = files or [] # type: ignore - db_rom.siblings = ( # type: ignore + db_rom.included_files = files or [] # type: ignore[assignment] + db_rom.included_sibling_roms = ( # type: ignore[assignment] [SiblingRomSchema.from_rom(s) for s in siblings] if siblings else [] ) return cls.model_validate(db_rom) @classmethod def from_orm_with_factory(cls, db_rom: Rom) -> SimpleRomSchema: - db_rom.rom_user = rom_user_schema_factory() # type: ignore - db_rom.files = [] # type: ignore - db_rom.siblings = [] # type: ignore - db_rom.has_notes = False # type: ignore + db_rom.rom_user = rom_user_schema_factory() # type: ignore[assignment] + db_rom.included_files = [] # type: ignore[assignment] + db_rom.included_sibling_roms = [] # type: ignore[assignment] + db_rom.has_notes = False # type: ignore[assignment] return cls.model_validate(db_rom) @@ -416,20 +418,21 @@ class DetailedRomSchema(RomSchema): (SiblingRomSchema.from_rom(s) for s in db_rom.sibling_roms), key=lambda x: x.sort_comparator, ) - db_rom.siblings = sorted_siblings # type: ignore + db_rom.included_sibling_roms = sorted_siblings # type: ignore[assignment] + db_rom.included_files = sorted(db_rom.files, key=lambda x: x.file_name) # type: ignore[assignment] - db_rom.user_saves = [ # type: ignore + db_rom.user_saves = [ # type: ignore[assignment] SaveSchema.model_validate(s) for s in db_rom.saves if s.user_id == user_id ] - db_rom.user_states = [ # type: ignore + db_rom.user_states = [ # type: ignore[assignment] StateSchema.model_validate(s) for s in db_rom.states if s.user_id == user_id ] - db_rom.user_screenshots = [ # type: ignore + db_rom.user_screenshots = [ # type: ignore[assignment] ScreenshotSchema.model_validate(s) for s in db_rom.screenshots if s.user_id == user_id ] - db_rom.user_collections = UserCollectionSchema.for_user( # type: ignore + db_rom.user_collections = UserCollectionSchema.for_user( # type: ignore[assignment] user_id, db_rom.collections ) @@ -456,7 +459,7 @@ class DetailedRomSchema(RomSchema): # Sort notes by updated_at (most recent first) all_notes.sort(key=lambda x: x.updated_at, reverse=True) - db_rom.all_user_notes = all_notes # type: ignore + db_rom.all_user_notes = all_notes # type: ignore[assignment] return cls.model_validate(db_rom) diff --git a/backend/tests/endpoints/roms/test_rom.py b/backend/tests/endpoints/roms/test_rom.py index ed0ebb499..4e55bf18e 100644 --- a/backend/tests/endpoints/roms/test_rom.py +++ b/backend/tests/endpoints/roms/test_rom.py @@ -16,7 +16,6 @@ from handler.metadata.ra_handler import RAGameRom, RAHandler from handler.metadata.ss_handler import SSHandler, SSRom from models.platform import Platform from models.rom import Rom, RomFile -from models.user import User MOCK_IGDB_ID = 11111 MOCK_MOBY_ID = 22222 diff --git a/frontend/src/__generated__/models/DetailedRomSchema.ts b/frontend/src/__generated__/models/DetailedRomSchema.ts index 597011c62..54bae3c88 100644 --- a/frontend/src/__generated__/models/DetailedRomSchema.ts +++ b/frontend/src/__generated__/models/DetailedRomSchema.ts @@ -91,7 +91,7 @@ export type DetailedRomSchema = { merged_screenshots: Array; merged_ra_metadata: (RomRAMetadata | null); files: Array; - siblings: Array; + sibling_roms: Array; user_saves: Array; user_states: Array; user_screenshots: Array; diff --git a/frontend/src/__generated__/models/SimpleRomSchema.ts b/frontend/src/__generated__/models/SimpleRomSchema.ts index 6c10e22c5..64ed5a43c 100644 --- a/frontend/src/__generated__/models/SimpleRomSchema.ts +++ b/frontend/src/__generated__/models/SimpleRomSchema.ts @@ -86,6 +86,6 @@ export type SimpleRomSchema = { merged_screenshots: Array; merged_ra_metadata: (RomRAMetadata | null); files: Array; - siblings: Array; + sibling_roms: Array; }; diff --git a/frontend/src/components/Details/Info/FileInfo.vue b/frontend/src/components/Details/Info/FileInfo.vue index 64325e4de..53eb45162 100644 --- a/frontend/src/components/Details/Info/FileInfo.vue +++ b/frontend/src/components/Details/Info/FileInfo.vue @@ -154,7 +154,7 @@ watch( diff --git a/frontend/src/components/Details/VersionSwitcher.vue b/frontend/src/components/Details/VersionSwitcher.vue index b4983ab55..071e3b740 100644 --- a/frontend/src/components/Details/VersionSwitcher.vue +++ b/frontend/src/components/Details/VersionSwitcher.vue @@ -25,7 +25,7 @@ function updateVersion() { max-width="fit-content" hide-details :items=" - [rom, ...rom.siblings].map((i) => ({ + [rom, ...rom.sibling_roms].map((i) => ({ title: i.fs_name_no_ext, value: i.id, })) diff --git a/frontend/src/components/common/Game/Card/Base.vue b/frontend/src/components/common/Game/Card/Base.vue index 9496cb5a3..308ee3517 100644 --- a/frontend/src/components/common/Game/Card/Base.vue +++ b/frontend/src/components/common/Game/Card/Base.vue @@ -374,10 +374,10 @@ onBeforeUnmount(() => { mdi-check-decagram-outline mdi-card-multiple-outline diff --git a/frontend/src/components/common/Game/VirtualTable.vue b/frontend/src/components/common/Game/VirtualTable.vue index 118689bb8..f0d1f4d09 100644 --- a/frontend/src/components/common/Game/VirtualTable.vue +++ b/frontend/src/components/common/Game/VirtualTable.vue @@ -310,10 +310,10 @@ function updateOptions({ sortBy }: { sortBy: SortBy }) { mdi-card-multiple-outline diff --git a/frontend/src/services/api/firmware.ts b/frontend/src/services/api/firmware.ts index 4325efd65..10746a843 100644 --- a/frontend/src/services/api/firmware.ts +++ b/frontend/src/services/api/firmware.ts @@ -1,6 +1,5 @@ import type { AddFirmwareResponse, - Body_add_firmware_api_firmware_post as AddFirmwareInput, BulkOperationResponse, FirmwareSchema, } from "@/__generated__"; @@ -28,8 +27,7 @@ async function uploadFirmware({ files: File[]; }) { const formData = new FormData(); - const typedFiles: AddFirmwareInput["files"] = files; - typedFiles.forEach((file) => formData.append("files", file)); + files.forEach((file) => formData.append("files", file)); const { data } = await firmwareApi.post( `/firmware`, diff --git a/frontend/src/services/api/save.ts b/frontend/src/services/api/save.ts index a770dda70..d6292b8b9 100644 --- a/frontend/src/services/api/save.ts +++ b/frontend/src/services/api/save.ts @@ -9,12 +9,15 @@ import { buildFormInput } from "@/utils/formData"; export const saveApi = api; -type SaveUploadInput = AddSaveInput & { +type SaveUploadInput = Omit & { saveFile: File; screenshotFile?: File; }; -type UpdateSaveUploadInput = UpdateSaveInput & { +type UpdateSaveUploadInput = Omit< + UpdateSaveInput, + "saveFile" | "screenshotFile" +> & { saveFile: File; screenshotFile?: File; }; diff --git a/frontend/src/services/api/state.ts b/frontend/src/services/api/state.ts index 77022061f..5b0abf229 100644 --- a/frontend/src/services/api/state.ts +++ b/frontend/src/services/api/state.ts @@ -9,12 +9,15 @@ import { buildFormInput } from "@/utils/formData"; export const stateApi = api; -type StateUploadInput = AddStateInput & { +type StateUploadInput = Omit & { stateFile: File; screenshotFile?: File; }; -type UpdateStateUploadInput = UpdateStateInput & { +type UpdateStateUploadInput = Omit< + UpdateStateInput, + "stateFile" | "screenshotFile" +> & { stateFile: File; screenshotFile?: File; }; diff --git a/frontend/src/utils/formData.ts b/frontend/src/utils/formData.ts index db681c970..0f3f99359 100644 --- a/frontend/src/utils/formData.ts +++ b/frontend/src/utils/formData.ts @@ -1,7 +1,7 @@ export type FormInputField< T extends Record, K extends keyof T = keyof T, -> = readonly [key: K, value: T[K], filename?: string]; +> = readonly [key: K, value: T[K] | Blob, filename?: string]; export function buildFormInput>( fields: ReadonlyArray>,