# Инвентаризация Сервис учёта инвентаря: объекты (инвентарный номер, описание, фото) складываются в ящики (с вложенностью), у каждого объекта и ящика есть QR-код — сканирование обычной камерой телефона открывает публичную страницу с описанием и фото, без установки приложений. Правки защищены простым admin-логином, просмотр — публичный. Стек: FastAPI + SQLAlchemy (async) + PostgreSQL, MinIO (S3) для фото, React + Vite + Tailwind на фронте, всё поднимается через Docker Compose. ## Быстрый старт (локально) 1. Скопируйте `.env.example` в `.env` и при желании поменяйте пароли/секреты: ``` cp .env.example .env ``` 2. Поднимите весь стек: ``` docker compose up -d --build ``` Первый запуск: поднимутся Postgres и MinIO, применятся миграции (сервис `migrate`), создастся бакет MinIO с публичным доступом на чтение (сервис `minio-init`), затем стартуют `backend` и `frontend`. 3. Создайте первого администратора: ``` docker compose exec backend uv run python -m app.cli --username admin ``` (спросит пароль интерактивно; логин без прав — без него нельзя добавлять/редактировать объекты и ящики). 4. Откройте: - фронтенд — http://localhost:5173 (админка на `/admin/objects`, `/admin/boxes`) - API-документация — http://localhost:8000/docs - консоль MinIO — http://localhost:9001 (логин/пароль — `MINIO_ROOT_USER`/`MINIO_ROOT_PASSWORD` из `.env`) Публичные страницы объекта/ящика (`/objects/:id`, `/boxes/:id`) открываются без авторизации — именно на них ведут QR-коды. ## Разработка Исходники `backend/` и `frontend/` смонтированы в контейнеры (см. `docker-compose.override.yml`), оба сервиса перезапускаются на лету (`uvicorn --reload`, `vite`). Изменения в коде подхватываются без пересборки образа; пересборка (`--build`) нужна только при изменении зависимостей (`pyproject.toml`/`package.json`) или Dockerfile. Новая миграция после изменения моделей: ``` docker compose exec backend uv run alembic revision --autogenerate -m "..." docker compose exec backend uv run alembic upgrade head ``` Тесты бэкенда: ``` docker compose exec backend uv run pytest ``` ## Прод-деплой Пока не настроен (нет `docker-compose.prod.yml`, реверс-прокси и TLS) — это следующий шаг, когда сервис будет готов выкатывать на сервер с доменом. Тогда потребуется поменять в `.env` `PUBLIC_BASE_URL` и `MINIO_PUBLIC_URL` на реальный домен (они зашиты в QR-коды и ссылки на фото) и добавить реверс-прокси (например, Caddy) для HTTPS.