Перейти до вмісту

Онбординг після купівлі симуляції

ПолеЗначення
Статус🚧 змержено в інтеграційні гілки (api-v2 PR #556dev, frontend PR #494development); задеплоєно на dev-API і верифіковано E2E; у prod ще немає
Поверхніweb (кабінет /profile/simulation)
Доступністьпоказується лише покупцям симуляції з quick-реєстрацією (onboarding_state='quick')
ВласникTODO:
Останнє підтвердження2026-07-04 · dev live-smoke: API-виклики + браузерний прохід wizard проти development.api.abitly.org

Купівля симуляції можлива через quick Google-auth (GET /auth/google/quick) без повної реєстрації: створюється юзер типу OTHER зі станом onboarding_state='quick', про якого платформа не знає нічого. Wizard при першому візиті кабінету збирає базовий профіль і проводить по кабінету — заповнені канонічні поля одразу вмикають наявну персоналізацію: конкурсний бал по інтересах (my-score), JourneyStepper на огляді профілю, повні вкладки налаштувань абітурієнта.

Точка входу: https://abitly.org/uk/profile/simulation (після redirect з оплати Monobank або будь-який наступний візит).

  1. Кабінет бачить user.onboardingState === 'quick'GET /users/me) → відкриває модальний wizard.
  2. Крок «Про тебе»: ім’я (prefill з Google), рік вступу (2026 / 2027 / «ще не знаю»), місто (опц.).
  3. Крок «Інтереси»: Typesense-автокомпліт /offers/search-params (той самий, що MainSearch і «Додати КП») — одне поле пошуку, групи «Спеціальності»/«Університети», чипи; університети опційні.
  4. Перехід до туру = збереження: POST /users/profile/onboarding — бекенд конвертує OTHERAPPLICANT (STI-дискримінатор), пише скаляри через update(), junction-таблиці синхронізує raw-SQL ідемпотентно (повторний сабміт безпечний), ставить onboarding_state='complete'.
  5. Крок «Як працює кабінет»: 3 статичні підказки (бали НМТ → додай КП → запусти симуляцію) → «До кабінету».
  6. Навігація вільна: «Назад» на кожному кроці (включно з туром), прогрес-сегменти клікабельні назад, лічильник «Крок N з 3»; повернення з туру і повторне «Далі» замінює вибір (повні масиви в DTO).
  7. «Пропустити» на будь-якому кроці зберігає зібране і закриває назавжди; Esc/оверлей до збереження — snooze на сесію (повернеться наступного візиту).
ДжерелоЕндпоінт / entityПризначення
api-v2POST /users/profile/onboardingзберегти дані (+ interestedSpecialities[], selectedUniversities[]) + конверсія типу + complete
api-v2GET /offers/search-paramsTypesense-автокомпліт кроку «Інтереси»
api-v2GET /users/meonboardingStateтригер показу wizard
api-v2users.onboarding_state enum(pending_profile,quick,complete)стан онбордингу (ставиться в quick при GET /auth/google/quick)

Зв’язки з іншими фічами

Section titled “Зв’язки з іншими фічами”
  • simulation — кабінет, у якому живе wizard; quick-auth зʼявився саме для його checkout.
  • account-auth — quick-флоу Google OAuth без complete-profile.
  • profile — дозаповнення тих самих полів у налаштуваннях; конверсія відкриває вкладки абітурієнта.
  • my-score — інтереси з онбордингу живлять розрахунок конкурсного бала.
РепоШляхПримітка
abitly-frontend-v2src/components/pages/profile/pages/Simulation/components/Onboarding/wizard (3 кроки + тригер)
abitly-api-v2src/api/users/users.service.tscompleteOnboardingконверсія OTHER→APPLICANT + збереження
  • Фронт деградує безпечно до деплою бекенда: без поля onboardingState wizard не з’являється.
  • Юзери, що купили симуляцію до фічі й лишилися в quick, побачать wizard при наступному візиті кабінету (свідомо).
  • Аналітика: 4 typed-події simulation_onboarding_viewed / _step_completed / _skipped / _completed (booleans/counts, PII-safe).
  • ⚠️ Pre-existing баг (не з цієї фічі, відтворено на контрольному e2e-юзері): на dev будь-який TypeORM save() юзера із завантаженим M2M і наявними junction-рядами падає 500 (duplicate key … user_interested_specialities PK) — зачіпає PATCH /users/profile. Onboarding-ендпоінт від нього ізольовано (api-v2 PR #559: update() + raw junction-sync). TODO: окремий фікс для PATCH-шляху в api-v2.
ДатаПодіяДжерело
2026-07-04Бекенд-ендпоінт + конверсія типуapi-v2 PR #556
2026-07-04Wizard у кабінеті симуляціїfrontend PR #494
2026-07-04Обидва PR змержено (admin-merge, CI біллінг-блок; гейти локально) + деплой dev-API (pipeline abitly-dev-backend) + E2E-верифікація: конверсія OTHER→APPLICANT, поля, інтереси, complete, wizard у браузері, no-reshow після reloaddev live-smoke
2026-07-04v2 (за фідбеком): крок «Інтереси» на Typesense search-params (спеціальності+університети, чипи), вільна навігація назад (кроки/прогрес/тур), лічильник кроків; бекенд — selectedUniversities + bug-immune raw junction-sync (повторний сабміт 200). Dev E2E-верифікація повторена (заміна вибору E7/КНУТШ у БД)api-v2 PR #559 + frontend PR #496