feat: complete web UI — dashboard, articles, publish, settings, issues
Made-with: Cursor
This commit is contained in:
48
src/routes/articles.py
Normal file
48
src/routes/articles.py
Normal file
@@ -0,0 +1,48 @@
|
||||
import json
|
||||
from datetime import date, timedelta
|
||||
from flask import Blueprint, render_template, request
|
||||
|
||||
from src.models import Article
|
||||
|
||||
articles_bp = Blueprint("articles", __name__)
|
||||
|
||||
|
||||
@articles_bp.route("/articles")
|
||||
def index():
|
||||
week_filter = request.args.get("week")
|
||||
category_filter = request.args.get("category")
|
||||
|
||||
query = Article.query
|
||||
|
||||
if week_filter:
|
||||
try:
|
||||
year, week_num = week_filter.split("-W")
|
||||
week_start = date.fromisocalendar(int(year), int(week_num), 1)
|
||||
week_end = week_start + timedelta(days=6)
|
||||
query = query.filter(
|
||||
Article.pub_date >= str(week_start),
|
||||
Article.pub_date < str(week_end + timedelta(days=1)),
|
||||
)
|
||||
except (ValueError, TypeError):
|
||||
pass
|
||||
|
||||
articles = query.order_by(Article.pub_date.desc()).all()
|
||||
|
||||
if category_filter:
|
||||
articles = [
|
||||
a for a in articles
|
||||
if category_filter in json.loads(a.categories)
|
||||
]
|
||||
|
||||
all_categories = set()
|
||||
for a in Article.query.all():
|
||||
for cat in json.loads(a.categories):
|
||||
all_categories.add(cat)
|
||||
|
||||
return render_template(
|
||||
"articles.html",
|
||||
articles=articles,
|
||||
categories=sorted(all_categories),
|
||||
week_filter=week_filter or "",
|
||||
category_filter=category_filter or "",
|
||||
)
|
||||
Reference in New Issue
Block a user