Add unread indication to subscription cards

This commit is contained in:
Sami Abuzakuk
2025-10-14 20:23:21 +02:00
parent 6460cab465
commit 3c6acc9359
7 changed files with 46 additions and 13 deletions

View File

@@ -52,15 +52,6 @@ def hello():
return {"message": "Welcome to the Project Monitor API"}
# Subscriptions API Endpoints
@app.get("/subscriptions")
def list_subscriptions():
db = SessionLocal()
subscriptions = db.query(Subscription).all()
db.close()
return subscriptions
class SubscriptionCreate(BaseModel):
topic: str
@@ -69,10 +60,33 @@ class SubscriptionResponse(BaseModel):
id: int
topic: str
created_at: datetime
has_unread: bool
model_config = {"from_attributes": True}
# Subscriptions API Endpoints
@app.get("/subscriptions", response_model=list[SubscriptionResponse])
def list_subscriptions():
db = SessionLocal()
subscriptions = db.query(Subscription).all()
# TODO: find a better way to do this
for subscription in subscriptions:
not_viewed_count = (
db.query(Notification)
.filter(
Notification.subscription_id == subscription.id,
~Notification.viewed,
)
.count()
)
subscription.has_unread = not_viewed_count > 0
db.close()
return subscriptions
@app.get("/subscriptions/{subscription_id}", response_model=SubscriptionResponse)
def get_subscription(subscription_id: int):
db = SessionLocal()
@@ -82,6 +96,17 @@ def get_subscription(subscription_id: int):
if not subscription:
db.close()
raise HTTPException(status_code=404, detail="Subscription not found")
# checking if subscription has unread messages
subscription.has_unread = (
db.query(Notification)
.filter(
Notification.subscription_id == subscription_id and not Notification.viewed
)
.count()
> 0
)
db.close()
return subscription

View File

@@ -18,6 +18,7 @@ def fetch_ntfy_notifications(base_url, subscriptions):
notifications = []
for subscription in subscriptions:
print(f"Fetching notifications for {subscription.topic}")
topic = subscription.topic
last_message_id = subscription.last_message_id
since_param = "all" if last_message_id is None else last_message_id

View File

@@ -6,7 +6,10 @@ from sqlalchemy.sql.sqltypes import DateTime
import os
# Initialize the database
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./project_monitor.db")
DATABASE_URL = os.getenv("DATABASE_URL")
if not DATABASE_URL:
raise ValueError("DATABASE_URL environment variable is not set")
# SQLAlchemy setup
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})