Files
MyClub/internal/services/setup_service.go
T
Tomáš Dvořák 12cba639b9 upload
2025-10-16 13:32:05 +02:00

97 lines
2.3 KiB
Go

package services
import (
"errors"
"time"
"fotbal-club/internal/models"
"gorm.io/gorm"
)
type SetupService struct {
db *gorm.DB
}
func NewSetupService(db *gorm.DB) *SetupService {
return &SetupService{db: db}
}
// GetSetupStatus returns the current setup status
func (s *SetupService) GetSetupStatus() (*models.SetupInfo, error) {
var setupInfo models.SetupInfo
if err := s.db.FirstOrCreate(&setupInfo, models.SetupInfo{Model: gorm.Model{ID: 1}}).Error; err != nil {
return nil, err
}
return &setupInfo, nil
}
// MarkSMTPConfigured marks the SMTP configuration as completed
func (s *SetupService) MarkSMTPConfigured() error {
return s.db.Model(&models.SetupInfo{}).Where("id = ?", 1).Updates(map[string]interface{}{
"smtp_configured": true,
"updated_at": time.Now(),
}).Error
}
// SaveClubInfo saves the club information from FACR
func (s *SetupService) SaveClubInfo(clubInfo *models.ClubInfo) error {
// Start a transaction
tx := s.db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
// Update setup info
if err := tx.Model(&models.SetupInfo{}).Where("id = ?", 1).Updates(map[string]interface{}{
"club_imported": true,
"updated_at": time.Now(),
}).Error; err != nil {
tx.Rollback()
return err
}
// Save club info
clubInfo.SetupInfoID = 1
if err := tx.Create(clubInfo).Error; err != nil {
tx.Rollback()
return err
}
return tx.Commit().Error
}
// CompleteSetup marks the setup as completed
func (s *SetupService) CompleteSetup() error {
now := time.Now()
return s.db.Model(&models.SetupInfo{}).Where("id = ?", 1).Updates(map[string]interface{}{
"status": models.SetupStatusCompleted,
"completed_at": now,
"updated_at": now,
}).Error
}
// SkipSetup marks the setup as skipped
func (s *SetupService) SkipSetup() error {
now := time.Now()
return s.db.Model(&models.SetupInfo{}).Where("id = ?", 1).Updates(map[string]interface{}{
"status": models.SetupStatusSkipped,
"skipped_at": now,
"updated_at": now,
}).Error
}
// GetClubInfo returns the club information if it exists
func (s *SetupService) GetClubInfo() (*models.ClubInfo, error) {
var clubInfo models.ClubInfo
if err := s.db.Where("setup_info_id = ?", 1).First(&clubInfo).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
return &clubInfo, nil
}