feat(#114): default weight presets seed (Эконом/Комфорт/Бизнес) + include_system API #229

Closed
lekss361 wants to merge 0 commits from feat/user-weight-profiles-default-seed into main
Owner

Контекст

Фидбек Макса #114: «садики и Мегамарт должны иметь разные веса». Пользователь открывает UI — видит пустой dropdown, нет готовых шаблонов.

Changes

SQL migration

data/sql/100_user_weight_profiles_default_seed.sql — 3 системных preset-профиля:

preset акценты
Эконом shop_supermarket(1.5), park(1.2), bus_stop(1.0) — доступность
Комфорт park(1.8), kindergarten(1.8), school(1.5) — семейная аудитория
Бизнес metro_stop(2.5), shop_mall(2.0), park(2.0) — платёжеспособная аудитория

Idempotent: ON CONFLICT (user_id, profile_name) DO UPDATE.

Backend service

  • SYSTEM_USER_ID = '__system__' — константа-sentinel
  • list_profiles_with_system(db, user_id) — возвращает пользовательские + системные presets

API

GET /api/v1/admin/site-finder/weight-profiles?user_id=...&include_system=true

По умолчанию include_system=false — обратная совместимость сохранена.

Acceptance

  • После apply migration: SELECT count(*) FROM user_weight_profiles WHERE user_id = '__system' = 3
  • GET ?include_system=true возвращает user + 3 системных профиля
  • Повторный apply SQL не дублирует строки (idempotent)
  • Tests pass (3 новых теста в test_admin_weight_profiles.py)
## Контекст Фидбек Макса #114: «садики и Мегамарт должны иметь разные веса». Пользователь открывает UI — видит пустой dropdown, нет готовых шаблонов. ## Changes ### SQL migration `data/sql/100_user_weight_profiles_default_seed.sql` — 3 системных preset-профиля: | preset | акценты | |---|---| | Эконом | shop_supermarket(1.5), park(1.2), bus_stop(1.0) — доступность | | Комфорт | park(1.8), kindergarten(1.8), school(1.5) — семейная аудитория | | Бизнес | metro_stop(2.5), shop_mall(2.0), park(2.0) — платёжеспособная аудитория | Idempotent: `ON CONFLICT (user_id, profile_name) DO UPDATE`. ### Backend service - `SYSTEM_USER_ID = '__system__'` — константа-sentinel - `list_profiles_with_system(db, user_id)` — возвращает пользовательские + системные presets ### API `GET /api/v1/admin/site-finder/weight-profiles?user_id=...&include_system=true` По умолчанию `include_system=false` — обратная совместимость сохранена. ## Acceptance - [ ] После apply migration: `SELECT count(*) FROM user_weight_profiles WHERE user_id = '__system' = 3` - [ ] `GET ?include_system=true` возвращает user + 3 системных профиля - [ ] Повторный apply SQL не дублирует строки (idempotent) - [ ] Tests pass (3 новых теста в test_admin_weight_profiles.py)
lekss361 added the
enhancement
feedback/max
site-finder
labels 2026-05-16 19:50:32 +00:00
Author
Owner

⚠️ Empty diff — obsolete после PR #230

Findings:

  • changed_files: 0, +0/-0 — head SHA (e4852b0) равен merge_base. Ветка не содержит новых коммитов поверх main.
  • PR #230 (merged commit 56bf2875) был ревьюером отмечен как scope creep: туда попал коммит с миграцией data/sql/100_user_weight_profiles_default_seed.sql (предмет этого PR #229).

Что на main сейчас:

  • data/sql/100_user_weight_profiles_default_seed.sql (3 системных preset Эконом/Комфорт/Бизнес, ON CONFLICT DO UPDATE — idempotent, подтверждено reviewer'ом для #230)
  • Backend service list_profiles_with_system(...) и API include_system=true — нужна проверка, попали ли тоже в #230 (если нет — отдельным PR)

Действие:
Если backend части (SYSTEM_USER_ID константа + list_profiles_with_system + endpoint param include_system) уже на main через #230 — этот PR можно close.
Если нет — push коммиты в ветку feat/user-weight-profiles-default-seed поверх текущего main, тогда diff появится.

Не мержу: empty diff merge создаст пустой merge commit без value.

### ⚠️ Empty diff — obsolete после PR #230 **Findings:** - `changed_files: 0`, `+0/-0` — head SHA (`e4852b0`) равен `merge_base`. Ветка не содержит новых коммитов поверх main. - PR #230 (merged commit `56bf2875`) был ревьюером отмечен как **scope creep**: туда попал коммит с миграцией `data/sql/100_user_weight_profiles_default_seed.sql` (предмет этого PR #229). **Что на main сейчас:** - ✅ `data/sql/100_user_weight_profiles_default_seed.sql` (3 системных preset Эконом/Комфорт/Бизнес, `ON CONFLICT DO UPDATE` — idempotent, подтверждено reviewer'ом для #230) - ❓ Backend service `list_profiles_with_system(...)` и API `include_system=true` — нужна проверка, попали ли тоже в #230 (если нет — отдельным PR) **Действие:** Если backend части (`SYSTEM_USER_ID` константа + `list_profiles_with_system` + endpoint param `include_system`) уже на main через #230 — этот PR можно **close**. Если нет — push коммиты в ветку `feat/user-weight-profiles-default-seed` поверх текущего main, тогда diff появится. Не мержу: empty diff merge создаст пустой merge commit без value.
lekss361 closed this pull request 2026-05-16 20:02:40 +00:00
All checks were successful
Deploy / changes (push) Successful in 5s
Deploy / build-backend (push) Successful in 33s
Deploy / build-worker (push) Successful in 32s
Deploy / build-frontend (push) Successful in 24s
Deploy / deploy (push) Successful in 36s

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#229
No description provided.