246 lines
6.1 KiB
Go
246 lines
6.1 KiB
Go
package services
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
|
|
"gauth-central/internal/database"
|
|
"gauth-central/internal/models"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
const (
|
|
defaultMetaTitle = "Meta Title"
|
|
defaultMetaDescription = "Meta Description"
|
|
defaultSiteURL = "https://beyhanogur.com.tr"
|
|
defaultFacebook = "https://www.facebook.com"
|
|
defaultX = "https://www.twitter.com"
|
|
defaultInstagram = "https://www.instagram.com"
|
|
defaultWhatsapp = "https://www.whatsapp.com"
|
|
defaultPinterest = "https://www.pinterest.com"
|
|
defaultLinkedin = "https://www.linkedin.com"
|
|
defaultSlogan = "Dondurma"
|
|
)
|
|
|
|
type SiteInfoService struct{}
|
|
|
|
func NewSiteInfoService() *SiteInfoService {
|
|
return &SiteInfoService{}
|
|
}
|
|
|
|
// CreateSiteInfo creates a new site info entry.
|
|
func (s *SiteInfoService) CreateSiteInfo(
|
|
title string,
|
|
metaTitle string,
|
|
metaDescription string,
|
|
phone string,
|
|
url string,
|
|
email string,
|
|
facebook string,
|
|
x string,
|
|
instagram string,
|
|
whatsapp string,
|
|
pinterest string,
|
|
linkedin string,
|
|
slogan string,
|
|
wLogo string,
|
|
bLogo string,
|
|
isActive bool,
|
|
address string,
|
|
copyright string,
|
|
mapEmbed string,
|
|
) (*models.Setting, error) {
|
|
metaTitle = applyDefault(metaTitle, defaultMetaTitle)
|
|
metaDescription = applyDefault(metaDescription, defaultMetaDescription)
|
|
url = applyDefault(url, defaultSiteURL)
|
|
facebook = applyDefault(facebook, defaultFacebook)
|
|
x = applyDefault(x, defaultX)
|
|
instagram = applyDefault(instagram, defaultInstagram)
|
|
whatsapp = applyDefault(whatsapp, defaultWhatsapp)
|
|
pinterest = applyDefault(pinterest, defaultPinterest)
|
|
linkedin = applyDefault(linkedin, defaultLinkedin)
|
|
slogan = applyDefault(slogan, defaultSlogan)
|
|
|
|
setting := models.Setting{
|
|
Title: title,
|
|
MetaTitle: metaTitle,
|
|
MetaDescription: metaDescription,
|
|
Phone: phone,
|
|
URL: url,
|
|
Email: email,
|
|
Facebook: facebook,
|
|
X: x,
|
|
Instagram: instagram,
|
|
Whatsapp: whatsapp,
|
|
Pinterest: pinterest,
|
|
Linkedin: linkedin,
|
|
Slogan: slogan,
|
|
WLogo: wLogo,
|
|
BLogo: bLogo,
|
|
IsActive: isActive,
|
|
Address: address,
|
|
Copyright: copyright,
|
|
MapEmbed: mapEmbed,
|
|
}
|
|
|
|
if err := database.DB.Create(&setting).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return s.GetSiteInfoByID(setting.ID.String())
|
|
}
|
|
|
|
// GetAllSiteInfos retrieves all site info entries. Use onlyActive to filter public data.
|
|
func (s *SiteInfoService) GetAllSiteInfos(onlyActive bool) ([]models.Setting, error) {
|
|
var settings []models.Setting
|
|
query := database.DB.Order("created_at desc")
|
|
if onlyActive {
|
|
query = query.Where("is_active = ?", true)
|
|
}
|
|
if err := query.Find(&settings).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return settings, nil
|
|
}
|
|
|
|
// GetFirstActiveSiteInfo returns the newest active site info entry.
|
|
func (s *SiteInfoService) GetFirstActiveSiteInfo() (*models.Setting, error) {
|
|
var setting models.Setting
|
|
if err := database.DB.Where("is_active = ?", true).Order("created_at desc").First(&setting).Error; err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, errors.New("site info not found")
|
|
}
|
|
return nil, err
|
|
}
|
|
return &setting, nil
|
|
}
|
|
|
|
// GetSiteInfoByID retrieves a site info entry by ID.
|
|
func (s *SiteInfoService) GetSiteInfoByID(id string) (*models.Setting, error) {
|
|
var setting models.Setting
|
|
if err := database.DB.Where("id = ?", id).First(&setting).Error; err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, errors.New("site info not found")
|
|
}
|
|
return nil, err
|
|
}
|
|
return &setting, nil
|
|
}
|
|
|
|
// UpdateSiteInfo updates an existing site info entry.
|
|
func (s *SiteInfoService) UpdateSiteInfo(
|
|
id string,
|
|
title *string,
|
|
metaTitle *string,
|
|
metaDescription *string,
|
|
phone *string,
|
|
url *string,
|
|
email *string,
|
|
facebook *string,
|
|
x *string,
|
|
instagram *string,
|
|
whatsapp *string,
|
|
pinterest *string,
|
|
linkedin *string,
|
|
slogan *string,
|
|
wLogo *string,
|
|
bLogo *string,
|
|
isActive *bool,
|
|
address *string,
|
|
copyright *string,
|
|
mapEmbed *string,
|
|
) (*models.Setting, error) {
|
|
setting, err := s.GetSiteInfoByID(id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
updates := map[string]interface{}{}
|
|
if title != nil {
|
|
updates["title"] = *title
|
|
}
|
|
if metaTitle != nil {
|
|
updates["meta_title"] = applyDefault(*metaTitle, defaultMetaTitle)
|
|
}
|
|
if metaDescription != nil {
|
|
updates["meta_description"] = applyDefault(*metaDescription, defaultMetaDescription)
|
|
}
|
|
if phone != nil {
|
|
updates["phone"] = *phone
|
|
}
|
|
if url != nil {
|
|
updates["url"] = applyDefault(*url, defaultSiteURL)
|
|
}
|
|
if email != nil {
|
|
updates["email"] = *email
|
|
}
|
|
if facebook != nil {
|
|
updates["facebook"] = applyDefault(*facebook, defaultFacebook)
|
|
}
|
|
if x != nil {
|
|
updates["x"] = applyDefault(*x, defaultX)
|
|
}
|
|
if instagram != nil {
|
|
updates["instagram"] = applyDefault(*instagram, defaultInstagram)
|
|
}
|
|
if whatsapp != nil {
|
|
updates["whatsapp"] = applyDefault(*whatsapp, defaultWhatsapp)
|
|
}
|
|
if pinterest != nil {
|
|
updates["pinterest"] = applyDefault(*pinterest, defaultPinterest)
|
|
}
|
|
if linkedin != nil {
|
|
updates["linkedin"] = applyDefault(*linkedin, defaultLinkedin)
|
|
}
|
|
if slogan != nil {
|
|
updates["slogan"] = applyDefault(*slogan, defaultSlogan)
|
|
}
|
|
if wLogo != nil {
|
|
updates["w_logo"] = *wLogo
|
|
}
|
|
if bLogo != nil {
|
|
updates["b_logo"] = *bLogo
|
|
}
|
|
if isActive != nil {
|
|
updates["is_active"] = *isActive
|
|
}
|
|
if address != nil {
|
|
updates["address"] = *address
|
|
}
|
|
if copyright != nil {
|
|
updates["copyright"] = *copyright
|
|
}
|
|
if mapEmbed != nil {
|
|
updates["map_embed"] = *mapEmbed
|
|
}
|
|
|
|
if len(updates) > 0 {
|
|
if err := database.DB.Model(setting).Updates(updates).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return s.GetSiteInfoByID(id)
|
|
}
|
|
|
|
// DeleteSiteInfo deletes a site info entry by ID.
|
|
func (s *SiteInfoService) DeleteSiteInfo(id string) error {
|
|
result := database.DB.Delete(&models.Setting{}, "id = ?", id)
|
|
if result.Error != nil {
|
|
return result.Error
|
|
}
|
|
if result.RowsAffected == 0 {
|
|
return errors.New("site info not found")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func applyDefault(value string, fallback string) string {
|
|
clean := strings.TrimSpace(value)
|
|
if clean == "" {
|
|
return fallback
|
|
}
|
|
return clean
|
|
}
|