Skip to content

Latest commit

 

History

24 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Esagila

Esagila — это личная библиотека для отслеживания прочитанных книг пользователя. Пользователи могут искать книги, добавлять их в свою библиотеку, ставить оценки и оставлять отзывы. Администраторы управляют каталогом книг.

Stack

FastAPI, SQLAlchemy, Pydantic, PostgreSQL, JWT (python-jose), pwdlib (хэширование паролей), Docker

Возможности

Auth

Метод Путь Описание
POST /auth/register Регистрация
POST /auth/login Логин
POST /auth/refresh Обновление токена
POST /auth/logout Логаут (удаляет все refresh-токены пользователя)

Books

Метод Путь Описание
GET /books/ Список книг с поиском и пагинацией
GET /books/{book_id} Книга по id со средним рейтингом
GET /books/{book_id}/reviews Все отзывы на книгу
POST /books/ Создать книгу (admin only)
PUT /books/{book_id} Обновить книгу (admin only)
DELETE /books/{book_id} Удалить книгу (admin only)

User Books

Метод Путь Описание
GET /user_books/me Своя библиотека
GET /user_books/users/{user_id} Библиотека другого пользователя
GET /user_books/{book_id} Своя запись по книге
POST /user_books/{book_id} Добавить книгу в библиотеку
PUT /user_books/{book_id} Обновить оценку/отзыв
DELETE /user_books/{book_id} Удалить книгу из библиотеки

Архитектурные решения

Refresh token — UUID, не автоинкрементируемый. UUID делает refresh token непредсказуемым.

Refresh token ротируется при каждом /refresh. Старый токен удаляется, выдаётся новый.

Составной primary key (user_id, book_id) на UserBook. Структура таблицы не позволяет одному пользователю иметь две записи на одну книгу. Это гарантия на уровне БД, а не только в коде.

Logout удаляет все refresh-токены пользователя. Простое решение без отдельного трекинга сессий по устройствам.

Средний рейтинг книги считается на лету через SQL AVG. Рейтинг не хранится отдельным полем.

Как запустить

Локально

  1. Клонировать репозиторий:
git clone https://github.com/doedalus/esagila.git
cd esagila
  1. Установить зависимости:
pip install -r requirements.txt
  1. Создать .env по подобию .env.example.

  2. Запустить проект:

uvicorn app.main:app --reload

При первом запуске таблицы в базе данных создаются автоматически.

Docker

Для запуска проекта в Docker необходим установленный Docker.

  1. Клонировать репозиторий:
git clone https://github.com/doedalus/esagila.git
cd esagila
  1. Создать .env по подобию .env.example.

  2. Собрать Docker image:

docker build -t esagila:1.0 .
  1. Запустить контейнер:
docker run --name esagila -d --env-file .env -p 8000:8000 esagila:1.0

После запуска API доступно на http://localhost:8000.

About

REST API для отслеживания прочитанных книг: JWT-аутентификация, личная библиотека с оценками и отзывами, поиск и рейтинги.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages