added advanced workout
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
from datetime import date
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
from sqlalchemy.orm import Session
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
from app.auth.deps import get_current_user
|
||||
from app.daily.recap import RecapService
|
||||
from app.db.base import get_db
|
||||
from app.db.models import User
|
||||
from app.homelab.context import resolve_timezone
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("/daily/recaps")
|
||||
def list_daily_recaps(
|
||||
limit: int = 14,
|
||||
db: Session = Depends(get_db),
|
||||
user: User = Depends(get_current_user),
|
||||
):
|
||||
service = RecapService(db, user.id)
|
||||
rows = service.list_recaps(limit=limit)
|
||||
return {"ok": True, "recaps": [service.recap_to_dict(row) for row in rows]}
|
||||
|
||||
|
||||
@router.get("/daily/recaps/{day}")
|
||||
def get_daily_recap(
|
||||
day: str,
|
||||
db: Session = Depends(get_db),
|
||||
user: User = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
parsed_day = date.fromisoformat(day)
|
||||
except ValueError as exc:
|
||||
raise HTTPException(status_code=400, detail="Invalid date") from exc
|
||||
service = RecapService(db, user.id)
|
||||
row = service.get(parsed_day)
|
||||
if not row or row.status not in ("posted", "text_only"):
|
||||
raise HTTPException(status_code=404, detail="Recap not found")
|
||||
return {"ok": True, "recap": service.recap_to_dict(row)}
|
||||
|
||||
|
||||
@router.post("/daily/recaps/generate")
|
||||
async def generate_daily_recap(
|
||||
day: str | None = Query(None),
|
||||
force: bool = Query(False),
|
||||
db: Session = Depends(get_db),
|
||||
user: User = Depends(get_current_user),
|
||||
):
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from app.config import get_settings
|
||||
|
||||
target_day = date.fromisoformat(day) if day else datetime.now(timezone.utc).date()
|
||||
tz_name = resolve_timezone(db, user.id)
|
||||
try:
|
||||
tz = ZoneInfo(tz_name)
|
||||
except Exception:
|
||||
tz = ZoneInfo("Europe/Moscow")
|
||||
|
||||
settings = get_settings()
|
||||
image_enabled = settings.evening_summary_image_enabled and settings.comfyui_enabled
|
||||
service = RecapService(db, user.id)
|
||||
row = await service.generate_and_post(target_day, tz, image_enabled=image_enabled, force=force)
|
||||
if not row:
|
||||
raise HTTPException(status_code=400, detail="Cannot generate recap (character appearance missing)")
|
||||
return {"ok": row.status in ("posted", "text_only"), "recap": service.recap_to_dict(row)}
|
||||
Reference in New Issue
Block a user