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. Публикация приложения под их брендом требует их разрешения.