first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:35:24 +03:00
commit bbbf76b184
592 changed files with 246870 additions and 0 deletions

View 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
}