package models import ( "github.com/sujit-baniya/fiber-boilerplate/app" "gorm.io/gorm" ) // Arquitectura guarda patrones de arquitectura técnica ya resueltos (ej: Active // Directory redundante en Azure con VPN Gateway) para que la IA los reutilice como // referencia al generar una propuesta técnica nueva, en vez de improvisar cada vez. type Arquitectura struct { gorm.Model Nombre string `json:"nombre" gorm:"column:nombre;size:150;not null"` Descripcion string `json:"descripcion" gorm:"column:descripcion;type:text"` ContenidoHTML string `json:"contenido_html" gorm:"column:contenido_html;type:text"` // diagrama/detalle en HTML, reutilizable como referencia Tags string `json:"tags" gorm:"column:tags;size:255"` // comma-separated, ej: "azure,ad,vpn" EsReferencia bool `json:"es_referencia" gorm:"column:es_referencia;default:true"` // true = patrón reutilizable, false = propuesta generada puntual ClienteID *uint `json:"cliente_id" gorm:"column:cliente_id;index"` } func (Arquitectura) TableName() string { return "arquitecturas" } func GetAllArquitecturas(limit, offset int, search string, soloReferencias bool) ([]Arquitectura, int64, error) { var items []Arquitectura var total int64 db := app.Http.Database.DB.Model(&Arquitectura{}) if search != "" { db = db.Where("nombre ILIKE ? OR tags ILIKE ?", "%"+search+"%", "%"+search+"%") } if soloReferencias { db = db.Where("es_referencia = ?", true) } if err := db.Count(&total).Error; err != nil { return nil, 0, err } if err := db.Order("nombre ASC").Limit(limit).Offset(offset).Find(&items).Error; err != nil { return nil, 0, err } return items, total, nil } func GetArquitecturaByID(id uint) (*Arquitectura, error) { var item Arquitectura if err := app.Http.Database.DB.First(&item, id).Error; err != nil { return nil, err } return &item, nil } func CreateArquitectura(a *Arquitectura) error { return app.Http.Database.DB.Create(a).Error } func UpdateArquitectura(id uint, updates map[string]interface{}) error { return app.Http.Database.DB.Model(&Arquitectura{}).Where("id = ?", id).Updates(updates).Error } func DeleteArquitectura(id uint) error { return app.Http.Database.DB.Delete(&Arquitectura{}, id).Error }