# Bible Quiz App API A RESTful API for a Bible quiz application built with FastAPI and SQLite. ## Features - Comprehensive Bible quiz management system - Categories management (e.g., Old Testament, New Testament, etc.) - Questions and answers with difficulty levels and Bible references - Quiz creation and management - User quiz results tracking - RESTful API with full CRUD operations - SQLite database with SQLAlchemy ORM - Alembic migrations for database versioning ## API Endpoints ### Health Check - `GET /health`: Check if the API is running properly ### Categories - `GET /api/v1/categories`: Get all categories - `GET /api/v1/categories/{category_id}`: Get a specific category - `POST /api/v1/categories`: Create a new category - `PUT /api/v1/categories/{category_id}`: Update a category - `DELETE /api/v1/categories/{category_id}`: Delete a category ### Questions - `GET /api/v1/questions`: Get all questions (with optional filtering) - `GET /api/v1/questions/{question_id}`: Get a specific question - `POST /api/v1/questions`: Create a new question - `PUT /api/v1/questions/{question_id}`: Update a question - `DELETE /api/v1/questions/{question_id}`: Delete a question ### Quizzes - `GET /api/v1/quizzes`: Get all quizzes (with optional filtering) - `GET /api/v1/quizzes/{quiz_id}`: Get a specific quiz with its questions - `POST /api/v1/quizzes`: Create a new quiz - `PUT /api/v1/quizzes/{quiz_id}`: Update a quiz - `DELETE /api/v1/quizzes/{quiz_id}`: Delete a quiz ### Results - `GET /api/v1/results`: Get all quiz results - `GET /api/v1/results/{result_id}`: Get a specific result - `GET /api/v1/results/user/{user_id}`: Get all results for a specific user - `POST /api/v1/results`: Create a new quiz result ## Prerequisites - Python 3.8+ - pip (Python package installer) ## Installation 1. Clone the repository: ``` git clone https://github.com/yourusername/biblequizappapi.git cd biblequizappapi ``` 2. Install the required packages: ``` pip install -r requirements.txt ``` 3. Run database migrations: ``` alembic upgrade head ``` 4. Start the application: ``` uvicorn main:app --reload ``` ## Environment Variables The application uses the following environment variables: - `SECRET_KEY`: Secret key for tokens (defaults to "insecuresecretkey" if not provided) - `ACCESS_TOKEN_EXPIRE_MINUTES`: Token expiration time in minutes (defaults to 10080 - 7 days) ## API Documentation Once the application is running, you can access the Swagger UI documentation at: - Swagger UI: `http://localhost:8000/docs` - ReDoc: `http://localhost:8000/redoc` - OpenAPI JSON: `http://localhost:8000/openapi.json` ## Development ### Project Structure ``` . ├── alembic.ini # Alembic configuration ├── app # Application package │ ├── api # API endpoints │ │ └── v1 # API version 1 │ │ ├── endpoints # API endpoint modules │ │ └── router.py # API router │ ├── core # Core modules │ │ └── config.py # Configuration settings │ ├── db # Database modules │ │ └── session.py # Database session │ ├── models # SQLAlchemy models │ ├── schemas # Pydantic schemas │ └── services # Business logic services ├── main.py # Application entry point ├── migrations # Alembic migrations │ ├── env.py # Alembic environment │ ├── README # Migrations readme │ ├── script.py.mako # Migration script template │ └── versions # Migration versions └── requirements.txt # Project dependencies ``` ### Adding New Features 1. Create/update SQLAlchemy models in `app/models/` 2. Create/update Pydantic schemas in `app/schemas/` 3. Create/update service functions in `app/services/` 4. Create/update API endpoints in `app/api/v1/endpoints/` 5. Add routes to the router in `app/api/v1/router.py` 6. Generate new migration with Alembic if needed: ``` alembic revision --autogenerate -m "your_migration_description" ``` 7. Apply migrations: ``` alembic upgrade head ``` ## License This project is licensed under the MIT License - see the LICENSE file for details.