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,226 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fotbal-club/internal/models"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type PageElementConfigController struct {
|
||||
DB *gorm.DB
|
||||
}
|
||||
|
||||
func NewPageElementConfigController(db *gorm.DB) *PageElementConfigController {
|
||||
return &PageElementConfigController{DB: db}
|
||||
}
|
||||
|
||||
// GetPageElementConfigs returns all element configurations for a specific page
|
||||
// @Summary Get page element configurations
|
||||
// @Description Returns all element configurations for a specific page type
|
||||
// @Tags page-elements
|
||||
// @Produce json
|
||||
// @Param page_type query string true "Page type (e.g., homepage, about)"
|
||||
// @Success 200 {array} models.PageElementConfig
|
||||
// @Router /api/v1/page-elements [get]
|
||||
func (pc *PageElementConfigController) GetPageElementConfigs(c *gin.Context) {
|
||||
pageType := c.Query("page_type")
|
||||
if pageType == "" {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "page_type is required"})
|
||||
return
|
||||
}
|
||||
|
||||
var configs []models.PageElementConfig
|
||||
if err := pc.DB.Where("page_type = ?", pageType).Find(&configs).Error; err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to fetch configurations"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, configs)
|
||||
}
|
||||
|
||||
// GetAllPageElementConfigs returns all element configurations (admin)
|
||||
// @Summary Get all page element configurations
|
||||
// @Description Returns all element configurations for admin management
|
||||
// @Tags page-elements
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Success 200 {array} models.PageElementConfig
|
||||
// @Router /api/v1/admin/page-elements [get]
|
||||
func (pc *PageElementConfigController) GetAllPageElementConfigs(c *gin.Context) {
|
||||
var configs []models.PageElementConfig
|
||||
if err := pc.DB.Order("page_type ASC, element_name ASC").Find(&configs).Error; err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to fetch configurations"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, configs)
|
||||
}
|
||||
|
||||
// CreateOrUpdatePageElementConfig creates or updates an element configuration
|
||||
// @Summary Create or update page element configuration
|
||||
// @Description Creates or updates a page element configuration
|
||||
// @Tags page-elements
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param config body models.PageElementConfig true "Element configuration data"
|
||||
// @Success 200 {object} models.PageElementConfig
|
||||
// @Router /api/v1/admin/page-elements [post]
|
||||
func (pc *PageElementConfigController) CreateOrUpdatePageElementConfig(c *gin.Context) {
|
||||
var input models.PageElementConfig
|
||||
|
||||
if err := c.ShouldBindJSON(&input); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// Check if config already exists
|
||||
var existing models.PageElementConfig
|
||||
result := pc.DB.Where("page_type = ? AND element_name = ?", input.PageType, input.ElementName).First(&existing)
|
||||
|
||||
if result.Error == nil {
|
||||
// Update existing
|
||||
existing.Variant = input.Variant
|
||||
existing.Settings = input.Settings
|
||||
if err := pc.DB.Save(&existing).Error; err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to update configuration"})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, existing)
|
||||
} else {
|
||||
// Create new
|
||||
if err := pc.DB.Create(&input).Error; err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create configuration"})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusCreated, input)
|
||||
}
|
||||
}
|
||||
|
||||
// UpdatePageElementConfig updates an existing element configuration
|
||||
// @Summary Update page element configuration
|
||||
// @Description Updates an existing page element configuration
|
||||
// @Tags page-elements
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param id path int true "Configuration ID"
|
||||
// @Param config body models.PageElementConfig true "Updated configuration data"
|
||||
// @Success 200 {object} models.PageElementConfig
|
||||
// @Router /api/v1/admin/page-elements/{id} [put]
|
||||
func (pc *PageElementConfigController) UpdatePageElementConfig(c *gin.Context) {
|
||||
id, err := strconv.ParseUint(c.Param("id"), 10, 32)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid ID"})
|
||||
return
|
||||
}
|
||||
|
||||
var config models.PageElementConfig
|
||||
if err := pc.DB.First(&config, id).Error; err != nil {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "Configuration not found"})
|
||||
return
|
||||
}
|
||||
|
||||
var updates models.PageElementConfig
|
||||
if err := c.ShouldBindJSON(&updates); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
config.PageType = updates.PageType
|
||||
config.ElementName = updates.ElementName
|
||||
config.Variant = updates.Variant
|
||||
config.Settings = updates.Settings
|
||||
|
||||
if err := pc.DB.Save(&config).Error; err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to update configuration"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, config)
|
||||
}
|
||||
|
||||
// DeletePageElementConfig deletes an element configuration
|
||||
// @Summary Delete page element configuration
|
||||
// @Description Deletes a page element configuration
|
||||
// @Tags page-elements
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param id path int true "Configuration ID"
|
||||
// @Success 200 {object} map[string]string
|
||||
// @Router /api/v1/admin/page-elements/{id} [delete]
|
||||
func (pc *PageElementConfigController) DeletePageElementConfig(c *gin.Context) {
|
||||
id, err := strconv.ParseUint(c.Param("id"), 10, 32)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid ID"})
|
||||
return
|
||||
}
|
||||
|
||||
if err := pc.DB.Delete(&models.PageElementConfig{}, id).Error; err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to delete configuration"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"message": "Configuration deleted successfully"})
|
||||
}
|
||||
|
||||
// BatchUpdatePageElementConfigs updates multiple element configurations at once
|
||||
// @Summary Batch update page element configurations
|
||||
// @Description Updates multiple element configurations in one request
|
||||
// @Tags page-elements
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param configs body []models.PageElementConfig true "Array of configurations"
|
||||
// @Success 200 {object} map[string]interface{}
|
||||
// @Router /api/v1/admin/page-elements/batch [post]
|
||||
func (pc *PageElementConfigController) BatchUpdatePageElementConfigs(c *gin.Context) {
|
||||
var configs []models.PageElementConfig
|
||||
if err := c.ShouldBindJSON(&configs); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
updated := 0
|
||||
created := 0
|
||||
|
||||
err := pc.DB.Transaction(func(tx *gorm.DB) error {
|
||||
for _, cfg := range configs {
|
||||
var existing models.PageElementConfig
|
||||
result := tx.Where("page_type = ? AND element_name = ?", cfg.PageType, cfg.ElementName).First(&existing)
|
||||
|
||||
if result.Error == nil {
|
||||
// Update
|
||||
existing.Variant = cfg.Variant
|
||||
existing.Visible = cfg.Visible
|
||||
existing.DisplayOrder = cfg.DisplayOrder
|
||||
existing.Settings = cfg.Settings
|
||||
if err := tx.Save(&existing).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
updated++
|
||||
} else {
|
||||
// Create
|
||||
if err := tx.Create(&cfg).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
created++
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to batch update configurations"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"message": "Batch update successful",
|
||||
"updated": updated,
|
||||
"created": created,
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user