Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/abdullahmuhammed5/trivia


https://github.com/abdullahmuhammed5/trivia

Last synced: 11 days ago
JSON representation

Awesome Lists containing this project

README

        

# Full Stack Trivia API Project
This is quiz game project where you can test your general knowledge by taking one of our quizzes. :)

Project functionality are listed as following:

1) Display questions - both all questions and by category. Questions should show the question, category and difficulty rating by default and can show/hide the answer.
2) Delete questions.
3) Add questions and require that they include question and answer text.
4) Search for questions based on a text query string.
5) Play the quiz game, randomizing either all questions or within a specific category.

## Getting Started

### Installing Dependencies and packages
To use this project you should have Python3, pip, Nodejs, and npm installed.

#### Frontend Dependencies

This project uses NPM to manage software dependencies. NPM Relies on the package.json file located in the `frontend` directory of this repository. After cloning the repo, open your terminal and run:

```bash
cd frontend
npm install
```

#### Backend Dependencies

Once you have your virtual environment setup and running, install dependencies by navigating to the `/backend` directory and running:

```bash
pip install -r requirements.txt
```

## Running the Frontend in Dev Mode

In order to run the app in development mode use ```npm start```.

Open [http://localhost:3000](http://localhost:3000) to view it in the browser. The page will reload if you make edits.

```bash
npm start
```

## Running the backend Server

From `backend` directory. Run the following commands:

```bash
export FLASK_APP=flaskr
export FLASK_ENV=development
flask run
```
Now you have your server up and running on port 5000 of you localhost [http://localhost:5000](http://localhost:5000)

## Testing
To run the tests, run
```
dropdb trivia_test
createdb trivia_test
psql trivia_test < trivia.psql
python test_flaskr.py
```

## API Reference

### Getting Started

* Base URL: Currently this application is only hosted locally. The backend is hosted at `http://127.0.0.1:5000/`
* Authentication: This version does not require authentication or API keys.

### Error Handling

Errors are returned as JSON in the following format:

{
"success": False,
"error": 404,
"message": "resource not found"
}

The API will return three types of errors:

* 400 – bad request
* 404 – resource not found
* 422 – unprocessable
* 500 – internal server error

### Endpoints

#### GET api/categories

* General: Returns a list categories.
* Sample: `curl http://127.0.0.1:5000/api/categories`

{
"categories": {
"1": "Science",
"2": "Art",
"3": "Geography",
"4": "History",
"5": "Entertainment",
"6": "Sports"
},
"success": true
}

#### GET api/questions

* General:
* Returns a list questions.
* Results are paginated in groups of 10.
* Also returns list of categories and total number of questions.
* Sample: `curl http://127.0.0.1:5000/api/questions`

{
"categories": {
"1": "Science",
"2": "Art",
"3": "Geography",
"4": "History",
"5": "Entertainment",
"6": "Sports"
},
"questions": [
{
"answer": "Colorado, New Mexico, Arizona, Utah",
"category": 3,
"difficulty": 3,
"id": 164,
"question": "Which four states make up the 4 Corners region of the US?"
},
{
"answer": "Muhammad Ali",
"category": 4,
"difficulty": 1,
"id": 9,
"question": "What boxer's original name is Cassius Clay?"
},
{
"answer": "Apollo 13",
"category": 5,
"difficulty": 4,
"id": 2,
"question": "What movie earned Tom Hanks his third straight Oscar nomination, in 1996?"
},
{
"answer": "Tom Cruise",
"category": 5,
"difficulty": 4,
"id": 4,
"question": "What actor did author Anne Rice first denounce, then praise in the role of her beloved Lestat?"
},
{
"answer": "Edward Scissorhands",
"category": 5,
"difficulty": 3,
"id": 6,
"question": "What was the title of the 1990 fantasy directed by Tim Burton about a young man with multi-bladed appendages?"
},
{
"answer": "Brazil",
"category": 6,
"difficulty": 3,
"id": 10,
"question": "Which is the only team to play in every soccer World Cup tournament?"
},
{
"answer": "Uruguay",
"category": 6,
"difficulty": 4,
"id": 11,
"question": "Which country won the first ever soccer World Cup in 1930?"
},
{
"answer": "George Washington Carver",
"category": 4,
"difficulty": 2,
"id": 12,
"question": "Who invented Peanut Butter?"
},
{
"answer": "Lake Victoria",
"category": 3,
"difficulty": 2,
"id": 13,
"question": "What is the largest lake in Africa?"
},
{
"answer": "The Palace of Versailles",
"category": 3,
"difficulty": 3,
"id": 14,
"question": "In which royal palace would you find the Hall of Mirrors?"
}
],
"success": true,
"total_questions": 19
}

#### DELETE api/questions/\

* General:
* Deletes a question by id using url parameters.
* Returns id of deleted question upon success.
* Sample: `curl http://127.0.0.1:5000/api/questions/1 -X DELETE`

{
"deleted": 1,
"success": true
}

#### POST api/questions

This endpoint either creates a new question or returns search results.

1. If no search term is included in request:

* General:
* Creates a new question using JSON request parameters.
* Returns JSON object with newly created question, as well as paginated questions.
* Sample: `curl http://127.0.0.1:5000/api/questions -X POST -H "Content-Type: application/json" -d '{
"question": "What actor did author Anne Rice first denounce, then praise in the role of her beloved Lestat?",
"answer": "Michigan",
"difficulty": 4,
"category": "2"
}'`

{
"success": true,
"created": 20,
}

#### POST api/questions/search

* General:
* Searches for questions using search term in JSON request parameters.
* Returns JSON object with paginated matching questions.
* Sample: `curl http://127.0.0.1:5000/api/questions/search -X POST -H "Content-Type: application/json" -d '{"keyword": "which"}'`

{
"questions": [
{
"answer": "Brazil",
"category": 6,
"difficulty": 3,
"id": 10,
"question": "Which is the only team to play in every soccer World Cup tournament?"
},
{
"answer": "Uruguay",
"category": 6,
"difficulty": 4,
"id": 11,
"question": "Which country won the first ever soccer World Cup in 1930?"
},
{
"answer": "The Palace of Versailles",
"category": 3,
"difficulty": 3,
"id": 14,
"question": "In which royal palace would you find the Hall of Mirrors?"
},
{
"answer": "Agra",
"category": 3,
"difficulty": 2,
"id": 15,
"question": "The Taj Mahal is located in which Indian city?"
},
{
"answer": "Escher",
"category": 2,
"difficulty": 1,
"id": 16,
"question": "Which Dutch graphic artist\u2013initials M C was a creator of optical illusions?"
},
{
"answer": "Jackson Pollock",
"category": 2,
"difficulty": 2,
"id": 19,
"question": "Which American artist was a pioneer of Abstract Expressionism, and a leading exponent of action painting?"
},
{
"answer": "Scarab",
"category": 4,
"difficulty": 4,
"id": 23,
"question": "Which dung beetle was worshipped by the ancient Egyptians?"
},
{
"answer": "Michigan",
"category": 3,
"difficulty": 3,
"id": 173,
"question": "Which US state contains an area known as the Upper Penninsula?"
}
],
"success": true,
"total_results": 18
}

#### GET api/questions

* General:
* Gets questions by category id using url parameters.
* Returns JSON object with paginated matching questions.
* Sample: `curl http://127.0.0.1:5000/api/questions?category_id=1`

{
"categories": {
"1": "Science",
"2": "Art",
"3": "Geography",
"4": "History",
"5": "Entertainment",
"6": "Sports"
},
"questions": [
{
"answer": "The Liver",
"category": 1,
"difficulty": 4,
"id": 20,
"question": "What is the heaviest organ in the human body?"
},
{
"answer": "Alexander Fleming",
"category": 1,
"difficulty": 3,
"id": 21,
"question": "Who discovered penicillin?"
},
{
"answer": "Blood",
"category": 1,
"difficulty": 4,
"id": 22,
"question": "Hematology is a branch of medicine involving the study of what?"
}
],
"success": true,
"total_questions": 18
}

#### POST api/get-question

* General:
* Allows users to play the quiz game.
* Uses JSON request parameters of category and previous questions.
* Returns JSON object with random question not among previous questions.
* Sample: `curl http://127.0.0.1:5000/api/get-question -X POST -H "Content-Type: application/json" -d '{"previous_questions": [20, 21], "category": 1 }'`

{
"question": {
"answer": "Blood",
"category": 1,
"difficulty": 4,
"id": 22,
"question": "Hematology is a branch of medicine involving the study of what?"
},
"success": true
}