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

4.9 KiB
Raw Permalink Blame History

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

// 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

// 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

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)

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

# 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:

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)