"""Public share links — viewing quiz info does not require a login.""" from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from app.database import get_db from app.models.quiz import Quiz from app.models.user import User from app.services.quiz_builder import category_breadcrumbs from app.models.question_category import QuestionCategory from app.utils.quiz_access import quiz_shareable_predicate router = APIRouter() @router.get("/{token}") def get_shared_quiz( token: str, db: Session = Depends(get_db), ): """Public quiz landing data; never exposes questions or answers.""" quiz = db.query(Quiz).filter( Quiz.share_token == token, Quiz.deleted_at.is_(None), Quiz.is_shared == 1, ).first() if not quiz or not db.query(Quiz.id).filter( Quiz.id == quiz.id, quiz_shareable_predicate()).first(): raise HTTPException(404, "Shared quiz not found") owner = db.get(User, quiz.user_id) if quiz.user_id else None categories = db.query(QuestionCategory).all() return { "quiz_id": quiz.id, "title": quiz.title, "mode": quiz.mode, "questions_count": quiz.questions_count, "time_limit_minutes": quiz.time_limit_minutes, "owner_name": owner.name if owner else None, "category": quiz.category.name if quiz.category else None, "category_breadcrumbs": category_breadcrumbs(categories, quiz.category_id) if quiz.category_id else [], }