diff --git a/apps/api/src/gw2analytics_api/database.py b/apps/api/src/gw2analytics_api/database.py index 75321ebe..c6bfe1e6 100644 --- a/apps/api/src/gw2analytics_api/database.py +++ b/apps/api/src/gw2analytics_api/database.py @@ -115,5 +115,9 @@ def get_session() -> Iterator[Session]: session = get_sessionmaker()() try: yield session + session.commit() + except BaseException: + session.rollback() + raise finally: session.close() diff --git a/apps/api/src/gw2analytics_api/routes/fights/__init__.py b/apps/api/src/gw2analytics_api/routes/fights/__init__.py index 52bd413f..658e9fea 100644 --- a/apps/api/src/gw2analytics_api/routes/fights/__init__.py +++ b/apps/api/src/gw2analytics_api/routes/fights/__init__.py @@ -200,7 +200,11 @@ def list_fights( """ rows = ( db.execute( - select(OrmFight).order_by(OrmFight.started_at.desc()).limit(limit).offset(offset), + select(OrmFight) + .options(selectinload(OrmFight.agents), selectinload(OrmFight.skills)) + .order_by(OrmFight.started_at.desc()) + .limit(limit) + .offset(offset), ) .scalars() .all() diff --git a/apps/api/src/gw2analytics_api/routes/webhooks.py b/apps/api/src/gw2analytics_api/routes/webhooks.py index f02696e2..56091b7b 100644 --- a/apps/api/src/gw2analytics_api/routes/webhooks.py +++ b/apps/api/src/gw2analytics_api/routes/webhooks.py @@ -284,12 +284,17 @@ def create_webhook( @limiter.limit("30/minute") def list_webhooks( request: Request, # noqa: ARG001 + limit: int = Query(100, ge=1, le=1000), + offset: int = Query(0, ge=0), db: Session = Depends(get_session), # noqa: B008 ) -> list[WebhookSubscriptionOut]: """List active (non-revoked) webhook subscriptions. Secrets never returned.""" rows = ( db.execute( - select(OrmWebhookSubscription).where(OrmWebhookSubscription.revoked_at.is_(None)) + select(OrmWebhookSubscription) + .where(OrmWebhookSubscription.revoked_at.is_(None)) + .limit(limit) + .offset(offset), ) .scalars() .all() diff --git a/web/src/lib/api/schema.d.ts b/web/src/lib/api/schema.d.ts index 0b4e38dc..3e423445 100644 --- a/web/src/lib/api/schema.d.ts +++ b/web/src/lib/api/schema.d.ts @@ -2897,7 +2897,10 @@ export interface operations { }; list_webhooks_api_v1_webhooks_get: { parameters: { - query?: never; + query?: { + limit?: number; + offset?: number; + }; header?: never; path?: never; cookie?: never; @@ -2913,6 +2916,15 @@ export interface operations { "application/json": components["schemas"]["WebhookSubscriptionOut"][]; }; }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; }; }; create_webhook_api_v1_webhooks_post: {