mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-05 03:02:56 +00:00
dev day #92
This commit is contained in:
@@ -0,0 +1,420 @@
|
||||
%%{init: {
|
||||
'theme': 'base',
|
||||
'securityLevel': 'loose',
|
||||
'flowchart': { 'curve': 'basis' },
|
||||
'themeVariables': {
|
||||
'primaryColor': '#0b5cff',
|
||||
'primaryTextColor': '#ffffff',
|
||||
'lineColor': '#64748b',
|
||||
'tertiaryColor': '#f8fafc',
|
||||
'fontSize': '12px'
|
||||
},
|
||||
'themeCSS': '.edgePath path { stroke-dasharray: 5 5; animation: dash 24s linear infinite; } @keyframes dash { to { stroke-dashoffset: 1000; } } .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.
|
||||
Reference in New Issue
Block a user