mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 02:32:57 +00:00
195 lines
5.9 KiB
Markdown
195 lines
5.9 KiB
Markdown
# 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ánky
|
|
- `getTopArticles()` - nejčtenější články
|
|
- `getTopInteractions()` - 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á `useLocation` z 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:
|
|
1. Do Umami (pokud je nakonfigurováno)
|
|
2. Do backend analytiky
|
|
- `trackButtonClick` nyní 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ánky
|
|
- `PageName` - lidsky čitelný název stránky
|
|
- `Data` - generické JSONB pole pro libovolná event data
|
|
|
|
#### Controller (`internal/controllers/analytics_controller.go`)
|
|
- Automatická synchronizace `Page` a `PagePath` polí
|
|
- Přidán tracking `Referrer` hlavič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_path`
|
|
- `idx_visitor_events_created_at`
|
|
- `idx_visitor_events_event_type_created_at`
|
|
|
|
## Jak spustit
|
|
|
|
### 1. Spuštění migrací
|
|
|
|
```bash
|
|
# Nastavte RUN_MIGRATIONS=true v .env nebo spusťte:
|
|
go run main.go
|
|
```
|
|
|
|
Nebo manuálně:
|
|
```bash
|
|
cd database
|
|
migrate -path migrations -database "postgresql://user:pass@localhost:5432/fotbal_club?sslmode=disable" up
|
|
```
|
|
|
|
### 2. Restart backendu
|
|
|
|
```bash
|
|
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.
|
|
|
|
```bash
|
|
cd frontend
|
|
npm start
|
|
```
|
|
|
|
## Testování
|
|
|
|
### Test page view tracking
|
|
1. Otevřete aplikaci v prohlížeči
|
|
2. Navigujte mezi různými stránkami
|
|
3. V admin dashboardu (`/admin`) zkontrolujte:
|
|
- Počet zobrazení stránek
|
|
- Seznam nejnavštěvovanějších stránek
|
|
|
|
### Test interaction tracking
|
|
1. Klikněte na různé tlačítka v aplikaci
|
|
2. V dashboardu zkontrolujte sekci "Nejčastější interakce"
|
|
3. Měly by se tam zobrazit elementy, na které jste klikali
|
|
|
|
### Kontrola dat v databázi
|
|
|
|
```sql
|
|
-- 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řehled
|
|
- `GET /api/v1/admin/analytics/top-pages?limit=10` - top stránky
|
|
- `GET /api/v1/admin/analytics/top-articles?limit=10` - top články
|
|
- `GET /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
|
|
```typescript
|
|
import { trackButtonClick } from '@/utils/umami';
|
|
|
|
const handleClick = () => {
|
|
trackButtonClick('Název tlačítka', '/aktualni/cesta');
|
|
// ... zbytek logiky
|
|
};
|
|
```
|
|
|
|
### Tracking formuláře
|
|
```typescript
|
|
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
|
|
```typescript
|
|
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í `catch` pro tichý fail
|
|
- **GDPR**: Sledování je anonymní, žádné cookies, žádné PII (personally identifiable information)
|
|
|
|
## Troubleshooting
|
|
|
|
### Tracking nefunguje
|
|
1. Zkontrolujte browser console - měly by být pouze `console.debug` zprávy
|
|
2. Zkontrolujte Network tab - měl by být POST request na `/api/v1/analytics/track`
|
|
3. Ověřte, že backend běží a je dostupný
|
|
|
|
### Data se nezobrazují v dashboardu
|
|
1. Zkontrolujte, že migrace proběhla úspěšně
|
|
2. Ověřte data v databázi (viz SQL queries výše)
|
|
3. 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.ts` nebo `umami.ts`
|