package services import ( "fmt" "github.com/sujit-baniya/fiber-boilerplate/pkg/models" ) // GenerarArquitectura produce el PDF de una propuesta técnica a partir de un // requerimiento en texto libre. Quien llama (Claude) ya consultó // listar_arquitecturas_referencia para reutilizar patrones ya resueltos en vez de // improvisar, y trae la propuesta ya armada; el backend solo la renderiza a PDF y, // si aplica, la deja guardada como nueva referencia reutilizable. func GenerarArquitectura(requerimiento, propuesta, nombre string, clienteID *uint, guardarComoReferencia bool, generadoPor string) (*models.DocumentoGenerado, error) { if requerimiento == "" { return nil, fmt.Errorf("requerimiento requerido") } if propuesta == "" { return nil, fmt.Errorf("propuesta requerida") } if nombre == "" { nombre = "Propuesta técnica" } var cliente *models.Cliente if clienteID != nil { c, err := models.GetClienteByID(*clienteID) if err == nil { cliente = c } } datos := DatosBaseDocumento(map[string]interface{}{ "Nombre": nombre, "Requerimiento": requerimiento, "Propuesta": propuesta, "Cliente": cliente, }) doc, _, err := GenerarDocumento("arquitectura", datos, clienteID, nil, generadoPor) if err != nil { return nil, err } if guardarComoReferencia { ref := &models.Arquitectura{ Nombre: nombre, Descripcion: requerimiento, ContenidoHTML: propuesta, EsReferencia: true, ClienteID: clienteID, } _ = models.CreateArquitectura(ref) // no bloquea la generación del documento si falla } return doc, nil }