Files
relspecgo/pkg/writers/template/template_data.go
Hein 5d3c86119e
Some checks failed
CI / Test (1.24) (push) Successful in -27m28s
CI / Test (1.25) (push) Successful in -27m30s
CI / Build (push) Failing after -28m36s
Integration Tests / Integration Tests (push) Failing after -28m8s
CI / Lint (push) Successful in -27m54s
feat(domains): add domain support for DrawDB integration
- Introduce Domain and DomainTable models for logical grouping of tables.
- Implement export and import functionality for domains in DrawDB format.
- Update template execution modes to include domain processing.
- Enhance documentation for domain features and usage.
2026-01-04 15:49:47 +02:00

109 lines
3.2 KiB
Go

package template
import "git.warky.dev/wdevs/relspecgo/pkg/models"
// TemplateData wraps the model data with additional context for template execution
type TemplateData struct {
// One of these will be populated based on execution mode
Database *models.Database
Schema *models.Schema
Domain *models.Domain
Script *models.Script
Table *models.Table
// Context information (parent references)
ParentSchema *models.Schema // Set for table/script modes
ParentDatabase *models.Database // Always set for full database context
// Pre-computed views for convenience
FlatColumns []*models.FlatColumn
FlatTables []*models.FlatTable
FlatConstraints []*models.FlatConstraint
FlatRelationships []*models.FlatRelationship
Summary *models.DatabaseSummary
// User metadata from WriterOptions
Metadata map[string]interface{}
}
// NewDatabaseData creates template data for database mode
func NewDatabaseData(db *models.Database, metadata map[string]interface{}) *TemplateData {
return &TemplateData{
Database: db,
ParentDatabase: db,
FlatColumns: db.ToFlatColumns(),
FlatTables: db.ToFlatTables(),
FlatConstraints: db.ToFlatConstraints(),
FlatRelationships: db.ToFlatRelationships(),
Summary: db.ToSummary(),
Metadata: metadata,
}
}
// NewSchemaData creates template data for schema mode
func NewSchemaData(schema *models.Schema, metadata map[string]interface{}) *TemplateData {
// Create a temporary database with just this schema for context
db := models.InitDatabase(schema.Name)
db.Schemas = []*models.Schema{schema}
return &TemplateData{
Schema: schema,
ParentDatabase: db,
FlatColumns: db.ToFlatColumns(),
FlatTables: db.ToFlatTables(),
FlatConstraints: db.ToFlatConstraints(),
FlatRelationships: db.ToFlatRelationships(),
Summary: db.ToSummary(),
Metadata: metadata,
}
}
// NewDomainData creates template data for domain mode
func NewDomainData(domain *models.Domain, db *models.Database, metadata map[string]interface{}) *TemplateData {
return &TemplateData{
Domain: domain,
ParentDatabase: db,
Metadata: metadata,
}
}
// NewScriptData creates template data for script mode
func NewScriptData(script *models.Script, schema *models.Schema, db *models.Database, metadata map[string]interface{}) *TemplateData {
return &TemplateData{
Script: script,
ParentSchema: schema,
ParentDatabase: db,
Metadata: metadata,
}
}
// NewTableData creates template data for table mode
func NewTableData(table *models.Table, schema *models.Schema, db *models.Database, metadata map[string]interface{}) *TemplateData {
return &TemplateData{
Table: table,
ParentSchema: schema,
ParentDatabase: db,
Metadata: metadata,
}
}
// Name returns the primary name for the current template data (used for filename generation)
func (td *TemplateData) Name() string {
if td.Database != nil {
return td.Database.Name
}
if td.Schema != nil {
return td.Schema.Name
}
if td.Domain != nil {
return td.Domain.Name
}
if td.Script != nil {
return td.Script.Name
}
if td.Table != nil {
return td.Table.Name
}
return "output"
}