from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from typing import List, Optional from app.db.session import get_db from app.schemas.quiz import QuizCreate, QuizResponse, QuizWithQuestionsResponse, QuizUpdate from app.services.quiz import create_quiz, get_quizzes, update_quiz, delete_quiz, get_quiz_with_questions router = APIRouter() @router.post("/", response_model=QuizResponse, status_code=status.HTTP_201_CREATED) def create_quiz_endpoint(quiz_data: QuizCreate, db: Session = Depends(get_db)): """Create a new quiz""" return create_quiz(db=db, quiz_data=quiz_data) @router.get("/{quiz_id}", response_model=QuizWithQuestionsResponse) def get_quiz_endpoint(quiz_id: int, db: Session = Depends(get_db)): """Get a specific quiz by ID including its questions""" db_quiz = get_quiz_with_questions(db=db, quiz_id=quiz_id) if db_quiz is None: raise HTTPException(status_code=404, detail="Quiz not found") return db_quiz @router.get("/", response_model=List[QuizResponse]) def get_quizzes_endpoint( skip: int = 0, limit: int = 100, category_id: Optional[int] = None, db: Session = Depends(get_db) ): """Get all quizzes with optional filtering""" return get_quizzes(db=db, skip=skip, limit=limit, category_id=category_id) @router.put("/{quiz_id}", response_model=QuizResponse) def update_quiz_endpoint(quiz_id: int, quiz_data: QuizUpdate, db: Session = Depends(get_db)): """Update a quiz""" db_quiz = update_quiz(db=db, quiz_id=quiz_id, quiz_data=quiz_data) if db_quiz is None: raise HTTPException(status_code=404, detail="Quiz not found") return db_quiz @router.delete("/{quiz_id}", status_code=status.HTTP_204_NO_CONTENT, response_model=None) def delete_quiz_endpoint(quiz_id: int, db: Session = Depends(get_db)): """Delete a quiz""" success = delete_quiz(db=db, quiz_id=quiz_id) if not success: raise HTTPException(status_code=404, detail="Quiz not found") return None