Skip to content

Repository files navigation

Library Community API

Backend для приложения районной библиотеки: каталог и выдача книг, читательские клубы, мероприятия, отзывы и книжные дуэли. Проект построен на Express, Sequelize и SQLite, поэтому локально поднимается без отдельного сервера базы.

Главная часть этой версии — явная модель доступа. Публичная регистрация всегда создаёт читателя. Каталогом, выдачами, статистикой и пользовательским справочником может управлять только библиотекарь, а новости и мероприятия клуба — только его создатель.

Возможности

  • JWT-аутентификация с ограниченным сроком жизни токена;
  • роли reader и librarian с проверкой по актуальной записи в базе;
  • каталог, поиск по автору и ключевым словам;
  • выдача, возврат, два продления и блокировка продления;
  • статистика активных, просроченных и завершённых выдач;
  • клубы с сообщениями, новостями, событиями и рейтингом;
  • события, отзывы и книжные дуэли;
  • опциональные quiz endpoints и push-уведомления;
  • health check, интеграционные тесты и CI.

Запуск

Нужны Node.js 20+ и инструменты сборки для пакета sqlite3.

git clone https://github.com/ivanpukhov/library.git
cd library
npm install
cp .env.example .env

Замените JWT_SECRET на случайную строку длиной не меньше 32 символов, затем:

npm start

API будет доступен на http://127.0.0.1:3001. В development-режиме с автоперезапуском используйте npm run dev.

Конфигурация

Переменная По умолчанию Назначение
HOST 127.0.0.1 Адрес сервера
PORT 3001 Порт HTTP API
DB_STORAGE ./database.sqlite SQLite-файл или :memory:
CORS_ORIGIN http://localhost:3000 Разрешённые origins через запятую
JWT_SECRET Ключ подписи, минимум 32 символа
JWT_EXPIRES_IN 2h Срок жизни access token
OPENAI_API_KEY Только для книжных quiz endpoints
NOTIFICATIONS_ENABLED false Разрешить Expo push
REMINDERS_ENABLED false Запустить ежедневные напоминания

Внешние интеграции по умолчанию выключены, поэтому тестовый запуск ничего не отправляет за пределы процесса.

Доступ к операциям

public registration ──► reader
                         ├─ own loans, reviews, events
                         └─ clubs and reading duels

admin promotion ──────► librarian
                         ├─ catalogue management
                         ├─ book issue and renewal policy
                         └─ statistics and reader directory

Роль не берётся из тела регистрации и не доверяется полю внутри JWT: middleware каждый раз загружает текущую роль пользователя из базы. Повышение до библиотекаря должно выполняться отдельным административным процессом, которого нет в публичном API.

Полный список endpoints и примеры запросов находятся в docs/API.md.

Тесты

npm test

Интеграционные тесты используют SQLite in-memory и проверяют регистрацию, аутентификацию, запрет самовыбора роли, отказ читателю на административном route и успешную операцию библиотекаря.

Ограничения

Это backend-прототип, а не готовая библиотечная информационная система. Перед production нужны миграции вместо sequelize.sync, rate limiting, refresh tokens, аудит административных действий и отдельная панель управления ролями.

Лицензия: MIT.

About

Community library REST API with secure roles, lending, clubs, events and reading duels

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages