diff --git a/commands/add.go b/commands/add.go index 71c8c642b8dca695b9ee2f150bb646dd54b68405..a0022ed3257bf4f706a20f91fd0dcd1876fd6dfe 100644 --- a/commands/add.go +++ b/commands/add.go @@ -67,7 +67,6 @@ func Add(tableName string, model string) { /* - Generate Test Data for the new table if wanted - Add Table to import-sql.sh - - Add Description to the DBML file - Add Description and mermaid and DBML to the README.md file - Add Test to gitlab-ci.yml - Add to CHANGELOG.md @@ -90,6 +89,12 @@ func Add(tableName string, model string) { // Create the table file under sql directory createTableFile(projectDir, tableName, config.DbType, tableModel) + // Append table description to database.dbml + if err := appendToDBMLFile(projectDir, tableName, tableModel); err != nil { + fmt.Printf("Error appending to database.dbml: %v\n", err) + } else { + fmt.Printf("Appended table '%s' to database.dbml\n", tableName) + } fmt.Printf("Added new table '%s' to the project\n", slug) } @@ -241,6 +246,54 @@ func generatePostgreSQLSQL(file *os.File, tableName string, tableModel TableMode return err } +func generateDBML(tableName string, tableModel TableModel) string { + var dbml strings.Builder + + dbml.WriteString(fmt.Sprintf("Table %s {\n", tableName)) + + for _, field := range tableModel.Fields { + dbml.WriteString(fmt.Sprintf(" %s %s", field.Name, field.Type)) + + if field.PrimaryKey { + dbml.WriteString(" [pk]") + } + if field.Unique { + dbml.WriteString(" [unique]") + } + if field.NotNull { + dbml.WriteString(" [not null]") + } + if field.AutoIncrement { + dbml.WriteString(" [autoincrement]") + } + if field.DefaultValue != nil { + dbml.WriteString(fmt.Sprintf(" [default: '%v']", field.DefaultValue)) + } + + dbml.WriteString("\n") + } + + dbml.WriteString("}\n") + + return dbml.String() +} + +func appendToDBMLFile(projectDir, tableName string, tableModel TableModel) error { + dbmlFilePath := filepath.Join(projectDir, "database.dbml") + file, err := os.OpenFile(dbmlFilePath, os.O_APPEND|os.O_WRONLY, os.ModeAppend) + if err != nil { + return fmt.Errorf("error opening database.dbml file: %v", err) + } + defer file.Close() + + dbmlContent := generateDBML(tableName, tableModel) + if _, err := file.WriteString(dbmlContent); err != nil { + return fmt.Errorf("error writing to database.dbml file: %v", err) + } + + return nil +} + func validateModel(model TableModel) error { fieldNames := make(map[string]bool)