This project demonstrates a REST API implementation for managing items, written in TypeScript. It includes endpoints for CRUD operations and other functionalities for evaluating candidates during interviews.
- CRUD operations for items
- RESTful API design
- Get list items with pagination
- Input validation ex.
class-validator - Modular and scalable project structure
- Search and filter items (name, price range)
- Sorting items
- Cache result of each request for 60 seconds
http://localhost:3000
- POST
/items - Request Body:
[ { "name": "string", "price": number "amount": number } ] - Response:
[ { "id": "string", "name": "string", "price": number, "amount": number } ]
- GET
/items - Response:
[ { "id": "string", "name": "string", "price": number, "amount": number } ]
- GET
/items/:id - Response:
{ "id": "string", "name": "string", "price": number, "amount": number }
- PUT
/items/:id - Request Body:
{ "name": "string", "price": number, "amount": number } - Response:
{ "id": "string", "name": "string", "price": number, "amount": number }
- DELETE
/items/:id - Response:
{ "message": "Item deleted successfully" }
swe-interview/
├── data/ # Directory for mount to docker
├── migrations/ # Database migration file
├── seeds/ # Seed file
├── src/
│ ├── index.ts # Entry point
│ ├── knexfile.ts # Knex configuration
├── .eslintrc.json # ESLint configuration
├── .prettierrc # Prettier configuration
├── package.json # Dependencies and scripts
├── tsconfig.json # TypeScript configuration
├── jest.config.js # Jest configuration
├── docker-compose.yaml # Docker for PostgreSQL
└── README.md # Instructions for candidates
Ensure you have the following installed:
-
Clone the repository:
git clone https://github.com/your-repo/swe-interview.git cd swe-interview -
Install dependencies:
yarn install # or npm install -
Run PostgreSQL Local:
docker-compose up -d
-
Run database migration:
yarn run migrate
-
Run seed data:
yarn run seed
-
Run the project:
yarn dev # or npm run dev -
Access the API at
http://localhost:3000.