Files
MyClub/DOCS/SPONSOR_CATEGORY_FIX.md
T
Tomáš Dvořák 12cba639b9 upload
2025-10-16 13:32:05 +02:00

139 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Fix pro rozdělení sponzorů na kategorie (Hlavní partneři vs. Partneři)
## Problém
Správa sponzorů nefungovala správně - pole `tier` (úroveň partnera) a `display_order` (pořadí zobrazení) se neukládala do databáze, takže nebylo možné odlišit hlavní partnery od běžných partnerů.
## Provedené změny
### 1. Backend Controller (`internal/controllers/base_controller.go`)
#### GetSponsors - Oprava řazení
- Změněno řazení z `name ASC` na `CASE WHEN tier = 'general' THEN 0 ELSE 1 END, display_order ASC, name ASC`
- Nyní se nejdříve zobrazí hlavní partneři (tier='general'), poté ostatní, vše seřazené podle pořadí a názvu
#### CreateSponsor - Přidána podpora pro tier a display_order
```go
// Přidána nová pole do request body struct:
Tier string `json:"tier"`
DisplayOrder *int `json:"display_order"`
// Přidána logika pro zpracování těchto hodnot:
tier := strings.TrimSpace(body.Tier)
if tier == "" {
tier = "standard"
}
displayOrder := 0
if body.DisplayOrder != nil {
displayOrder = *body.DisplayOrder
}
// Přidáno do modelu Sponsor:
Tier: tier,
DisplayOrder: displayOrder,
```
#### UpdateSponsor - Přidána podpora pro tier a display_order
```go
// Přidána nová pole do request body struct:
Tier *string `json:"tier"`
DisplayOrder *int `json:"display_order"`
// Přidána logika pro aktualizaci těchto hodnot:
if body.Tier != nil {
tier := strings.TrimSpace(*body.Tier)
if tier != "" {
s.Tier = tier
}
}
if body.DisplayOrder != nil {
s.DisplayOrder = *body.DisplayOrder
}
```
### 2. Main.go - Přidán Sponsor do AutoMigrate
```go
if err := dbInstance.AutoMigrate(
// ... ostatní modely ...
&models.Sponsor{}, // <-- PŘIDÁNO
// ... ostatní modely ...
); err != nil {
log.Printf("Warning: AutoMigrate failed: %v", err)
}
```
Tato změna zajistí, že:
- Tabulka `sponsors` bude vytvořena při prvním spuštění
- Sloupce `tier` a `display_order` budou přidány, pokud ještě neexistují
- Při dalších spuštěních se automaticky synchronizuje schema s modelem
## Model Sponsor (už existoval správně v `internal/models/models.go`)
```go
type Sponsor struct {
gorm.Model
Name string `gorm:"not null" json:"name"`
LogoURL string `json:"logo_url"`
WebsiteURL string `json:"website_url"`
Description string `json:"description"`
IsActive bool `gorm:"default:true" json:"is_active"`
Tier string `gorm:"default:'standard'" json:"tier"` // general (hlavní), standard
DisplayOrder int `gorm:"default:0" json:"display_order"` // Pro vlastní řazení
// ... další pole ...
}
```
## Frontend (už fungoval správně)
Frontend správně odesílá `tier` a `display_order`:
- Admin stránka (`frontend/src/pages/admin/SponsorsAdminPage.tsx`) zobrazuje a upravuje tier i display_order
- Veřejná stránka (`frontend/src/pages/SponsorsPage.tsx`) správně filtruje sponzory podle tier:
- `tier === 'general'` → Hlavní partneři (větší zobrazení)
- Ostatní → Partneři (menší zobrazení)
## Testování
### 1. Spuštění serveru
```bash
# Server automaticky přidá chybějící sloupce při spuštění
go run main.go
```
### 2. Vytvoření nového sponzora
- Přihlásit se do adminu
- Jít na "Správa sponzorů"
- Kliknout "Nový sponzor"
- Vyplnit název
- Vybrat "Úroveň partnera":
- **Hlavní partner** (general) - pro hlavní sponzory
- **Partner** (standard) - pro běžné sponzory
- Nastavit "Pořadí zobrazení" (menší číslo = vyšší pozice)
- Uložit
### 3. Ověření na webu
- Jít na stránku "Sponzoři"
- Hlavní partneři by měli být zobrazeni nahoře s větším logem
- Běžní partneři by měli být pod nimi s menším logem
- Pořadí by mělo odpovídat nastaveným číslům
## Možné problémy a řešení
### Problém: Sloupce tier/display_order neexistují v databázi
**Řešení:** Restartujte server - AutoMigrate je automaticky přidá.
### Problém: Existující sponzoři nemají nastavený tier
**Řešení:** Otevřete každého sponzora v admin rozhraní a nastavte jeho úroveň partnera, nebo proveďte SQL update:
```sql
UPDATE sponsors SET tier = 'standard' WHERE tier = '' OR tier IS NULL;
```
### Problém: Sponzoři se nezobrazují v správném pořadí
**Řešení:** Zkontrolujte, že:
1. Server byl restartován po změnách
2. V databázi jsou správně vyplněné hodnoty tier a display_order
3. Frontend cache byla vyčištěna (Ctrl+Shift+R)
## Změny v souborech
-`internal/controllers/base_controller.go` - Přidána podpora tier a display_order v controllerech
-`main.go` - Přidán Sponsor do AutoMigrate
- `internal/models/models.go` - Model už obsahoval tier a display_order (bez změn)
- `frontend/src/pages/admin/SponsorsAdminPage.tsx` - Frontend už fungoval správně (bez změn)
- `frontend/src/pages/SponsorsPage.tsx` - Frontend už fungoval správně (bez změn)