This commit is contained in:
Tomáš Dvořák
2025-10-16 17:10:13 +02:00
parent f5e7be92c7
commit 35d0954afd
84 changed files with 9571 additions and 4668 deletions
@@ -0,0 +1,75 @@
package controllers
import (
"fotbal-club/internal/models"
"fotbal-club/pkg/logger"
)
// seedDefaultHomePageElements creates default page element configurations for the homepage
// with all major sections visible by default (videos, gallery, matches, news, etc.)
func (bc *BaseController) seedDefaultHomePageElements() {
// Check if any homepage elements already exist
var count int64
if err := bc.DB.Model(&models.PageElementConfig{}).Where("page_type = ?", "homepage").Count(&count).Error; err != nil {
logger.Error("Failed to check existing page elements: %v", err)
return
}
if count > 0 {
logger.Info("Homepage page elements already exist, skipping seed")
return
}
// Define default homepage elements with all major sections visible
defaultElements := []models.PageElementConfig{
// Hero section - main featured content
{PageType: "homepage", ElementName: "hero", Variant: "grid", Visible: true, DisplayOrder: 1},
// News/Articles - latest articles
{PageType: "homepage", ElementName: "news", Variant: "grid", Visible: true, DisplayOrder: 2},
// Matches - upcoming and recent matches
{PageType: "homepage", ElementName: "matches", Variant: "compact", Visible: true, DisplayOrder: 3},
// Table - league standings
{PageType: "homepage", ElementName: "table", Variant: "split_news", Visible: true, DisplayOrder: 4},
// Videos - YouTube videos and highlights
{PageType: "homepage", ElementName: "videos", Variant: "grid", Visible: true, DisplayOrder: 5},
// Gallery - photo gallery
{PageType: "homepage", ElementName: "gallery", Variant: "grid", Visible: true, DisplayOrder: 6},
// Team - players and squad
{PageType: "homepage", ElementName: "team", Variant: "grid", Visible: true, DisplayOrder: 7},
// Activities - upcoming events
{PageType: "homepage", ElementName: "activities", Variant: "list", Visible: true, DisplayOrder: 8},
// Sponsors - partners and sponsors
{PageType: "homepage", ElementName: "sponsors", Variant: "grid", Visible: true, DisplayOrder: 9},
// Newsletter - newsletter signup
{PageType: "homepage", ElementName: "newsletter", Variant: "default", Visible: true, DisplayOrder: 10},
// Contact - contact information and map
{PageType: "homepage", ElementName: "contact", Variant: "combined", Visible: true, DisplayOrder: 11},
}
// Insert all default elements in a single transaction
tx := bc.DB.Begin()
for _, element := range defaultElements {
if err := tx.Create(&element).Error; err != nil {
logger.Error("Failed to create page element %s: %v", element.ElementName, err)
tx.Rollback()
return
}
}
if err := tx.Commit().Error; err != nil {
logger.Error("Failed to commit page elements transaction: %v", err)
return
}
logger.Info("Successfully seeded %d default homepage page elements", len(defaultElements))
}