package models import ( "github.com/sujit-baniya/fiber-boilerplate/app" "gorm.io/gorm" ) // DocumentoGenerado es el historial de documentos producidos por el motor de // automatización con IA (cotización, contrato, acta/arquitectura, cuenta de cobro), // sin importar el canal que los originó (Telegram, chat propio o Claude directo). type DocumentoGenerado struct { gorm.Model Tipo string `json:"tipo" gorm:"column:tipo;size:30;not null;index"` // cotizacion | contrato | acta | cuenta_cobro ClienteID *uint `json:"cliente_id" gorm:"column:cliente_id;index"` Cliente *Cliente `json:"cliente,omitempty" gorm:"foreignKey:ClienteID"` ProyectoID *uint `json:"proyecto_id" gorm:"column:proyecto_id;index"` PlantillaID *uint `json:"plantilla_id" gorm:"column:plantilla_id"` Nombre string `json:"nombre" gorm:"column:nombre;size:200"` Archivo string `json:"archivo" gorm:"column:archivo"` // ruta en disco, ej: uploads/documentos/cotizacion/12/xyz.pdf TipoMime string `json:"tipo_mime" gorm:"column:tipo_mime;default:'application/pdf'"` Tamanio int64 `json:"tamanio" gorm:"column:tamanio"` DatosJSON string `json:"datos_json" gorm:"column:datos_json;type:text"` // input usado para generarlo (auditoría) GeneradoPor string `json:"generado_por" gorm:"column:generado_por;size:20;default:'web'"` // web | telegram | claude_api } func (DocumentoGenerado) TableName() string { return "documentos_generados" } func CreateDocumentoGenerado(d *DocumentoGenerado) error { return app.Http.Database.DB.Create(d).Error } func GetAllDocumentosGenerados(limit, offset int, tipo string, clienteID uint) ([]DocumentoGenerado, int64, error) { var items []DocumentoGenerado var total int64 db := app.Http.Database.DB.Model(&DocumentoGenerado{}).Preload("Cliente") if tipo != "" { db = db.Where("tipo = ?", tipo) } if clienteID != 0 { db = db.Where("cliente_id = ?", clienteID) } 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 GetDocumentoGeneradoByID(id uint) (*DocumentoGenerado, error) { var item DocumentoGenerado if err := app.Http.Database.DB.First(&item, id).Error; err != nil { return nil, err } return &item, nil }