A RESTful API for managing quizzes, exams, categories, users, and authentication. Built with Node.js, Express, and MongoDB.
This API provides endpoints for creating, retrieving, updating, and deleting quizzes, exams, categories, and users. It supports authentication via JWT and Google OAuth2 and implements role-based access control for admin and regular users. The API also includes input validation, error handling, and detailed documentation with Swagger.
-
User authentication & authorization (JWT, Google OAuth2)
-
Role-based access (Admin, User)
-
CRUD operations for:
- Users
- Categories
- Questions
- Exams
-
Middleware validation & error handling
-
API documentation with Swagger
-
Input validation with AJV
-
Secure password hashing & Google login support
- Backend: Node.js, Express.js
- Database: MongoDB (Mongoose ODM)
- Authentication: JWT + Google Passport
- Validation: AJV
- API Docs: Swagger
- Utilities: Custom error handling, status responses
git clone <repo-url>
cd quiz-app-api
npm install
npm run devGET /api/categories- Get all categoriesGET /api/categories/:id- Get category by IDPOST /api/categories- Create categoryPUT /api/categories/:id- Update categoryDELETE /api/categories/:id- Delete category
GET /api/questions- Get all or filtered questionsGET /api/questions/:id- Get question by IDPOST /api/questions- Create questionPUT /api/questions/:id- Update questionDELETE /api/questions/:id- Delete question
GET /api/exams- Get all examsGET /api/exams/:id- Get exam by IDPOST /api/exams- Create examPUT /api/exams/:id- Update examDELETE /api/exams/:id- Delete exam
POST /api/users/register- Register userPOST /api/users/login- Login userGET /api/auth/google- Authenticate by GoogleGET /api/auth/google/redirect- Redirect user after authenticating with Google
- Make sure to set environment variables in
.env - Use JWT token for authentication on protected routes
- API documentation is available at
/api-docsif Swagger is configured