Skip to content

Карта фронтенда

Последняя сверка с кодом: 2026-06-14
Стек: Nuxt 4, гибрид SSR (ssr: true + routeRules), Vue 3, Pinia, SCSS UI-kit, @eventpass/api
SSR / SEO: 26-ssr-migration.md
Связанные доки: 03-backend-map · 00-product-overview


1. Разделы приложения

РазделURL (примеры)LayoutAuthНазначение
Маркетинг/, /pricing, /terms, /privacylandingЛендинг, тарифы, legal
Auth redirect/login, /auth/:view(redirect)Увод на /?auth=… → модалка
Гостевой альбом/:id, /:id/sharedefaultопциональноАльбом, QR, ссылки
Wall/:id/wallfullscreenопциональноСлайдшоу на экране
Join MEMBER/:id/joindefaultпри joinВступление по инвайт-токену
Аккаунт/account, /my-events, /profilecabinetauthДашборд, список, профиль
Админка события/:id/manage, settings, members, moderatecabinetrole middlewareУправление событием
Платформа/admin/users, events, planscabinetrequire-super-adminSUPER_ADMIN
Dev/dev/ui-kit, /dev/apidefaultТолько разработка

SSR (серверный HTML + OG): /, /pricing, /terms, /privacy, /:id, /:id/share, /:id/manage, /:id/settings, /:id/members.
Client-only (ssr: false): wall, join, moderate, /admin/**, /account/**, upload-интерактив.


2. Все страницы (app/pages/)

URLФайлLayoutMiddlewareОсновной API
/index.vuelandingPOST /api/events (через CreateEventForm)
/pricingpricing.vuelandingGET /api/plans
/terms, /privacyterms.vue, privacy.vuelanding
/login, /register, …auth/[view].vue + алиасыredirect
/accountcabinet/index.vuecabinetauthGET /api/events/my
/my-eventsmy-events.vuecabinetauthGET /api/events/my
/profileprofile.vuecabinetauthBetter Auth + GET /api/users/me
/:id[id]/index.vuedefaultGET /api/events/:id, …/media, SSE
/:id/share[id]/share.vuedefaultGET /api/events/:id
/:id/wall[id]/wall.vuefullscreenGET …/media, GET …/stream
/:id/join[id]/join.vuedefaultPOST /api/events/:id/join
/:id/manage[id]/manage.vuecabinetrequire-event-adminmedia list, ZIP, delete
/:id/settings[id]/settings.vuecabinetrequire-event-ownerGET/PATCH …/settings, branding
/:id/members[id]/members.vuecabinetrequire-event-adminmembers, invite link
/:id/moderate[id]/moderate.vuecabinetrequire-event-adminPATCH /api/media/:id/moderation
/adminadmin/index.vuecabinetauth + super-adminredirect → /admin/users
/admin/usersadmin/users.vuecabinetauth + super-adminGET /api/admin/users
/admin/eventsadmin/events.vuecabinetauth + super-adminGET /api/admin/events
/admin/plansadmin/plans.vuecabinetauth + super-adminGET /api/admin/plans

3. Layouts

LayoutФайлHeaderSidebarКогда
landinglayouts/landing.vueAppSiteHeader (public)Маркетинг
defaultlayouts/default.vueAppSiteHeader (public)Альбом, share, join
cabinet`layout: account)AdminSidebarАккаунт, админка
fullscreenlayouts/fullscreen.vueWall

Глобально в app.vue: <AuthModal /> — auth UI на всех страницах.

Ошибки доступа: не отдельная /403, а UiPageError в cabinet main или inline на странице (useRouteAccessError).


4. Middleware (route guards)

ИмяФайлЛогика
authmiddleware/auth.tsНе залогинен → модалка + /
require-event-adminrequire-event-admin.tsGET …/accesscanAdmin
require-event-ownerrequire-event-owner.tsGET …/access → role OWNER
require-super-adminrequire-super-admin.tsGET /api/users/me → SUPER_ADMIN
guest-onlyguest-only.tsЗалогинен → /account
clear-route-access (global)clear-route-access.global.tsСброс inline-ошибки при смене route

Неавторизованный доступ: utils/unauthenticatedAccess.ts (без цикла ?auth=).


5. Composables по разделам

ComposableРазделНазначение
useAuthAuthСессия, signIn/Out, profile API
useAuthModalAuthОткрытие модалки login/register/…
useAdminNavCabinetПункты sidebar (global + event + platform)
useAdminSidebarCabinetCollapse / mobile drawer
usePlatformAdminPlatformSUPER_ADMIN profile, admin stats
useEventAccessEvent admincanAdmin, isOwner по GET …/access
useRouteAccessErrorErrorsInline 403/401 для cabinet
useUploaderAlbumUppy + TUS → /api/tus
useEventStreamAlbum / WallSSE GET …/stream
useAlbumMediaRefreshAlbumПодмешивание новых media из SSE
useGuestName / useGuestNamePromptAlbumИмя гостя в localStorage
useMediaSelectionAlbum / AdminMulti-select для ZIP
usePricingPlans / usePricingMarketingMarketingТарифы с API
useEventBrandingStylesAlbum / WallCSS из EventSettings
useToastGlobalУведомления

Полный список: frontend/app/composables/*.ts.


6. Компоненты (дерево)

components/
├── ui/           # UiButton, UiInput, UiModal, UiPageError, …
├── layout/       # AppSiteHeader, SiteFooter
├── auth/         # AuthModal
├── brand/        # DReventLogo
├── domain/       # CreateEventForm, MediaGrid, QrShare, SlideshowPlayer, …
└── admin/        # AdminSidebar, AdminDataTable, PlatformAdminHeader, …

Domain — бизнес-логика UI. Ui — переиспользуемый kit (09-ui-kit.md).


7. Plugins и API-клиент

ФайлРоль
plugins/api.tsAxios + @eventpass/api, interceptors, toasts
plugins/auth.client.tsInit сессии при старте
plugins/auth-modal.client.tsSync ?auth= → модалка

API base: dev — proxy /api/**:3002 (nuxt.config routeRules).


8. Поток данных (типичный альбом)

mermaid
sequenceDiagram
  participant Page as /:id index.vue
  participant API as Express API
  participant TUS as /api/tus
  participant SSE as /api/events/:id/stream

  Page->>API: GET /events/:id
  Page->>API: GET /events/:id/media
  Page->>SSE: EventSource stream
  SSE-->>Page: new media event
  Page->>TUS: Uppy upload chunks
  TUS-->>API: onUploadFinish → Media row

9. Навигация sidebar (cabinet)

Источник: useAdminNav.ts.

Global: /account/my-events/profile

Event (когда route.params.id):

  • /:id/manage — обзор
  • /:id/members — команда
  • /:id/moderate — модерация
  • /:id/settings — только OWNER
  • /:id — открыть альбом

Platform (SUPER_ADMIN): /admin/users, /admin/events, /admin/plans


10. i18n

Локали: frontend/i18n/locales/ru.json, en.json.
Стратегия: no_prefix (без /en/ в URL). Переключатель: UiLocaleSwitcher (в header при необходимости).


11. Где править код

ЗадачаКуда смотреть
Новая публичная страницаpages/ + layout: landing
Новый пункт аккаунтаuseAdminNav.ts + pages/
Guard маршрутаmiddleware/ + definePageMeta
Auth UIAuthModal.vue, 21-auth-frontend.md
Ошибки API в UIutils/apiError.ts, pageLoadError.ts
SSR, OG, SEO26-ssr-migration.md, useEventPageMeta.ts