feat: expose rom sort_name in edit form

Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-05-31 16:24:32 +00:00
committed by GitHub
parent 280092d38a
commit 3f98aa16f4
10 changed files with 36 additions and 5 deletions

View File

@@ -246,6 +246,7 @@ class RomSchema(BaseModel):
fs_size_bytes: int
name: str | None
sort_name: str | None
slug: str | None
summary: str | None

View File

@@ -131,6 +131,7 @@ class RomUpdateForm(BaseModel):
default=None, description="Raw manual metadata as JSON string."
)
name: str | None = None
sort_name: str | None = None
summary: str | None = None
fs_name: str | None = None
url_cover: str | None = None
@@ -190,6 +191,7 @@ async def parse_rom_update_form(
raw_hltb_metadata: str | None = Form(default=None),
raw_manual_metadata: str | None = Form(default=None),
name: str | None = Form(default=None),
sort_name: str | None = Form(default=None),
summary: str | None = Form(default=None),
fs_name: str | None = Form(default=None),
url_cover: str | None = Form(default=None),
@@ -218,6 +220,7 @@ async def parse_rom_update_form(
"raw_hltb_metadata": raw_hltb_metadata,
"raw_manual_metadata": raw_manual_metadata,
"name": name,
"sort_name": sort_name,
"summary": summary,
"fs_name": fs_name,
"url_cover": url_cover,
@@ -1108,6 +1111,7 @@ async def update_rom(
"hltb_id": None,
"libretro_id": None,
"name": rom.fs_name,
"sort_name": None,
"summary": "",
"url_screenshots": [],
"path_screenshots": [],
@@ -1294,6 +1298,11 @@ async def update_rom(
cleaned_data.update(
{
"name": form_data.name if "name" in provided_fields else rom.name,
"sort_name": (
form_data.sort_name or None
if "sort_name" in provided_fields
else rom.sort_name
),
"summary": (
form_data.summary if "summary" in provided_fields else rom.summary
),

View File

@@ -74,6 +74,7 @@ def test_update_rom(
data={
"igdb_id": str(MOCK_IGDB_ID),
"name": "Metroid Prime Remastered",
"sort_name": "Metroid Prime",
"slug": "metroid-prime-remastered",
"fs_name": "Metroid Prime Remastered.zip",
"summary": "summary test",
@@ -99,6 +100,7 @@ def test_update_rom(
body = response.json()
assert body["fs_name"] == "Metroid Prime Remastered.zip"
assert body["sort_name"] == "Metroid Prime"
assert rename_fs_rom_mock.called
assert get_rom_by_id_mock.called
@@ -420,7 +422,10 @@ class TestUpdateMetadataIDs:
response = client.put(
f"/api/roms/{rom.id}",
headers={"Authorization": f"Bearer {access_token}"},
data={"igdb_id": str(MOCK_IGDB_ID)},
data={
"igdb_id": str(MOCK_IGDB_ID),
"sort_name": "Imported sort title",
},
)
assert response.status_code == status.HTTP_200_OK
@@ -1101,7 +1106,10 @@ class TestUnmatchMetadata:
initial_response = client.put(
f"/api/roms/{rom.id}",
headers={"Authorization": f"Bearer {access_token}"},
data={"igdb_id": str(MOCK_IGDB_ID)},
data={
"igdb_id": str(MOCK_IGDB_ID),
"sort_name": "Imported sort title",
},
)
assert initial_response.status_code == status.HTTP_200_OK
assert get_rom_by_id_mock.called
@@ -1109,6 +1117,7 @@ class TestUnmatchMetadata:
initial_body = initial_response.json()
assert initial_body["igdb_id"] == MOCK_IGDB_ID
assert initial_body["igdb_metadata"] is not None
assert initial_body["sort_name"] == "Imported sort title"
# Now unmatch all metadata
response = client.put(
@@ -1131,6 +1140,7 @@ class TestUnmatchMetadata:
assert body["hltb_id"] is None
assert body["name"] == rom.fs_name
assert body["sort_name"] is None
assert body["summary"] == ""
assert body["url_cover"] == ""
assert body["slug"] == ""

View File

@@ -27,9 +27,9 @@ export type Body_update_rom_api_roms__id__put = {
raw_hltb_metadata?: (string | null);
raw_manual_metadata?: (string | null);
name?: (string | null);
sort_name?: (string | null);
summary?: (string | null);
fs_name?: (string | null);
url_cover?: (string | null);
url_manual?: (string | null);
};

View File

@@ -47,6 +47,7 @@ export type DetailedRomSchema = {
fs_path: string;
fs_size_bytes: number;
name: (string | null);
sort_name: (string | null);
slug: (string | null);
summary: (string | null);
alternative_names: Array<string>;
@@ -99,4 +100,3 @@ export type DetailedRomSchema = {
user_collections: Array<UserCollectionSchema>;
all_user_notes: Array<UserNoteSchema>;
};

View File

@@ -40,6 +40,7 @@ export type SimpleRomSchema = {
fs_path: string;
fs_size_bytes: number;
name: (string | null);
sort_name: (string | null);
slug: (string | null);
summary: (string | null);
alternative_names: Array<string>;
@@ -85,4 +86,3 @@ export type SimpleRomSchema = {
merged_ra_metadata: (RomRAMetadata | null);
sibling_ids: Array<number>;
};

View File

@@ -312,6 +312,14 @@ function handleRomUpdateFromMetadata(updatedRom: UpdateRom) {
variant="outlined"
class="my-4"
/>
<v-text-field
hide-details
v-model="rom.sort_name"
clearable
:label="t('rom.sort-name')"
variant="outlined"
class="my-4"
/>
<v-text-field
hide-details
v-model="rom.fs_name"

View File

@@ -95,6 +95,7 @@
"status-never-playing": "Never Playing",
"status-now-playing": "Now Playing",
"status-retired": "Retired",
"sort-name": "Sort name",
"summary": "Summary",
"switch-version": "Switch version",
"tags": "Tags",

View File

@@ -95,6 +95,7 @@
"status-never-playing": "Never Playing",
"status-now-playing": "Now Playing",
"status-retired": "Retired",
"sort-name": "Sort name",
"summary": "Summary",
"switch-version": "Switch version",
"tags": "Tags",

View File

@@ -454,6 +454,7 @@ async function updateRom({
const fields: FormInputField<UpdateRomInput>[] = [
["name", rom.name],
["sort_name", rom.sort_name],
["fs_name", rom.fs_name],
["summary", rom.summary],
["igdb_id", toFormIdValue(rom.igdb_id)],