package models import ( "encoding/json" "time" "gorm.io/gorm" ) type SetupStatus string const ( SetupStatusPending SetupStatus = "pending" SetupStatusCompleted SetupStatus = "completed" SetupStatusSkipped SetupStatus = "skipped" ) type SetupInfo struct { gorm.Model Status SetupStatus `gorm:"not null;default:'pending'" json:"status"` SkippedAt *time.Time `json:"skipped_at,omitempty"` CompletedAt *time.Time `json:"completed_at,omitempty"` SMTPConfigured bool `gorm:"default:false" json:"smtp_configured"` ClubImported bool `gorm:"default:false" json:"club_imported"` } type ClubInfo struct { gorm.Model SetupInfoID uint `gorm:"not null" json:"-"` FACRClubID string `gorm:"uniqueIndex" json:"facr_club_id"` Name string `gorm:"not null" json:"name"` ShortName string `json:"short_name"` LogoURL string `json:"logo_url"` PrimaryColor string `json:"primary_color"` SecondaryColor string `json:"secondary_color"` TextColor string `json:"text_color"` } // TableName specifies the table name for the SetupInfo model func (SetupInfo) TableName() string { return "setup_info" } // TableName specifies the table name for the ClubInfo model func (ClubInfo) TableName() string { return "club_info" } // ToJSON returns the JSON representation of the club info func (c *ClubInfo) ToJSON() (string, error) { data, err := json.Marshal(c) if err != nil { return "", err } return string(data), nil } // FromJSON populates the club info from JSON data func (c *ClubInfo) FromJSON(jsonData string) error { return json.Unmarshal([]byte(jsonData), c) }