mirror of
https://github.com/wowlikon/LiB.git
synced 2026-02-04 04:31:09 +00:00
d6ecd4066f9c25eaf770daea5a1c13a19a0bcec7
LiB
Веб-приложение библиотеки на FastAPI с современным REST API и веб-интерфейсом. Использует Pydantic для валидации данных, SQLModel для работы с базой данных, Alembic для миграций, PostgreSQL как СУБД и Docker Compose для развертывания.
Ключевые технологии:
- FastAPI: Высокопроизводительный веб-фреймворк для создания RESTful API с автоматической генерацией документации
- Pydantic: Валидация данных и сериализация с использованием аннотаций типов Python
- SQLModel: Объединение SQLAlchemy и Pydantic для работы с БД через классы Python
- Alembic: Инструмент для управления миграциями базы данных
- PostgreSQL: Надежная реляционная база данных
- Docker Compose: Упрощенное развертывание приложения и зависимостей в контейнерах
- Tailwind CSS: CSS-фреймворк для стилизации интерфейса
- Alpine.js: Легковесный JavaScript-фреймворк для реактивности
- Chart.js: Библиотека для визуализации данных
Инструкция по установке
-
Клонируйте репозиторий:
git clone https://github.com/wowlikon/libraryapi.git -
Перейдите в каталог проекта:
cd libraryapi -
Настройте переменные окружения:
edit .env -
Соберите контейнеры Docker:
docker compose build -
Запустите приложение:
docker compose up api -d
Для создания новых миграций:
alembic revision --autogenerate -m "Migration name"
Для запуска тестов:
docker compose up test
Для добавления данных для примера используйте:
python data.py
Роли пользователей
- Админ: Полный доступ ко всем функциям системы
- librarian: Управление книгами, авторами, жанрами и выдачами
- member: Просмотр каталога и управление своими выдачами
Эндпоинты API
Аутентификация (/api/auth)
| Метод | Эндпоинт | Доступ | Описание |
|---|---|---|---|
| POST | /api/auth/register |
Публичный | Регистрация нового пользователя |
| POST | /api/auth/token |
Публичный | Получение JWT токенов (access + refresh) |
| POST | /api/auth/refresh |
Публичный | Обновление пары токенов |
| GET | /api/auth/me |
Авторизованный | Информация о текущем пользователе |
| PUT | /api/auth/me |
Авторизованный | Обновление профиля текущего пользователя |
| GET | /api/auth/users |
Сотрудник | Список всех пользователей |
| POST | /api/auth/users/{user_id}/roles/{role_name} |
Админ | Назначение роли пользователю |
| DELETE | /api/auth/users/{user_id}/roles/{role_name} |
Админ | Удаление роли у пользователя |
| GET | /api/auth/roles |
Авторизованный | Список ролей в системе |
Авторы (/api/authors)
| Метод | Эндпоинт | Доступ | Описание |
|---|---|---|---|
| POST | /api/authors |
Сотрудник | Создать нового автора |
| GET | /api/authors |
Публичный | Получить список всех авторов |
| GET | /api/authors/{id} |
Публичный | Получить автора по ID с книгами |
| PUT | /api/authors/{id} |
Сотрудник | Обновить автора по ID |
| DELETE | /api/authors/{id} |
Сотрудник | Удалить автора по ID |
Книги (/api/books)
| Метод | Эндпоинт | Доступ | Описание |
|---|---|---|---|
| GET | /api/books/filter |
Публичный | Фильтрация книг по названию, авторам, жанрам с пагинацией |
| POST | /api/books |
Сотрудник | Создать новую книгу |
| GET | /api/books |
Публичный | Получить список всех книг |
| GET | /api/books/{id} |
Публичный | Получить книгу по ID с авторами и жанрами |
| PUT | /api/books/{id} |
Сотрудник | Обновить книгу по ID |
| DELETE | /api/books/{id} |
Сотрудник | Удалить книгу по ID |
Жанры (/api/genres)
| Метод | Эндпоинт | Доступ | Описание |
|---|---|---|---|
| POST | /api/genres |
Сотрудник | Создать новый жанр |
| GET | /api/genres |
Публичный | Получить список всех жанров |
| GET | /api/genres/{id} |
Публичный | Получить жанр по ID с книгами |
| PUT | /api/genres/{id} |
Сотрудник | Обновить жанр по ID |
| DELETE | /api/genres/{id} |
Сотрудник | Удалить жанр по ID |
Выдачи (/api/loans)
| Метод | Эндпоинт | Доступ | Описание |
|---|---|---|---|
| POST | /api/loans |
Авторизованный | Создать выдачу/бронь (читатели для себя, Сотрудник для всех) |
| GET | /api/loans |
Авторизованный | Список выдач (читатели видят свои, Сотрудник видят все) |
| GET | /api/loans/analytics |
Админ | Аналитика выдач и возвратов |
| GET | /api/loans/{id} |
Авторизованный | Получить выдачу по ID (читатели только свои) |
| PUT | /api/loans/{id} |
Авторизованный | Обновить выдачу (читатели только свои) |
| POST | /api/loans/{id}/confirm |
Сотрудник | Подтвердить бронь (меняет статус на BORROWED) |
| POST | /api/loans/{id}/return |
Сотрудник | Вернуть книгу и закрыть выдачу |
| DELETE | /api/loans/{id} |
Авторизованный | Удалить выдачу/бронь (только для RESERVED статуса) |
| GET | /api/loans/book/{book_id}/active |
Сотрудник | Получить активную выдачу книги |
| POST | /api/loans/issue |
Админ | Выдать книгу напрямую без бронирования |
Связи (/api)
| Метод | Эндпоинт | Доступ | Описание |
|---|---|---|---|
| POST | /api/relationships/author-book |
Сотрудник | Связать автора и книгу |
| DELETE | /api/relationships/author-book |
Сотрудник | Удалить связь автор-книга |
| GET | /api/authors/{id}/books |
Публичный | Получить список книг автора |
| GET | /api/books/{id}/authors |
Публичный | Получить список авторов книги |
| POST | /api/relationships/genre-book |
Сотрудник | Связать жанр и книгу |
| DELETE | /api/relationships/genre-book |
Сотрудник | Удалить связь жанр-книга |
| GET | /api/genres/{id}/books |
Публичный | Получить список книг жанра |
| GET | /api/books/{id}/genres |
Публичный | Получить список жанров книги |
Прочее (/api)
| Метод | Эндпоинт | Доступ | Описание |
|---|---|---|---|
| GET | /api/info |
Публичный | Информация о сервисе |
| GET | /api/stats |
Публичный | Статистика системы |
Веб-страницы
| Путь | Доступ | Описание |
|---|---|---|
/ |
Публичный | Главная страница |
/auth |
Публичный | Страница авторизации |
/profile |
Авторизованный | Профиль пользователя |
/books |
Публичный | Каталог книг с фильтрацией |
/book/{id} |
Публичный | Страница просмотра книги |
/book/create |
Сотрудник | Создание новой книги |
/book/{id}/edit |
Сотрудник | Редактирование книги |
/authors |
Публичный | Список авторов |
/author/{id} |
Публичный | Страница автора |
/author/create |
Сотрудник | Создание автора |
/author/{id}/edit |
Сотрудник | Редактирование автора |
/genre/create |
Сотрудник | Создание жанра |
/genre/{id}/edit |
Сотрудник | Редактирование жанра |
/my-books |
Авторизованный | Мои выдачи |
/users |
Сотрудник | Управление пользователями |
/analytics |
Админ | Аналитика выдач и возвратов |
/api |
Публичный | Страница с ссылками на документацию API |
Схема базы данных
erDiagram
USER {
int id PK
string username UK
string email UK
string full_name
string hashed_password
boolean is_active
boolean is_verified
}
ROLE {
int id PK
string name UK
string description
int payroll
}
USER_ROLE_LINK {
int user_id FK
int role_id FK
}
BOOK {
int id PK
string title
string description
string status
}
AUTHOR {
int id PK
string name
string bio
}
GENRE {
int id PK
string name
string description
}
AUTHOR_BOOK_LINK {
int author_id FK
int book_id FK
}
GENRE_BOOK_LINK {
int genre_id FK
int book_id FK
}
BOOK_USER_LINK {
int id PK
int book_id FK
int user_id FK
datetime borrowed_at
datetime due_date
datetime returned_at
}
USER ||--o{ USER_ROLE_LINK : "имеет"
ROLE ||--o{ USER_ROLE_LINK : "назначена"
USER ||--o{ BOOK_USER_LINK : "берет"
BOOK ||--o{ BOOK_USER_LINK : "выдана"
AUTHOR ||--o{ AUTHOR_BOOK_LINK : "пишет"
BOOK ||--o{ AUTHOR_BOOK_LINK : "написана"
GENRE ||--o{ GENRE_BOOK_LINK : "содержит"
BOOK ||--o{ GENRE_BOOK_LINK : "принадлежит"
Статусы книг
- ACTIVE: Книга доступна для выдачи
- RESERVED: Книга забронирована (ожидает подтверждения)
- BORROWED: Книга выдана пользователю
Используемые технологии
- FastAPI: Современный веб-фреймворк для построения API на Python
- Pydantic: Библиотека для валидации данных и управления настройками
- SQLModel: Библиотека для взаимодействия с базами данных, объединяющая SQLAlchemy и Pydantic
- Alembic: Инструмент для миграции базы данных на основе SQLAlchemy
- PostgreSQL: Реляционная система управления базами данных
- Docker: Платформа для разработки, распространения и запуска приложений в контейнерах
- Docker Compose: Инструмент для определения и запуска многоконтейнерных приложений Docker
- Tailwind CSS: CSS-фреймворк для стилизации интерфейса
- Alpine.js: Легковесный JavaScript-фреймворк для реактивности
- Chart.js: Библиотека для визуализации данных
Description
RESTful API для управления библиотекой книг, реализованное с помощью FastAPI
https://lib.alt.0x174.su
Languages
HTML
36.8%
JavaScript
33.6%
Python
28%
Shell
0.7%
CSS
0.7%
Other
0.2%
