https://github.com/w1z2z/library-api
An application on NestJS that provides a RESTful API for managing books and has a user authentication system.
https://github.com/w1z2z/library-api
jwt nestjs postgresql prisma redis rest-api swagger
Last synced: 3 months ago
JSON representation
An application on NestJS that provides a RESTful API for managing books and has a user authentication system.
- Host: GitHub
- URL: https://github.com/w1z2z/library-api
- Owner: w1z2z
- Created: 2024-04-06T01:37:09.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-04-06T01:46:15.000Z (over 2 years ago)
- Last Synced: 2024-04-28T02:23:15.931Z (about 2 years ago)
- Topics: jwt, nestjs, postgresql, prisma, redis, rest-api, swagger
- Language: TypeScript
- Homepage:
- Size: 101 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Тестовое задание: RESTful API для управления книгами с аутентификацией
## Цель
Создать приложение на NestJS, которое предоставляет RESTful API для управления книгами и имеет систему аутентификации пользователей.
## Установка и запуск
1. Создать файл .env и внести в него следующие данные (пример)
```yaml
PORT=8000
DATABASE_URL="postgresql://root:password@localhost:5432/books_db?schema=public"
POSTGRES_USER=root
POSTGRES_PASSWORD=password
POSTGRES_DB=books_db
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=root
JWT_SECRET=secret
```
2. Запустить докер контейнеры
```bash
docker-compose up --build
```
3. Докуменация swagger доступна по адресу [http://localhost:8000/](http://localhost:8000/)
## Основные требования
### 1. Модель данных
- **Пользователь**:
- ID (уникальный идентификатор)
- Имя пользователя
- Электронная почта (уникальная)
- Пароль (зашифрованный)
- **Книга**:
- ID (уникальный идентификатор)
- Название
- Автор
- Год издания
- Краткое описание
- ID пользователя (владельца книги)
### 2. CRUD операции
- `POST /users/register` – регистрация нового пользователя.
- `POST /users/login` – аутентификация пользователя и возврат JWT токена.
- `POST /books` – добавление новой книги (только для аутентифицированных пользователей).
- `GET /books` – получение списка всех книг.
- `GET /books/:id` – получение детальной информации о книге по ID.
- `PUT /books/:id` – обновление информации о книге по ID (только владелец книги).
- `DELETE /books/:id` – удаление книги по ID (только владелец книги).
### 3. Валидация
- Проверять наличие и формат обязательных полей при регистрации и добавлении книги.
### 4. Обработка ошибок
- Возвращать соответствующие сообщения об ошибках и HTTP статусы.
### 5. Хранение данных
- Для хранения данных использовать Postgres.
### 6. Аутентификация и авторизация
- Использовать JWT для аутентификации.
- Проверять права доступа пользователя к операциям с книгами.
- Список книг должен работать без авторизации
## Дополнительные задачи
1. **Пагинация**: Добавить возможность пагинации для `GET /books`.
2. **Фильтрация**: Добавить возможность фильтрации книг по автору или году издания.