* Add schema management screen with list and editor * Implement table management screen with list and editor * Create data operations for schema and table management * Define UI rules and guidelines for consistency * Ensure circular tab navigation and keyboard shortcuts * Add forms for creating and editing schemas and tables * Implement confirmation dialogs for destructive actions
96 lines
2.3 KiB
Go
96 lines
2.3 KiB
Go
package ui
|
|
|
|
import "git.warky.dev/wdevs/relspecgo/pkg/models"
|
|
|
|
// Column data operations - business logic for column management
|
|
|
|
// CreateColumn creates a new column and adds it to a table
|
|
func (se *SchemaEditor) CreateColumn(schemaIndex, tableIndex int, name, dataType string, isPrimaryKey, isNotNull bool) *models.Column {
|
|
table := se.GetTable(schemaIndex, tableIndex)
|
|
if table == nil {
|
|
return nil
|
|
}
|
|
|
|
if table.Columns == nil {
|
|
table.Columns = make(map[string]*models.Column)
|
|
}
|
|
|
|
newColumn := &models.Column{
|
|
Name: name,
|
|
Type: dataType,
|
|
IsPrimaryKey: isPrimaryKey,
|
|
NotNull: isNotNull,
|
|
}
|
|
table.UpdateDate()
|
|
table.Columns[name] = newColumn
|
|
return newColumn
|
|
}
|
|
|
|
// UpdateColumn updates an existing column's properties
|
|
func (se *SchemaEditor) UpdateColumn(schemaIndex, tableIndex int, oldName, newName, dataType string, isPrimaryKey, isNotNull bool, defaultValue interface{}, description string) bool {
|
|
table := se.GetTable(schemaIndex, tableIndex)
|
|
if table == nil {
|
|
return false
|
|
}
|
|
|
|
column, exists := table.Columns[oldName]
|
|
if !exists {
|
|
return false
|
|
}
|
|
|
|
table.UpdateDate()
|
|
|
|
// If name changed, remove old entry and create new one
|
|
if oldName != newName {
|
|
delete(table.Columns, oldName)
|
|
column.Name = newName
|
|
table.Columns[newName] = column
|
|
}
|
|
|
|
// Update properties
|
|
column.Type = dataType
|
|
column.IsPrimaryKey = isPrimaryKey
|
|
column.NotNull = isNotNull
|
|
column.Default = defaultValue
|
|
column.Description = description
|
|
|
|
return true
|
|
}
|
|
|
|
// DeleteColumn removes a column from a table
|
|
func (se *SchemaEditor) DeleteColumn(schemaIndex, tableIndex int, columnName string) bool {
|
|
table := se.GetTable(schemaIndex, tableIndex)
|
|
if table == nil {
|
|
return false
|
|
}
|
|
|
|
if _, exists := table.Columns[columnName]; !exists {
|
|
return false
|
|
}
|
|
|
|
table.UpdateDate()
|
|
|
|
delete(table.Columns, columnName)
|
|
return true
|
|
}
|
|
|
|
// GetColumn returns a column by name
|
|
func (se *SchemaEditor) GetColumn(schemaIndex, tableIndex int, columnName string) *models.Column {
|
|
table := se.GetTable(schemaIndex, tableIndex)
|
|
if table == nil {
|
|
return nil
|
|
}
|
|
|
|
return table.Columns[columnName]
|
|
}
|
|
|
|
// GetAllColumns returns all columns in a table
|
|
func (se *SchemaEditor) GetAllColumns(schemaIndex, tableIndex int) map[string]*models.Column {
|
|
table := se.GetTable(schemaIndex, tableIndex)
|
|
if table == nil {
|
|
return nil
|
|
}
|
|
|
|
return table.Columns
|
|
}
|