Информационная система для экранов в жилых комплексах. Управляющая компания создаёт шаблоны, регистрирует дисплеи и назначает им контент. Клиент дисплея получает актуальное состояние через backend API.
clients/control-panel веб-панель УК (React, React Router, Mantine)
clients/display_client клиент дисплея (React Native)
backend/app REST API (FastAPI)
backend/app/db SQLAlchemy-модели и подключение к MySQL
backend/app/integrations интеграция с Ujin API через HTTP
docker-compose.yaml запуск сервисов
nginx.conf единая точка входа для frontend и backend
Основные сервисы:
- Backend: FastAPI, SQLAlchemy, PyMySQL, JWT, HTTPX.
- MySQL: пользователи, дисплеи, шаблоны и элементы шаблонов.
- Control Panel: управление комплексами, экранами и шаблонами.
- Display Client: отображение назначенного шаблона.
- Ujin API: данные жилых комплексов и зданий.
Требуется Docker с поддержкой Compose.
-
Создайте настройки backend:
cp backend/.env.example backend/.env
-
Укажите в
backend/.envURL и токен Ujin, JWT secret и подключение к MySQL. Для Docker используйте хостmysql:DATABASE_URL=mysql+pymysql://user:password@mysql:3306/db -
Соберите и запустите проект:
docker compose up -d --build
После запуска:
- приложение:
http://localhost:8000 - REST API доступен через префикс
http://localhost:8000/api/
Текущая nginx-конфигурация публикует только API-маршруты. Swagger и health check доступны при локальном запуске backend.
Остановка:
docker compose downBackend требует Python 3.14 и uv:
cd backend
cp .env.example .env
uv sync
uv run uvicorn app.main:app --reloadЛокальный backend будет доступен по адресам:
- Swagger API:
http://localhost:8000/docs - health check:
http://localhost:8000/health
Панель управления требует Node.js 24:
cd clients/control-panel
npm install
npm run devReact Native клиент:
cd clients/display_client
npm install
npm startЗатем отдельно запустите npm run android.
POST /api/v1/register,POST /api/v1/login— пользователи./api/v1/template/*— создание, чтение, обновление и удаление шаблонов.POST /api/v1/displays/register— регистрация дисплея.GET /api/v1/displays/{display_id}/state— состояние дисплея./api/v1/complex/*— комплексы, здания, экраны и назначение шаблонов.
Подробный интерактивный контракт доступен в Swagger по адресу /docs.