up
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user