jze9 f99949559c Add inventory audit mode with camera QR scanning
Lets an employee walk the premises, scan each object's QR to confirm
it's present and record where it was found (defaulting to the last
picked location), and track found/not-found progress for the walk.
Scanning a box's QR shows its contents read-only without affecting
the found/not-found counts.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 14:04:00 +05:00
2026-07-21 16:11:09 +05:00
2026-07-21 16:11:09 +05:00
2026-07-21 16:11:09 +05:00
2026-07-21 16:11:09 +05:00
2026-07-21 16:11:09 +05:00
2026-07-21 16:11:09 +05:00
2026-07-21 16:11:09 +05:00
2026-07-21 16:11:09 +05:00
2026-07-21 16:11:09 +05:00
2026-07-21 16:11:09 +05:00

Инвентаризация

Сервис учёта инвентаря: объекты (инвентарный номер, описание, фото) складываются в ящики (с вложенностью), у каждого объекта и ящика есть 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. Откройте:

Публичные страницы объекта/ящика (/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.

Description
No description provided
Readme 161 KiB
Languages
TypeScript 54.6%
Python 43.6%
Dockerfile 0.7%
Mako 0.6%
HTML 0.3%
Other 0.2%