first commit
This commit is contained in:
245
internal/services/site_info_service.go
Normal file
245
internal/services/site_info_service.go
Normal file
@@ -0,0 +1,245 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user