API для системы аренды автомобилей, позволяющее управлять автомобилями, арендами, отзывами и пользователями. Поддерживает роли пользователей (клиент, менеджер, администратор) с различными уровнями доступа.
- Язык: Node.js
- Фреймворк: Fastify
- База данных: PostgreSQL
- Логирование: Winston
- Аутентификация: JWT (JSON Web Tokens)
- Миграции и сиды: node-pg-migrate
- Node.js v22 или выше
- PostgreSQL v10 или выше
- npm v10 или выше
- Настроенные переменные окружения (см.
.env.example)
-
Клонируйте репозиторий:
git clone https://github.com/Espyz/AutoArenda.git cd AutoArenda -
Установите зависимости:
npm install
-
Настройте переменные окружения: Скопируйте
.env.exampleв.envи заполните значения:DATABASE_URL=postgres://user:password@localhost:5432/autoarenda PRIVATE_KEY=your_jwt_secret_key API=/api/v1/
-
Выполните миграции базы данных:
npm run migrate
-
Запустите сервер:
npm run start
Сервер будет доступен по адресу
http://localhost:3000.
API предоставляет CRUD-операции для следующих сущностей:
- Cars (автомобили)
- Rentals (аренды)
- Reviews (отзывы)
- Users (пользователи)
-
Получите JWT-токен:
curl -X POST http://localhost:3000/api/auth \ -H "Content-Type: application/json" \ -d '{"login":"Espyz","password":"1234"}'
Ответ:
{ "message": { "access": "your_jwt_token", "expireTime": "2025-05-31T09:30:43.022Z" }, "statusCode": 200 } -
Используйте токен в заголовке
accessдля защищенных маршрутов.
curl -X GET "http://localhost:3000/api/v1/cars?page=1&limit=10&type=sedan" \
-H "access: <token>"Ответ:
{
"message": [
{
"id": 1,
"brand": "Toyota",
"model": "Camry",
"year": 2021,
"type": "sedan",
"dayPrice": 5000,
"status": "available"
},
...
],
"statusCode": 200
}curl -X POST http://localhost:3000/api/v1/rentals \
-H "access: <token>" \
-H "Content-Type: application/json" \
-d '{"userId":1,"carId":1,"startDate":"2025-06-01","endDate":"2025-06-08"}'Ответ:
{
"message": {
"id": 1,
"userId": 1,
"carId": 1,
"startDate": "2025-06-01",
"endDate": "2025-06-08",
"totalCost": 31500,
"status": "pending"
},
"statusCode": 200
}| Сущность | Маршрут | Метод | Описание | Доступ |
|---|---|---|---|---|
| Cars | /cars |
GET | Получить список автомобилей | Все роли |
| Cars | /cars/:id |
GET | Получить автомобиль по ID | Все роли |
| Cars | /cars |
POST | Создать автомобиль | Менеджер, Админ |
| Cars | /cars/:id |
PUT | Обновить автомобиль | Менеджер, Админ |
| Cars | /cars/:id |
DELETE | Удалить автомобиль | Менеджер, Админ |
| Rentals | /rentals |
GET | Получить список аренд | Все роли (клиент — только свои) |
| Rentals | /rentals/:id |
GET | Получить аренду по ID | Все роли (клиент — только свою) |
| Rentals | /rentals |
POST | Создать аренду | Все роли |
| Rentals | /rentals/:id |
PUT | Обновить аренду | Менеджер, Админ |
| Rentals | /rentals/:id |
DELETE | Удалить аренду | Менеджер, Админ |
| Reviews | /reviews |
GET | Получить список отзывов | Все роли |
| Reviews | /reviews/:id |
GET | Получить отзыв по ID | Все роли |
| Reviews | /reviews |
POST | Создать отзыв | Все роли |
| Reviews | /reviews/:id |
PUT | Обновить отзыв | Все роли (клиент — только свой) |
| Reviews | /reviews/:id |
DELETE | Удалить отзыв | Все роли (клиент — только свой) |
| Users | /users/login |
POST | Вход (получить токен) | Все роли |
| Users | /users |
GET | Получить список пользователей | Админ |
| Users | /users/:id |
GET | Получить пользователя по ID | Админ |
| Users | /users |
POST | Создать пользователя | Админ |
| Users | /users/:id |
PUT | Обновить пользователя | Админ |
| Users | /users/:id |
DELETE | Удалить пользователя | Админ |
- Клиент (role: '1'): Может просматривать автомобили, создавать аренды, оставлять отзывы, просматривать свои аренды и отзывы.
- Менеджер (role: '2'): Может управлять автомобилями, арендами и отзывами.
- Администратор (role: '3'): Полный доступ, включая управление пользователями.
- 10% для аренды на 7–13 дней.
- 20% для аренды на 14 и более дней.
- Миграции создают таблицы
users,cars,rentals,reviews. - Сиды добавляют начальные данные:
- Пользователи: Espyz (admin), Zypse (client), Espyzz (manager).
- Автомобили: Toyota Camry, BMW X5, Honda Civic.
- Аренды и отзывы для тестовых данных.
Логи сохраняются через Winston:
- Информационные сообщения (например, успешное создание записи).
- Ошибки с трассировкой стека.
Для запуска в режиме разработки:
npm run start