Added updated_after query parameter for platform and rom endpoints.

This commit is contained in:
Brandon T. Kowalski
2026-01-12 19:37:36 -05:00
parent 751aff57cd
commit 5b5dc68f58
4 changed files with 27 additions and 3 deletions

View File

@@ -1,8 +1,9 @@
from datetime import datetime
from typing import Annotated
from fastapi import Body
from fastapi import Path as PathVar
from fastapi import Request, status
from fastapi import Query, Request, status
from decorators.auth import protected_route
from endpoints.responses.platform import PlatformSchema
@@ -48,11 +49,20 @@ async def add_platform(
@protected_route(router.get, "", [Scope.PLATFORMS_READ])
def get_platforms(request: Request) -> list[PlatformSchema]:
def get_platforms(
request: Request,
updated_after: Annotated[
datetime | None,
Query(
description="Filter platforms updated after this datetime (ISO 8601 format)."
),
] = None,
) -> list[PlatformSchema]:
"""Retrieve platforms."""
return [
PlatformSchema.model_validate(p) for p in db_platform_handler.get_platforms()
PlatformSchema.model_validate(p)
for p in db_platform_handler.get_platforms(updated_after=updated_after)
]

View File

@@ -405,6 +405,10 @@ def get_roms(
str,
Query(description="Order direction, either 'asc' or 'desc'."),
] = "asc",
updated_after: Annotated[
datetime | None,
Query(description="Filter roms updated after this datetime (ISO 8601 format)."),
] = None,
) -> CustomLimitOffsetPage[SimpleRomSchema]:
"""Retrieve roms."""
query, order_by_attr = db_rom_handler.get_roms_query(
@@ -450,6 +454,7 @@ def get_roms(
statuses_logic=statuses_logic,
player_counts_logic=player_counts_logic,
group_by_meta_id=group_by_meta_id,
updated_after=updated_after,
)
# Get the char index for the roms

View File

@@ -1,5 +1,6 @@
import functools
from collections.abc import Sequence
from datetime import datetime
from sqlalchemy import delete, or_, select, update
from sqlalchemy.orm import Query, Session, selectinload
@@ -65,9 +66,12 @@ class DBPlatformsHandler(DBBaseHandler):
@with_firmware
def get_platforms(
self,
updated_after: datetime | None = None,
query: Query = None, # type: ignore
session: Session = None, # type: ignore
) -> Sequence[Platform]:
if updated_after:
query = query.filter(Platform.updated_at > updated_after)
return session.scalars(query.order_by(Platform.name.asc())).unique().all()
@begin_session

View File

@@ -1,5 +1,6 @@
import functools
from collections.abc import Iterable, Sequence
from datetime import datetime
from typing import Any
from sqlalchemy import (
@@ -510,6 +511,7 @@ class DBRomsHandler(DBBaseHandler):
statuses_logic: str = "any",
player_counts_logic: str = "any",
user_id: int | None = None,
updated_after: datetime | None = None,
session: Session = None, # type: ignore
) -> Query[Rom]:
from handler.scan_handler import MetadataSource
@@ -563,6 +565,9 @@ class DBRomsHandler(DBBaseHandler):
if verified:
query = self.filter_by_verified(query)
if updated_after:
query = query.filter(Rom.updated_at > updated_after)
# BEWARE YE WHO ENTERS HERE 💀
if group_by_meta_id:
# Convert NULL is_main_sibling to 0 (false) so it sorts after true values