mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 18:52:56 +00:00
97 lines
2.3 KiB
Go
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
|
|
}
|