mirror of
https://github.com/rommapp/romm.git
synced 2026-02-18 00:27:41 +01:00
Added updated_after query parameter for platform and rom endpoints.
This commit is contained in:
@@ -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)
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user