mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 18:52:56 +00:00
421 lines
12 KiB
Plaintext
421 lines
12 KiB
Plaintext
%%{init: {
|
|
'theme': 'base',
|
|
'securityLevel': 'loose',
|
|
'flowchart': { 'curve': 'linear', 'useMaxWidth': true, 'nodeSpacing': 36, 'rankSpacing': 48 },
|
|
'themeVariables': {
|
|
'primaryColor': '#0b5cff',
|
|
'primaryTextColor': '#ffffff',
|
|
'lineColor': '#64748b',
|
|
'tertiaryColor': '#f8fafc',
|
|
'fontSize': '12px'
|
|
},
|
|
'themeCSS': '.edgePath path { stroke-opacity: .6; } .cluster rect { rx:8; ry:8; }'
|
|
}}%%
|
|
flowchart TB
|
|
|
|
classDef route stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:1px;
|
|
classDef page stroke:#0ea5e9,fill:#e0f7ff,color:#0b5cff,stroke-width:1px;
|
|
classDef layout stroke:#6b7280,fill:#f8fafc,color:#111827,stroke-width:1px;
|
|
classDef component stroke:#94a3b8,fill:#f1f5f9,color:#111827,stroke-width:1px;
|
|
classDef svc stroke:#22c55e,fill:#ecfdf5,color:#065f46,stroke-width:1px;
|
|
classDef adminsvc stroke:#16a34a,fill:#dcfce7,color:#064e3b,stroke-width:1px;
|
|
classDef hook stroke:#f97316,fill:#fff7ed,color:#9a3412,stroke-width:1px;
|
|
classDef ctx stroke:#8b5cf6,fill:#f5f3ff,color:#4c1d95,stroke-width:1px;
|
|
classDef guard stroke:#ef4444,fill:#fef2f2,color:#991b1b,stroke-width:1px;
|
|
classDef ext stroke:#a855f7,fill:#faf5ff,color:#6b21a8,stroke-width:1px;
|
|
classDef infra stroke:#0f766e,fill:#ecfeff,color:#155e75,stroke-width:1px;
|
|
classDef legacy stroke-dasharray:3 3,stroke:#9ca3af,fill:#fafafa,color:#6b7280;
|
|
|
|
%% Routing & Guards
|
|
subgraph ROUTING [Routing]
|
|
direction TB
|
|
pr_admin[ProtectedRoute requiredRole=admin]:::guard
|
|
pr_editor[ProtectedRoute requiredRole=editor]:::guard
|
|
|
|
subgraph ROUTES [Admin Routes]
|
|
direction TB
|
|
r_admin["/admin"]:::route
|
|
r_docs["/admin/docs"]:::route
|
|
r_about["/admin/o-klubu"]:::route
|
|
r_videos["/admin/videa"]:::route
|
|
r_gallery["/admin/galerie"]:::route
|
|
r_merch["/admin/obleceni"]:::route
|
|
r_sponsors["/admin/sponzori"]:::route
|
|
r_matches["/admin/zapasy"]:::route
|
|
r_players["/admin/hraci"]:::route
|
|
r_teams["/admin/tymy"]:::route
|
|
r_users["/admin/uzivatele"]:::route
|
|
r_banners["/admin/bannery"]:::route
|
|
r_messages["/admin/zpravy"]:::route
|
|
r_settings["/admin/nastaveni"]:::route
|
|
r_newsletter["/admin/newsletter"]:::route
|
|
r_polls["/admin/ankety"]:::route
|
|
r_aliases["/admin/aliasy-soutezi"]:::route
|
|
r_prefetch["/admin/prefetch"]:::route
|
|
r_reset["/admin/users/send-reset"]:::route
|
|
r_score["/admin/scoreboard"]:::route
|
|
r_score_remote["/admin/scoreboard/remote"]:::route
|
|
r_analytics["/admin/analytika"]:::route
|
|
r_shortlinks["/admin/shortlinks"]:::route
|
|
r_files["/admin/soubory"]:::route
|
|
r_contacts["/admin/kontakty"]:::route
|
|
r_nav["/admin/navigace"]:::route
|
|
r_comments["/admin/komentare"]:::route
|
|
r_engagement["/admin/engagement"]:::route
|
|
r_sweep["/admin/sweepstakes"]:::route
|
|
r_sweep_visual["/admin/sweepstakes/:id/visual"]:::route
|
|
r_articles["/admin/clanky"]:::route
|
|
r_activities["/admin/aktivity"]:::route
|
|
end
|
|
|
|
pr_admin --> r_admin
|
|
pr_admin --> r_docs
|
|
pr_admin --> r_about
|
|
pr_admin --> r_videos
|
|
pr_admin --> r_gallery
|
|
pr_admin --> r_merch
|
|
pr_admin --> r_sponsors
|
|
pr_admin --> r_matches
|
|
pr_admin --> r_players
|
|
pr_admin --> r_teams
|
|
pr_admin --> r_users
|
|
pr_admin --> r_banners
|
|
pr_admin --> r_messages
|
|
pr_admin --> r_settings
|
|
pr_admin --> r_newsletter
|
|
pr_admin --> r_polls
|
|
pr_admin --> r_aliases
|
|
pr_admin --> r_prefetch
|
|
pr_admin --> r_reset
|
|
pr_admin --> r_score
|
|
pr_admin --> r_score_remote
|
|
pr_admin --> r_analytics
|
|
pr_admin --> r_shortlinks
|
|
pr_admin --> r_files
|
|
pr_admin --> r_contacts
|
|
pr_admin --> r_nav
|
|
pr_admin --> r_comments
|
|
pr_admin --> r_engagement
|
|
pr_admin --> r_sweep
|
|
pr_admin --> r_sweep_visual
|
|
pr_editor --> r_articles
|
|
pr_editor --> r_activities
|
|
end
|
|
|
|
%% Admin UI Shell
|
|
subgraph UI [Admin UI Shell]
|
|
direction TB
|
|
layout[AdminLayout]:::layout
|
|
sidebar[AdminSidebar]:::component
|
|
header[AdminHeader]:::component
|
|
search[AdminSearchModal]:::component
|
|
support[AdminSupportButton]:::component
|
|
auth[AuthContext]:::ctx
|
|
ups[usePublicSettings]:::hook
|
|
|
|
layout --> sidebar
|
|
layout --> header
|
|
layout --> search
|
|
layout --> support
|
|
layout --> auth
|
|
layout --> ups
|
|
end
|
|
|
|
%% Common Admin Hooks
|
|
subgraph HOOKS [Common Admin Hooks]
|
|
direction TB
|
|
h_adminTable[useAdminTable]:::hook
|
|
h_autoSave[useAutoSave]:::hook
|
|
end
|
|
|
|
%% Admin Pages (each includes AdminLayout)
|
|
subgraph PAGES [Admin Pages]
|
|
direction TB
|
|
p_dashboard[AdminDashboardPage]:::page
|
|
p_docs[AdminDocsPage]:::page
|
|
p_about[AboutAdminPage]:::page
|
|
p_videos[AdminVideosPage]:::page
|
|
p_gallery[GalleryAdminPage]:::page
|
|
p_merch[AdminMerchPage]:::page
|
|
p_sponsors[SponsorsAdminPage]:::page
|
|
p_matches[MatchesAdminPage]:::page
|
|
p_players[PlayersAdminPage]:::page
|
|
p_teams[TeamsAdminPage]:::page
|
|
p_users[UsersAdminPage]:::page
|
|
p_banners[BannersAdminPage]:::page
|
|
p_messages[MessagesAdminPage]:::page
|
|
p_settings[SettingsAdminPage]:::page
|
|
p_newsletter[NewsletterAdminPage]:::page
|
|
p_polls[PollsAdminPage]:::page
|
|
p_aliases[CompetitionAliasesAdminPage]:::page
|
|
p_prefetch[PrefetchAdminPage]:::page
|
|
p_reset[AdminResetPasswordPage]:::page
|
|
p_score[ScoreboardAdminPage]:::page
|
|
p_score_remote[MobileScoreboardControlPage]:::page
|
|
p_analytics[AnalyticsAdminPage]:::page
|
|
p_shortlinks[ShortlinksAdminPage]:::page
|
|
p_files[FilesAdminPage]:::page
|
|
p_contacts[ContactsAdminPage]:::page
|
|
p_nav[NavigationAdminPage]:::page
|
|
p_comments[CommentsAdminPage]:::page
|
|
p_engagement[EngagementAdminPage]:::page
|
|
p_sweep[SweepstakesAdminPage]:::page
|
|
p_sweep_visual[SweepstakeVisualPage]:::page
|
|
p_articles[ArticlesAdminPage]:::page
|
|
p_activities[AdminActivitiesPage]:::page
|
|
|
|
%% Unrouted/Legacy admin pages present in codebase
|
|
p_devdocs[DevDocsPage]:::legacy
|
|
p_media[MediaAdminPage]:::legacy
|
|
p_standings[StandingsAdminPage]:::legacy
|
|
p_errors[ErrorsAdminPage]:::legacy
|
|
p_docs_old[AdminDocsPage_Old]:::legacy
|
|
p_dash_legacy[DashboardPage]:::legacy
|
|
end
|
|
|
|
%% Route -> Page wiring
|
|
r_admin --> p_dashboard
|
|
r_docs --> p_docs
|
|
r_about --> p_about
|
|
r_videos --> p_videos
|
|
r_gallery --> p_gallery
|
|
r_merch --> p_merch
|
|
r_sponsors --> p_sponsors
|
|
r_matches --> p_matches
|
|
r_players --> p_players
|
|
r_teams --> p_teams
|
|
r_users --> p_users
|
|
r_banners --> p_banners
|
|
r_messages --> p_messages
|
|
r_settings --> p_settings
|
|
r_newsletter --> p_newsletter
|
|
r_polls --> p_polls
|
|
r_aliases --> p_aliases
|
|
r_prefetch --> p_prefetch
|
|
r_reset --> p_reset
|
|
r_score --> p_score
|
|
r_score_remote --> p_score_remote
|
|
r_analytics --> p_analytics
|
|
r_shortlinks --> p_shortlinks
|
|
r_files --> p_files
|
|
r_contacts --> p_contacts
|
|
r_nav --> p_nav
|
|
r_comments --> p_comments
|
|
r_engagement --> p_engagement
|
|
r_sweep --> p_sweep
|
|
r_sweep_visual --> p_sweep_visual
|
|
r_articles --> p_articles
|
|
r_activities --> p_activities
|
|
|
|
%% Pages include AdminLayout
|
|
p_dashboard --> layout
|
|
p_docs --> layout
|
|
p_about --> layout
|
|
p_videos --> layout
|
|
p_gallery --> layout
|
|
p_merch --> layout
|
|
p_sponsors --> layout
|
|
p_matches --> layout
|
|
p_players --> layout
|
|
p_teams --> layout
|
|
p_users --> layout
|
|
p_banners --> layout
|
|
p_messages --> layout
|
|
p_settings --> layout
|
|
p_newsletter --> layout
|
|
p_polls --> layout
|
|
p_aliases --> layout
|
|
p_prefetch --> layout
|
|
p_reset --> layout
|
|
p_score --> layout
|
|
p_score_remote --> layout
|
|
p_analytics --> layout
|
|
p_shortlinks --> layout
|
|
p_files --> layout
|
|
p_contacts --> layout
|
|
p_nav --> layout
|
|
p_comments --> layout
|
|
p_engagement --> layout
|
|
p_sweep --> layout
|
|
p_sweep_visual --> layout
|
|
p_articles --> layout
|
|
p_activities --> layout
|
|
|
|
%% Services
|
|
subgraph SERVICES [Service Layer]
|
|
direction TB
|
|
s_api["api.ts (Axios + interceptors)"]:::infra
|
|
s_settings[settings.ts]:::svc
|
|
s_setup[setup.ts]:::svc
|
|
s_seo[seo.ts]:::svc
|
|
s_articles[articles.ts]:::svc
|
|
s_files[files.ts]:::svc
|
|
s_navigation[navigation.ts]:::svc
|
|
s_players[players.ts]:::svc
|
|
s_polls[polls.ts]:::svc
|
|
s_shortlinks[shortlinks.ts]:::svc
|
|
s_banners[banners.ts]:::svc
|
|
s_clothing[clothing.ts]:::svc
|
|
s_contacts[contactInfo.ts]:::svc
|
|
s_comments_pub[comments.ts]:::svc
|
|
s_events[eventService.ts]:::svc
|
|
s_image[imageProcessing.ts]:::svc
|
|
s_scoreboard[scoreboard.ts]:::svc
|
|
s_sweep[sweepstakes.ts]:::svc
|
|
s_youtube[youtube.ts]:::svc
|
|
s_zonerama[zonerama.ts]:::svc
|
|
s_analytics[analyticsService.ts]:::svc
|
|
s_errors[errors.ts]:::svc
|
|
s_facr_cache[facr/cache.ts]:::svc
|
|
s_facr_api[facr/facrApi.ts]:::svc
|
|
s_ai[ai.ts]:::svc
|
|
|
|
subgraph ADMIN_APIs [Admin API Modules]
|
|
direction TB
|
|
s_admin_comments[admin/comments.ts]:::adminsvc
|
|
s_admin_msgs[admin/contactMessages.ts]:::adminsvc
|
|
s_admin_eng[admin/engagement.ts]:::adminsvc
|
|
s_admin_news[admin/newsletter.ts]:::adminsvc
|
|
s_admin_prefetch[admin/prefetch.ts]:::adminsvc
|
|
s_admin_matches[adminMatches.ts]:::adminsvc
|
|
end
|
|
end
|
|
|
|
%% External/Integrations
|
|
subgraph EXTERNAL [External Systems]
|
|
direction TB
|
|
x_facr[FAČR API]:::ext
|
|
x_youtube[YouTube]:::ext
|
|
x_zonerama[Zonerama]:::ext
|
|
x_logoapi[logoapi.sportcreative.eu]:::ext
|
|
x_sportlogos[sportlogos.tdvorak.dev]:::ext
|
|
x_smtp[SMTP / Email]:::ext
|
|
x_errrev[Error Review Service]:::ext
|
|
end
|
|
|
|
%% Infra
|
|
s_api -->|interceptors, auth, csrf| s_api
|
|
|
|
%% Service <-> External mappings
|
|
s_youtube --> x_youtube
|
|
s_zonerama --> x_zonerama
|
|
s_facr_api --> x_facr
|
|
s_scoreboard --> x_logoapi
|
|
s_scoreboard --> x_sportlogos
|
|
s_admin_news --> x_smtp
|
|
s_settings --> x_errrev
|
|
|
|
%% Page -> Service dependencies
|
|
p_dashboard --> s_analytics
|
|
p_dashboard --> s_facr_cache
|
|
p_dashboard --> s_api
|
|
p_docs --> s_api
|
|
p_about --> s_settings
|
|
p_about --> s_articles
|
|
p_about --> s_api
|
|
p_about --> s_ai
|
|
p_videos --> s_settings
|
|
p_videos --> s_admin_prefetch
|
|
p_videos --> s_youtube
|
|
p_gallery --> s_api
|
|
p_gallery --> s_zonerama
|
|
p_merch --> s_clothing
|
|
p_sponsors --> s_sponsors
|
|
p_sponsors --> s_articles
|
|
p_matches --> s_admin_matches
|
|
p_matches --> s_settings
|
|
p_matches --> s_facr_cache
|
|
p_matches --> s_facr_api
|
|
p_matches --> s_comp_alias
|
|
p_players --> s_players
|
|
p_players --> s_image
|
|
p_players --> s_articles
|
|
p_teams --> s_admin_matches
|
|
p_teams --> s_image
|
|
p_teams --> s_facr_api
|
|
p_teams --> s_scoreboard
|
|
p_users --> s_admin_eng
|
|
p_users --> s_api
|
|
p_banners --> s_banners
|
|
p_banners --> s_articles
|
|
p_messages --> s_admin_msgs
|
|
p_settings --> s_settings
|
|
p_settings --> s_seo
|
|
p_settings --> s_admin_prefetch
|
|
p_settings --> s_articles
|
|
p_newsletter --> s_admin_news
|
|
p_newsletter --> s_settings
|
|
p_polls --> s_polls
|
|
p_polls --> s_categories
|
|
p_polls --> s_events
|
|
p_polls --> s_articles
|
|
p_polls --> s_players
|
|
p_aliases --> s_comp_alias
|
|
p_aliases --> s_api
|
|
p_prefetch --> s_admin_prefetch
|
|
p_prefetch --> s_api
|
|
p_reset --> s_api
|
|
p_score --> s_scoreboard
|
|
p_score --> s_sponsors
|
|
p_score_remote --> s_scoreboard
|
|
p_analytics --> s_analytics
|
|
p_shortlinks --> s_shortlinks
|
|
p_files --> s_files
|
|
p_files --> s_api
|
|
p_contacts --> s_contacts
|
|
p_contacts --> s_settings
|
|
p_contacts --> s_image
|
|
p_contacts --> s_facr_cache
|
|
p_nav --> s_navigation
|
|
p_comments --> s_admin_comments
|
|
p_comments --> s_comments_pub
|
|
p_comments --> s_articles
|
|
p_comments --> s_events
|
|
p_comments --> s_youtube
|
|
p_comments --> s_admin_eng
|
|
p_engagement --> s_admin_eng
|
|
p_sweep --> s_sweep
|
|
p_sweep --> s_articles
|
|
p_sweep_visual --> s_sweep
|
|
p_sweep_visual --> s_settings
|
|
p_articles --> s_articles
|
|
p_articles --> s_youtube
|
|
p_articles --> s_shortlinks
|
|
p_articles --> s_zonerama
|
|
p_articles --> s_settings
|
|
p_articles --> s_facr_api
|
|
p_articles --> s_events
|
|
p_articles --> h_autoSave
|
|
p_articles --> s_ai
|
|
p_activities --> s_events
|
|
p_activities --> s_articles
|
|
p_activities --> s_youtube
|
|
p_activities --> s_settings
|
|
p_activities --> s_shortlinks
|
|
p_activities --> s_facr_api
|
|
p_activities --> h_autoSave
|
|
|
|
%% Missing simple aliases for a few symbols referenced above
|
|
s_sponsors[sponsors.ts]:::svc
|
|
s_categories[categories.ts]:::svc
|
|
s_comp_alias[competitionAliases.ts]:::svc
|
|
|
|
%% Legacy pages light mappings
|
|
p_errors --> s_errors
|
|
p_errors --> s_settings
|
|
p_media --> s_files
|
|
p_media --> s_image
|
|
p_standings --> s_facr_cache
|
|
|
|
%% UI / Guards dependencies
|
|
sidebar --> s_navigation
|
|
sidebar --> s_events
|
|
sidebar --> s_settings
|
|
pr_admin --> s_setup
|
|
pr_editor --> s_setup
|
|
|
|
%% Notes:
|
|
%% - All admin pages render AdminLayout which composes Sidebar, Header, Search modal and Support button.
|
|
%% - Guards: routes under /admin require admin unless explicitly editor-accessible (/admin/clanky, /admin/aktivity).
|
|
%% - Services use Axios instance with interceptors (api.ts), many pages use React Query for data fetching.
|