package models import ( "github.com/sujit-baniya/fiber-boilerplate/app" "gorm.io/gorm" ) // CloudflareConfig almacena las credenciales de Cloudflare. // Solo un registro puede estar activo a la vez. // // AuthType puede ser: // - "token" → API Token (recomendado, 40 chars, Bearer auth) // - "global_key" → Global API Key (legacy, X-Auth-Email + X-Auth-Key) type CloudflareConfig struct { gorm.Model // Tipo de autenticación: "token" (defecto) o "global_key" AuthType string `json:"auth_type" gorm:"column:auth_type;type:varchar(20);default:'token'"` // API Token (AuthType=token) o Global API Key (AuthType=global_key) APIToken string `json:"api_token" gorm:"column:api_token;type:text;not null"` // Email de la cuenta (requerido solo para AuthType=global_key) Email string `json:"email" gorm:"column:email;type:text"` // Account ID principal (opcional, para endpoints de cuenta) AccountID string `json:"account_id" gorm:"column:account_id;type:text"` Activo bool `json:"activo" gorm:"column:activo;default:true"` Nota string `json:"nota" gorm:"column:nota;type:text"` } func (CloudflareConfig) TableName() string { return "cloudflare_config" } // GetCloudflareConfig obtiene la configuración activa. func GetCloudflareConfig() (*CloudflareConfig, error) { var item CloudflareConfig if err := app.Http.Database.DB.Where("activo = ?", true).Order("id DESC").First(&item).Error; err != nil { return nil, err } return &item, nil } // SaveCloudflareConfig desactiva la config previa y guarda la nueva. func SaveCloudflareConfig(s CloudflareConfig) error { app.Http.Database.DB.Model(&CloudflareConfig{}).Where("activo = ?", true). Update("activo", false) s.Activo = true if s.ID > 0 { return app.Http.Database.DB.Model(&s).Updates(map[string]interface{}{ "auth_type": s.AuthType, "api_token": s.APIToken, "email": s.Email, "account_id": s.AccountID, "nota": s.Nota, "activo": true, }).Error } return app.Http.Database.DB.Create(&s).Error } // GetAllCloudflareConfig lista todos los registros con paginación. func GetAllCloudflareConfig(limit, offset int) ([]CloudflareConfig, int64, error) { var items []CloudflareConfig var total int64 db := app.Http.Database.DB.Model(&CloudflareConfig{}) db.Count(&total) if err := db.Order("id DESC").Limit(limit).Offset(offset).Find(&items).Error; err != nil { return nil, 0, err } return items, total, nil } // DeleteCloudflareConfig elimina un registro. func DeleteCloudflareConfig(id uint) error { return app.Http.Database.DB.Delete(&CloudflareConfig{}, id).Error }