package models import ( "log" "github.com/sujit-baniya/fiber-boilerplate/app" "gorm.io/gorm" ) // AiConfig almacena las configuraciones de proveedores de IA (Qwen, OpenAI, etc.) // que son usadas por el Landing Generator y otros módulos. type AiConfig struct { gorm.Model Nombre string `gorm:"size:100;not null" json:"nombre"` // Alias amigable, ej: "Qwen 2.5 Producción" Provider string `gorm:"size:50;not null" json:"provider"` // qwen | openai | anthropic | etc ApiKey string `gorm:"type:text;not null" json:"api_key"` // Clave de API BaseURL string `gorm:"type:text" json:"base_url"` // URL base (override), vacío = default del provider ModelName string `gorm:"size:100" json:"model_name"` // ej: qwen2.5-72b-instruct IsActive bool `gorm:"default:true" json:"is_active"` // Solo uno activo a la vez Notes string `gorm:"type:text" json:"notes"` } func (AiConfig) TableName() string { return "ai_configs" } func GetAllAiConfigs(limit, offset int, search string) ([]AiConfig, int64, error) { var items []AiConfig var total int64 db := app.Http.Database.DB.Model(&AiConfig{}) if search != "" { db = db.Where("nombre LIKE ? OR provider LIKE ?", "%"+search+"%", "%"+search+"%") } if err := db.Count(&total).Error; err != nil { return nil, 0, err } if err := db.Order("id DESC").Limit(limit).Offset(offset).Find(&items).Error; err != nil { return nil, 0, err } return items, total, nil } func CreateAiConfig(item *AiConfig) error { return app.Http.Database.DB.Create(item).Error } func UpdateAiConfig(id uint, updates map[string]interface{}) error { return app.Http.Database.DB.Model(&AiConfig{}).Where("id = ?", id).Updates(updates).Error } func DeleteAiConfig(id uint) error { return app.Http.Database.DB.Delete(&AiConfig{}, id).Error } // GetActiveAiConfig retorna la primera configuración activa del provider indicado. // Si provider está vacío, retorna cualquier config activa. func GetActiveAiConfig(provider string) (*AiConfig, error) { var item AiConfig db := app.Http.Database.DB.Where("is_active = ?", true) if provider != "" { db = db.Where("provider = ?", provider) } if err := db.First(&item).Error; err != nil { log.Printf("[AI_CONFIG] No se encontró config activa para provider '%s': %v", provider, err) return nil, err } return &item, nil }