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