Add unread indication to subscription cards
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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})
|
||||
|
||||
Reference in New Issue
Block a user