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

Навчальні матеріали

ПолеЗначення
Статус🟢 prod
Поверхніweb
Доступністькаталог + PDF-preview — безкоштовно, без акаунта; повний PDF — разова покупка (потрібен акаунт)
ВласникTODO:
Останнє підтвердження2026-06-13 · browse (abitly.org/uk/materials, cms.abitly.org/api/materials, uk-materials.xml) + код:main (abitly-frontend-v2, abitly-api-v2, abitly-strapi)

Магазин PDF-матеріалів для підготовки до НМТ: теорія, тести, шпаргалки, розбори типових помилок із чотирьох предметів (математика, українська, історія, англійська). Кожен матеріал має безкоштовний teaser-preview у вбудованому переглядачі; повний PDF продається поштучно або бандлами.

Точка входу: https://abitly.org/uk/materials (роут /materials, у PATHNAMES без локалізованого перейменування). Лінк «Матеріали» — у головній навігації.

  1. Каталог — секції за предметами, бандли, «Мої матеріали» (для залогінених).
  2. Сторінка матеріалу /materials/{slug} або бандла /materials/bundles/{slug}.
  3. Preview — teaserPdf у модальному переглядачі (@react-pdf-viewer + pdfjs-dist); PDF віддається через Next-роут /api/pdf-proxy з whitelist-ом media-хостів.
  4. «Купити»: гість → модалка з Google-логіном, незавершена покупка відновлюється після входу (pendingPurchase); залогінений → POST /premium/create-payment → redirect на Monobank.
  5. Повернення на /materials/success — пулінг /premium/order-status (paid / processing / failed / timeout); куплений матеріал відкривається повністю та завантажується (/premium/download з токеном).

Платіжний флоу вже намальований — див. data-flows: оплата Monobank; шлях контенту — data-flows: контент Strapi.

ДжерелоЕндпоінт / entityПризначення
api-v2GET /materials, /materials/{slug}, /bundles, /bundles/{slug}каталог: читає Strapi через StrapiService, мерджить із власними refs (materialRef, bundleRef)
api-v2GET /me/materials, /me/bundlesкуплене користувачем (entity userMaterial)
api-v2POST /premium/create-payment · GET /premium/order-status · GET /premium/download + Monobank webhookоплата і видача файлів (entity premiumOrder)
Strapicontent-type materialslug, subject (math/ukrainian/history/english), type (theory/tests/cheatsheet/breakdown), pages, format (enum — тільки pdf), priceCopecks, coverImage, teaserPdf, fullPdf, available, m2m bundles
Strapicontent-type bundleslug, priceCopecks, coverImage, available, m2m materials

На відміну від блогу, фронтенд не ходить у Strapi напряму — всі дані через api-v2. GA4-воронка ecommerce (view_item_listpurchase, item_category=materials + кастомні materials_*) задокументована в домен-доці фронтенду.

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

Section titled “Зв’язки з іншими фічами”
  • Статті / блог — той самий Strapi-канал контенту.
  • Автентифікація — покупка вимагає акаунт; pending-purchase resume після Google-логіну.
  • Checkout Monobank — спільні /premium-ендпоінти; картки ще немає (див. індекс).
РепоШляхПримітка
abitly-frontend-v2src/app/[locale]/(main)/materials/**роути: каталог, [slug], bundles/[slug], success (+ sitemaps {uk,en}-materials.xml)
abitly-frontend-v2src/components/pages/materials/**UI; shared/viewer/ — PDF-переглядач, shared/hooks/useBuyFlow.ts — покупка
abitly-frontend-v2src/api/materials/ · src/app/api/pdf-proxy/route.tsAPI-клієнт; proxy з whitelist STATIC_ALLOWED_HOSTS
abitly-frontend-v2docs/reference/materials/overview.mdдомен-док — першоджерело механіки та analytics-подій
abitly-api-v2src/api/materials/ · src/api/premium/контролери каталогу/покупок; entities materialRef, bundleRef, userMaterial, premiumOrder
abitly-strapisrc/api/{material,bundle}/content-types (draft&publish, i18n)
  • Розділ позначений BETA у UI (BetaNotice: «Якщо щось не працює — повідомте нам у Telegram-спільноті»).
  • Формат — тільки PDF (enum format); предмети — лише 4 НМТ-предмети.
  • pdf-proxy віддає PDF лише з whitelist-хостів (S3 abitly-prod-strapi-media, legacy DO Spaces, host зі NEXT_PUBLIC_STRAPI_API_URL); новий media-bucket → оновити STATIC_ALLOWED_HOSTS.
  • Монетизація — разові покупки (premium one-off), тарифи Free/Pro/Max не задіяні (billing в api-v2 нічого не gate-ить).
  • Контент завантажує тулінг strapi-materials-parser (PDF uploader → Strapi material) — див. глосарій.
ДатаПодіяДжерело
TODO:реліз фічі — домен-док посилається на коміт f60a9517, який не резолвиться на main (ймовірно squash)abitly-frontend-v2
2026-06-01актуалізовано домен-док (механіка + GA4-події)docs/reference/materials/overview.md
2026-06-13створено картку; факти звірено browse + код mainPR Wave 1