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.question import QuestionCreate, QuestionResponse, QuestionUpdate from app.services.question import create_question, get_question, get_questions, update_question, delete_question router = APIRouter() @router.post("/", response_model=QuestionResponse, status_code=status.HTTP_201_CREATED) def create_question_endpoint(question_data: QuestionCreate, db: Session = Depends(get_db)): """Create a new question""" return create_question(db=db, question_data=question_data) @router.get("/{question_id}", response_model=QuestionResponse) def get_question_endpoint(question_id: int, db: Session = Depends(get_db)): """Get a specific question by ID""" db_question = get_question(db=db, question_id=question_id) if db_question is None: raise HTTPException(status_code=404, detail="Question not found") return db_question @router.get("/", response_model=List[QuestionResponse]) def get_questions_endpoint( skip: int = 0, limit: int = 100, category_id: Optional[int] = None, difficulty: Optional[str] = None, db: Session = Depends(get_db) ): """Get all questions with optional filtering""" return get_questions(db=db, skip=skip, limit=limit, category_id=category_id, difficulty=difficulty) @router.put("/{question_id}", response_model=QuestionResponse) def update_question_endpoint(question_id: int, question_data: QuestionUpdate, db: Session = Depends(get_db)): """Update a question""" db_question = update_question(db=db, question_id=question_id, question_data=question_data) if db_question is None: raise HTTPException(status_code=404, detail="Question not found") return db_question @router.delete("/{question_id}", status_code=status.HTTP_204_NO_CONTENT, response_model=None) def delete_question_endpoint(question_id: int, db: Session = Depends(get_db)): """Delete a question""" success = delete_question(db=db, question_id=question_id) if not success: raise HTTPException(status_code=404, detail="Question not found") return None