git clone <project_remote_URL>
Before launching the API, you need to create a .env file containing the following information:
PORT=<a port>
DATABASE_URL="file:./dev.db"
JWT_SECRET=<a secret key>
JWT_EXPIRES_IN=10h
OLLAMA_URL='http://klebert-host.com:11434/api/generate'
Once the .env file is created and filled out, you can install the dependencies and launch the application with the following commands:
npm install
npx prisma db push
npx prisma generate
npm start
- Endpoint:
/quiz - Method:
POST - Description: Create a new quiz.
- Request Body:
category(Number, required, between 9 and 32)difficulty(String, required)amount(Number, required, 1-50)
- Endpoint:
/quiz/init - Method:
POST - Description: Initializes a new quiz for create a personalized one.
- Endpoint:
/quiz/search - Method:
GET - Description: Retrieve public quizzes using search parameters.
- Query Parameters:
text(String, optional)difficulty(String, optional)page(Number, optional, default: 1)pageSize(Number, optional, default: 10)
- Endpoint:
/quiz/:quiz_id - Method:
GET - Description: Retrieve detailed information about a specific quiz by its ID.
- Path Parameters:
quiz_id(String, required, format:^QU[A-Z0-9]{6}$)
- Endpoint:
/quiz/:quiz_id - Method:
POST - Description: Update an existing quiz.
- Path Parameters:
quiz_id(String, required)
- Request Body:
difficulty(String, optional, values:easy,medium,hard)title(String, optional)type(Number, optional)description(String, optional)
- Endpoint:
/quiz/:quiz_id/import_questions - Method:
POST - Description: Import questions into a quiz.
- Path Parameters:
quiz_id(String, required)
- Request Body:
category(Number, required, between 9 and 32)difficulty(String, required)amount(Number, required, 1-50)
- Endpoint:
/quiz/:quiz_id/:question_id - Method:
GET - Description: Retrieve information about a specific question.
- Path Parameters:
quiz_id(String, required)question_id(String, required)
- Endpoint:
/quiz/:quiz_id/create_question - Method:
POST - Description: Create a new question within a specific quiz.
- Path Parameters:
quiz_id(String, required)
- Request Body:
question_text(String, required)question_difficulty(String, required)question_category(String, required)question_type(String, required)options(Array, required, at least two options)option_text(String, required)is_correct_answer(Boolean, required)
- Endpoint:
/quiz/:quiz_id/:question_id - Method:
POST - Description: Update a question within a quiz.
- Path Parameters:
quiz_id(String, required)question_id(String, required)
- Request Body: (Partial fields allowed)
question_text,question_difficulty,question_category,question_type,options
- Endpoint:
/quiz/:quiz_id/:question_id - Method:
DELETE - Description: Delete a specific question from a quiz.
- Path Parameters:
quiz_id(String, required)question_id(String, required)
- Endpoint:
/game/user/started_games - Method:
GET - Description: Retrieve all games that have been started by the authenticated user.
- Endpoint:
/game/:quiz_id/create - Method:
GET - Description: Create a new game instance for a specific quiz.
- Path Parameters:
quiz_id(String, required)
- Endpoint:
/game/:game_id/question - Method:
GET - Description: Retrieve the current question for a given game.
- Path Parameters:
game_id(String, required, format:^GA[A-Z0-9]{6}$)
- Endpoint:
/game/:game_id/question - Method:
POST - Description: Submit an answer to a question in the game.
- Path Parameters:
game_id(String, required)
- Request Body:
question_index(Number, required)option_index(Number, required, 0-3)
- Endpoint:
/user/signup - Method:
POST - Description: Register a new user.
- Request Body:
username(String, required)password(String, required, 8-64 characters)
- Endpoint:
/user/username_available - Method:
POST - Description: Check if a given username is available.
- Request Body:
username(String, required)
- Endpoint:
/user/signin - Method:
POST - Description: Sign in an existing user.
- Request Body:
username(String, required)password(String, required)
- Endpoint:
/user/quizzes - Method:
GET - Description: Get quizzes created by the authenticated user.
- Endpoint:
/user/played_games - Method:
GET - Description: Retrieve games played by the authenticated user.
- Endpoint:
/user/:quiz_id - Method:
GET - Description: Retrieve a specific quiz created by the user.
- Path Parameters:
quiz_id(String, required)
- Endpoint:
/categories - Method:
GET - Description: Retrieve all available quiz categories.
- Endpoint:
/difficulties - Method:
GET - Description: Retrieve all available quiz difficulty levels.
- Quiz ID: Must match the pattern
^QU[A-Z0-9]{6}$ - Game ID: Must match the pattern
^GA[A-Z0-9]{6}$ - Category ID: Must be a number between 9 and 32
- Username: Must be between 8 and 64 characters in length
- Options: Each question must have at least two options, and one correct answer