def get_list_sources(list = fastapi.Depends(get_list_from_path)) -> typing.List[sources.Source]:
return list.sources
+@router.get("/{list}/reports")
+def get_list_reports(
+ list = fastapi.Depends(get_list_from_path),
+ open: bool | None = None,
+ limit: int | None = None
+) -> typing.List[reports.Report]:
+ return list.get_reports(open=open, limit=limit)
+
class CreateReport(pydantic.BaseModel):
# Domain
name : str
from . import checker
from . import database
from . import exporters
+from . import reports
from . import sources
from . import util
from .i18n import _
# Reports
reports : typing.List["Report"] = sqlmodel.Relationship(back_populates="list")
+ def get_reports(self, open=None, limit=None):
+ """
+ Fetches the most recent reports
+ """
+ stmt = (
+ sqlmodel
+ .select(
+ reports.Report,
+ )
+ .where(
+ reports.Report.list == self,
+ )
+ .order_by(
+ reports.Report.reported_at.desc(),
+ )
+ )
+
+ # Filter for open/closed reports only
+ if open is True:
+ stmt = stmt.where(
+ reports.Report.closed_at == False,
+ )
+ elif open is False:
+ stmt = stmt.where(
+ reports.Report.closed_at == True,
+ )
+
+ # Optionally apply the limit
+ if limit:
+ stmt = stmt.limit(limit)
+
+ return self.backend.db.fetch_as_list(stmt)
+
# Report!
def report(self, **kwargs):