2023-07-26 16:19:28 +03:00
|
|
|
|
package prepare
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"log"
|
|
|
|
|
"strings"
|
|
|
|
|
|
2023-08-02 16:04:17 +03:00
|
|
|
|
"git.ymnuktech.ru/ymnuk/yt-gen-app/lib/templ"
|
2023-07-26 16:19:28 +03:00
|
|
|
|
"git.ymnuktech.ru/ymnuk/yt-gen-app/structs"
|
|
|
|
|
uuid "github.com/satori/go.uuid"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func prepareRest(project *structs.Project) *structs.Project {
|
|
|
|
|
if project == nil {
|
|
|
|
|
log.Fatal("Пустой проект")
|
|
|
|
|
}
|
2023-08-15 19:38:14 +03:00
|
|
|
|
project.Backend.RestGroups = append(project.Backend.RestGroups, "users")
|
2023-07-26 16:19:28 +03:00
|
|
|
|
if len(project.Backend.Rest) > 0 {
|
|
|
|
|
// Обрабатываем REST для подготовки данных
|
|
|
|
|
for i := range project.Backend.Rest {
|
2023-08-10 11:55:03 +03:00
|
|
|
|
if data, ok := project.Backend.Rest[i]; !ok || data == nil {
|
|
|
|
|
log.Fatalf("Нет пути в REST: %s", i)
|
2023-07-26 16:19:28 +03:00
|
|
|
|
}
|
2023-08-10 11:55:03 +03:00
|
|
|
|
|
2023-07-26 16:19:28 +03:00
|
|
|
|
if project.Backend.Rest[i].Data.Name == "" && project.Backend.Rest[i].Data.ID == uuid.Nil {
|
|
|
|
|
log.Fatal("Не указан источник данных")
|
|
|
|
|
}
|
|
|
|
|
if project.Backend.Rest[i].Data.Name != "" && project.Backend.Rest[i].Data.ID == uuid.Nil {
|
|
|
|
|
// Есть имя, но нет ID. Найдем
|
|
|
|
|
dataArr := strings.Split(project.Backend.Rest[i].Data.Name, ".")
|
2023-08-25 15:05:28 +03:00
|
|
|
|
if len(dataArr) > 2 || len(dataArr) < 1 {
|
2023-07-26 16:19:28 +03:00
|
|
|
|
log.Fatal("Неверно указано имя источника данных в REST. Формат: <db/interface>.<Название>")
|
|
|
|
|
}
|
2023-08-25 15:05:28 +03:00
|
|
|
|
if len(dataArr) == 1 {
|
|
|
|
|
if dataArr[0] == "binary" {
|
|
|
|
|
project.Backend.Rest[i].Data.ID = uuid.Nil
|
|
|
|
|
} else {
|
|
|
|
|
log.Fatal("Неверно указано имя источника данных в REST. Формат: <db/interface>.<Название>")
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-07-26 16:19:28 +03:00
|
|
|
|
if len(dataArr) == 2 {
|
|
|
|
|
// Есть интерфейс
|
|
|
|
|
switch strings.ToLower(dataArr[0]) {
|
|
|
|
|
case "db":
|
2023-08-17 22:49:02 +03:00
|
|
|
|
tmpSrc := templ.FindSourceDataInDBByName(project, dataArr[1])
|
2023-08-18 12:30:22 +03:00
|
|
|
|
if tmpSrc == nil {
|
|
|
|
|
log.Fatalf("Not found data \"%s\"", project.Backend.Rest[i].Data.Name)
|
|
|
|
|
}
|
2023-08-17 22:49:02 +03:00
|
|
|
|
project.Backend.Rest[i].Data.ID = tmpSrc.ID
|
2023-08-18 12:30:22 +03:00
|
|
|
|
|
2023-08-02 16:04:17 +03:00
|
|
|
|
// Обработаем поля для Edit
|
|
|
|
|
if len(project.Backend.Rest[i].Edit) > 0 {
|
|
|
|
|
for j := range project.Backend.Rest[i].Edit {
|
|
|
|
|
if project.Backend.Rest[i].Edit[j].ID == uuid.Nil {
|
|
|
|
|
project.Backend.Rest[i].Edit[j].Name = templ.FieldDBName(&structs.Field{
|
|
|
|
|
Name: project.Backend.Rest[i].Edit[j].Name,
|
|
|
|
|
})
|
2023-08-17 22:49:02 +03:00
|
|
|
|
project.Backend.Rest[i].Edit[j].ID = templ.FindFieldIdInDBByName(project, project.Backend.Rest[i].Data.ID, project.Backend.Rest[i].Edit[j].Name)
|
2023-08-02 16:04:17 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Обработаем поля для Filter
|
|
|
|
|
if len(project.Backend.Rest[i].Filter) > 0 {
|
|
|
|
|
for j := range project.Backend.Rest[i].Filter {
|
|
|
|
|
if project.Backend.Rest[i].Filter[j].ID == uuid.Nil {
|
|
|
|
|
project.Backend.Rest[i].Filter[j].Name = templ.FieldDBName(&structs.Field{
|
|
|
|
|
Name: project.Backend.Rest[i].Filter[j].Name,
|
|
|
|
|
})
|
2023-08-17 22:49:02 +03:00
|
|
|
|
project.Backend.Rest[i].Filter[j].ID = templ.FindFieldIdInDBByName(project, project.Backend.Rest[i].Data.ID, project.Backend.Rest[i].Filter[j].Name)
|
2023-08-02 16:04:17 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-07-26 16:19:28 +03:00
|
|
|
|
case "interface":
|
2023-08-17 22:49:02 +03:00
|
|
|
|
tmpInterface := templ.FindSourceDataInInterfaceByName(project, dataArr[1])
|
|
|
|
|
project.Backend.Rest[i].Data.ID = tmpInterface.ID
|
2023-08-02 16:04:17 +03:00
|
|
|
|
// Обработаем поля для Edit
|
|
|
|
|
if len(project.Backend.Rest[i].Edit) > 0 {
|
|
|
|
|
for j := range project.Backend.Rest[i].Edit {
|
|
|
|
|
if project.Backend.Rest[i].Edit[j].ID == uuid.Nil {
|
2023-08-17 22:49:02 +03:00
|
|
|
|
tmp := templ.FindFieldIdInInterfaceByName(project, project.Backend.Rest[i].Data.ID, project.Backend.Rest[i].Edit[j].Name)
|
2023-08-25 15:05:28 +03:00
|
|
|
|
project.Backend.Rest[i].Edit[j].ID = tmp //templ.FindFieldIdInInterfaceByName(project, project.Backend.Rest[i].Data.ID, project.Backend.Rest[i].Edit[j].Name)
|
2023-08-02 16:04:17 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Обработаем поля для Filter
|
|
|
|
|
if len(project.Backend.Rest[i].Filter) > 0 {
|
|
|
|
|
for j := range project.Backend.Rest[i].Filter {
|
|
|
|
|
if project.Backend.Rest[i].Filter[j].ID == uuid.Nil {
|
2023-08-17 22:49:02 +03:00
|
|
|
|
tmp := templ.FindFieldIdInInterfaceByName(project, project.Backend.Rest[i].Data.ID, project.Backend.Rest[i].Filter[j].Name)
|
2023-08-25 15:05:28 +03:00
|
|
|
|
project.Backend.Rest[i].Filter[j].ID = tmp //templ.FindFieldIdInInterfaceByName(project, project.Backend.Rest[i].Data.ID, project.Backend.Rest[i].Filter[j].Name)
|
2023-08-02 16:04:17 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-07-26 16:19:28 +03:00
|
|
|
|
default:
|
|
|
|
|
log.Fatal("Неизвестный формат источника")
|
|
|
|
|
}
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
if len(dataArr) == 1 {
|
|
|
|
|
// Нет интерфейса, по этому ищем где первым попадется
|
2023-08-25 15:05:28 +03:00
|
|
|
|
//tmpSrc := templ.FindSourceDataInDBByName(project, dataArr[1])
|
|
|
|
|
/*project.Backend.Rest[i].Data.ID = tmpSrc.ID
|
2023-07-26 16:19:28 +03:00
|
|
|
|
if project.Backend.Rest[i].Data.ID != uuid.Nil {
|
|
|
|
|
continue
|
2023-08-25 15:05:28 +03:00
|
|
|
|
}*/
|
|
|
|
|
/*tmpSrc1 := templ.FindSourceDataInInterfaceByName(project, dataArr[1])
|
2023-08-17 22:49:02 +03:00
|
|
|
|
project.Backend.Rest[i].Data.ID = tmpSrc1.ID //templ.FindSourceDataInInterfaceByName(project, dataArr[1])
|
2023-07-26 16:19:28 +03:00
|
|
|
|
if project.Backend.Rest[i].Data.ID == uuid.Nil {
|
|
|
|
|
log.Fatal("Не найдена структура данных для REST")
|
2023-08-25 15:05:28 +03:00
|
|
|
|
}*/
|
|
|
|
|
|
2023-07-26 16:19:28 +03:00
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if project.Backend.Rest[i].Data.Name == "" && project.Backend.Rest[i].Data.ID != uuid.Nil {
|
|
|
|
|
// Есть имя, но нет ID. Найдем
|
2023-08-17 22:49:02 +03:00
|
|
|
|
tmpSrc := templ.FindSourceDataInDBByID(project, project.Backend.Rest[i].Data.ID)
|
|
|
|
|
project.Backend.Rest[i].Data.Name = tmpSrc.Name // findSourceDataInDBByID(project, project.Backend.Rest[i].Data.ID)
|
2023-07-26 16:19:28 +03:00
|
|
|
|
if project.Backend.Rest[i].Data.ID != uuid.Nil {
|
2023-08-02 16:04:17 +03:00
|
|
|
|
for j := range project.Backend.Rest[i].Edit {
|
2023-08-17 22:49:02 +03:00
|
|
|
|
project.Backend.Rest[i].Data.Name = templ.FindFieldNameInDBById(project, project.Backend.Rest[i].Data.ID, project.Backend.Rest[i].Edit[j].ID)
|
2023-08-02 16:04:17 +03:00
|
|
|
|
}
|
|
|
|
|
for j := range project.Backend.Rest[i].Filter {
|
2023-08-17 22:49:02 +03:00
|
|
|
|
project.Backend.Rest[i].Data.Name = templ.FindFieldNameInDBById(project, project.Backend.Rest[i].Data.ID, project.Backend.Rest[i].Filter[j].ID)
|
2023-08-02 16:04:17 +03:00
|
|
|
|
}
|
2023-07-26 16:19:28 +03:00
|
|
|
|
continue
|
|
|
|
|
}
|
2023-08-02 16:04:17 +03:00
|
|
|
|
|
2023-08-17 22:49:02 +03:00
|
|
|
|
tmpSrc1 := templ.FindSourceDataInInterfaceByID(project, project.Backend.Rest[i].Data.ID)
|
|
|
|
|
project.Backend.Rest[i].Data.Name = tmpSrc1.Name //templ.FindSourceDataInInterfaceByID(project, project.Backend.Rest[i].Data.ID)
|
2023-07-26 16:19:28 +03:00
|
|
|
|
if project.Backend.Rest[i].Data.ID == uuid.Nil {
|
|
|
|
|
log.Fatal("Не найдена структура данных для REST")
|
|
|
|
|
}
|
2023-08-02 16:04:17 +03:00
|
|
|
|
|
|
|
|
|
for j := range project.Backend.Rest[i].Edit {
|
2023-08-25 15:05:28 +03:00
|
|
|
|
project.Backend.Rest[i].Edit[j].Name = templ.FindFieldNameInTableById(project, project.Backend.Rest[i].Data.ID, project.Backend.Rest[i].Edit[j].ID)
|
2023-08-02 16:04:17 +03:00
|
|
|
|
}
|
|
|
|
|
for j := range project.Backend.Rest[i].Filter {
|
2023-08-17 22:49:02 +03:00
|
|
|
|
project.Backend.Rest[i].Edit[j].Name = templ.FindFieldNameInInterfaceById(project, project.Backend.Rest[i].Data.ID, project.Backend.Rest[i].Filter[j].ID)
|
2023-08-02 16:04:17 +03:00
|
|
|
|
}
|
2023-07-26 16:19:28 +03:00
|
|
|
|
}
|
2023-08-15 19:38:14 +03:00
|
|
|
|
// Собираем группы, чтобы они были уникальными
|
|
|
|
|
project.Backend.Rest[i].GroupName = templ.FieldNamePrepare(project.Backend.Rest[i].GroupName)
|
|
|
|
|
runes := []rune(project.Backend.Rest[i].GroupName)
|
|
|
|
|
runes[0] = []rune(strings.ToLower(string(runes[0])))[0]
|
|
|
|
|
project.Backend.Rest[i].GroupName = string(runes)
|
2023-08-16 09:16:49 +03:00
|
|
|
|
search := false
|
2023-08-15 19:38:14 +03:00
|
|
|
|
for _, grp := range project.Backend.RestGroups {
|
|
|
|
|
if grp == project.Backend.Rest[i].GroupName {
|
2023-08-16 09:16:49 +03:00
|
|
|
|
search = true
|
|
|
|
|
break
|
2023-08-15 19:38:14 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
2023-08-16 09:16:49 +03:00
|
|
|
|
if !search {
|
|
|
|
|
project.Backend.RestGroups = append(project.Backend.RestGroups, project.Backend.Rest[i].GroupName)
|
|
|
|
|
}
|
2023-07-26 16:19:28 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return project
|
|
|
|
|
}
|