yt-gen-app/structs/db.go

44 lines
3.9 KiB
Go
Raw Permalink Normal View History

2023-06-23 14:54:47 +03:00
package structs
import uuid "github.com/satori/go.uuid"
type DB struct {
2023-07-19 16:02:07 +03:00
SQLite bool `yaml:"sqlite,omitempty" json:"sqlite,omitempty"`
Tables []Table `yaml:"tables,omitempty" json:"tables,omitempty"`
Description string `yaml:"description,omitempty" json:"description,omitempty"`
2023-06-23 14:54:47 +03:00
}
// Описание таблицы. Поле ID (индентификатор и первичный ключ) присутствуют всегда
type Table struct {
ID uuid.UUID `yaml:"id,omitempty" json:"id,omitempty"` // Идентификатор таблицы. Если пустой, то генерируется автоматически для дальнейше работы
Name string `yaml:"name,omitempty" json:"name,omitempty"` // Название таблицы
Schema string `yaml:"schema,omitempty" json:"schema,omitempty"` // Схема таблицы (для PostgreSQL либо префикс для остальных)
Pk string `yaml:"pk,omitempty" json:"pk,omitempty"` // Тип первичного ключа. Если uuid, то генерируется V4, int и bigint - используется bigint с автоинкрементом, string - первичный ключ как текстовое поле. Если не указано, то поумолчанию используется UUID
Description string `yaml:"description,omitempty" json:"description,omitempty"` // Описание таблицы
Fields []Field `yaml:"fields,omitempty" json:"fields,omitempty"` // Поля таблицы
Recursive bool `yaml:"recursive,omitempty" json:"recursive,omitempty"` // Рекурсивная таблица
2023-06-23 14:54:47 +03:00
FKs []FK `yaml:"fks,omitempty" json:"fks,omitempty"` // Внешние ключи
FkFields []Field `yaml:"-" json:"-"` // Поля с описанием внешних ключей
Children []string `yaml:"-" json:"-"` // Дочерние (подчиненные) таблицы
2023-06-23 14:54:47 +03:00
}
// Описание поля
type Field struct {
ID uuid.UUID `yaml:"id,omitempty" json:"id,omitempty"` // Идентификатор поля. Если пустой, то генерируется автоматически для дальнейше работы
Name string `yaml:"name,omitempty" json:"name,omitempty"` // Название поля
Type string `yaml:"type,omitempty" json:"type,omitempty"` // Тип поля. По умолчанию text
Length *int `yaml:"length,omitempty" json:"len,omitempty"` // Размер поля для строковых типов и Decimal
Accuracy *int `yaml:"accuracy,omitempty" json:"accuracy,omitempty"` // Точность поля для Decimal
Description string `yaml:"description,omitempty" json:"description,omitempty"` // Описание поля
}
// Описание внешних ключей
type FK struct {
ID uuid.UUID `yaml:"id,omitempty" json:"id,omitempty"` // Идентификатор внешнего ключа
Name string `yaml:"name,omitempty" json:"name,omitempty"` // Название ключа
2023-07-19 16:02:07 +03:00
Type string `yaml:"-" json:"-"` // Тип первичного ключа
2023-06-23 14:54:47 +03:00
TableID uuid.UUID `yaml:"idTable,omitempty" json:"idTable,omitempty"` // Идентификатор таблицы, на которую ссылаемся
TableName string `yaml:"tableName,omitempty" json:"tableName,omitempty"` // Название таблицы, на которую ссылаемся
Description string `yaml:"description,omitempty" json:"description,omitempty"` // Описание внешнего ключа
}