Files
ShooterHub/blueprints/api/feed.py

38 lines
1.1 KiB
Python
Raw Normal View History

from flask import Blueprint, request
from sqlalchemy import func, select
from extensions import db
from models import ShootingSession
from .utils import ok, serialize_session
feed_bp = Blueprint("api_feed", __name__, url_prefix="/feed")
@feed_bp.get("/")
def feed():
try:
page = max(1, int(request.args.get("page", 1)))
per_page = min(100, max(1, int(request.args.get("per_page", 20))))
except (TypeError, ValueError):
page, per_page = 1, 20
total = db.session.scalar(
select(func.count()).select_from(ShootingSession)
.where(ShootingSession.is_public == True) # noqa: E712
) or 0
sessions = db.session.scalars(
select(ShootingSession)
.where(ShootingSession.is_public == True) # noqa: E712
.order_by(ShootingSession.session_date.desc(), ShootingSession.created_at.desc())
.offset((page - 1) * per_page)
.limit(per_page)
).all()
return ok({
"data": [serialize_session(s, include_user=True) for s in sessions],
"total": total,
"page": page,
"per_page": per_page,
})