From f2f202de9ee3ddbf2dfdadc5c34be6cd19462be4 Mon Sep 17 00:00:00 2001 From: zurdi Date: Thu, 4 Jul 2024 00:51:17 +0200 Subject: [PATCH] add user collections to details --- backend/endpoints/responses/rom.py | 6 ++--- backend/handler/database/roms_handler.py | 8 +++++-- backend/models/rom.py | 4 ++-- .../__generated__/models/DetailedRomSchema.ts | 2 ++ .../src/components/Details/Info/FileInfo.vue | 24 +++++++++++++++++++ .../src/components/Details/Info/GameInfo.vue | 2 +- 6 files changed, 38 insertions(+), 8 deletions(-) diff --git a/backend/endpoints/responses/rom.py b/backend/endpoints/responses/rom.py index 4bd164007..81a35463b 100644 --- a/backend/endpoints/responses/rom.py +++ b/backend/endpoints/responses/rom.py @@ -148,7 +148,7 @@ class DetailedRomSchema(RomSchema): user_states: list[StateSchema] = Field(default_factory=list) user_screenshots: list[ScreenshotSchema] = Field(default_factory=list) user_notes: list[UserNotesSchema] = Field(default_factory=list) - collections: list[CollectionSchema] = Field(default_factory=list) + user_collections: list[CollectionSchema] = Field(default_factory=list) @classmethod def from_orm_with_request(cls, db_rom: Rom, request: Request) -> DetailedRomSchema: @@ -171,8 +171,8 @@ class DetailedRomSchema(RomSchema): for s in db_rom.screenshots if s.user_id == user_id ] - rom.collections = [ - CollectionSchema.model_validate(c) for c in db_rom.get_collections() + rom.user_collections = [ + CollectionSchema.model_validate(c) for c in db_rom.get_collections(user_id) ] return rom diff --git a/backend/handler/database/roms_handler.py b/backend/handler/database/roms_handler.py index ad5b6e862..44897ecc5 100644 --- a/backend/handler/database/roms_handler.py +++ b/backend/handler/database/roms_handler.py @@ -181,12 +181,16 @@ class DBRomsHandler(DBBaseHandler): @begin_session def get_rom_collections( - self, rom_id: int, session: Session = None + self, rom: Rom, user_id: int, session: Session = None ) -> list[Collection]: + return ( session.scalars( select(Collection) - .filter(Collection.roms.contains([rom_id])) + .filter( + func.json_contains(Collection.roms, f"{rom.id}"), + Collection.user_id == user_id, + ) .order_by(Collection.name.asc()) ) .unique() diff --git a/backend/models/rom.py b/backend/models/rom.py index e100c1e9f..cd34df019 100644 --- a/backend/models/rom.py +++ b/backend/models/rom.py @@ -104,10 +104,10 @@ class Rom(BaseModel): return db_rom_handler.get_sibling_roms(self) - def get_collections(self) -> list[Collection]: + def get_collections(self, user_id) -> list[Collection]: from handler.database import db_rom_handler - return db_rom_handler.get_rom_collections(self.id) + return db_rom_handler.get_rom_collections(self, user_id) # Metadata fields @property diff --git a/frontend/src/__generated__/models/DetailedRomSchema.ts b/frontend/src/__generated__/models/DetailedRomSchema.ts index 4df6c7079..9dad0491a 100644 --- a/frontend/src/__generated__/models/DetailedRomSchema.ts +++ b/frontend/src/__generated__/models/DetailedRomSchema.ts @@ -3,6 +3,7 @@ /* tslint:disable */ /* eslint-disable */ +import type { CollectionSchema } from "./CollectionSchema"; import type { RomIGDBMetadata } from "./RomIGDBMetadata"; import type { RomMobyMetadata } from "./RomMobyMetadata"; import type { RomSchema } from "./RomSchema"; @@ -58,5 +59,6 @@ export type DetailedRomSchema = { user_states?: Array; user_screenshots?: Array; user_notes?: Array; + user_collections?: Array; readonly sort_comparator: string; }; diff --git a/frontend/src/components/Details/Info/FileInfo.vue b/frontend/src/components/Details/Info/FileInfo.vue index 620c657e2..7ed3bb50c 100644 --- a/frontend/src/components/Details/Info/FileInfo.vue +++ b/frontend/src/components/Details/Info/FileInfo.vue @@ -1,5 +1,6 @@