dev day #90 🥳
@@ -0,0 +1,29 @@
|
||||
# Project Diagrams
|
||||
|
||||
This folder contains Mermaid diagrams for the project:
|
||||
|
||||
- ER Diagram of the database schema
|
||||
- System Architecture (frontend ↔ backend ↔ integrations)
|
||||
- Admin Module Map (grouped by navigation categories)
|
||||
- Frontpage Data Map (sections → data sources)
|
||||
|
||||
## Recommended extensions (VS Code)
|
||||
- Markdown Preview Mermaid Support (ID: bpruitt-goddard.vscode-mermaid-preview)
|
||||
- Alternative: Markdown Preview Enhanced (ID: shd101wyy.markdown-preview-enhanced)
|
||||
|
||||
## How to preview
|
||||
1) Install one of the extensions above.
|
||||
2) Open any .md file here (e.g., er-diagram.md).
|
||||
3) Press Ctrl+Shift+V (or Right click → Open Preview / Open Preview to the Side).
|
||||
4) If prompted to allow scripts for Mermaid, accept.
|
||||
|
||||
## Files
|
||||
- er-diagram.md — ER diagram of DB entities and relationships
|
||||
- system-architecture.md — high-level system flow
|
||||
- admin-map.md — map of admin sections
|
||||
- frontpage-data-map.md — frontpage sections → data sources
|
||||
|
||||
## Optional: Export as images
|
||||
- You can install Mermaid CLI to export to PNG/SVG: `npm i -g @mermaid-js/mermaid-cli`
|
||||
- For Markdown files in this folder, run: `mmdc -i er-diagram.md -o er-diagram.svg --inputType markdown`
|
||||
(If you extract the mermaid code to a standalone .mmd file, you can omit `--inputType`.)
|
||||
@@ -0,0 +1,61 @@
|
||||
# Admin Module Map
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph Zakladni
|
||||
ADASH[Nastenka]
|
||||
AANALYT[Analytika]
|
||||
end
|
||||
subgraph Sport
|
||||
TEAMS[Tymy]
|
||||
MATCHES[Zapasy]
|
||||
PLAYERS[Hraci]
|
||||
ALIASES[Alias_soutezi]
|
||||
SCORE[Tabule_Scoreboard]
|
||||
SCORE_R[Scoreboard_Remote]
|
||||
end
|
||||
subgraph Obsah
|
||||
ARTICLES[Clanky]
|
||||
ACTIVITIES[Aktivity]
|
||||
CATEGORIES[Kategorie]
|
||||
COMMENTS[Komentare]
|
||||
end
|
||||
subgraph Media
|
||||
VIDEOS[Videa]
|
||||
GALLERY[Galerie]
|
||||
FILES[Soubory]
|
||||
BANNERS[Bannery]
|
||||
end
|
||||
subgraph Komunikace
|
||||
MSGS[Zpravy]
|
||||
NEWSLTR[Zpravodaj]
|
||||
CONTACTS[Kontakty]
|
||||
end
|
||||
subgraph Marketing
|
||||
SPONSORS[Sponzori]
|
||||
MERCH[Obleceni]
|
||||
POLLS[Ankety]
|
||||
SWEEP[Souteze]
|
||||
ENGAGE[Odmeny_a_Uspechy]
|
||||
SHORT[Zkracene_odkazy]
|
||||
end
|
||||
subgraph Nastroje
|
||||
PREFETCH[Prefetch_a_Cache]
|
||||
ERRORS[Chyby]
|
||||
DOCS[Dokumentace]
|
||||
end
|
||||
subgraph Nastaveni
|
||||
SETTINGS[Nastaveni]
|
||||
USERS[Uzivatele]
|
||||
NAV[Navigace]
|
||||
ABOUT[O_klubu]
|
||||
end
|
||||
|
||||
ADASH --> Sport
|
||||
ADASH --> Obsah
|
||||
ADASH --> Media
|
||||
ADASH --> Komunikace
|
||||
ADASH --> Marketing
|
||||
ADASH --> Nastroje
|
||||
ADASH --> Nastaveni
|
||||
```
|
||||
@@ -0,0 +1,57 @@
|
||||
graph LR
|
||||
subgraph Zakladni
|
||||
ADASH[Nastenka]
|
||||
AANALYT[Analytika]
|
||||
end
|
||||
subgraph Sport
|
||||
TEAMS[Tymy]
|
||||
MATCHES[Zapasy]
|
||||
PLAYERS[Hraci]
|
||||
ALIASES[Alias_soutezi]
|
||||
SCORE[Tabule_Scoreboard]
|
||||
SCORE_R[Scoreboard_Remote]
|
||||
end
|
||||
subgraph Obsah
|
||||
ARTICLES[Clanky]
|
||||
ACTIVITIES[Aktivity]
|
||||
CATEGORIES[Kategorie]
|
||||
COMMENTS[Komentare]
|
||||
end
|
||||
subgraph Media
|
||||
VIDEOS[Videa]
|
||||
GALLERY[Galerie]
|
||||
FILES[Soubory]
|
||||
BANNERS[Bannery]
|
||||
end
|
||||
subgraph Komunikace
|
||||
MSGS[Zpravy]
|
||||
NEWSLTR[Zpravodaj]
|
||||
CONTACTS[Kontakty]
|
||||
end
|
||||
subgraph Marketing
|
||||
SPONSORS[Sponzori]
|
||||
MERCH[Obleceni]
|
||||
POLLS[Ankety]
|
||||
SWEEP[Souteze]
|
||||
ENGAGE[Odmeny_a_Uspechy]
|
||||
SHORT[Zkracene_odkazy]
|
||||
end
|
||||
subgraph Nastroje
|
||||
PREFETCH[Prefetch_a_Cache]
|
||||
ERRORS[Chyby]
|
||||
DOCS[Dokumentace]
|
||||
end
|
||||
subgraph Nastaveni
|
||||
SETTINGS[Nastaveni]
|
||||
USERS[Uzivatele]
|
||||
NAV[Navigace]
|
||||
ABOUT[O_klubu]
|
||||
end
|
||||
|
||||
ADASH --> Sport
|
||||
ADASH --> Obsah
|
||||
ADASH --> Media
|
||||
ADASH --> Komunikace
|
||||
ADASH --> Marketing
|
||||
ADASH --> Nastroje
|
||||
ADASH --> Nastaveni
|
||||
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 33 KiB |
@@ -0,0 +1,37 @@
|
||||
graph LR
|
||||
subgraph Backend
|
||||
Router[API Router /api/v1]
|
||||
Middleware[Middleware JWT RateLimit CORS Gzip Recovery]
|
||||
Controllers[Controllers]
|
||||
Services[Services]
|
||||
Models[Models GORM]
|
||||
DB[PostgreSQL]
|
||||
Migrations[Migrations]
|
||||
Jobs[Background jobs Prefetcher Newsletter]
|
||||
Uploads[uploads static dist]
|
||||
end
|
||||
|
||||
subgraph Integrations
|
||||
FACR[FACR API]
|
||||
YT[YouTube API]
|
||||
ZON[Zonerama]
|
||||
SMTP[SMTP Email]
|
||||
MAPS[Google Maps]
|
||||
UMAMI[Umami Analytics]
|
||||
end
|
||||
|
||||
Router --> Middleware
|
||||
Router --> Controllers
|
||||
Controllers --> Services
|
||||
Services --> Models
|
||||
Models --> DB
|
||||
Migrations --> DB
|
||||
Jobs --> Services
|
||||
Jobs --> DB
|
||||
Controllers --> Uploads
|
||||
Controllers --> FACR
|
||||
Controllers --> YT
|
||||
Controllers --> ZON
|
||||
Controllers --> SMTP
|
||||
Controllers --> MAPS
|
||||
Controllers -. telemetry .-> UMAMI
|
||||
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1,79 @@
|
||||
# ER Diagram
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
USERS ||--o{ ARTICLES : author_id
|
||||
CATEGORIES ||--o{ ARTICLES : category_id
|
||||
ARTICLES ||--o{ ARTICLE_TEAM_LINKS : article_id
|
||||
ARTICLES ||--o{ ARTICLE_MATCH_LINKS : article_id
|
||||
|
||||
TEAMS ||--o{ PLAYERS : team_id
|
||||
|
||||
USERS ||--o{ EVENTS : created_by_id
|
||||
EVENTS ||--o{ EVENT_ATTACHMENTS : event_id
|
||||
|
||||
POLLS ||--o{ POLL_OPTIONS : poll_id
|
||||
POLLS ||--o{ POLL_VOTES : poll_id
|
||||
POLL_OPTIONS ||--o{ POLL_VOTES : option_id
|
||||
USERS o{--o| POLL_VOTES : user_id
|
||||
CATEGORIES o{--o| POLLS : category_id
|
||||
ARTICLES o{--o| POLLS : related_article_id
|
||||
EVENTS o{--o| POLLS : related_event_id
|
||||
PLAYERS o{--o| POLL_OPTIONS : player_id
|
||||
|
||||
USERS ||--|| USER_PROFILES : user_id
|
||||
USERS ||--o{ PASSWORD_RESETS : user_id
|
||||
USERS ||--o{ COMMENTS : user_id
|
||||
COMMENTS o{--o| COMMENTS : parent_id
|
||||
USERS ||--o{ COMMENT_BANS : user_id
|
||||
USERS ||--o{ UNBAN_REQUESTS : user_id
|
||||
COMMENTS ||--o{ COMMENT_REACTIONS : comment_id
|
||||
COMMENTS ||--o{ COMMENT_REPORTS : comment_id
|
||||
|
||||
USERS o{--o| UPLOADED_FILES : uploaded_by_id
|
||||
UPLOADED_FILES ||--o{ FILE_USAGES : file_id
|
||||
|
||||
CONTACT_CATEGORIES o{--o| CONTACTS : category_id
|
||||
|
||||
SHORT_LINKS o{--o| LINK_CLICKS : short_link_id
|
||||
USERS o{--o| SHORT_LINKS : created_by_id
|
||||
|
||||
EMAIL_LOGS ||--o{ EMAIL_EVENTS : email_log_id
|
||||
ARTICLES ||--o{ BLOG_NOTIFICATIONS : article_id
|
||||
|
||||
SWEEPSTAKES ||--o{ SWEEPSTAKE_PRIZES : sweepstake_id
|
||||
SWEEPSTAKES ||--o{ SWEEPSTAKE_ENTRIES : sweepstake_id
|
||||
SWEEPSTAKES ||--o{ SWEEPSTAKE_WINNERS : sweepstake_id
|
||||
USERS ||--o{ SWEEPSTAKE_ENTRIES : user_id
|
||||
USERS ||--o{ SWEEPSTAKE_WINNERS : user_id
|
||||
SWEEPSTAKE_ENTRIES ||--o{ SWEEPSTAKE_WINNERS : entry_id
|
||||
SWEEPSTAKE_PRIZES |o--o{ SWEEPSTAKE_WINNERS : prize_id
|
||||
|
||||
USERS ||--o{ POINTS_TRANSACTIONS : user_id
|
||||
USERS ||--o{ USER_ACHIEVEMENTS : user_id
|
||||
ACHIEVEMENTS ||--o{ USER_ACHIEVEMENTS : achievement_id
|
||||
REWARD_ITEMS ||--o{ REWARD_REDEMPTIONS : reward_id
|
||||
USERS ||--o{ REWARD_REDEMPTIONS : user_id
|
||||
|
||||
USERS o{--o| AUDIT_LOGS : user_id
|
||||
USERS o{--o| ERROR_EVENTS : user_id
|
||||
USERS o{--o| VISITOR_EVENTS : user_id
|
||||
|
||||
SETUP_INFO ||--o{ CLUB_INFO : setup_info_id
|
||||
|
||||
NAVIGATION_ITEMS o{--o| NAVIGATION_ITEMS : parent_id
|
||||
|
||||
%% Standalone/core tables (configured/consumed by services)
|
||||
SETTINGS
|
||||
ABOUT_PAGES
|
||||
SPONSORS
|
||||
BANNERS
|
||||
CLOTHING
|
||||
COMPETITION_ALIASES
|
||||
MATCH_OVERRIDES
|
||||
TEAM_LOGO_OVERRIDES
|
||||
NEWSLETTER_SUBSCRIPTIONS
|
||||
NEWSLETTER_SENT_LOG
|
||||
MATCH_NOTIFICATIONS
|
||||
SCOREBOARD_STATES
|
||||
```
|
||||
@@ -0,0 +1,75 @@
|
||||
erDiagram
|
||||
USERS ||--o{ ARTICLES : author_id
|
||||
CATEGORIES ||--o{ ARTICLES : category_id
|
||||
ARTICLES ||--o{ ARTICLE_TEAM_LINKS : article_id
|
||||
ARTICLES ||--o{ ARTICLE_MATCH_LINKS : article_id
|
||||
|
||||
TEAMS ||--o{ PLAYERS : team_id
|
||||
|
||||
USERS ||--o{ EVENTS : created_by_id
|
||||
EVENTS ||--o{ EVENT_ATTACHMENTS : event_id
|
||||
|
||||
POLLS ||--o{ POLL_OPTIONS : poll_id
|
||||
POLLS ||--o{ POLL_VOTES : poll_id
|
||||
POLL_OPTIONS ||--o{ POLL_VOTES : option_id
|
||||
USERS |o--o{ POLL_VOTES : user_id
|
||||
CATEGORIES |o--o{ POLLS : category_id
|
||||
ARTICLES |o--o{ POLLS : related_article_id
|
||||
EVENTS |o--o{ POLLS : related_event_id
|
||||
PLAYERS |o--o{ POLL_OPTIONS : player_id
|
||||
|
||||
USERS ||--|| USER_PROFILES : user_id
|
||||
USERS ||--o{ PASSWORD_RESETS : user_id
|
||||
USERS ||--o{ COMMENTS : user_id
|
||||
COMMENTS |o--o{ COMMENTS : parent_id
|
||||
USERS ||--o{ COMMENT_BANS : user_id
|
||||
USERS ||--o{ UNBAN_REQUESTS : user_id
|
||||
COMMENTS ||--o{ COMMENT_REACTIONS : comment_id
|
||||
COMMENTS ||--o{ COMMENT_REPORTS : comment_id
|
||||
|
||||
USERS |o--o{ UPLOADED_FILES : uploaded_by_id
|
||||
UPLOADED_FILES ||--o{ FILE_USAGES : file_id
|
||||
|
||||
CONTACT_CATEGORIES |o--o{ CONTACTS : category_id
|
||||
|
||||
SHORT_LINKS |o--o{ LINK_CLICKS : short_link_id
|
||||
USERS |o--o{ SHORT_LINKS : created_by_id
|
||||
|
||||
EMAIL_LOGS ||--o{ EMAIL_EVENTS : email_log_id
|
||||
ARTICLES ||--o{ BLOG_NOTIFICATIONS : article_id
|
||||
|
||||
SWEEPSTAKES ||--o{ SWEEPSTAKE_PRIZES : sweepstake_id
|
||||
SWEEPSTAKES ||--o{ SWEEPSTAKE_ENTRIES : sweepstake_id
|
||||
SWEEPSTAKES ||--o{ SWEEPSTAKE_WINNERS : sweepstake_id
|
||||
USERS ||--o{ SWEEPSTAKE_ENTRIES : user_id
|
||||
USERS ||--o{ SWEEPSTAKE_WINNERS : user_id
|
||||
SWEEPSTAKE_ENTRIES ||--o{ SWEEPSTAKE_WINNERS : entry_id
|
||||
SWEEPSTAKE_PRIZES |o--o{ SWEEPSTAKE_WINNERS : prize_id
|
||||
|
||||
USERS ||--o{ POINTS_TRANSACTIONS : user_id
|
||||
USERS ||--o{ USER_ACHIEVEMENTS : user_id
|
||||
ACHIEVEMENTS ||--o{ USER_ACHIEVEMENTS : achievement_id
|
||||
REWARD_ITEMS ||--o{ REWARD_REDEMPTIONS : reward_id
|
||||
USERS ||--o{ REWARD_REDEMPTIONS : user_id
|
||||
|
||||
USERS |o--o{ AUDIT_LOGS : user_id
|
||||
USERS |o--o{ ERROR_EVENTS : user_id
|
||||
USERS |o--o{ VISITOR_EVENTS : user_id
|
||||
|
||||
SETUP_INFO ||--o{ CLUB_INFO : setup_info_id
|
||||
|
||||
NAVIGATION_ITEMS |o--o{ NAVIGATION_ITEMS : parent_id
|
||||
|
||||
%% Standalone/core tables (configured/consumed by services)
|
||||
SETTINGS
|
||||
ABOUT_PAGES
|
||||
SPONSORS
|
||||
BANNERS
|
||||
CLOTHING
|
||||
COMPETITION_ALIASES
|
||||
MATCH_OVERRIDES
|
||||
TEAM_LOGO_OVERRIDES
|
||||
NEWSLETTER_SUBSCRIPTIONS
|
||||
NEWSLETTER_SENT_LOG
|
||||
MATCH_NOTIFICATIONS
|
||||
SCOREBOARD_STATES
|
||||
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 91 KiB |
@@ -0,0 +1,72 @@
|
||||
# Frontpage Data Map
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
Home[Homepage sections]
|
||||
News[News (Articles)]
|
||||
Matches[Upcoming & recent matches]
|
||||
TableSec[Standings / Tables]
|
||||
Activities[Activities (Events)]
|
||||
GallerySec[Gallery]
|
||||
VideosSec[Videos]
|
||||
PlayersSec[Players]
|
||||
SponsorsSec[Sponsors]
|
||||
MerchSec[Merch]
|
||||
PollsSec[Polls]
|
||||
MapSec[Club Map]
|
||||
NewsletterSec[Newsletter box]
|
||||
BannersSec[Banners]
|
||||
|
||||
Home --> News
|
||||
Home --> Matches
|
||||
Home --> TableSec
|
||||
Home --> Activities
|
||||
Home --> GallerySec
|
||||
Home --> VideosSec
|
||||
Home --> PlayersSec
|
||||
Home --> SponsorsSec
|
||||
Home --> MerchSec
|
||||
Home --> PollsSec
|
||||
Home --> MapSec
|
||||
Home --> NewsletterSec
|
||||
Home --> BannersSec
|
||||
|
||||
ARTICLES["Articles"]
|
||||
FACR_API["FACR API"]
|
||||
MATCH_OVERRIDES["Match overrides"]
|
||||
COMPETITION_ALIASES["Competition aliases"]
|
||||
EVENTS["Events"]
|
||||
SETTINGS["Settings"]
|
||||
ZONERAMA["Zonerama"]
|
||||
YOUTUBE["YouTube"]
|
||||
TEAMS["Teams"]
|
||||
DB_PLAYERS["Players"]
|
||||
SPONSORS["Sponsors"]
|
||||
CLOTHING["Clothing"]
|
||||
POLLS["Polls"]
|
||||
POLL_OPTIONS["Poll options"]
|
||||
GOOGLE_MAPS["Google Maps"]
|
||||
NEWSLETTER_SUBSCRIPTIONS["Newsletter subscriptions"]
|
||||
BANNERS["Banners"]
|
||||
|
||||
News -->|DB| ARTICLES
|
||||
Matches -->|Source| FACR_API
|
||||
Matches -->|Overrides| MATCH_OVERRIDES
|
||||
TableSec -->|Source| FACR_API
|
||||
TableSec -->|Aliases| COMPETITION_ALIASES
|
||||
Activities -->|DB| EVENTS
|
||||
GallerySec -->|Profile URL| SETTINGS
|
||||
GallerySec --> ZONERAMA
|
||||
VideosSec -->|Config| SETTINGS
|
||||
VideosSec --> YOUTUBE
|
||||
PlayersSec --> TEAMS
|
||||
PlayersSec --> DB_PLAYERS
|
||||
SponsorsSec -->|DB| SPONSORS
|
||||
MerchSec -->|DB| CLOTHING
|
||||
PollsSec -->|DB| POLLS
|
||||
PollsSec --> POLL_OPTIONS
|
||||
MapSec -->|lat/lng + style| SETTINGS
|
||||
MapSec --> GOOGLE_MAPS
|
||||
NewsletterSec -->|subscribe| NEWSLETTER_SUBSCRIPTIONS
|
||||
BannersSec -->|DB| BANNERS
|
||||
```
|
||||
@@ -0,0 +1,68 @@
|
||||
graph TB
|
||||
Home[Homepage sections]
|
||||
News[News Articles]
|
||||
Matches[Upcoming and recent matches]
|
||||
TableSec[Standings Tables]
|
||||
Activities[Activities Events]
|
||||
GallerySec[Gallery]
|
||||
VideosSec[Videos]
|
||||
PlayersSec[Players]
|
||||
SponsorsSec[Sponsors]
|
||||
MerchSec[Merch]
|
||||
PollsSec[Polls]
|
||||
MapSec[Club Map]
|
||||
NewsletterSec[Newsletter]
|
||||
BannersSec[Banners]
|
||||
|
||||
Home --> News
|
||||
Home --> Matches
|
||||
Home --> TableSec
|
||||
Home --> Activities
|
||||
Home --> GallerySec
|
||||
Home --> VideosSec
|
||||
Home --> PlayersSec
|
||||
Home --> SponsorsSec
|
||||
Home --> MerchSec
|
||||
Home --> PollsSec
|
||||
Home --> MapSec
|
||||
Home --> NewsletterSec
|
||||
Home --> BannersSec
|
||||
|
||||
ARTICLES[Articles]
|
||||
FACR_API[FACR API]
|
||||
MATCH_OVERRIDES[Match overrides]
|
||||
COMPETITION_ALIASES[Competition aliases]
|
||||
EVENTS[Events]
|
||||
SETTINGS[Settings]
|
||||
ZONERAMA[Zonerama]
|
||||
YOUTUBE[YouTube]
|
||||
TEAMS[Teams]
|
||||
DB_PLAYERS[Players]
|
||||
SPONSORS[Sponsors]
|
||||
CLOTHING[Clothing]
|
||||
POLLS[Polls]
|
||||
POLL_OPTIONS[Poll options]
|
||||
GOOGLE_MAPS[Google Maps]
|
||||
NEWSLETTER_SUBSCRIPTIONS[Newsletter subscriptions]
|
||||
BANNERS[Banners]
|
||||
|
||||
News -->|DB| ARTICLES
|
||||
Matches -->|Source| FACR_API
|
||||
Matches -->|Overrides| MATCH_OVERRIDES
|
||||
TableSec -->|Source| FACR_API
|
||||
TableSec -->|Aliases| COMPETITION_ALIASES
|
||||
Activities -->|DB| EVENTS
|
||||
GallerySec -->|Profile URL| SETTINGS
|
||||
GallerySec --> ZONERAMA
|
||||
VideosSec -->|Config| SETTINGS
|
||||
VideosSec --> YOUTUBE
|
||||
PlayersSec --> TEAMS
|
||||
PlayersSec --> DB_PLAYERS
|
||||
SponsorsSec -->|DB| SPONSORS
|
||||
MerchSec -->|DB| CLOTHING
|
||||
PollsSec -->|DB| POLLS
|
||||
PollsSec --> POLL_OPTIONS
|
||||
MapSec -->|lat lng and style| SETTINGS
|
||||
MapSec --> GOOGLE_MAPS
|
||||
NewsletterSec -->|subscribe| NEWSLETTER_SUBSCRIPTIONS
|
||||
BannersSec -->|DB| BANNERS
|
||||
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 52 KiB |
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"args": ["--no-sandbox", "--disable-setuid-sandbox"]
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
# System Architecture
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph Clients
|
||||
A["Public site React SPA"]
|
||||
B["Admin SPA"]
|
||||
C["Scoreboard Overlay"]
|
||||
end
|
||||
|
||||
subgraph Frontend
|
||||
FE["React 18 + Chakra UI; Router + Query"]
|
||||
end
|
||||
|
||||
subgraph Backend
|
||||
BE["Go Gin REST API api v1; GORM services"]
|
||||
JOBS["Background jobs; Prefetcher; Newsletter automation"]
|
||||
end
|
||||
|
||||
subgraph Data
|
||||
DB["PostgreSQL"]
|
||||
UP["uploads static dist"]
|
||||
end
|
||||
|
||||
subgraph Integrations_optional
|
||||
FACR["FACR API"]
|
||||
YT["YouTube API"]
|
||||
ZON["Zonerama"]
|
||||
SMTP["SMTP email"]
|
||||
MAPS["Google Maps"]
|
||||
UMAMI["Umami Analytics"]
|
||||
end
|
||||
|
||||
A --> FE
|
||||
B --> FE
|
||||
C --> FE
|
||||
|
||||
FE -->|REST JSON| BE
|
||||
FE -->|uploads static| UP
|
||||
|
||||
BE --> DB
|
||||
BE --> UP
|
||||
|
||||
%% External calls
|
||||
BE --> FACR
|
||||
BE --> YT
|
||||
BE --> ZON
|
||||
BE --> SMTP
|
||||
BE -. "telemetry" .-> UMAMI
|
||||
BE --> MAPS
|
||||
|
||||
%% Jobs
|
||||
JOBS --> BE
|
||||
JOBS --> DB
|
||||
JOBS --> SMTP
|
||||
```
|
||||
@@ -0,0 +1,52 @@
|
||||
graph LR
|
||||
subgraph Clients
|
||||
A["Public site React SPA"]
|
||||
B["Admin SPA"]
|
||||
C["Scoreboard Overlay"]
|
||||
end
|
||||
|
||||
subgraph Frontend
|
||||
FE["React 18 + Chakra UI; Router + Query"]
|
||||
end
|
||||
|
||||
subgraph Backend
|
||||
BE["Go Gin REST API api v1; GORM services"]
|
||||
JOBS["Background jobs; Prefetcher; Newsletter automation"]
|
||||
end
|
||||
|
||||
subgraph Data
|
||||
DB["PostgreSQL"]
|
||||
UP["uploads static dist"]
|
||||
end
|
||||
|
||||
subgraph Integrations_optional
|
||||
FACR["FACR API"]
|
||||
YT["YouTube API"]
|
||||
ZON["Zonerama"]
|
||||
SMTP["SMTP email"]
|
||||
MAPS["Google Maps"]
|
||||
UMAMI["Umami Analytics"]
|
||||
end
|
||||
|
||||
A --> FE
|
||||
B --> FE
|
||||
C --> FE
|
||||
|
||||
FE -->|REST JSON| BE
|
||||
FE -->|uploads static| UP
|
||||
|
||||
BE --> DB
|
||||
BE --> UP
|
||||
|
||||
%% External calls
|
||||
BE --> FACR
|
||||
BE --> YT
|
||||
BE --> ZON
|
||||
BE --> SMTP
|
||||
BE -. "telemetry" .-> UMAMI
|
||||
BE --> MAPS
|
||||
|
||||
%% Jobs
|
||||
JOBS --> BE
|
||||
JOBS --> DB
|
||||
JOBS --> SMTP
|
||||
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 32 KiB |