mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 02:32:57 +00:00
upload
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user