Live Demo

https://online-quiz-game.onrender.com/

API Design

Authentication

Register

Endpoint(URL): /api/v1/auth/register
Request Method: POST
Request Body

  {
    "username": <USERNAME>,
    "email": <EMAIL>,
    "password": <PASSWORD>
  }

Success Response Body

  {
    "success": "true",
    "user": {
      "id": <ID>,
      "username": <USERNAME>
    }
  }

Failure Response Body (Bad Request)

{
  "success": "false",
  "message": "Please provide username, email, password!"
}

Login

Endpoint(URL): /api/v1/auth/login
Request Method: POST
Request Body

  {
    "email": <EMAIL>,
    "password": <PASSWORD>
  }

Success Response Body

  {
    "success": "true",
    "user": {
      "id": <ID>,
      "username": <USERNAME>
    }
  }

Failure Response Body (Unauthorized Error)
Email Not Found:

{
  "success": "false",
  "message": "Invalid Credentials!"
}

Incorrect Password:

{
  "success": "false",
  "message": "Incorrect password!"
}

Failure Response Body (Bad Request)
No password or email provided:

{
  "success": "false",
  "message": "Please provide valid email and password!"
}

Quizzes

Get All Quizzes

Endpoint(URL): `/api/v1/quizzes
Request Method: GET
Success Response Body

  {
    "success": "true",
    "quizzes": [
      {
        "id": <ID1>,
        "category": <CATEGORY>,
        "question": <QUESTION>,
        "options": [
          {
            "option": <OPTION1>,
            "isCorrect": <BOOLEAN>
          },
          {
            "option": <OPTION2>,
            "isCorrect": <BOOLEAN>
          },
          {
            "option": <OPTION3>,
            "isCorrect": <BOOLEAN>
          },
          {
            "option": <OPTION4>,
            "isCorrect": <BOOLEAN>
          }
        ]
      },
      {
        "id": <ID2>,
        "category": <CATEGORY>,
        "question": <QUESTION>,
        "options": [
          {
            "option": <OPTION1>,
            "isCorrect": <BOOLEAN>
          },
          {
            "option": <OPTION2>,
            "isCorrect": <BOOLEAN>
          },
          {
            "option": <OPTION3>,
            "isCorrect": <BOOLEAN>
          },
          {
            "option": <OPTION4>,
            "isCorrect": <BOOLEAN>
          }
        ]
      }
    ]
  }

Create Quiz

Endpoint(URL): /api/v1/quizzes
Request Method: POST
Request Body

  {
    "category": <CATEGORY>,
    "question": <QUESTION>,
    "options": [
      {
        "option": <OPTION1>,
        "isCorrect": <BOOLEAN>
      },
      {
        "option": <OPTION2>,
        "isCorrect": <BOOLEAN>
      },
      {
        "option": <OPTION3>,
        "isCorrect": <BOOLEAN>
      },
      {
        "option": <OPTION4>,
        "isCorrect": <BOOLEAN>
      }
    ]
  }

Success Response Body

  {
    "success": "true",
    "quiz": {
      "id": <ID>,
      "category": <CATEGORY>,
      "question": <QUESTION>,
      "options": [
        {
          "option": <OPTION1>,
          "isCorrect": <BOOLEAN>
        },
        {
          "option": <OPTION2>,
          "isCorrect": <BOOLEAN>
        },
        {
          "option": <OPTION3>,
          "isCorrect": <BOOLEAN>
        },
        {
          "option": <OPTION4>,
          "isCorrect": <BOOLEAN>
        }
      ]
    }
  }

Failure Response Body
No question provided:

{
  "success": "false",
  "message": "Please provide a question!"
}

No answers provided:

{
  "success": "false",
  "message": "Please provide all answers!"
}

Get Quizz

Endpoint(URL): /api/v1/quizzes/:id
Request Method: GET
Success Response Body

  {
    "success": "true",
    "quiz": {
      "id": <ID>,
      "category": <CATEGORY>,
      "question": <QUESTION>,
      "options": [
        {
          "option": <OPTION1>,
          "isCorrect": <BOOLEAN>
        },
        {
          "option": <OPTION2>,
          "isCorrect": <BOOLEAN>
        },
        {
          "option": <OPTION3>,
          "isCorrect": <BOOLEAN>
        },
        {
          "option": <OPTION4>,
          "isCorrect": <BOOLEAN>
        }
      ]
    }
  }

Failure Response Body (Not Found)

{
  "success": "false",
  "message": "There is no quiz with ID <ID>!"
}

Failure Response Body (Bad Request)

{
  "success": "false",
  "message": "ID syntax is not correct: Provide a valid ID please!"
}

Update Quiz

Endpoint(URL): /api/v1/quizzes/:id
Request Method: PUT
Request Body

  {
    "category": <CATEGORY>,
    "question": <QUESTION>,
    "options": [
      {
        "option": <OPTION1>,
        "isCorrect": <BOOLEAN>
      },
      {
        "option": <OPTION2>,
        "isCorrect": <BOOLEAN>
      },
      {
        "option": <OPTION3>,
        "isCorrect": <BOOLEAN>
      },
      {
        "option": <OPTION4>,
        "isCorrect": <BOOLEAN>
      }
    ]
  }

Success Response Body

  {
    "success": "true",
    "quiz": {
      "id": <ID>,
      "category": <CATEGORY>,
      "question": <QUESTION>,
      "answers": [
        {
          "option": <OPTION1>,
          "isCorrect": <BOOLEAN>
        },
        {
          "option": <OPTION2>,
          "isCorrect": <BOOLEAN>
        },
        {
          "option": <OPTION3>,
          "isCorrect": <BOOLEAN>
        },
        {
          "option": <OPTION4>,
          "isCorrect": <BOOLEAN>
        }
      ]
    }
  }

Failure Response Body (Not Found)

{
  "success": "false",
  "message": "There is no quiz with ID <ID>!"
}

Failure Response Body (Bad Request)

{
  "success": "false",
  "message": "ID syntax is not correct: Provide a valid ID please!"
}

Delete Quiz

Endpoint(URL): /api/v1/quizzes/:id
Request Method: PUT
Success Response Body

{
  "success": "true",
  "message": "Quiz with ID <ID> has been deleted successfully"
}

Failure Response Body (Not Found)

{
  "success": "false",
  "message": "There is no quiz with ID <ID>!"
}

Solo Game

New Solo Game

Endpoint(URL): /api/v1/solo-games/start
Request Method: POST
Request Body

  {
    "category": <CATEGORY>
  }

Success Response Body

  {
    "success": "true",
    "quizzes": [
      {
        "id": <ID1>,
        "category": <CATEGORY>,
        "question": <PATHNAME>,
        "options": [
          {
            "option": <OPTION1>,
            "isCorrect": <BOOLEAN>
          },
          {
            "option": <OPTION2>,
            "isCorrect": <BOOLEAN>
          },
          {
            "option": <OPTION3>,
            "isCorrect": <BOOLEAN>
          },
          {
            "option": <OPTION4>,
            "isCorrect": <BOOLEAN>
          }
        ]
      },
      {
        "id": <ID2>,
        "category": <CATEGORY>,
        "question": <PATHNAME>,
        "options": [
          {
            "option": <OPTION1>,
            "isCorrect": <BOOLEAN>
          },
          {
            "option": <OPTION2>,
            "isCorrect": <BOOLEAN>
          },
          {
            "option": <OPTION3>,
            "isCorrect": <BOOLEAN>
          },
          {
            "option": <OPTION4>,
            "isCorrect": <BOOLEAN>
          }
        ]
      },
      ...
    ]
  }

Solo Game

End Solo Game

Endpoint(URL): /api/v1/solo-games/end
Request Method: PUT
Request Body

  {
    "score": <SCORE>,
    "quizzes": [
      {
        "quizId": <QUIZID>,
        "answer": <ANSWER>
      },
      {
        "quizId": <QUIZID>,
        "answer": <ANSWER>
      },
      ...
    ],
  }

Success Response Body

  {
    "success": "true",
    "game": {
      score: <SCORE>,
      "quizzes": [
        {
          "quizId": <QUIZID>,
          "rightAnswer": <ANSWER>
        },
        {
          "quizId": <QUIZID>,
          "rightAnswer": <ANSWER>
        },
        ...
      ]
    }
  }