"Where found" during inventory audit is now a plain text field (e.g. "каб. 305") stored on the object instead of assigning it to a box, since audit walks often use room/office labels that don't map to the box/shelf hierarchy used elsewhere. Box assignment via the regular object form is unaffected. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Инвентаризация
Сервис учёта инвентаря: объекты (инвентарный номер, описание, фото) складываются в ящики (с вложенностью), у каждого объекта и ящика есть QR-код — сканирование обычной камерой телефона открывает публичную страницу с описанием и фото, без установки приложений. Правки защищены простым admin-логином, просмотр — публичный.
Стек: FastAPI + SQLAlchemy (async) + PostgreSQL, MinIO (S3) для фото, React + Vite + Tailwind на фронте, всё поднимается через Docker Compose.
Быстрый старт (локально)
- Скопируйте
.env.exampleв.envи при желании поменяйте пароли/секреты:cp .env.example .env - Поднимите весь стек:
Первый запуск: поднимутся Postgres и MinIO, применятся миграции (сервис
docker compose up -d --buildmigrate), создастся бакет MinIO с публичным доступом на чтение (сервисminio-init), затем стартуютbackendиfrontend. - Создайте первого администратора:
(спросит пароль интерактивно; логин без прав — без него нельзя добавлять/редактировать объекты и ящики).
docker compose exec backend uv run python -m app.cli --username admin - Откройте:
- фронтенд — http://localhost:5173 (админка на
/admin/objects,/admin/boxes) - API-документация — http://localhost:8000/docs
- консоль MinIO — http://localhost:9001 (логин/пароль —
MINIO_ROOT_USER/MINIO_ROOT_PASSWORDиз.env)
- фронтенд — http://localhost:5173 (админка на
Публичные страницы объекта/ящика (/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.