mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-03 18:22:57 +00:00
5.9 KiB
5.9 KiB
Integrace analytiky do dashboardu
Co bylo provedeno
1. Frontend změny
Analytické služby (frontend/src/services/analyticsService.ts)
- Přidány nové funkce pro práci s analytikou:
getAnalyticsOverview()- získání celkového přehledu (page views, visitors)getTopPages()- nejnavštěvovanější stránkygetTopArticles()- nejčtenější článkygetTopInteractions()- nejčastější interakce uživatelůtrackEvent()- odeslání tracking eventu na backend
Oprava trackingu (frontend/src/hooks/useUmami.ts)
- Hook nyní automaticky trackuje změny stránek (page views)
- Tracking probíhá současně do Umami i backend analytiky
- Využívá
useLocationz React Router pro automatické sledování navigace
Utility funkce (frontend/src/utils/umami.ts)
- Všechny tracking funkce (
trackButtonClick,trackFormSubmit, atd.) nyní posílají data:- Do Umami (pokud je nakonfigurováno)
- Do backend analytiky
trackButtonClicknyní trackuje i jako "interakci" pro backend analytics
Admin Dashboard (frontend/src/pages/admin/AdminDashboardPage.tsx)
- Nové statistiky v horní části:
- Zobrazení stránek (celkem)
- Unikátní návštěvníci
- Zobrazení za týden
- Zobrazení dnes
- Dvě nové analytické tabulky:
- Nejnavštěvovanější stránky (top 5)
- Nejčastější interakce za 7 dní (top 5)
- Odkazy na detailní stránku analytiky (
/admin/analytika)
2. Backend změny
Model (internal/models/visitor_event.go)
Přidána nová pole do VisitorEvent:
PagePath- úplná cesta stránkyPageName- lidsky čitelný název stránkyData- generické JSONB pole pro libovolná event data
Controller (internal/controllers/analytics_controller.go)
- Automatická synchronizace
PageaPagePathpolí - Přidán tracking
Referrerhlavičky - Zachování IP adresy v hashované podobě pro ochranu soukromí
Migrace (database/migrations/000009_*.sql)
- Přidání nových sloupců do tabulky
visitor_events - Vytvoření indexů pro rychlejší queries:
idx_visitor_events_page_pathidx_visitor_events_created_atidx_visitor_events_event_type_created_at
Jak spustit
1. Spuštění migrací
# Nastavte RUN_MIGRATIONS=true v .env nebo spusťte:
go run main.go
Nebo manuálně:
cd database
migrate -path migrations -database "postgresql://user:pass@localhost:5432/fotbal_club?sslmode=disable" up
2. Restart backendu
go run main.go
3. Frontend
Frontend se automaticky připojí k novým endpointům. Pokud je frontend spuštěný, stačí obnovit stránku.
cd frontend
npm start
Testování
Test page view tracking
- Otevřete aplikaci v prohlížeči
- Navigujte mezi různými stránkami
- V admin dashboardu (
/admin) zkontrolujte:- Počet zobrazení stránek
- Seznam nejnavštěvovanějších stránek
Test interaction tracking
- Klikněte na různé tlačítka v aplikaci
- V dashboardu zkontrolujte sekci "Nejčastější interakce"
- Měly by se tam zobrazit elementy, na které jste klikali
Kontrola dat v databázi
-- Zobrazit poslední tracked eventy
SELECT event_type, page_path, page_name, created_at
FROM visitor_events
ORDER BY created_at DESC
LIMIT 10;
-- Počet page views
SELECT COUNT(*) FROM visitor_events WHERE event_type = 'page_view';
-- Nejnavštěvovanější stránky
SELECT page_path, COUNT(*) as views
FROM visitor_events
WHERE event_type = 'page_view'
GROUP BY page_path
ORDER BY views DESC
LIMIT 10;
API Endpointy
Veřejné
POST /api/v1/analytics/track- tracking eventů (rate-limited)
Admin (vyžaduje autentizaci)
GET /api/v1/admin/analytics/overview- celkový přehledGET /api/v1/admin/analytics/top-pages?limit=10- top stránkyGET /api/v1/admin/analytics/top-articles?limit=10- top článkyGET /api/v1/admin/analytics/top-interactions?days=7&limit=10- top interakce
Použití v kódu
Tracking page view (automaticky)
Page views se trackují automaticky při změně URL pomocí useUmami hooku v App.tsx.
Tracking tlačítka
import { trackButtonClick } from '@/utils/umami';
const handleClick = () => {
trackButtonClick('Název tlačítka', '/aktualni/cesta');
// ... zbytek logiky
};
Tracking formuláře
import { trackFormSubmit } from '@/utils/umami';
const handleSubmit = async (data) => {
try {
await submitForm(data);
trackFormSubmit('Kontaktní formulář', true);
} catch (error) {
trackFormSubmit('Kontaktní formulář', false);
}
};
Custom event
import { trackEvent } from '@/utils/umami';
trackEvent('Video Play', {
video_id: '123',
video_title: 'Góly týdne'
});
Poznámky
- Privacy-first: IP adresy jsou hashovány pomocí SHA-256 před uložením
- Dual tracking: Data se ukládají do vlastní DB i posílají do Umami (pokud je nakonfigurováno)
- Rate limiting: Public tracking endpoint je limitován na 120 requestů za minutu
- Performance: Tracking requesty neblokují UI, používají
catchpro tichý fail - GDPR: Sledování je anonymní, žádné cookies, žádné PII (personally identifiable information)
Troubleshooting
Tracking nefunguje
- Zkontrolujte browser console - měly by být pouze
console.debugzprávy - Zkontrolujte Network tab - měl by být POST request na
/api/v1/analytics/track - Ověřte, že backend běží a je dostupný
Data se nezobrazují v dashboardu
- Zkontrolujte, že migrace proběhla úspěšně
- Ověřte data v databázi (viz SQL queries výše)
- Zkontrolujte browser console pro chyby při načítání dat
Duplicitní tracking
- To je očekávané chování - data jdou současně do Umami i backend DB
- Pokud chcete vypnout jedno z nich, upravte kód v
useUmami.tsneboumami.ts