CarinCasa Backend

Бэкенд для iOS-приложения с дополненной реальностью по каталогу мебели CARIN CASA.

Доступа к API производителя нет, поэтому каталог снят с публичного сайта carincasa.ru один раз и превращён в замороженный набор JSON-файлов. Сервис отдаёт его на чтение и раздаёт медиа и 3D-модели.

Живой сервер: https://api.desperatemeasure.tech Документация: https://desperatemeasure.tech

Товаров 114
Категорий 12
Отделок 221 в 17 сериях
Изображений 4225 файлов, 189 МБ
Габариты разобраны 485 вариантов из 495

Документация

Документ О чём
docs/API.md Справочник эндпоинтов, схемы, коды ошибок
docs/PARSER.md Как устроен парсер и модель ценообразования
docs/IOS.md Подключение из Swift: модели, расчёт цены, AR
docs/OPERATIONS.md Развёртывание, обслуживание, диагностика
docs/specs/ Дизайн-документ проекта

Всё это опубликовано на https://desperatemeasure.tech — сайт собирается из этих же markdown-файлов скриптом docs/build_site.py.

Быстрый старт

curl https://api.desperatemeasure.tech/health
# {"status":"ok","products":114,"materials":221}

curl "https://api.desperatemeasure.tech/v1/products?category=chairs"
curl https://api.desperatemeasure.tech/v1/products/elio

Схема OpenAPI — /openapi.json, интерактивная документация — /docs.

Структура проекта

scraper/            парсер (две фазы: fetch и parse)
  models.py         схемы Pydantic — валидатор парсера и модели ответа API
  fetch.py          фаза 1: скачивание HTML с сайта
  parse.py          фаза 2: разбор локальных файлов в JSON
  images.py         загрузка и конвертация изображений в WebP
app/
  main.py           FastAPI
deploy/
  carincasa.service systemd-юнит
  Caddyfile         Caddy: TLS, раздача медиа и моделей
docs/               документация

На сервере к этому добавляются каталоги с данными:

/srv/carincasa/
  raw/       114 HTML-страниц источника (49 МБ)
  data/      catalog.json, products/<slug>.json, отчёты парсера
  media/     изображения в WebP
  models/    3D-модели USDZ — наполняется вручную
  venv/

Локальная разработка

python3 -m venv venv
./venv/bin/pip install -r requirements.txt

# разбор (требует raw/ и raw/categories.json)
./venv/bin/python scraper/parse.py

# загрузка изображений (требует data/_downloads.json)
./venv/bin/python scraper/images.py

# запуск API
./venv/bin/uvicorn app.main:app --reload

Нужен Python 3.11 или новее. На сервере стоит 3.14.4.

Что осталось сделать

Каталог models/ пуст. Пока в нём нет файлов, has_ar у всех товаров равен false и приложение не показывает кнопку дополненной реальности. Добавление модели описано в docs/OPERATIONS.md.

Оговорка

Данные скопированы с публичного сайта для демонстрационного прототипа. Права на каталог, изображения и товарный знак принадлежат CARIN CASA. Публикация приложения под их брендом требует их разрешения.