48 lines
5.0 KiB
Go
48 lines
5.0 KiB
Go
package structs
|
||
|
||
import uuid "github.com/satori/go.uuid"
|
||
|
||
type DB struct {
|
||
SQLite bool `yaml:"sqlite,omitempty" json:"sqlite,omitempty"`
|
||
Tables []Table `yaml:"tables,omitempty" json:"tables,omitempty"`
|
||
Description string `yaml:"description,omitempty" json:"description,omitempty"`
|
||
}
|
||
|
||
// Описание таблицы. Поле 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" default:"uuid"` // Тип первичного ключа. Если 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"` // Рекурсивная таблица
|
||
FKs []FK `yaml:"fks,omitempty" json:"fks,omitempty"` // Внешние ключи
|
||
Values []map[string]interface{} `yaml:"values,omitempty" json:"values,omitempty"` // Значения для заполняемого справочника
|
||
IncludeValues string `yaml:"includeValues,omitempty" json:"includeValues,omitempty"` // Относительный путь к файлу со значениями для заполнения справочника. yml и json будут подставлены автоматически
|
||
FkFields []Field `yaml:"-" json:"-"` // Поля с описанием внешних ключей
|
||
Children []Field `yaml:"-" json:"-"` // Дочерние (подчиненные) таблицы
|
||
}
|
||
|
||
// Описание поля
|
||
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
|
||
TypeParentTable string `yaml:"-" json:"-"` // Поле для типа от родительских таблицы первичных ключей
|
||
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"` // Описание поля
|
||
IsArray bool `yaml:"isArray,omitempty" json:"isArray,omitempty"` // Если является массивом
|
||
}
|
||
|
||
// Описание внешних ключей
|
||
type FK struct {
|
||
ID uuid.UUID `yaml:"id,omitempty" json:"id,omitempty"` // Идентификатор внешнего ключа
|
||
Name string `yaml:"name,omitempty" json:"name,omitempty"` // Название ключа
|
||
Type string `yaml:"-" json:"-"` // Тип первичного ключа
|
||
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"` // Описание внешнего ключа
|
||
}
|