diff --git a/backend/backend.py b/backend/backend.py index 9d02a9b..b1fbf66 100644 --- a/backend/backend.py +++ b/backend/backend.py @@ -1,5 +1,5 @@ from datetime import datetime -from fastapi import FastAPI +from fastapi import FastAPI, Query from fastapi.exceptions import HTTPException from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel @@ -144,11 +144,18 @@ def remove_subscription(subscription_id: int): @app.get("/subscriptions/{subscription_id}/notifications") -def list_subscription_notifications(subscription_id: int): +def list_subscription_notifications( + subscription_id: int, + limit: int = Query(20, ge=1, le=100), + offset: int = Query(0, ge=0), +): db = SessionLocal() notifications = ( db.query(Notification) .filter(Notification.subscription_id == subscription_id) + .order_by(Notification.created_at.desc()) + .limit(limit) + .offset(offset) .all() ) db.close() diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index ede24b7..6e85cde 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -205,11 +205,15 @@ export async function deleteSubscription(subscriptionId: number): Promise } } -// Get all subscription notifications +// Get subscription notifications with pagination export async function fetchSubscriptionNotifications( - subscriptionId: string + subscriptionId: string, + limit: number = 20, + offset: number = 0 ): Promise { - const response = await fetch(`${API_URL}/subscriptions/${subscriptionId}/notifications`); + const response = await fetch( + `${API_URL}/subscriptions/${subscriptionId}/notifications?limit=${limit}&offset=${offset}` + ); if (!response.ok) { throw new Error('Failed to fetch subscription notifications'); } diff --git a/frontend/src/routes/notifications/[subscription_id]/+page.svelte b/frontend/src/routes/notifications/[subscription_id]/+page.svelte index 2f6fede..002c2c8 100644 --- a/frontend/src/routes/notifications/[subscription_id]/+page.svelte +++ b/frontend/src/routes/notifications/[subscription_id]/+page.svelte @@ -1,15 +1,34 @@
@@ -57,9 +96,18 @@
← Return to Subscriptions - +
+ + +
{#if notifications.length === 0} @@ -89,6 +137,17 @@ {/each} {/if} + {#if !allLoaded && notifications.length > 0} +
+ +
+ {/if} {#if selectedNotification}