feat(mera/b2c): настоящая карта улицы в карточке игры + мобильный лэндинг перестал съедать 45% экрана #3245
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3245
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/b2c-game-real-map"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Владелец попросил заменить декоративный прямоугольник в карточке игры настоящей картой, «прям улица дома, и всё в нашей стилистике». Плюс два репорта из чата команды.
Карта: улицы вместо декорации
Было — CSS-сетка и две «дороги», подпись «ОБЪЕКТ НА КАРТЕ». Стало — схема реальных улиц вокруг сделки, улица сделки подсвечена, соседние подписаны.
Ни одного внешнего запроса. Тайлы стороннего провайдера отпадают по двум причинам: публичное дерево
mera-publicдержится без внешних CDN (даже шрифты self-hosted, Leaflet с unpkg сюда намеренно не тянули), и тайловый сервер получал бы IP посетителя и то, какой район он смотрит — на странице, которая обещает «без звонков и регистрации».Дома не рисуем, и это измерено, а не решено вкусом. В
cad_buildings18 307 контуров; в плотном центре это дало 51 здание на радиус 450 м, где реально их в разы больше. Прототип отрисован и просмотрен: кварталы полупустые. Карта заявляла бы застройку и показывала пустоту.Улицы рисуем. В OSM-выгрузке 10 025 отрезков, 1377 разных названий. Адрес сделки к ним нормализуется и матчится: 550 названий из 654, что покрывает 92,3% сделок. Остальным 8% показывается район — карта районов из предыдущего шага осталась запасным вариантом, а не удалена.
Дом не показан и показан быть не может. Номер дома есть у 2,7% сделок, координата — центроид улицы (991 различная точка на 34 017 сделок, ≈34 сделки в одной). Подпись говорит это прямо: «‹улица› · ДОМ НЕ ИЗВЕСТЕН». И сильнее: в схему намеренно не положены константы проекции — по ней физически нельзя поставить точку дома даже случайно.
Схема собирается на бэкенде готовыми SVG-путями: 2,8 КБ против 7–8 КБ сырой геометрии того же окна.
Два решения, которые стоит увидеть: центр окна — не центроид улицы, а ближайшая к нему точка на самой улице (центроид изогнутой улицы легко лежит вне её); мост к геометрии — вьюха с
GRANTв том же файле, потому что разнесённый грант в этом репозитории уже терялся при пересоздании объекта (#3227).Мобильный: 45% экрана → 15%
Репорт: «много всплывашек на мобиле, экрана не видно». Замер на 375×812:
Десктоп 1280 — 135,5 px до и после, бит в бит.
Что переехало: навигация по секциям скрыта на узком экране (это секции той же страницы, доезжают прокруткой; «Статьи» есть в подвале); призыв в шапке убран как дубль нижней панели — один призыв на экран.
Селектор города удалён совсем, и вот почему это не потеря: он ни на что не влиял — состояние жило внутри компонента и никуда не уходило, на расчёт работает город из формы проверки. Граница покрытия, ради которой выпадашку заводили, стоит текстом в герое, то есть теперь видна без клика.
Точка разрыва — 1000px, а не общий для файла 720: на 720 шапка макета всё ещё переносится в две строки (замерено, 218 px хрома), и возврат туда старого поведения был бы дефектом планшета. Число замера записано в CSS.
Мелочь, найденная глазами на скриншоте
Студии подписывались как «0-к, 25,9 м²» — на витрине таких 3 строки из 20, то есть каждая шестая карточка выглядела как ошибка выгрузки.
Отдельно: восстановление снесённого
Один из коммитов этой ветки (
555cce44, про студию) помимо своей темы удалил миграцию 280 и откатил код координат —git commitфиксирует индекс целиком, а в индексе общего рабочего дерева лежали staged-удаления от параллельных агентов. Заметил не автор, а следующий агент, увидевший дыру в нумерации.Восстановлено отдельным коммитом. Конфликты сводились вручную: механическое «оставить обе стороны» задвоило список колонок в
INSERTиSELECT— тесты на моках это пропустили бы, прод нет. Список колонок сверен со списком значений программно: 15 и 15, порядок совпадает.Проверено
Бэкенд 5085 passed / 35 skipped. Фронтенд
tsc·next lint·vitest 153/153·check:mera-public-isolation— чисто. Скриншоты трёх состояний карты (улица сматчилась / не сматчилась / схемы нет) и мобильного до-после просмотрены глазами, а не только тестами.Порядок миграций важен:
data/sql/195(вьюха + грант на стороне gendesign) обязана примениться раньше, чемtradein/281(foreign table), иначе 281 упадёт целиком.Жалоба «много всплывашек, экрана не видно» — это не всплывашки, а постоянный хром: на 375×812 липкая шапка (235 px) и фиксированная нижняя панель (109 px) вместе занимали 42% экрана и отъедали их при любой прокрутке. Замер тем же способом (getBoundingClientRect по элементам с position fixed/sticky): было 366 px = 45,1% высоты экрана, стало 119,5 px = 14,7%. На 1280 — 135,5 px до и после, без изменений. Шапка на узком экране сведена к одной строке (лого + «Для бизнеса»): - навигация по секциям скрыта — четыре пункта переносились в две строки, а на мобильном к секциям всё равно доезжают прокруткой; «Статьи» и «МЕРА для бизнеса» остаются ссылками в подвале, «Продажа под ключ» и на десктопе неактивная заглушка; - CTA скрыт — он вёл туда же, куда нижняя панель, и два одинаковых призыва на одном экране это и есть жалоба; панель осталась, шапка уступила. Селектор города (CityPicker) удалён совсем, а не спрятан: он не владел своим выбором — состояние жило внутри компонента и никуда не отправлялось, — тогда как гео-гейт расчёта стоит на городе из формы (FreeCheckCard, #2576). Два места, задающих одно значение, из которых работает одно, — дефект сам по себе; то же правило уже записано в InnerHeader. Граница покрытия, ради которой выпадашку открывали, стоит текстом в герое. Нижняя панель на узком экране — только кнопка: её строка переносилась на две- три и делала панель втрое выше кнопки. То же обещание остаётся словами героя. Шаг медиазапроса — 1000 px, а не общий для файла 720: на 720 шапка макета всё ещё переносится в две строки (замерено: 109 px хрома), то есть возвращать её там значило бы вернуть тот же дефект планшету.