**Язык:** [English](README.md) | [Русский](README.ru.md) | [Deutsch](README.de.md) | [Español](README.es.md) # EUSRR EUSRR — внутренний корпоративный портал для сотрудников, заявок, документов, закупок, планирования, учёта посещаемости и коммуникаций в реальном времени. Текущее приложение состоит из ASGI backend на Django/DRF и frontend на Next.js. ## Возможности - справочник сотрудников, отделы, должности, permissions и опциональная синхронизация с LDAP/AD; - заявки, маршруты согласования, задачи и изменения статусов с уведомлениями; - документы, вложения, комментарии и ознакомления; - закупки, маршруты утверждения, бюджеты и учёт оборудования; - календари, общие события и анализ посещаемости через LogStorm; - чаты, реакции, опросы и уведомления через единое авторизованное WebSocket-соединение; - доставка уведомлений через WebSocket, email и Web Push. ## Стек - Backend: Python 3.13, Django 5.2, Django REST Framework, Channels и Daphne. - Данные и фоновые задачи: PostgreSQL, Redis, Celery и Celery Beat. - Frontend: Next.js 16, React 19, TypeScript, Tailwind CSS, TanStack Table и Recharts. - Интеграции: LDAP/Active Directory, Web Push и LogStorm. - Проверки: pytest/pytest-django, Node test runner, ESLint и production build Next.js. Закреплённые версии находятся в [`backend/requirements.txt`](backend/requirements.txt) и [`frontend/package.json`](frontend/package.json). ## Документация и runtime-контракты - [Индекс документации](docs/README.md) - [HTTP API](docs/guides/API.md) - [LDAP и Active Directory](docs/guides/LDAP.md) - [WebSocket и realtime](docs/guides/WEBSOCKET.md) - [Уведомления](docs/guides/NOTIFICATIONS.md) При запущенном backend доступны Swagger `/api/docs/`, ReDoc `/api/redoc/`, OpenAPI `/api/schema/`, WebSocket docs `/api/ws/docs/` и AsyncAPI `/api/ws/schema/` на `http://localhost:8000`. ## Структура репозитория ```text backend/ Django-приложения, REST API, Celery tasks, migrations и backend tests frontend/ Next.js-приложение и frontend tests docs/ Актуальные руководства по API, интеграциям, эксплуатации и разработке ``` ## Локальная разработка Требуются Python 3.13, Node.js 20 или новее, PostgreSQL и Redis. Файл `backend/docker-compose.yml` поднимает только тестовое окружение Samba AD и не является полным compose-стеком приложения. Создайте корневой файл окружения: ```bash cp .env.example .env ``` Пример использует имена сервисов `db` и `redis`. Если сервисы запущены локально, замените `DB_HOST` и `REDIS_HOST` на `127.0.0.1`, задайте `DEBUG=True` и укажите существующую базу PostgreSQL с корректными credentials. LDAP в примере отключён и для локального входа не требуется. Backend: ```bash cd backend python3.13 -m venv .venv source .venv/bin/activate python -m pip install -r requirements.txt python manage.py migrate daphne -b 0.0.0.0 -p 8000 eusrr_backend.asgi:application ``` Для асинхронных уведомлений, дайджестов, LDAP retries и других фоновых задач запустите worker и Beat: ```bash cd backend celery -A eusrr_backend worker -l info celery -A eusrr_backend beat -l info ``` Frontend: ```bash cd frontend cp .env.example .env.local npm install npm run dev ``` Приложение откроется на `http://localhost:3000`. HTTP-запросы browser проксируются Next.js на `NEXT_PUBLIC_BACKEND_URL`, realtime использует backend endpoint `/ws/`. ## Проверка ```bash cd backend pytest python manage.py check ``` ```bash cd frontend npm test npm run lint npm run build ``` Некоторым полным наборам тестов нужны PostgreSQL, Redis или явно замоканные интеграции; при разработке предпочтительны профильные suites. ## Безопасность и данные Env-файлы, локальные базы, загруженные media, сертификаты, generated builds и dependency directories игнорируются Git. Production data и secrets нельзя добавлять в репозиторий. В legacy settings ещё присутствуют fallback-значения LDAP и VAPID. За пределами изолированной разработки на них нельзя полагаться: все credentials должны быть переопределены через environment variables, а любой ключ, когда-либо хранившийся в исходниках, — заменён. Значения example-файлов не являются production config. Перед использованием в другом окружении проверьте company-specific domains, branding и directory DN.