1
0
mirror of https://github.com/ManyakRus/crud_generator.git synced 2024-12-16 21:52:42 +02:00
crud_generator/internal/create_files/create_files.go

2696 lines
77 KiB
Go
Raw Normal View History

2023-10-24 17:03:04 +02:00
package create_files
import (
2023-11-02 14:57:13 +02:00
"errors"
"fmt"
2023-11-02 17:19:33 +02:00
"github.com/ManyakRus/crud_generator/internal/config"
2023-11-02 14:57:13 +02:00
"github.com/ManyakRus/crud_generator/internal/mini_func"
2023-10-26 13:18:38 +02:00
"github.com/ManyakRus/crud_generator/internal/types"
2023-11-07 16:58:02 +02:00
"github.com/ManyakRus/starter/log"
2023-11-02 17:19:33 +02:00
"github.com/ManyakRus/starter/micro"
2023-10-25 10:41:26 +02:00
"github.com/iancoleman/strcase"
2023-10-24 17:03:04 +02:00
"github.com/jinzhu/inflection"
2024-05-28 12:39:36 +02:00
"sort"
2023-11-02 14:57:13 +02:00
"strconv"
2023-10-25 15:38:35 +02:00
"strings"
2023-10-24 17:03:04 +02:00
)
2024-09-06 14:10:00 +02:00
// Find_SingularName - возвращает наименование в единственном числе
func Find_SingularName(s string) string {
2023-10-24 17:03:04 +02:00
var Otvet string
if s == "" {
return Otvet
}
Otvet = inflection.Singular(s)
return Otvet
}
2023-10-25 10:41:26 +02:00
// FormatName - возвращает наименование в формате CamelCase
func FormatName(Name string) string {
Otvet := Name
2023-10-27 10:43:15 +02:00
Otvet1, ok := types.MapReplaceName[Name]
if ok == true {
return Otvet1
}
2023-10-25 15:38:35 +02:00
switch strings.ToLower(Name) {
case "id":
Otvet = "ID"
2023-11-02 14:57:13 +02:00
return Otvet
2023-10-25 15:38:35 +02:00
}
2023-10-25 10:41:26 +02:00
2023-11-02 14:57:13 +02:00
Otvet = strcase.ToCamel(Otvet)
2023-10-27 10:43:15 +02:00
//_id в конце заменяем на ID
2023-11-02 14:57:13 +02:00
lenName := len(Name)
lenOtvet := len(Otvet)
if lenName >= 3 {
last3 := strings.ToLower(Name[lenName-3:])
2023-10-27 10:43:15 +02:00
if last3 == "_id" {
2023-11-02 14:57:13 +02:00
Otvet = Otvet[:lenOtvet-2] + "ID"
2023-10-26 10:33:12 +02:00
}
}
return Otvet
}
// DeleteFuncFromFuncName - удаляет функцию из текста начиная с объявления функции
func DeleteFuncFromFuncName(Text, FuncName string) string {
Otvet := Text
TextFind := "\nfunc " + FuncName + "("
pos1 := strings.Index(Otvet, TextFind)
if pos1 < 0 {
return Otvet
}
s2 := Otvet[pos1+1:]
posEnd := strings.Index(s2, "\n}")
if posEnd < 0 {
return Otvet
}
Otvet = Otvet[:pos1-1] + Otvet[pos1+posEnd+3:]
return Otvet
}
// DeleteFuncFromComment - удаляет функцию из текста начиная с комментария
func DeleteFuncFromComment(Text, Comment string) string {
Otvet := Text
2023-11-29 13:09:53 +02:00
TextFind := Comment
2023-10-26 10:33:12 +02:00
pos1 := strings.Index(Otvet, TextFind)
if pos1 < 0 {
return Otvet
}
s2 := Otvet[pos1+1:]
posEnd := strings.Index(s2, "\n}")
if posEnd < 0 {
return Otvet
}
Otvet = Otvet[:pos1-1] + Otvet[pos1+posEnd+3:]
return Otvet
}
2023-10-26 13:18:38 +02:00
2023-11-02 14:57:13 +02:00
// DeleteCommentFromFuncName - удаляет комментарий с названием функции
func DeleteCommentFromFuncName(Text, FuncName string) string {
Otvet := Text
TextFind := "//" + FuncName + "()"
Otvet = strings.ReplaceAll(Otvet, TextFind, "")
return Otvet
}
// DeleteLineWithComment - удаляет текст от комментария до конца строки
func DeleteLineWithComment(Text, FuncName string) string {
Otvet := Text
TextFind := "//" + FuncName + "()"
pos1 := strings.Index(Otvet, TextFind)
if pos1 < 0 {
return Otvet
}
s2 := Otvet[pos1:]
posEnd := strings.Index(s2, "\n")
if posEnd < 0 {
return Otvet
}
Otvet = Otvet[:pos1-1] + Otvet[pos1+posEnd+1:]
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_PrimaryKeyNameTypeGo - возвращает наименование и тип golang колонки PrimaryKey
func Find_PrimaryKeyNameTypeGo(Table1 *types.Table) (string, string) {
2023-11-02 14:57:13 +02:00
Otvet := ""
Type := ""
//сортировка по названию колонок
keys := make([]string, 0, len(Table1.MapColumns))
for k := range Table1.MapColumns {
keys = append(keys, k)
}
sort.Strings(keys)
for _, key1 := range keys {
Column1, ok := Table1.MapColumns[key1]
if ok == false {
log.Panic("Table1.MapColumns[key1] = false")
}
2024-04-04 16:59:20 +02:00
if Column1.IsPrimaryKey == true {
2023-11-02 14:57:13 +02:00
return Column1.NameGo, Column1.TypeGo
}
}
return Otvet, Type
}
2024-09-06 14:10:00 +02:00
// Find_PrimaryKeyNameType - возвращает наименование и тип БД колонки PrimaryKey
func Find_PrimaryKeyNameType(Table1 *types.Table) (string, string) {
2023-11-15 10:43:15 +02:00
Otvet := ""
Type := ""
//сортировка по названию колонок
keys := make([]string, 0, len(Table1.MapColumns))
for k := range Table1.MapColumns {
keys = append(keys, k)
}
sort.Strings(keys)
for _, key1 := range keys {
Column1, ok := Table1.MapColumns[key1]
if ok == false {
log.Panic("Table1.MapColumns[key1] = false")
}
2024-04-04 16:59:20 +02:00
if Column1.IsPrimaryKey == true {
2023-11-15 10:43:15 +02:00
return Column1.Name, Column1.Type
}
}
return Otvet, Type
}
2024-09-06 14:10:00 +02:00
// Find_PrimaryKeyColumn - возвращает Column для колонки PrimaryKey
func Find_PrimaryKeyColumn(Table1 *types.Table) (Column1 *types.Column) {
2024-04-12 15:54:27 +02:00
var Otvet *types.Column
//сортировка по названию колонок
keys := make([]string, 0, len(Table1.MapColumns))
for k := range Table1.MapColumns {
keys = append(keys, k)
}
sort.Strings(keys)
for _, key1 := range keys {
Column1, ok := Table1.MapColumns[key1]
if ok == false {
log.Panic("Table1.MapColumns[key1] = false")
}
2024-04-12 15:54:27 +02:00
if Column1.IsPrimaryKey == true {
return Column1
}
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_PrimaryKeyColumns - возвращает несколько Column для колонки PrimaryKey
func Find_PrimaryKeyColumns(Table1 *types.Table) []*types.Column {
2024-05-24 15:39:16 +02:00
Otvet := make([]*types.Column, 0)
//сортировка по названию колонок
2024-05-28 12:39:36 +02:00
keys := make([]string, 0, len(Table1.MapColumns))
for k := range Table1.MapColumns {
keys = append(keys, k)
}
sort.Strings(keys)
for _, key1 := range keys {
Column1, ok := Table1.MapColumns[key1]
if ok == false {
log.Panic("Table1.MapColumns[key1] = false")
}
2024-05-24 15:39:16 +02:00
if Column1.IsPrimaryKey == true {
Otvet = append(Otvet, Column1)
}
}
return Otvet
}
2024-09-06 14:10:00 +02:00
//// Find_PrimaryKeyNameTypeGo - возвращает наименование и тип golang колонки PrimaryKey
//func Find_PrimaryKeyNameTypeGo(Table1 *types.Table) (string, string) {
// Otvet := ""
// Type := ""
//
// for _, Column1 := range Table1.MapColumns {
// if Column1.IsIdentity == true {
// return Column1.NameGo, Column1.TypeGo
// }
// }
//
// return Otvet, Type
//}
2024-09-06 14:10:00 +02:00
// Replace_PrimaryKeyOtvetID - заменяет "Otvet.ID" на название колонки PrimaryKey
func Replace_PrimaryKeyOtvetID(Text string, Table1 *types.Table) string {
2023-11-02 14:57:13 +02:00
Otvet := Text
2024-09-06 14:10:00 +02:00
Otvet = Replace_PrimaryKeyOtvetID_Many(Otvet, Table1)
2024-05-24 15:39:16 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindText_Equal0 - возвращает текст сравнения с нулевым значением
func FindText_Equal0(Column1 *types.Column) string {
Otvet := " == 0"
switch Column1.TypeGo {
case "string":
Otvet = ` == ""`
case "uuid.UUID":
Otvet = ` == uuid.Nil`
case "time.Time":
Otvet = `.IsZero() == true`
case "bool":
Otvet = ` == false`
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// Replace_PrimaryKeyOtvetID1 - заменяет "Otvet.ID" на название колонки PrimaryKey
func Replace_PrimaryKeyOtvetID1(Text string, Table1 *types.Table) string {
2024-05-24 15:39:16 +02:00
Otvet := Text
2024-09-06 14:10:00 +02:00
ColumnNamePK, ColumnTypeGoPK := Find_PrimaryKeyNameTypeGo(Table1)
ColumnPK := Find_PrimaryKeyColumn(Table1)
2024-04-09 17:04:05 +02:00
//заменим ID-Alias на ID
TableName := Table1.Name
2024-09-06 14:10:00 +02:00
IDName, _ := Find_PrimaryKeyNameType(Table1)
2024-05-15 16:12:03 +02:00
Alias, ok := types.MapConvertID[TableName+"."+IDName]
OtvetColumnName := "Otvet." + ColumnNamePK
2024-04-09 17:04:05 +02:00
if ok == true {
2024-05-15 16:12:03 +02:00
OtvetColumnName = Alias + "(" + OtvetColumnName + ")"
2024-04-09 17:04:05 +02:00
}
2024-06-06 17:05:19 +02:00
Otvet = strings.ReplaceAll(Otvet, "Otvet.ID = AliasFromInt(ID)", "Otvet."+ColumnNamePK+" = "+ColumnNamePK)
2024-04-24 14:26:19 +02:00
//заменим int64(Otvet.ID) на Otvet.ID
2024-05-15 16:12:03 +02:00
if mini_func.IsNumberType(ColumnTypeGoPK) == true {
2024-04-17 09:19:36 +02:00
Otvet = strings.ReplaceAll(Otvet, "int64(Otvet.ID)", OtvetColumnName)
2024-05-15 16:12:03 +02:00
} else if ColumnTypeGoPK == "string" {
2024-04-24 14:26:19 +02:00
Otvet = strings.ReplaceAll(Otvet, "int64(Otvet.ID) == 0", OtvetColumnName+" == \"\"")
Otvet = strings.ReplaceAll(Otvet, "int64(Otvet.ID) != 0", OtvetColumnName+" != \"\"")
Otvet = strings.ReplaceAll(Otvet, "int64(Otvet.ID)", OtvetColumnName)
2024-05-15 16:12:03 +02:00
} else if ColumnTypeGoPK == "uuid.UUID" || ColumnTypeGoPK == "uuid.NullUUID" {
2024-04-24 14:26:19 +02:00
Otvet = strings.ReplaceAll(Otvet, "int64(Otvet.ID) == 0", OtvetColumnName+" == uuid.Nil")
Otvet = strings.ReplaceAll(Otvet, "int64(Otvet.ID) != 0", OtvetColumnName+" != uuid.Nil")
Otvet = strings.ReplaceAll(Otvet, "int64(Otvet.ID)", OtvetColumnName)
2024-05-15 16:12:03 +02:00
} else if ColumnTypeGoPK == "time.Time" {
2024-04-09 17:04:05 +02:00
Otvet = strings.ReplaceAll(Otvet, "int64(Otvet.ID) == 0", OtvetColumnName+".IsZero() == true")
Otvet = strings.ReplaceAll(Otvet, "int64(Otvet.ID) != 0", OtvetColumnName+".IsZero() == false")
Otvet = strings.ReplaceAll(Otvet, "int64(Otvet.ID)", OtvetColumnName)
}
2024-05-15 16:12:03 +02:00
//Otvet = strings.ReplaceAll(Otvet, "Otvet.ID = ", OtvetColumnName+" = ")
//Otvet = strings.ReplaceAll(Otvet, "Otvet.ID != ", OtvetColumnName+" != ")
//Otvet = strings.ReplaceAll(Otvet, " Otvet.ID)", " "+OtvetColumnName+")")
Otvet = strings.ReplaceAll(Otvet, " Otvet.ID)", " Otvet."+ColumnNamePK+")")
//Alias преобразуем в int64, и наоборот
if Alias != "" {
Otvet = strings.ReplaceAll(Otvet, "IntFromAlias(Otvet.ID)", ColumnTypeGoPK+"(Otvet."+ColumnNamePK+")")
2024-05-16 12:04:35 +02:00
Otvet = strings.ReplaceAll(Otvet, "AliasFromInt(Otvet.ID)", OtvetColumnName)
Otvet = strings.ReplaceAll(Otvet, "AliasFromInt(ID)", Alias+"("+ColumnNamePK+")")
2024-05-15 16:12:03 +02:00
} else {
Otvet = strings.ReplaceAll(Otvet, "IntFromAlias(Otvet.ID)", "Otvet."+ColumnNamePK+"")
2024-05-16 12:04:35 +02:00
Otvet = strings.ReplaceAll(Otvet, "AliasFromInt(Otvet.ID)", OtvetColumnName)
Otvet = strings.ReplaceAll(Otvet, "AliasFromInt(ID)", "ID")
2024-05-15 16:12:03 +02:00
}
2024-04-09 17:04:05 +02:00
2024-09-06 14:10:00 +02:00
Value, GolangCode := Convert_ProtobufVariableToGolangVariable(Table1, ColumnPK, "Request.")
if GolangCode == "" {
TextNew := "\t" + ColumnPK.NameGo + " := " + Value + "\n"
Otvet = strings.ReplaceAll(Otvet, "\tID := Request.ID\n", TextNew)
} else {
TextNew := "\t" + GolangCode + "\n"
Otvet = strings.ReplaceAll(Otvet, "\tID := Request.ID\n", TextNew)
}
2024-09-06 14:10:00 +02:00
Value, GolangCode = Convert_ProtobufTypeToGolangAlias(Table1, ColumnPK, "Request.")
if GolangCode == "" {
TextNew := "\t" + ColumnPK.NameGo + " := " + Value + "\n"
Otvet = strings.ReplaceAll(Otvet, "\tID := AliasFromProto(Request.ID)\n", TextNew)
} else {
TextNew := "\t" + GolangCode + "\n"
Otvet = strings.ReplaceAll(Otvet, "\tID := AliasFromProto(Request.ID)\n", TextNew)
}
2024-04-09 17:04:05 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// Replace_PrimaryKeyOtvetID_Many - заменяет "Otvet.ID" на название колонки PrimaryKey
func Replace_PrimaryKeyOtvetID_Many(Text string, Table1 *types.Table) string {
2024-05-24 15:39:16 +02:00
Otvet := Text
2024-09-06 14:10:00 +02:00
Otvet = Replace_PrimaryKeyOtvetID_ManyPK1(Otvet, Table1, "Otvet")
Otvet = Replace_PrimaryKeyOtvetID_ManyPK1(Otvet, Table1, "Request")
Otvet = Replace_PrimaryKeyOtvetID_ManyPK1(Otvet, Table1, "m")
2024-06-04 15:53:15 +02:00
2024-09-06 14:10:00 +02:00
Otvet = Replace_PrimaryKeyOtvetID1(Otvet, Table1) //для тестов
2024-06-03 16:58:28 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// Replace_PrimaryKeyOtvetID_ManyPK1 - заменяет "Otvet.ID" на название колонки PrimaryKey
func Replace_PrimaryKeyOtvetID_ManyPK1(Text string, Table1 *types.Table, VariableName string) string {
2024-06-03 16:58:28 +02:00
Otvet := Text
2024-05-28 12:39:36 +02:00
//сортировка по названию таблиц
keys := make([]string, 0, len(Table1.MapColumns))
for k := range Table1.MapColumns {
keys = append(keys, k)
}
sort.Strings(keys)
TextOtvetIDAliasID := ""
2024-06-20 17:14:47 +02:00
TextIfMId := ""
TextIfMIdNot0 := ""
TextM2ID := ""
2024-06-03 16:58:28 +02:00
TextIDRequestID := ""
2024-05-24 15:39:16 +02:00
TextOtvetIDID := ""
2024-06-04 15:53:15 +02:00
TextRequestIDmID := ""
TextRequestIDInt64ID := ""
TextOtvetIDmID := ""
2024-06-04 17:03:27 +02:00
TextMID0 := ""
TextOR := ""
2024-05-28 12:39:36 +02:00
for _, key1 := range keys {
Column1, _ := Table1.MapColumns[key1]
if Column1.IsPrimaryKey != true {
2024-05-24 15:39:16 +02:00
continue
}
2024-06-03 16:58:28 +02:00
TextOtvetIDID = TextOtvetIDID + "\t" + VariableName + "." + Column1.NameGo + " = " + Column1.NameGo + "\n"
2024-09-06 14:10:00 +02:00
RequestColumnName := Find_RequestFieldName(Table1, Column1)
Value, GolangCode := Convert_ProtobufVariableToGolangVariable(Table1, Column1, "Request.")
2024-06-06 17:05:19 +02:00
if GolangCode == "" {
TextIDRequestID = TextIDRequestID + "\t" + Column1.NameGo + " := " + Value + "\n"
} else {
TextIDRequestID = TextIDRequestID + "\t" + GolangCode + "\n"
}
2024-09-06 14:10:00 +02:00
TextM := Convert_GolangVariableToProtobufVariable(Table1, Column1, "m")
2024-06-04 15:53:15 +02:00
TextRequestIDmID = TextRequestIDmID + "\t" + VariableName + "." + RequestColumnName + " = " + TextM + "\n"
2024-09-06 14:10:00 +02:00
TextInt64ID := Convert_GolangVariableToProtobufVariable(Table1, Column1, "")
2024-06-04 15:53:15 +02:00
TextRequestIDInt64ID = TextRequestIDInt64ID + "\t" + VariableName + "." + RequestColumnName + " = " + TextInt64ID + "\n"
TextOtvetIDmID = TextOtvetIDmID + "\t" + "Otvet." + Column1.NameGo + " = " + VariableName + "." + Column1.NameGo + "\n"
2024-06-04 17:03:27 +02:00
2024-09-06 14:10:00 +02:00
DefaultValue := FindText_DefaultValue(Column1.TypeGo)
2024-06-20 17:14:47 +02:00
TextM2ID = TextM2ID + "\t" + "m2." + Column1.NameGo + " = " + "m." + Column1.NameGo + "\n"
TextIfMId = TextIfMId + TextOR + "m." + Column1.NameGo + " == " + DefaultValue
TextIfMIdNot0 = TextIfMIdNot0 + TextOR + "m." + Column1.NameGo + " != " + DefaultValue
2024-06-04 17:03:27 +02:00
TextMID0 = TextMID0 + TextOR + " (" + VariableName + "." + Column1.NameGo + " == " + DefaultValue + ")"
2024-09-06 14:10:00 +02:00
TextAlias := Convert_IDToAlias(Table1, Column1, Column1.NameGo)
TextOtvetIDAliasID = TextOtvetIDAliasID + "\t" + VariableName + "." + Column1.NameGo + " = " + TextAlias + "\n"
2024-06-04 17:03:27 +02:00
TextOR = " || "
2024-05-24 15:39:16 +02:00
}
2024-05-28 12:39:36 +02:00
Otvet = strings.ReplaceAll(Otvet, "\t"+VariableName+".ID = AliasFromInt(ID)", TextOtvetIDAliasID)
//Otvet = strings.ReplaceAll(Otvet, "\t"+VariableName+".ID = AliasFromInt(ID)", TextOtvetIDID)
2024-06-06 17:05:19 +02:00
Otvet = strings.ReplaceAll(Otvet, "\t"+VariableName+".ID = ProtoFromInt(m.ID)", TextRequestIDmID)
2024-06-04 15:53:15 +02:00
Otvet = strings.ReplaceAll(Otvet, "\t"+VariableName+".ID = int64(ID)", TextRequestIDInt64ID)
Otvet = strings.ReplaceAll(Otvet, "\tOtvet.ID = "+VariableName+".ID\n", TextOtvetIDmID)
2024-06-04 17:03:27 +02:00
Otvet = strings.ReplaceAll(Otvet, " IntFromAlias("+VariableName+".ID) == 0", TextMID0)
2024-06-20 17:14:47 +02:00
Otvet = strings.ReplaceAll(Otvet, "\tm2.ID = int64(m.ID)", TextM2ID)
Otvet = strings.ReplaceAll(Otvet, "int64(m.ID) == 0", TextIfMId)
Otvet = strings.ReplaceAll(Otvet, "int64(m.ID) != 0", TextIfMIdNot0)
2024-09-06 14:10:00 +02:00
//Value := Convert_GolangVariableToProtobufVariable(Table1, ColumnPK, "m")
2024-06-06 17:05:19 +02:00
//Otvet = strings.ReplaceAll(Otvet, "ProtoFromInt(m.ID)", Value) //protobuf
2024-05-24 15:39:16 +02:00
2024-06-03 16:58:28 +02:00
//заменим ID := Request.ID
Otvet = strings.ReplaceAll(Otvet, "\tID := Request.ID\n", TextIDRequestID)
2024-05-24 15:39:16 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// Replace_PrimaryKeyM_ID - заменяет "m.ID" на название колонки PrimaryKey
func Replace_PrimaryKeyM_ID(Text string, Table1 *types.Table) string {
2024-04-09 17:04:05 +02:00
Otvet := Text
2024-09-06 14:10:00 +02:00
Otvet = Replace_PrimaryKeyM_ManyPK(Otvet, Table1)
2024-06-03 16:58:28 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// Replace_PrimaryKeyM_ManyPK - заменяет "m.ID" на название колонки PrimaryKey
func Replace_PrimaryKeyM_ManyPK(Text string, Table1 *types.Table) string {
2024-06-03 16:58:28 +02:00
Otvet := Text
2024-09-06 14:10:00 +02:00
Otvet = Replace_PrimaryKeyOtvetID_ManyPK1(Otvet, Table1, "m")
Otvet = Replace_PrimaryKeyOtvetID_ManyPK1(Otvet, Table1, "Request")
2024-06-04 15:53:15 +02:00
//заменим int64(m.ID)
2024-06-20 17:14:47 +02:00
//Otvet = ReplacePrimaryKeyM_ID1(Otvet, Table1)
2024-06-03 16:58:28 +02:00
return Otvet
}
2024-06-20 17:14:47 +02:00
// ReplaceIntFromAlias - заменяет "m.ID" на текст m.ID или int64(m.ID)
func ReplaceIntFromAlias(Text string, Table1 *types.Table, Column1 *types.Column, VariableName string) string {
Otvet := Text
Value := ConvertFromAlias(Table1, Column1, VariableName)
Otvet = strings.ReplaceAll(Otvet, "IntFromAlias("+VariableName+".ID)", Value)
return Otvet
}
// ConvertFromAlias - возвращает текст m.ID или int64(m.ID)
func ConvertFromAlias(Table1 *types.Table, Column1 *types.Column, VariableName string) string {
Otvet := VariableName + "." + Column1.NameGo
TextConvert, ok := types.MapConvertID[Table1.Name+"."+Column1.Name]
if ok == false {
return Otvet
}
if TextConvert[:6] != "alias." {
return Otvet
}
Otvet = Column1.TypeGo + "(" + VariableName + "." + Column1.NameGo + ")"
return Otvet
}
2023-11-02 14:57:13 +02:00
// AddSkipNow - добавляет строку t.SkipNow()
func AddSkipNow(Text string, Table1 *types.Table) string {
Otvet := Text
2024-09-06 14:10:00 +02:00
Columns := Find_PrimaryKeyColumns(Table1)
2024-05-29 13:18:58 +02:00
if Columns == nil {
return Otvet
}
//проверка ИД=""
is_no_zero := true
for _, Column1 := range Columns {
if Column1.IDMinimum == "" || Column1.IDMinimum == "0" {
is_no_zero = false
break
}
2023-11-02 14:57:13 +02:00
}
2024-05-29 13:18:58 +02:00
//если нет пустых то возврат
if is_no_zero == true {
return Otvet
}
//добавляем t.SkipNow()
TextFind := "(t *testing.T) {"
Otvet = strings.ReplaceAll(Otvet, TextFind, TextFind+"\n\tt.SkipNow() //now rows in DB\n")
2023-11-02 14:57:13 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// IsGood_Table - возвращает ошибку если таблица неправильная
func IsGood_Table(Table1 *types.Table) error {
2023-11-02 14:57:13 +02:00
var err error
2024-09-06 14:10:00 +02:00
err = IsGood_TableNamePrefix(Table1)
2024-05-02 15:20:22 +02:00
if err != nil {
return err
}
2024-09-06 14:10:00 +02:00
err = IsGood_PrimaryKeyColumnsCount(Table1)
2024-05-02 15:20:22 +02:00
if err != nil {
return err
}
return err
}
2024-09-06 14:10:00 +02:00
// IsGood_PrimaryKeyColumnsCount - возвращает ошибку если количество колонок PrimaryKey неправильное
func IsGood_PrimaryKeyColumnsCount(Table1 *types.Table) error {
2024-05-02 15:20:22 +02:00
var err error
2024-06-04 17:03:27 +02:00
if Table1.PrimaryKeyColumnsCount <= 0 {
2024-05-02 15:20:22 +02:00
TextError := fmt.Sprint("Wrong table: ", Table1.Name, " error: can not use many Primary key columns count: ", Table1.PrimaryKeyColumnsCount)
2023-11-02 14:57:13 +02:00
err = errors.New(TextError)
}
2024-05-02 15:20:22 +02:00
return err
}
2024-09-06 14:10:00 +02:00
// IsGood_TableNamePrefix - возвращает ошибку если префикс таблицы = "DELETED_"
func IsGood_TableNamePrefix(Table1 *types.Table) error {
2024-05-02 15:20:22 +02:00
var err error
TableName := Table1.Name
2024-02-19 16:47:45 +02:00
if strings.HasPrefix(TableName, "DELETED_") == true {
2024-03-21 10:27:52 +02:00
TextError := fmt.Sprint("Wrong table: ", Table1.Name, " error: name = DELETED_")
2024-02-19 16:47:45 +02:00
err = errors.New(TextError)
}
2023-11-02 14:57:13 +02:00
return err
}
// PrintableString - возвращает строку без запрещённых символов
func PrintableString(s string) string {
Otvet := s
Otvet = strconv.Quote(Otvet) //экранирование символов
len1 := len(Otvet)
if len1 > 0 {
Otvet = Otvet[1 : len1-1]
}
return Otvet
}
2023-11-02 17:19:33 +02:00
// Find_Template_DB_Foldername - возвращает путь к папке
func Find_Template_DB_Foldername() string {
Otvet := ""
DirBin := micro.ProgramDir_bin()
DirTemplates := DirBin + config.Settings.TEMPLATE_FOLDERNAME + micro.SeparatorFile()
2023-11-16 14:08:10 +02:00
DirTemplatesDB := DirTemplates + config.Settings.TEMPLATE_FOLDERNAME_CRUD + micro.SeparatorFile()
2023-11-02 17:19:33 +02:00
Otvet = DirTemplatesDB
return Otvet
}
// DeleteImportModel - удаляет лишний импорт модели
func DeleteImportModel(s string) string {
Otvet := s
2024-09-06 14:10:00 +02:00
ModelURL := Find_ModelURL()
2023-11-02 17:19:33 +02:00
ImportName := micro.LastWord(ModelURL)
pos1 := strings.Index(Otvet, ImportName+".")
if pos1 < 0 {
Otvet = strings.ReplaceAll(Otvet, `"`+ModelURL+`"\n`, "")
2023-11-02 17:19:33 +02:00
Otvet = strings.ReplaceAll(Otvet, `"`+ModelURL+`"`, "")
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_ModelURL - возвращает URL репозитория с пакетом "model"
func Find_ModelURL() string {
2023-11-02 17:19:33 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_MODEL
return Otvet
}
2023-11-03 13:21:35 +02:00
2024-09-06 14:10:00 +02:00
// Find_GRPCServerURL - возвращает URL репозитория с пакетом "server_grpc"
func Find_GRPCServerURL() string {
2023-11-15 10:43:15 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_GRPC_SERVER
return Otvet
}
2023-11-15 16:59:21 +02:00
// FindGRPCClientURL - возвращает URL репозитория с пакетом "client_grpc"
2024-09-06 14:10:00 +02:00
func Find_GRPClientURL() string {
2023-11-15 16:59:21 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_GRPC_CLIENT
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_NRPClientURL - возвращает URL репозитория с пакетом "client_nrpc"
func Find_NRPClientURL() string {
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_NRPC_CLIENT
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_GRPCConstantsURL - возвращает URL репозитория с пакетом "client_grpc"
func Find_GRPCConstantsURL() string {
2023-11-15 16:59:21 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_GRPC + "/" + "grpc_constants"
2023-11-15 16:59:21 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_NRPCServerlURL - возвращает URL репозитория с пакетом "server_nrpc"
func Find_NRPCServerlURL() string {
2023-11-15 10:43:15 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_NRPC_SERVER
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_ProtobufURL - возвращает URL репозитория с файлом .proto
func Find_ProtobufURL() string {
2023-11-15 12:58:31 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_GRPC_PROTO
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_TablesURL - возвращает URL репозитория с пакетом "tables"
func Find_TablesURL() string {
2023-11-16 14:08:10 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_TABLES
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_TableNameURL - возвращает URL репозитория с пакетом "tables" + TableName
func Find_TableNameURL(TableName string) string {
2023-11-16 17:07:59 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_TABLES + "/" + config.Settings.PREFIX_TABLE + TableName
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_ProtoURL - возвращает URL репозитория с пакетом "grpc_proto"
func Find_ProtoURL() string {
2023-11-15 16:59:21 +02:00
Otvet := ""
2023-11-29 13:09:53 +02:00
TEMPLATE_FOLDERNAME_GRPC_PROTO := strings.ToLower(config.Settings.TEMPLATE_FOLDERNAME_GRPC_PROTO)
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + TEMPLATE_FOLDERNAME_GRPC_PROTO + "/" + "grpc_proto"
2023-11-15 16:59:21 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_ModelTableURL - возвращает URL репозитория model для таблицы TableName
func Find_ModelTableURL(TableName string) string {
2023-11-15 16:59:21 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_MODEL + "/" + TableName
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_CrudFuncURL - возвращает URL репозитория crud_func
func Find_CrudFuncURL(string) string {
2024-09-06 12:14:05 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATES_CRUD_FUNC_FOLDERNAME
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_GRPCClientTableURL - возвращает URL репозитория grpc_client для таблицы TableName
func Find_GRPCClientTableURL(TableName string) string {
2024-08-21 15:32:06 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_GRPC_CLIENT + "/" + config.Settings.PREFIX_CLIENT_GRPC + TableName
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_CrudStarterTableURL - возвращает URL репозитория crud_starter для таблицы TableName
func Find_CrudStarterTableURL(TableName string) string {
2024-01-23 12:36:52 +02:00
Otvet := ""
2024-09-20 13:58:46 +02:00
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_CRUD_STARTER + "/" + config.Settings.STARTER_TABLES_PREFIX + TableName
2024-01-23 12:36:52 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_CrudTableURL - возвращает URL репозитория crud для таблицы TableName
func Find_CrudTableURL(TableName string) string {
2024-01-23 12:36:52 +02:00
Otvet := ""
2024-09-20 13:58:46 +02:00
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_CRUD + "/" + config.Settings.CRUD_TABLES_FREFIX + TableName
2024-01-23 12:36:52 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_NRPC_Client_URL - возвращает URL репозитория с пакетом "nrpc_client"
func Find_NRPC_Client_URL() string {
2023-11-17 13:24:26 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_NRPC_CLIENT
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_DBConstantsURL - возвращает URL репозитория с пакетом db "db_constants"
func Find_DBConstantsURL() string {
2023-11-17 13:24:26 +02:00
Otvet := ""
2024-05-03 14:57:49 +02:00
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_DB + "/" + "db_constants"
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_ConstantsURL - возвращает URL репозитория с пакетом pkg "constants"
func Find_ConstantsURL() string {
2024-05-03 14:57:49 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_CONSTANTS
2023-11-17 13:24:26 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_NRPCConstantsURL - возвращает URL репозитория с пакетом db "constants"
func Find_NRPCConstantsURL() string {
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_NRPC + "/" + "nrpc_constants"
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_CrudStarterURL - возвращает URL репозитория с пакетом "crud_starter"
func Find_CrudStarterURL() string {
2023-11-17 13:24:26 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_CRUD_STARTER
return Otvet
}
// Find_GRPC_NRPC_URL - возвращает URL репозитория с пакетом "crud_starter"
func Find_GRPC_NRPC_URL() string {
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_GRPC_NRPC
return Otvet
}
2024-08-21 14:01:01 +02:00
// Find_GRPCClient_func_URL - возвращает URL репозитория с пакетом "grpc_client_func"
func Find_GRPCClient_func_URL() string {
2024-08-13 14:22:46 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_GRPC_CLIENT_FUNC
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_CalcStructVersionURL - возвращает URL репозитория с пакетом "calc_struct_version"
func Find_CalcStructVersionURL() string {
2023-11-17 13:24:26 +02:00
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDERNAME_DB + "/" + "calc_struct_version"
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_CrudFunctionsURL - возвращает URL репозитория с пакетом crud_functions
func Find_CrudFunctionsURL() string {
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/" + config.Settings.TEMPLATE_FOLDER_CRUD_FUNCTIONS
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindText_DefaultGORMValue - возвращает значение по умолчанию для столбца Column1 для тегов в GORM
func FindText_DefaultGORMValue(Column1 *types.Column) string {
2023-11-03 13:21:35 +02:00
var Otvet string
2023-11-27 10:26:33 +02:00
ColumnName := Column1.Name
//ищем в файле настроек nullable.json
2024-04-08 16:42:13 +02:00
is_nullable_config, _ := types.MapNullableFileds[ColumnName]
2023-11-27 10:26:33 +02:00
//
2023-11-03 13:21:35 +02:00
sValue := ""
2023-11-16 14:08:10 +02:00
Type_go := Column1.TypeGo
2024-04-08 16:42:13 +02:00
// if Column1.TableKey != "" && Column1.IsNullable == true && (is_nullable_config == true || has_is_nullable_config == false) {
if Column1.IsNullable == true || (is_nullable_config == true) {
2023-11-03 13:21:35 +02:00
sValue = "null"
2023-11-16 14:08:10 +02:00
} else {
switch Type_go {
case "string":
sValue = "\\\"\\\""
case "int", "int32", "int64", "float32", "float64", "uint", "uint32", "uint64":
sValue = "0"
case "time.Time":
sValue = "null"
2024-04-04 16:59:20 +02:00
case "uuid.UUID", "uuid.NullUUID":
sValue = "null"
2023-11-16 14:08:10 +02:00
}
2023-11-03 13:21:35 +02:00
}
if sValue != "" {
Otvet = ";default:" + sValue
}
return Otvet
}
2023-11-07 16:58:02 +02:00
2024-09-06 14:10:00 +02:00
// FindText_DefaultValue - возвращает golang значение по умолчанию для типа
func FindText_DefaultValue(Type_go string) string {
var Otvet string
switch Type_go {
case "string":
Otvet = `""`
case "int", "int32", "int64", "float32", "float64", "uint", "uint32", "uint64":
Otvet = "0"
case "time.Time":
Otvet = "time.Time{}"
case "bool":
Otvet = "false"
2024-04-04 16:59:20 +02:00
case "uuid.UUID", "uuid.NullUUID":
2024-04-08 16:42:13 +02:00
Otvet = "uuid.Nil"
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindText_DefaultValueSQL - возвращает значение по умолчанию для типа
func FindText_DefaultValueSQL(Type_go string) string {
var Otvet string
switch Type_go {
case "string":
Otvet = `''`
case "int", "int32", "int64", "float32", "float64", "uint", "uint32", "uint64":
Otvet = "0"
case "time.Time":
Otvet = "null"
case "bool":
Otvet = "false"
2024-04-04 16:59:20 +02:00
case "uuid.UUID", "uuid.NullUUID":
2024-04-08 16:42:13 +02:00
Otvet = "null"
}
return Otvet
}
2023-11-07 16:58:02 +02:00
// FindURL_Alias - возвращает URL репозитория с пакетом "alias"
func FindURL_Alias() string {
Otvet := ""
if config.Settings.TEMPLATE_FOLDERNAME_ALIAS == "" {
2023-11-07 16:58:02 +02:00
return Otvet
}
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/"
Otvet = Otvet + config.Settings.TEMPLATE_FOLDERNAME_ALIAS
2023-11-07 16:58:02 +02:00
return Otvet
}
2023-11-16 17:07:59 +02:00
// FindURL_Tables - возвращает URL репозитория с пакетом "tables"
func FindURL_Tables() string {
Otvet := ""
Otvet = config.Settings.SERVICE_REPOSITORY_URL + "/"
Otvet = Otvet + config.Settings.TEMPLATE_FOLDERNAME_TABLES
return Otvet
}
2024-04-27 16:23:34 +02:00
// AddImport - добавляет RepositoryURL в секцию Import, если его там нет
func AddImport(Text, RepositoryURL string) string {
2023-11-07 16:58:02 +02:00
Otvet := Text
//если уже есть импорт
2024-04-27 16:23:34 +02:00
pos1 := strings.Index(Otvet, `"`+RepositoryURL+`"`)
2023-11-07 16:58:02 +02:00
if pos1 >= 0 {
return Otvet
}
//
TextFind := "import ("
LenFind := len(TextFind)
pos1 = strings.Index(Otvet, TextFind)
if pos1 < 0 {
log.Error("not found word: import (")
return Otvet
}
2024-04-27 16:23:34 +02:00
Otvet = Otvet[:pos1+LenFind] + "\n\t" + `"` + RepositoryURL + `"` + Otvet[pos1+LenFind:]
2023-11-07 16:58:02 +02:00
return Otvet
}
2023-11-08 12:32:47 +02:00
2024-09-06 14:10:00 +02:00
// CheckAndAdd_Import - добавляет URL в секцию Import, если его там нет, если он нужен
func CheckAndAdd_Import(Text, URL string) string {
Otvet := Text
//проверим используется или нет
ModuleName := micro.LastWord(URL)
pos1 := strings.Index(Otvet, ModuleName+".")
if pos1 < 0 {
return Otvet
}
Otvet = AddImport(Text, URL)
return Otvet
}
2024-09-06 14:10:00 +02:00
// AddImport_Time - добавляет пакет в секцию Import, если его там нет
func AddImport_Time(Text string) string {
2024-04-27 16:23:34 +02:00
Otvet := Text
2023-11-08 12:32:47 +02:00
2024-04-27 16:23:34 +02:00
RepositoryURL := `time`
Otvet = AddImport(Text, RepositoryURL)
2024-05-24 15:39:16 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// CheckAndAdd_ImportStrconv - добавляет пакет в секцию Import, если его там нет
func CheckAndAdd_ImportStrconv(Text string) string {
2024-05-24 15:39:16 +02:00
Otvet := Text
RepositoryURL := `strconv`
2024-09-06 14:10:00 +02:00
Otvet = CheckAndAdd_Import(Text, RepositoryURL)
2024-05-24 15:39:16 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// CheckAndAdd_ImportFmt - добавляет пакет fmt в секцию Import, если его там нет
func CheckAndAdd_ImportFmt(Text string) string {
2024-05-24 15:39:16 +02:00
Otvet := Text
RepositoryURL := `fmt`
2024-09-06 14:10:00 +02:00
Otvet = CheckAndAdd_Import(Text, RepositoryURL)
2024-04-05 15:53:35 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// AddImport_UUID - добавляет пакет в секцию Import, если его там нет
func AddImport_UUID(Text string) string {
2024-04-27 16:23:34 +02:00
Otvet := Text
2024-04-05 15:53:35 +02:00
//если уже есть импорт
2024-04-27 16:23:34 +02:00
RepositoryURL := `github.com/google/uuid`
Otvet = AddImport(Text, RepositoryURL)
//pos1 := strings.Index(Otvet, RepositoryURL)
//if pos1 >= 0 {
// return Otvet
//}
2024-04-05 15:53:35 +02:00
//
2024-04-27 16:23:34 +02:00
////
//TextImport := "import ("
//pos1 = strings.Index(Otvet, TextImport)
//if pos1 < 0 {
// log.Error("not found word: ", TextImport)
// return TextModel
//}
//
//Otvet = Otvet[:pos1+len(TextImport)] + "\n\t" + RepositoryURL + Otvet[pos1+len(TextImport):]
2024-04-05 15:53:35 +02:00
2024-04-27 16:23:34 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// AddImport_Gorm - добавляет пакет в секцию Import, если его там нет
func AddImport_Gorm(Text string) string {
2024-04-27 16:23:34 +02:00
Otvet := Text
//если уже есть импорт
RepositoryURL := `gorm.io/gorm`
Otvet = AddImport(Text, RepositoryURL)
//pos1 := strings.Index(Otvet, RepositoryURL)
//if pos1 >= 0 {
// return Otvet
//}
//
////
//TextImport := "import ("
//pos1 = strings.Index(Otvet, TextImport)
//if pos1 < 0 {
// log.Error("not found word: ", TextImport)
// return TextModel
//}
//
//Otvet = Otvet[:pos1+len(TextImport)] + "\n\t" + RepositoryURL + Otvet[pos1+len(TextImport):]
2023-11-08 12:32:47 +02:00
return Otvet
}
2023-11-08 14:15:52 +02:00
2024-09-06 14:10:00 +02:00
// AddImport_Timestamp - добавляет покет в секцию Import, если его там нет
func AddImport_Timestamp(Text string) string {
2024-04-27 16:23:34 +02:00
Otvet := Text
2024-04-27 16:23:34 +02:00
RepositoryURL := `google.golang.org/protobuf/types/known/timestamppb`
Otvet = AddImport(Text, RepositoryURL)
2024-04-27 16:23:34 +02:00
////если уже есть импорт
//pos1 := strings.Index(Otvet, `"google.golang.org/protobuf/types/known/timestamppb"`)
//if pos1 >= 0 {
// return Otvet
//}
//
2024-04-27 16:23:34 +02:00
////
//pos1 = strings.Index(Otvet, "import (")
//if pos1 < 0 {
// log.Error("not found word: import (")
// return TextModel
//}
//
//Otvet = Otvet[:pos1+8] + "\n\t" + `"google.golang.org/protobuf/types/known/timestamppb"` + Otvet[pos1+8:]
return Otvet
}
2024-09-06 14:10:00 +02:00
// CheckAndAdd_ImportAlias - добавляет покет в секцию Alias, если его там нет
func CheckAndAdd_ImportAlias(TextModel string) string {
Otvet := TextModel
//если уже есть импорт
pos1 := strings.Index(Otvet, `/alias`)
if pos1 >= 0 {
return Otvet
}
//если нету alias
pos1 = strings.Index(Otvet, `alias.`)
if pos1 < 0 {
return Otvet
}
//
pos1 = strings.Index(Otvet, "import (")
if pos1 < 0 {
log.Error("not found word: import (")
return TextModel
}
AliasURL := FindURL_Alias()
Otvet = Otvet[:pos1+8] + "\n\t" + `"` + AliasURL + `"` + Otvet[pos1+8:]
return Otvet
}
2024-09-06 14:10:00 +02:00
// CheckAndAdd_ImportTime_FromTable - добавляет пакет "time" в секцию Import, если его там нет
func CheckAndAdd_ImportTime_FromTable(TextModel string, Table1 *types.Table) string {
2023-11-08 14:15:52 +02:00
Otvet := TextModel
2023-11-08 16:37:35 +02:00
HasTimeColumn := Has_ColumnType_Time(Table1)
2023-11-08 14:15:52 +02:00
if HasTimeColumn == false {
return Otvet
}
2024-09-06 14:10:00 +02:00
Otvet = AddImport_Time(Otvet)
2023-11-08 14:15:52 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// CheckAndAdd_ImportTime_FromText - добавляет пакет "time" в секцию Import, если его там нет
func CheckAndAdd_ImportTime_FromText(Text string) string {
2023-11-08 14:15:52 +02:00
Otvet := Text
pos1 := strings.Index(Text, " time.")
if pos1 < 0 {
return Otvet
}
2024-09-06 14:10:00 +02:00
Otvet = AddImport_Time(Otvet)
2023-11-08 14:15:52 +02:00
return Otvet
}
2023-11-15 12:58:31 +02:00
2024-09-06 14:10:00 +02:00
// CheckAndAdd_ImportUUID_FromText - добавляет пакет "uuid" в секцию Import, если его там нет
func CheckAndAdd_ImportUUID_FromText(Text string) string {
2024-04-05 15:53:35 +02:00
Otvet := Text
2024-04-09 17:04:05 +02:00
pos1 := strings.Index(Text, "uuid.")
2024-04-05 15:53:35 +02:00
if pos1 < 0 {
return Otvet
}
2024-09-06 14:10:00 +02:00
Otvet = AddImport_UUID(Otvet)
2024-04-05 15:53:35 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// CheckAndAdd_ImportGorm_FromText - добавляет пакет "gorm.io/gorm" в секцию Import, если его там нет
func CheckAndAdd_ImportGorm_FromText(Text string) string {
2024-04-27 16:23:34 +02:00
Otvet := Text
pos1 := strings.Index(Text, `"gorm.io/gorm"`)
if pos1 < 0 {
return Otvet
}
2024-09-06 14:10:00 +02:00
Otvet = AddImport_Gorm(Otvet)
2024-04-27 16:23:34 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// CheckAndAdd_ImportTimestamp_FromText - добавляет пакет "time" в секцию Import, если его там нет
func CheckAndAdd_ImportTimestamp_FromText(Text string) string {
Otvet := Text
pos1 := strings.Index(Text, " timestamppb.")
if pos1 < 0 {
return Otvet
}
2024-09-06 14:10:00 +02:00
Otvet = AddImport_Timestamp(Otvet)
return Otvet
}
2024-09-06 14:10:00 +02:00
// Delete_TemplateRepositoryImports - удаляет импорты репозитория шаблона
func Delete_TemplateRepositoryImports(Text string) string {
2023-11-15 12:58:31 +02:00
Otvet := Text
if config.Settings.TEMPLATE_REPOSITORY_URL == "" {
return Otvet
}
//
TextFind := "import ("
pos1 := strings.Index(Otvet, TextFind)
if pos1 < 0 {
log.Error("not found word: import (")
return Otvet
}
TextFind = `"` + config.Settings.TEMPLATE_REPOSITORY_URL
pos1 = strings.Index(Otvet, TextFind)
if pos1 < 0 {
return Otvet
}
s2 := Otvet[pos1:]
posEnd := strings.Index(s2, "\n")
if posEnd < 0 {
return Otvet
}
Otvet = Otvet[:pos1-1] + Otvet[pos1+posEnd+1:]
2024-09-06 14:10:00 +02:00
Otvet = Delete_TemplateRepositoryImports(Otvet)
2023-11-15 12:58:31 +02:00
return Otvet
}
2023-11-15 16:59:21 +02:00
2024-09-06 14:10:00 +02:00
// Replace_RepositoryImportsURL - заменяет URL репозитория шаблона на URL репозитория сервиса
func Replace_RepositoryImportsURL(Text string) string {
2023-11-15 16:59:21 +02:00
Otvet := Text
if config.Settings.SERVICE_REPOSITORY_URL == "" {
return Otvet
}
if config.Settings.TEMPLATE_REPOSITORY_URL == "" {
return Otvet
}
if config.Settings.USE_DEFAULT_TEMPLATE == false {
return Otvet
}
//
TextFind := "import ("
pos1 := strings.Index(Otvet, TextFind)
if pos1 < 0 {
return Otvet
}
TEMPLATE_REPOSITORY_URL := config.Settings.TEMPLATE_REPOSITORY_URL
SERVICE_REPOSITORY_URL := config.Settings.SERVICE_REPOSITORY_URL
Otvet = strings.ReplaceAll(Otvet, TEMPLATE_REPOSITORY_URL, SERVICE_REPOSITORY_URL)
return Otvet
}
2023-11-16 17:07:59 +02:00
2024-09-06 14:10:00 +02:00
// Replace_ModelAndTableName - заменяет имя модели и имя таблицы в шаблоне на новые
func Replace_ModelAndTableName(TextModel string, Table1 *types.Table) string {
2023-11-16 17:07:59 +02:00
Otvet := TextModel
Otvet = strings.ReplaceAll(Otvet, config.Settings.TEXT_TEMPLATE_MODEL, Table1.NameGo)
Otvet = strings.ReplaceAll(Otvet, config.Settings.TEXT_TEMPLATE_TABLENAME, Table1.Name)
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_ModelComment - возвращает комментарий для модели
func Find_ModelComment(Table1 *types.Table) string {
2023-11-16 17:07:59 +02:00
Otvet := ""
TableName := Table1.Name
ModelName := Table1.NameGo
COMMENT_MODEL_STRUCT := config.Settings.COMMENT_MODEL_STRUCT
Otvet = `// ` + ModelName + ` - ` + COMMENT_MODEL_STRUCT + TableName + `: ` + Table1.Comment
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_ModelNameComment - возвращает комментарий для названия модели
func Find_ModelNameComment(ModelName string, Table1 *types.Table) string {
2023-11-16 17:07:59 +02:00
Otvet := ""
TableName := Table1.Name
//ModelName := Table1.NameGo
COMMENT_MODEL_STRUCT := config.Settings.COMMENT_MODEL_STRUCT
Otvet = `// ` + ModelName + ` - ` + COMMENT_MODEL_STRUCT + TableName + `: ` + Table1.Comment
return Otvet
}
2023-11-17 10:40:03 +02:00
2024-09-06 14:10:00 +02:00
// Replace_PackageName - заменяет имя пакета в шаблоне на новое
func Replace_PackageName(Text, PackageName string) string {
2023-11-17 10:40:03 +02:00
Otvet := Text
2023-11-17 12:23:15 +02:00
//найдём имя каталога, это будет имя пакета
PackageName = micro.DeleteEndSlash(PackageName)
PackageName = micro.LastWord(PackageName)
2023-11-17 10:40:03 +02:00
//
2023-11-17 12:23:15 +02:00
TextFind := "package "
2023-11-17 10:40:03 +02:00
pos1 := strings.Index(Otvet, TextFind)
if pos1 < 0 {
log.Error("not found word: package ")
return Otvet
}
s2 := Otvet[pos1:]
posEnd := strings.Index(s2, "\n")
if posEnd < 0 {
log.Error("not found word: \n")
return Otvet
}
2023-12-01 15:00:11 +02:00
Otvet = Otvet[:pos1+len(TextFind)] + PackageName + Otvet[pos1+posEnd:]
2023-11-17 10:40:03 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// Delete_EmptyImport - удаляет пустой импорт
func Delete_EmptyImport(Text string) string {
Otvet := Text
sFind := `import (
)
`
Otvet = strings.ReplaceAll(Otvet, sFind, "")
return Otvet
}
2023-12-01 15:00:11 +02:00
2024-09-06 14:10:00 +02:00
// DeleteFunc_Delete - удаляет функцию Delete()
func DeleteFunc_Delete(TextModel string, Table1 *types.Table) string {
2023-12-01 15:00:11 +02:00
Otvet := TextModel
//проверим есть ли колонка IsDeleted
2024-07-16 12:57:06 +02:00
if Has_Column_IsDeleted_Bool(Table1) == true {
2023-12-01 15:00:11 +02:00
return Otvet
}
Otvet = DeleteFuncFromComment(Otvet, "\n// Delete ")
Otvet = DeleteFuncFromFuncName(Otvet, "Delete")
return Otvet
}
2024-09-06 14:10:00 +02:00
// DeleteFunc_Restore - удаляет функцию Restore()
func DeleteFunc_Restore(TextModel string, Table1 *types.Table) string {
2023-12-01 15:00:11 +02:00
Otvet := TextModel
//проверим есть ли колонка IsDeleted
2024-07-16 12:57:06 +02:00
if Has_Column_IsDeleted_Bool(Table1) == true && config.Settings.HAS_IS_DELETED == true {
2023-12-01 15:00:11 +02:00
return Otvet
}
Otvet = DeleteFuncFromComment(Otvet, "\n// Restore ")
Otvet = DeleteFuncFromFuncName(Otvet, "Restore")
return Otvet
}
2024-09-06 14:10:00 +02:00
// DeleteFunc_Find_byExtID - удаляет функцию Find_ByExtID()
func DeleteFunc_Find_byExtID(TextModel string, Table1 *types.Table) string {
2023-12-01 15:00:11 +02:00
Otvet := TextModel
//проверка есть ли колонки ExtID и ConnectionID
2024-07-16 12:57:06 +02:00
if Has_Column_ExtID_ConnectionID_Int64(Table1) == true {
2023-12-01 15:00:11 +02:00
return Otvet
}
Otvet = DeleteFuncFromComment(Otvet, "\n// Find_ByExtID ")
Otvet = DeleteFuncFromFuncName(Otvet, "Find_ByExtID")
return Otvet
}
2024-09-06 14:10:00 +02:00
// Delete_EmptyLines - удаляет пустые строки
func Delete_EmptyLines(Text string) string {
2024-01-15 12:19:27 +02:00
Otvet := Text
Otvet = strings.ReplaceAll(Otvet, "\n\n\n", "\n\n")
Otvet = strings.ReplaceAll(Otvet, "\n//\n\n", "\n\n")
Otvet = strings.ReplaceAll(Otvet, "\n\t//\n\n", "\n\n")
//Otvet = strings.ReplaceAll(Otvet, "\r\r", "\r")
//Otvet = strings.ReplaceAll(Otvet, "\r\n", "\n")
//Otvet = strings.ReplaceAll(Otvet, "}\n\n", "}\n")
2024-01-15 12:19:27 +02:00
pos1 := strings.Index(Otvet, "\n\n\n")
if pos1 >= 0 {
2024-09-06 14:10:00 +02:00
Otvet = Delete_EmptyLines(Otvet)
2024-01-15 12:19:27 +02:00
}
//удалим последние 2 пустые строки
HasSuffix := strings.HasSuffix(Otvet, "\n\n")
if HasSuffix == true {
Otvet = Otvet[:len(Otvet)-1]
}
2024-01-15 12:19:27 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// Delete_LastUnderline - удаляет последний символ подчёркивания
func Delete_LastUnderline(s string) string {
Otvet := s
if s == "" {
return Otvet
}
Otvet = strings.TrimSuffix(Otvet, "_")
return Otvet
}
2024-09-06 14:10:00 +02:00
// Find_LastGoodPos - возвращает позицию последнего нахождения, с новой строки
func Find_LastGoodPos(s, TextFind string) int {
Otvet := -1
pos1 := strings.LastIndex(s, TextFind)
if pos1 < 0 {
return Otvet
}
pos2 := strings.Index(s[pos1:], "\n")
if pos2 < 0 {
return Otvet
}
Otvet = pos1 + pos2 + 1
return Otvet
}
// AddInterfaceFunction - добавляет функцию в интерфейс
func AddInterfaceFunction(s, TextAdd string) string {
Otvet := s
//Проверим такая функция уже есть
pos1 := strings.Index(Otvet, TextAdd)
if pos1 >= 0 {
return Otvet
}
//найдём начало интефейса
sFind := " interface {"
2024-09-06 14:10:00 +02:00
pos1 = Find_LastGoodPos(Otvet, sFind)
if pos1 < 0 {
2024-09-06 14:10:00 +02:00
log.Error("Find_LastGoodPos() error: not found: ", sFind)
return Otvet
}
s2 := Otvet[pos1:]
pos2 := strings.Index(s2, "\n}")
if pos2 < 0 {
2024-09-06 14:10:00 +02:00
log.Error("Find_LastGoodPos() error: not found: \\n")
return Otvet
}
PosStart := pos1 + pos2
Otvet = Otvet[:PosStart] + TextAdd + Otvet[PosStart:]
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindText_ProtobufRequest - возвращает "RequestID" и "ID" - имя message из .proto, в зависимости от типа, а также название поля
func FindText_ProtobufRequest(Table1 *types.Table) (OtvetRequestType string, OtvetRequestName string) {
2024-06-03 16:58:28 +02:00
if Table1.PrimaryKeyColumnsCount == 1 {
2024-09-06 14:10:00 +02:00
OtvetRequestType, OtvetRequestName = FindText_ProtobufRequest1(Table1)
2024-06-03 16:58:28 +02:00
} else {
2024-09-06 14:10:00 +02:00
OtvetRequestType = FindText_ProtobufRequest_ManyPK(Table1)
2024-06-03 16:58:28 +02:00
}
return OtvetRequestType, OtvetRequestName
}
2024-09-06 14:10:00 +02:00
// FindText_ProtobufRequest1 - возвращает "RequestID" и "ID" - имя message из .proto, в зависимости от типа, а также название поля
func FindText_ProtobufRequest1(Table1 *types.Table) (OtvetRequestType string, OtvetRequestName string) {
2024-06-03 16:58:28 +02:00
//OtvetRequestType := ""
//OtvetRequestName := ""
2024-05-13 17:07:32 +02:00
TextRequest := "Request_"
2024-04-24 14:26:19 +02:00
2024-09-06 14:10:00 +02:00
PrimaryKeyColumn := Find_PrimaryKeyColumn(Table1)
2024-05-02 15:20:22 +02:00
if PrimaryKeyColumn == nil {
return "", ""
}
2024-04-24 14:26:19 +02:00
PrimaryKeyTypeGo := PrimaryKeyColumn.TypeGo
2024-05-13 17:07:32 +02:00
//switch PrimaryKeyTypeGo {
//case "string", "uuid.UUID":
// TextRequest = "Request"
//}
2024-06-03 16:58:28 +02:00
OtvetRequestName = PrimaryKeyColumn.TypeGo
2024-04-24 14:26:19 +02:00
2024-06-03 16:58:28 +02:00
OtvetRequestName = micro.StringFromUpperCase(OtvetRequestName)
OtvetRequestType = TextRequest + OtvetRequestName
2024-05-13 17:07:32 +02:00
switch PrimaryKeyTypeGo {
case "string", "uuid.UUID":
2024-06-03 16:58:28 +02:00
OtvetRequestName = "String_1"
OtvetRequestType = TextRequest + "String"
2024-04-24 14:26:19 +02:00
case "time.Time":
2024-06-03 16:58:28 +02:00
OtvetRequestName = "Date"
OtvetRequestType = TextRequest + "Date"
}
2024-04-24 14:26:19 +02:00
2024-06-03 16:58:28 +02:00
return OtvetRequestType, OtvetRequestName
2024-04-24 14:26:19 +02:00
}
2024-09-06 14:10:00 +02:00
// FindText_ProtobufRequest_ManyPK - возвращает "RequestID" и "ID" - имя message из .proto, в зависимости от типа, а также название поля
func FindText_ProtobufRequest_ManyPK(Table1 *types.Table) string {
2024-06-03 16:58:28 +02:00
Otvet := "Request"
2024-09-06 14:10:00 +02:00
MassPrimaryKeyColumns := Find_PrimaryKeyColumns(Table1)
2024-06-03 16:58:28 +02:00
if len(MassPrimaryKeyColumns) == 0 {
return Otvet
}
2024-09-06 14:10:00 +02:00
Otvet = FindText_ProtobufRequest_Column_ManyPK(Table1, MassPrimaryKeyColumns[0])
2024-06-04 13:39:37 +02:00
//for _, ColumnPK1 := range MassPrimaryKeyColumns {
2024-09-06 14:10:00 +02:00
// Type1, _, _, _ := FindText_ProtobufRequest_ID_Type(Table1, ColumnPK1, "")
2024-06-04 13:39:37 +02:00
// Otvet = Otvet + Type1
//}
2024-06-03 16:58:28 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindText_ProtobufRequest_Column_ManyPK - возвращает "RequestID" и "ID" - имя message из .proto, в зависимости от типа, а также название поля
func FindText_ProtobufRequest_Column_ManyPK(Table1 *types.Table, Column1 *types.Column) string {
2024-06-03 16:58:28 +02:00
Otvet := "Request"
2024-09-06 14:10:00 +02:00
MassPrimaryKeyColumns := Find_PrimaryKeyColumns(Table1)
2024-06-03 16:58:28 +02:00
if len(MassPrimaryKeyColumns) == 0 {
return Otvet
}
IsPrimaryKey := false
for _, ColumnPK1 := range MassPrimaryKeyColumns {
if Column1 == ColumnPK1 {
IsPrimaryKey = true
}
2024-09-06 14:10:00 +02:00
Type1, _, _, _ := FindText_ProtobufRequest_ID_Type(Table1, ColumnPK1, "")
2024-06-03 16:58:28 +02:00
Otvet = Otvet + Type1
}
if IsPrimaryKey == false {
2024-09-06 14:10:00 +02:00
Type1, _, _, _ := FindText_ProtobufRequest_ID_Type(Table1, Column1, "")
2024-06-03 16:58:28 +02:00
Otvet = Otvet + Type1
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindText_ProtobufRequest_ID_Type - возвращает имя message из .proto для двух параметров ID + Type,в зависимости от типа, а также название поля
// возвращает:
2024-06-03 16:58:28 +02:00
// RequestName - имя message из .proto
// TextRequestFieldName - название поля в Request
// TextRequestFieldGolang - название поля в Request с преобразованием в тип гоу
2024-04-08 16:42:13 +02:00
// TextGolangLine - замена всей строки в го
2024-09-06 14:10:00 +02:00
func FindText_ProtobufRequest_ID_Type(Table1 *types.Table, Column1 *types.Column, VariableName string) (RequestName string, RequestFieldName string, RequestFieldGolang string, GolangLine string) {
2024-06-03 16:58:28 +02:00
//RequestName := "RequestId"
//RequestFieldName := "ID"
//RequestFieldGolang := "ID"
//GolangLine := ""
TypeGo := Column1.TypeGo
TableName := Table1.Name
ColumnName := Column1.Name
2024-04-24 14:26:19 +02:00
//найдём тип колонки PrimaryKey
2024-09-06 14:10:00 +02:00
PrimaryKeyColumns := Find_PrimaryKeyColumns(Table1)
2024-06-03 16:58:28 +02:00
if len(PrimaryKeyColumns) == 0 {
2024-05-02 15:20:22 +02:00
return "", "", "", ""
}
2024-06-03 16:58:28 +02:00
isPrimaryKey := false
Number := 0
for _, ColumnPK1 := range PrimaryKeyColumns {
if Column1.TypeGo == ColumnPK1.TypeGo {
Number = Number + 1
} else if IsStringOrUUID(ColumnPK1.TypeGo) == true && IsStringOrUUID(Column1.TypeGo) == true {
Number = Number + 1
}
if ColumnPK1 == Column1 {
isPrimaryKey = true
break
}
}
if isPrimaryKey == false {
Number = Number + 1
}
sNumber := ""
if IsStringOrUUID(Column1.TypeGo) == true {
sNumber = strconv.Itoa(Number)
sNumber = "_" + sNumber
} else if Number != 1 {
sNumber = strconv.Itoa(Number)
sNumber = "_" + sNumber
}
2024-09-06 14:10:00 +02:00
//RequestName, _ = FindText_ProtobufRequest(Table1)
2024-04-24 14:26:19 +02:00
2024-04-26 15:45:09 +02:00
TextRequestProtoName := ""
2024-04-24 14:26:19 +02:00
//найдём строку по типу колонки
switch TypeGo {
case "int", "int64":
{
2024-04-26 15:45:09 +02:00
TextRequestProtoName = "Int64"
2024-06-03 16:58:28 +02:00
RequestFieldName = "Int64" + sNumber
RequestFieldGolang = VariableName + RequestFieldName
}
case "int32":
{
2024-05-13 17:07:32 +02:00
TextRequestProtoName = "Int32"
2024-06-03 16:58:28 +02:00
RequestFieldName = "Int32" + sNumber
RequestFieldGolang = VariableName + RequestFieldName
}
case "string":
{
2024-05-13 17:07:32 +02:00
TextRequestProtoName = "String"
2024-06-03 16:58:28 +02:00
RequestFieldName = "String" + sNumber
RequestFieldGolang = VariableName + RequestFieldName
}
2024-04-08 16:42:13 +02:00
case "uuid.UUID":
{
2024-05-13 17:07:32 +02:00
TextRequestProtoName = "String"
2024-06-03 16:58:28 +02:00
RequestFieldName = "String" + sNumber
2024-06-06 17:05:19 +02:00
GolangLine = Column1.NameGo + ", err := uuid.Parse(" + VariableName + "" + RequestFieldName + ")" + `
2024-06-03 16:58:28 +02:00
if Request.` + RequestFieldName + ` == "" {
2024-06-06 17:05:19 +02:00
` + Column1.NameGo + ` = uuid.Nil
2024-04-08 16:42:13 +02:00
err = nil
}
if err != nil {
return &Otvet, err
}
`
2024-06-03 16:58:28 +02:00
RequestFieldGolang = VariableName + RequestFieldName
2024-04-08 16:42:13 +02:00
}
case "time.Time":
{
2024-04-26 15:45:09 +02:00
TextRequestProtoName = "Date"
2024-06-03 16:58:28 +02:00
RequestFieldName = "Date" + sNumber
RequestFieldGolang = VariableName + RequestFieldName + ".AsTime()"
}
case "float32":
{
2024-04-26 15:45:09 +02:00
TextRequestProtoName = "Float32"
2024-06-03 16:58:28 +02:00
RequestFieldName = "Float32" + sNumber
RequestFieldGolang = VariableName + RequestFieldName
}
case "float64":
{
2024-04-26 15:45:09 +02:00
TextRequestProtoName = "Float64"
2024-06-03 16:58:28 +02:00
RequestFieldName = "Float64" + sNumber
RequestFieldGolang = VariableName + RequestFieldName
}
case "bool":
{
2024-04-26 15:45:09 +02:00
TextRequestProtoName = "Bool"
2024-06-03 16:58:28 +02:00
RequestFieldName = "Bool" + sNumber
RequestFieldGolang = VariableName + RequestFieldName
}
}
TextConvert, ok := types.MapConvertID[TableName+"."+ColumnName]
if ok == true {
2024-06-03 16:58:28 +02:00
RequestFieldGolang = TextConvert + "(" + VariableName + RequestFieldName + ")"
}
2024-06-03 16:58:28 +02:00
RequestName = RequestName + "_" + TextRequestProtoName
return RequestName, RequestFieldName, RequestFieldGolang, GolangLine
}
2024-04-26 15:45:09 +02:00
2024-06-03 16:58:28 +02:00
// IsStringOrUUID - проверяет является ли тип String или UUID
func IsStringOrUUID(TypeGo string) bool {
if TypeGo == "string" || TypeGo == "uuid.UUID" {
return true
}
return false
}
2024-09-06 14:10:00 +02:00
// Convert_IDToAlias - заменяет "ID" на "alias.Name(ID)"
func Convert_IDToAlias(Table1 *types.Table, Column1 *types.Column, VariableName string) string {
Otvet := VariableName
TableName := Table1.Name
TextConvert, ok := types.MapConvertID[TableName+"."+Column1.Name]
if ok == false {
return Otvet
}
if TextConvert[:6] != "alias." {
return Otvet
}
Otvet = TextConvert + "(" + VariableName + ")"
return Otvet
}
2024-09-06 14:10:00 +02:00
// Convert_ColumnToAlias - заменяет "Otvet.ID = ID" на "Otvet.ID = alias.Name(ID)"
func Convert_ColumnToAlias(Table1 *types.Table, Column1 *types.Column, VariableName string) string {
2024-06-06 17:05:19 +02:00
Otvet := ""
Dot := ""
if VariableName != "" {
Dot = "."
}
Otvet = VariableName + Dot + Column1.NameGo
2024-06-04 15:53:15 +02:00
TableName := Table1.Name
IDName := Column1.Name
TextConvert, ok := types.MapConvertID[TableName+"."+IDName]
if ok == false {
return Otvet
}
if TextConvert[:6] != "alias." {
return Otvet
}
2024-06-06 17:05:19 +02:00
Otvet = TextConvert + "(" + VariableName + Dot + Column1.NameGo + ")"
2024-06-04 15:53:15 +02:00
//добавим испорт
2024-09-06 14:10:00 +02:00
//Text = CheckAndAdd_ImportAlias(Text)
2024-06-04 15:53:15 +02:00
return Otvet
}
// DeleteCommentFromString - удаляет комментарий из строки //
func DeleteCommentFromString(TextFrom string) string {
Otvet := TextFrom
pos1 := strings.Index(Otvet, "//")
if pos1 < 0 {
return Otvet
}
Otvet = Otvet[:pos1]
return Otvet
}
2024-09-06 14:10:00 +02:00
// Convert_GolangVariableToProtobufVariable - возвращает имя переменной + имя колонки, преобразованное в тип protobuf
func Convert_GolangVariableToProtobufVariable(Table1 *types.Table, Column1 *types.Column, VariableName string) string {
2024-04-27 16:23:34 +02:00
Otvet := ""
if Column1 == nil {
return Otvet
}
2024-06-06 17:05:19 +02:00
Dot := ""
if VariableName != "" {
Dot = "."
}
Otvet = VariableName + Dot + Column1.NameGo
2024-08-21 14:17:40 +02:00
//найдём alias
_, HasAlias := types.MapConvertID[Table1.Name+"."+Column1.Name]
//преобразуем alias в обычный тип, и дату в timestamp
2024-08-21 14:17:40 +02:00
if HasAlias == true {
switch Column1.TypeGo {
case "time.Time":
Otvet = "timestamppb.New(" + VariableName + Dot + Column1.NameGo + ")"
case "string":
Otvet = "string(" + VariableName + Dot + Column1.NameGo + ")"
case "int64":
Otvet = "int64(" + VariableName + Dot + Column1.NameGo + ")"
case "int32":
Otvet = "int32(" + VariableName + Dot + Column1.NameGo + ")"
case "bool":
Otvet = "bool(" + VariableName + Dot + Column1.NameGo + ")"
case "float32":
Otvet = "float32(" + VariableName + Dot + Column1.NameGo + ")"
case "float64":
Otvet = "float64(" + VariableName + Dot + Column1.NameGo + ")"
case "uuid.UUID":
Otvet = VariableName + Dot + Column1.NameGo + ".String()"
}
} else {
switch Column1.TypeGo {
case "time.Time":
Otvet = "timestamppb.New(" + VariableName + Dot + Column1.NameGo + ")"
case "string":
Otvet = VariableName + Dot + Column1.NameGo
case "int64":
Otvet = VariableName + Dot + Column1.NameGo
case "int32":
Otvet = VariableName + Dot + Column1.NameGo
case "bool":
Otvet = VariableName + Dot + Column1.NameGo
case "float32":
Otvet = VariableName + Dot + Column1.NameGo
case "float64":
Otvet = VariableName + Dot + Column1.NameGo
case "uuid.UUID":
Otvet = VariableName + Dot + Column1.NameGo + ".String()"
}
}
return Otvet
}
2024-08-15 14:16:34 +02:00
//// ConvertVariableToProtobufType - возвращает имя переменной + имя колонки, преобразованное в тип protobuf
//func ConvertVariableToProtobufType(Column1 *types.Column, VariableName string) string {
// Otvet := ""
//
// if Column1 == nil {
// return Otvet
// }
//
// Otvet = VariableName
//
// switch Column1.TypeGo {
// case "time.Time":
// Otvet = "timestamppb.New(" + VariableName + ")"
// case "uuid.UUID":
// Otvet = VariableName + ".String()"
// }
//
// return Otvet
//}
2024-09-06 14:10:00 +02:00
// Convert_ProtobufVariableToGolangVariable - возвращает имя переменной + имя колонки, преобразованное в тип golang из protobuf
func Convert_ProtobufVariableToGolangVariable(Table1 *types.Table, Column1 *types.Column, VariableName string) (VariableColumn string, GolangCode string) {
RequestColumnName := Find_RequestFieldName(Table1, Column1)
VariableColumn = VariableName + RequestColumnName
//time.Time в timestamppb
switch Column1.TypeGo {
case "time.Time":
{
VariableColumn = VariableName + RequestColumnName + ".AsTime()"
return VariableColumn, GolangCode
}
case "uuid.UUID":
{
VariableColumn = "uuid.FromBytes([]byte(" + VariableName + RequestColumnName + "))"
GolangCode = Column1.NameGo + `, err := uuid.FromBytes([]byte(Request.` + RequestColumnName + `))
if err != nil {
return &Otvet, err
}
`
return VariableColumn, GolangCode
}
}
return VariableColumn, GolangCode
}
2024-09-06 14:10:00 +02:00
// Convert_ProtobufTypeToGolangAlias - возвращает имя переменной + имя колонки, преобразованное в тип golang(alias) из protobuf
func Convert_ProtobufTypeToGolangAlias(Table1 *types.Table, Column1 *types.Column, VariableName string) (VariableColumn string, GolangCode string) {
RequestColumnName := Find_RequestFieldName(Table1, Column1)
VariableColumn = VariableName + RequestColumnName
//GolangCode := ""
TableName := Table1.Name
IDName := Column1.Name
//alias в Int64
TextConvert, ok := types.MapConvertID[TableName+"."+IDName]
if ok == true {
VariableColumn = TextConvert + "(" + VariableName + RequestColumnName + ")"
2024-06-06 17:05:19 +02:00
return VariableColumn, GolangCode
}
//time.Time в timestamppb
2024-04-08 16:42:13 +02:00
switch Column1.TypeGo {
case "time.Time":
{
VariableColumn = VariableName + RequestColumnName + ".AsTime()"
2024-06-06 17:05:19 +02:00
return VariableColumn, GolangCode
2024-04-08 16:42:13 +02:00
}
case "uuid.UUID":
{
2024-06-06 17:05:19 +02:00
VariableColumn = "uuid.FromBytes([]byte(" + VariableName + RequestColumnName + "))"
GolangCode = Column1.NameGo + `, err := uuid.FromBytes([]byte(Request.` + RequestColumnName + `))
2024-04-24 16:07:09 +02:00
if err != nil {
return &Otvet, err
}
`
2024-06-06 17:05:19 +02:00
return VariableColumn, GolangCode
2024-04-08 16:42:13 +02:00
}
}
2024-06-06 17:05:19 +02:00
return VariableColumn, GolangCode
}
2024-09-06 14:10:00 +02:00
// FindText_EqualEmpty - находит текст сравнение с пустым значением
func FindText_EqualEmpty(Column1 *types.Column, VariableName string) string {
Otvet := ""
2024-09-06 14:10:00 +02:00
DefaultValue := FindText_DefaultValue(Column1.TypeGo)
Otvet = VariableName + " == " + DefaultValue
if DefaultValue == "time.Time{}" {
Otvet = VariableName + ".IsZero() == true"
}
return Otvet
}
//// AddSkipNowEveryFunc - добавляет функцию SkipNow() для каждой тестовой функции
//func AddSkipNowEveryFunc(Text string) string {
// Otvet := ""
//
// sFind := "\nfunc "
// Mass := make([]string, 0)
// Mass = strings.Split(Text, sFind)
// for _, v := range Mass {
// pos1 := strings.Index(v, sFind)
// if pos1 < 0 {
// continue
// }
//
// s2 := Text[pos1:]
// pos2 := strings.Index(s2, "\n")
// if pos2 < 0 {
// continue
// }
// v = v[:pos1+pos2] + "\n\tt.SkipNow() //нет строк в БД \n" + v[pos1+pos2:]
// Otvet = Otvet + v
// }
//
// return Otvet
//}
2024-03-06 14:37:36 +02:00
// FilenameWithoutLastUnderline - удаляет последний символ, если он = "_"
func FilenameWithoutLastUnderline(Filename string) string {
Otvet := Filename
if strings.HasSuffix(Filename, "_") == true {
Otvet = Filename[:len(Filename)-1]
}
return Otvet
}
2024-03-21 10:25:12 +02:00
// FillVariable - заменяет переменную в тексте
func FillVariable(Text, VariableName, Value string) string {
Otvet := Text
sFind := VariableName + " = "
pos1 := strings.Index(Otvet, sFind)
if pos1 < 0 {
return Otvet
}
s2 := Text[pos1:]
posEnd := strings.Index(s2, "\n")
if posEnd < 0 {
return Otvet
}
Otvet = Otvet[:pos1] + VariableName + " = " + Value + Otvet[pos1+posEnd:]
return Otvet
}
2024-04-04 16:59:20 +02:00
// Is_UUID_Type - проверяет является ли тип UUID
func Is_UUID_Type(TypeGo string) bool {
Otvet := TypeGo == "uuid.UUID" || TypeGo == "uuid.NullUUID"
return Otvet
}
2024-04-09 17:04:05 +02:00
2024-04-24 14:26:19 +02:00
// Replace_Postgres_ID_Test - заменяет текст "const Postgres_ID_Test = 0" на нужный ИД
func Replace_Postgres_ID_Test(Text string, Table1 *types.Table) string {
Otvet := Text
2024-06-20 17:14:47 +02:00
Otvet = Replace_Postgres_ID_Test_ManyPK(Otvet, Table1)
2024-05-02 15:20:22 +02:00
2024-05-30 10:58:08 +02:00
return Otvet
}
// Replace_Postgres_ID_Test_ManyPK - заменяет текст "const Postgres_ID_Test = 0" на нужные ИД, для много колонок PrimaryKey
func Replace_Postgres_ID_Test_ManyPK(Text string, Table1 *types.Table) string {
Otvet := Text
2024-09-06 14:10:00 +02:00
MassPK := Find_PrimaryKeyColumns(Table1)
if len(MassPK) == 0 {
return Otvet
}
2024-05-30 10:58:08 +02:00
//заменим const Postgres_ID_Test = 0
TextFind := "const Postgres_ID_Test = 0\n"
2024-05-30 10:58:08 +02:00
TextNew := ""
for _, PrimaryKey1 := range MassPK {
TextNew = TextNew + Replace_Postgres_ID_Test1(TextFind, Table1, PrimaryKey1)
}
Otvet = strings.ReplaceAll(Otvet, TextFind, TextNew)
//заменим Otvet.ID = Postgres_ID_Test
TextFind = "\tOtvet.ID = Postgres_ID_Test\n"
TextNew = ""
for _, PrimaryKey1 := range MassPK {
2024-09-06 14:10:00 +02:00
Text1 := FindText_VariableEqual_ColumnName_Test(PrimaryKey1, "Otvet."+PrimaryKey1.NameGo)
TextNew = TextNew + "\t" + Text1 + "\n"
}
Otvet = strings.ReplaceAll(Otvet, TextFind, TextNew)
//заменим m.ID = Postgres_ID_Test
TextFind = "\tm.ID = Postgres_ID_Test\n"
TextNew = ""
for _, PrimaryKey1 := range MassPK {
2024-09-06 14:10:00 +02:00
Text1 := FindText_VariableEqual_ColumnName_Test(PrimaryKey1, "m."+PrimaryKey1.NameGo)
TextNew = TextNew + "\t" + Text1 + "\n"
}
Otvet = strings.ReplaceAll(Otvet, TextFind, TextNew)
//заменим m1.ID = Postgres_ID_Test
TextFind = "\tm1.ID = Postgres_ID_Test\n"
TextNew = ""
for _, PrimaryKey1 := range MassPK {
2024-09-06 14:10:00 +02:00
Text1 := FindText_VariableEqual_ColumnName_Test(PrimaryKey1, "m1."+PrimaryKey1.NameGo)
TextNew = TextNew + "\t" + Text1 + "\n"
}
Otvet = strings.ReplaceAll(Otvet, TextFind, TextNew)
//заменим ReadFromCache(Postgres_ID_Test)
TextFind = "ReadFromCache(Postgres_ID_Test)"
TextNew = "ReadFromCache("
Comma := ""
for _, PrimaryKey1 := range MassPK {
2024-09-06 14:10:00 +02:00
Name := FindText_ColumnNameTest(PrimaryKey1)
TextNew = TextNew + Comma + Name
Comma = ", "
2024-05-30 10:58:08 +02:00
}
TextNew = TextNew + ")"
2024-05-30 10:58:08 +02:00
Otvet = strings.ReplaceAll(Otvet, TextFind, TextNew)
// //удалим лишний код
// TextDelete := ` if Otvet.ID != Postgres_ID_Test {
// t.Error(TableName + "_test.TestRead() error ID != ", Postgres_ID_Test)
// } else {
// t.Log(TableName+"_test.TestRead() Otvet: ", Otvet.ID)
// }
//`
// Otvet = strings.ReplaceAll(Otvet, TextDelete, "")
//заменим ненужные Otvet.ID на Otvet.Name
PrimaryKey1 := MassPK[0]
Otvet = strings.ReplaceAll(Otvet, " Otvet.ID ", " Otvet."+PrimaryKey1.NameGo+" ")
Otvet = strings.ReplaceAll(Otvet, " Otvet.ID)", " Otvet."+PrimaryKey1.NameGo+")")
2024-09-06 14:10:00 +02:00
Name := FindText_ColumnNameTest(PrimaryKey1)
Otvet = strings.ReplaceAll(Otvet, "Postgres_ID_Test", Name)
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindText_ColumnNameTest - находит имя переменной для тестов
func FindText_ColumnNameTest(Column1 *types.Column) string {
Otvet := ""
Otvet = strings.ToUpper(Column1.NameGo) + "_Test"
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindText_NameTest_ManyPK - находит текст "ID, ID" для тестов
func FindText_NameTest_ManyPK(Table1 *types.Table) string {
Otvet := ""
2024-09-06 14:10:00 +02:00
MassPK := Find_PrimaryKeyColumns(Table1)
if len(MassPK) == 0 {
return Otvet
}
for _, PrimaryKey1 := range MassPK {
2024-09-06 14:10:00 +02:00
Otvet = Otvet + FindText_ColumnNameTest(PrimaryKey1) + ", "
}
Otvet = strings.TrimSuffix(Otvet, ", ")
2024-05-30 10:58:08 +02:00
return Otvet
}
// Replace_Postgres_ID_Test1 - заменяет текст "const Postgres_ID_Test = 0" на нужный ИД
func Replace_Postgres_ID_Test1(Text string, Table1 *types.Table, PrimaryKeyColumn *types.Column) string {
Otvet := Text
TextFind := "const Postgres_ID_Test = 0"
2024-05-29 13:18:58 +02:00
IDMinimum := PrimaryKeyColumn.IDMinimum
2024-05-02 16:56:29 +02:00
if IDMinimum == "" {
2024-09-06 14:10:00 +02:00
IDMinimum = FindText_DefaultValue(PrimaryKeyColumn.TypeGo)
2024-05-02 16:56:29 +02:00
}
2024-04-24 14:26:19 +02:00
2024-09-06 14:10:00 +02:00
Name := FindText_ColumnNameTest(PrimaryKeyColumn)
sIDMinimum := FindText_IDMinimum(PrimaryKeyColumn)
2024-05-13 17:07:32 +02:00
switch PrimaryKeyColumn.TypeGo {
case "uuid.UUID":
{
2024-05-29 13:18:58 +02:00
if PrimaryKeyColumn.IDMinimum == "" {
Otvet = strings.ReplaceAll(Otvet, TextFind, `var `+Name+` = `+sIDMinimum)
2024-05-13 17:07:32 +02:00
} else {
Otvet = strings.ReplaceAll(Otvet, TextFind, `var `+Name+`, _ = `+sIDMinimum)
2024-05-13 17:07:32 +02:00
}
}
case "string":
{
Otvet = strings.ReplaceAll(Otvet, TextFind, `const `+Name+` = `+sIDMinimum+``)
}
default:
{
Otvet = strings.ReplaceAll(Otvet, TextFind, `const `+Name+` = `+sIDMinimum)
}
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindText_VariableEqual_ColumnName_Test - возвращает текст для присваивания переменной IDMinimum
func FindText_VariableEqual_ColumnName_Test(Column1 *types.Column, VariableName string) string {
Otvet := ""
2024-09-06 14:10:00 +02:00
//TextValue := FindText_IDMinimum(Column1)
TextValue := FindText_ColumnNameTest(Column1)
IDMinimum := Column1.IDMinimum
switch Column1.TypeGo {
case "uuid.UUID":
{
if IDMinimum == "" {
Otvet = VariableName + " = " + "uuid.Nil"
} else {
Otvet = VariableName + ", _ = " + `uuid.Parse("` + IDMinimum + `")`
}
2024-05-13 17:07:32 +02:00
}
default:
{
Otvet = VariableName + " = " + TextValue
}
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindText_IDMinimum - возвращает текст для IDMinimum, в зависимости от типа
func FindText_IDMinimum(Column1 *types.Column) string {
2024-06-03 09:44:37 +02:00
Otvet := ""
IDMinimum := Column1.IDMinimum
2024-06-03 09:44:37 +02:00
if IDMinimum == "" {
2024-09-06 14:10:00 +02:00
IDMinimum = FindText_DefaultValue(Column1.TypeGo)
2024-06-03 09:44:37 +02:00
}
switch Column1.TypeGo {
case "uuid.UUID":
{
2024-06-04 17:03:27 +02:00
if Column1.IDMinimum == "" {
Otvet = "uuid.Nil"
} else {
Otvet = `uuid.Parse("` + IDMinimum + `")`
}
}
case "string":
{
Otvet = `"` + IDMinimum + `"`
2024-04-24 14:26:19 +02:00
}
2024-06-03 09:44:37 +02:00
default:
{
Otvet = `` + IDMinimum + ``
}
2024-04-24 14:26:19 +02:00
}
return Otvet
}
2024-06-03 16:58:28 +02:00
// Replace_Model_ID_Test1 - заменяет текст "const LawsuitStatusType_ID_Test = 0" на нужный ИД
func Replace_Model_ID_Test1(Text string, Table1 *types.Table, Column1 *types.Column) string {
Otvet := Text
2024-04-24 16:07:09 +02:00
TEXT_TEMPLATE_MODEL := config.Settings.TEXT_TEMPLATE_MODEL
//ModelName := Table1.NameGo
2024-04-24 16:07:09 +02:00
TextFind := "const " + TEXT_TEMPLATE_MODEL + "_ID_Test = 0"
2024-05-02 15:20:22 +02:00
2024-06-03 16:58:28 +02:00
IDMinimum := Column1.IDMinimum
2024-05-02 16:56:29 +02:00
if IDMinimum == "" {
2024-09-06 14:10:00 +02:00
IDMinimum = FindText_DefaultValue(Column1.TypeGo)
2024-05-02 16:56:29 +02:00
}
DefaultModelName := config.Settings.TEXT_TEMPLATE_MODEL
2024-04-24 16:07:09 +02:00
2024-06-03 09:44:37 +02:00
ModelName := Table1.NameGo
2024-09-06 14:10:00 +02:00
Name := FindText_ColumnNameTest(Column1)
2024-06-03 16:58:28 +02:00
switch Column1.TypeGo {
2024-05-13 17:07:32 +02:00
case "uuid.UUID":
{
2024-06-03 16:58:28 +02:00
if Column1.IDMinimum == "" {
2024-06-03 09:44:37 +02:00
Otvet = strings.ReplaceAll(Otvet, TextFind, `var `+ModelName+"_"+Name+` = `+IDMinimum+``)
2024-05-13 17:07:32 +02:00
} else {
2024-06-03 09:44:37 +02:00
Otvet = strings.ReplaceAll(Otvet, TextFind, `var `+ModelName+"_"+Name+`, _ = uuid.Parse("`+IDMinimum+`")`)
2024-05-13 17:07:32 +02:00
}
2024-06-03 09:44:37 +02:00
Otvet = strings.ReplaceAll(Otvet, ``+DefaultModelName+`_ID_Test`, ``+ModelName+`_`+Name+`.String()`)
2024-05-13 17:07:32 +02:00
}
case "string":
{
2024-06-03 09:44:37 +02:00
Otvet = strings.ReplaceAll(Otvet, TextFind, `const `+ModelName+`_`+Name+` = "`+IDMinimum+`"`)
2024-05-13 17:07:32 +02:00
}
default:
{
2024-06-03 09:44:37 +02:00
Otvet = strings.ReplaceAll(Otvet, TextFind, `const `+ModelName+`_`+Name+` = `+IDMinimum)
2024-04-24 16:07:09 +02:00
}
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// ReplaceText_RequestID_PrimaryKey - заменяет RequestId{} на RequestString{}
func ReplaceText_RequestID_PrimaryKey(Text string, Table1 *types.Table) string {
2024-04-24 14:26:19 +02:00
Otvet := Text
2024-09-11 16:49:55 +02:00
Otvet = ReplaceText_RequestID_PrimaryKey_ManyPK(Otvet, Table1)
2024-04-24 16:07:09 +02:00
return Otvet
}
2024-09-11 16:49:55 +02:00
//// ReplaceText_RequestID_PrimaryKey1 - заменяет RequestId{} на RequestString{}
//func ReplaceText_RequestID_PrimaryKey1(Text string, Table1 *types.Table, VariableName string) string {
// Otvet := Text
//
// ColumnPK := Find_PrimaryKeyColumn(Table1)
// if ColumnPK == nil {
// return Otvet
// }
//
// //TypeGo := ColumnPK.TypeGo
//
// TextRequestID, TextID := FindText_ProtobufRequest(Table1)
//
// _, GolangCode := Convert_ProtobufVariableToGolangVariable(Table1, ColumnPK, "Request.")
// if GolangCode != "" {
// Otvet = strings.ReplaceAll(Otvet, "ID := "+VariableName+".ID", GolangCode)
// Otvet = strings.ReplaceAll(Otvet, VariableName+".ID = ", VariableName+"."+TextID+" = ")
// }
//
// Otvet = strings.ReplaceAll(Otvet, "RequestId{}", TextRequestID+"{}")
// Otvet = strings.ReplaceAll(Otvet, "*grpc_proto.RequestId", "*grpc_proto."+TextRequestID)
// //Otvet = strings.ReplaceAll(Otvet, "Request.ID", "Request."+TextID)
// Otvet = strings.ReplaceAll(Otvet, "ID := "+VariableName+".ID", ColumnPK.NameGo+" := "+VariableName+"."+TextID)
// Otvet = strings.ReplaceAll(Otvet, VariableName+".ID", VariableName+"."+TextID)
//
// return Otvet
//}
2024-04-24 14:26:19 +02:00
2024-09-06 14:10:00 +02:00
// ReplaceText_RequestID_PrimaryKey_ManyPK - заменяет RequestId{} на RequestString{}
2024-09-11 16:49:55 +02:00
func ReplaceText_RequestID_PrimaryKey_ManyPK(Text string, Table1 *types.Table) string {
2024-06-03 16:58:28 +02:00
Otvet := Text
2024-09-06 14:10:00 +02:00
TextRequestID := FindText_ProtobufRequest_ManyPK(Table1)
2024-06-03 16:58:28 +02:00
Otvet = strings.ReplaceAll(Otvet, "RequestId{}", TextRequestID+"{}")
Otvet = strings.ReplaceAll(Otvet, "*grpc_proto.RequestId", "*grpc_proto."+TextRequestID)
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindText_IDMany - находит все PrimaryKey строкой
func FindText_IDMany(Table1 *types.Table) (TextNames, TextNamesTypes, TextProtoNames string) {
2024-05-24 15:39:16 +02:00
//TextProtoNames := ""
//TextNamesTypes := ""
//TextNames := ""
2024-09-06 14:10:00 +02:00
TextNames, TextNamesTypes, TextProtoNames = FindText_ID_VariableName_Many(Table1, "")
2024-05-28 12:39:36 +02:00
//Comma := ""
2024-09-06 14:10:00 +02:00
//MassPrimaryKey := Find_PrimaryKeyColumns(Table1)
2024-05-28 12:39:36 +02:00
//for _, PrimaryKey1 := range MassPrimaryKey {
2024-09-06 14:10:00 +02:00
// OtvetColumnName := Convert_GolangVariableToProtobufVariable(Table1, PrimaryKey1, "")
2024-05-28 12:39:36 +02:00
// if OtvetColumnName == "" {
// continue
// }
//
// TextProtoNames = TextProtoNames + Comma + OtvetColumnName
// TextNamesTypes = TextNamesTypes + Comma + PrimaryKey1.NameGo + " " + PrimaryKey1.TypeGo
// TextNames = TextNames + Comma + PrimaryKey1.NameGo
//
// Comma = ", "
//}
return
}
2024-09-06 14:10:00 +02:00
// FindText_ID_VariableName_Many - находит все PrimaryKey строкой
func FindText_ID_VariableName_Many(Table1 *types.Table, VariableName string) (TextNames, TextNamesTypes, TextProtoNames string) {
2024-05-28 12:39:36 +02:00
//TextProtoNames := ""
//TextNamesTypes := ""
//TextNames := ""
Dot := ""
if VariableName != "" {
Dot = "."
}
2024-05-24 15:39:16 +02:00
Comma := ""
2024-09-06 14:10:00 +02:00
MassPrimaryKey := Find_PrimaryKeyColumns(Table1)
2024-05-24 15:39:16 +02:00
for _, PrimaryKey1 := range MassPrimaryKey {
2024-09-06 14:10:00 +02:00
OtvetColumnName := Convert_GolangVariableToProtobufVariable(Table1, PrimaryKey1, "")
2024-05-24 15:39:16 +02:00
if OtvetColumnName == "" {
continue
}
TextProtoNames = TextProtoNames + Comma + OtvetColumnName
TextNamesTypes = TextNamesTypes + Comma + PrimaryKey1.NameGo + " " + PrimaryKey1.TypeGo
2024-05-28 12:39:36 +02:00
TextNames = TextNames + Comma + VariableName + Dot + PrimaryKey1.NameGo
2024-05-24 15:39:16 +02:00
Comma = ", "
}
return
}
2024-09-11 16:49:55 +02:00
//// Replace_OtvetIDEqual1 - заменяет Otvet.ID = -1
//func Replace_OtvetIDEqual1(Text string, Table1 *types.Table) string {
// Otvet := Text
//
// Otvet = Replace_OtvetIDEqual1_ManyPK(Text, Table1)
//
// return Otvet
//}
2024-06-04 15:53:15 +02:00
2024-09-11 16:49:55 +02:00
//// Replace_OtvetIDEqual1_1 - заменяет Otvet.ID = -1
//func Replace_OtvetIDEqual1_1(Text string, Table1 *types.Table) string {
// Otvet := Text
//
// PrimaryKeyColumn := Find_PrimaryKeyColumn(Table1)
// if PrimaryKeyColumn == nil {
// return Otvet
// }
//
// Value := Find_NegativeValue(PrimaryKeyColumn.TypeGo)
//
// Otvet = strings.ReplaceAll(Otvet, "Otvet.ID = -1", "Otvet.ID = "+Value)
//
// return Otvet
//}
2024-06-20 17:14:47 +02:00
2024-09-11 16:49:55 +02:00
//// Replace_OtvetIDEqual1_ManyPK - заменяет Otvet.ID = -1
//func Replace_OtvetIDEqual1_ManyPK(Text string, Table1 *types.Table) string {
// Otvet := Text
//
// PrimaryKeyColumns := Find_PrimaryKeyColumns(Table1)
// if len(PrimaryKeyColumns) == 0 {
// return Otvet
// }
//
// TextFind := "\tOtvet.ID = -1\n"
// TextNew := ""
// for _, ColumnPK1 := range PrimaryKeyColumns {
// Value := Find_NegativeValue(ColumnPK1.TypeGo)
// TextNew = TextNew + "\tOtvet." + ColumnPK1.NameGo + " = " + Value + "\n"
// }
//
// Otvet = strings.ReplaceAll(Otvet, TextFind, TextNew)
//
// return Otvet
//}
2024-06-04 15:53:15 +02:00
2024-09-06 14:10:00 +02:00
//// Replace_ModelIDEqual1 - заменяет Otvet.ID = -1
//func ReplaceModelIDEqual1_1(Text string, Table1 *types.Table) string {
// Otvet := Text
//
2024-09-06 14:10:00 +02:00
// PrimaryKeyColumn := Find_PrimaryKeyColumn(Table1)
// if PrimaryKeyColumn == nil {
// return Otvet
// }
//
2024-09-06 14:10:00 +02:00
// Value := Find_NegativeValue(PrimaryKeyColumn.TypeGo)
//
// Otvet = strings.ReplaceAll(Otvet, "m.ID = -1", "m.ID = "+Value)
//
// return Otvet
//}
2024-04-24 16:07:09 +02:00
2024-09-06 14:10:00 +02:00
// Find_NegativeValue - возвращает -1 для числовых типов
func Find_NegativeValue(TypeGo string) string {
2024-04-24 14:26:19 +02:00
Otvet := ""
2024-09-06 14:10:00 +02:00
Otvet = FindText_DefaultValue(TypeGo)
2024-04-24 14:26:19 +02:00
if mini_func.IsNumberType(TypeGo) == true {
Otvet = "-1"
}
return Otvet
}
2024-04-24 15:19:05 +02:00
2024-09-06 14:10:00 +02:00
// Find_RequestFieldName - возвращает название колонки в Request
func Find_RequestFieldName(Table1 *types.Table, Column1 *types.Column) string {
2024-04-24 15:19:05 +02:00
Otvet := ""
2024-09-06 14:10:00 +02:00
_, Otvet, _, _ = FindText_ProtobufRequest_ID_Type(Table1, Column1, "")
2024-04-24 15:19:05 +02:00
return Otvet
}
2024-05-03 15:40:56 +02:00
2024-09-06 14:10:00 +02:00
// Replace_Connect_WithApplicationName - заменяет Connect_WithApplicationName() на Connect_WithApplicationName_SingularTableName()
func Replace_Connect_WithApplicationName(Text string) string {
2024-05-03 15:40:56 +02:00
Otvet := Text
if config.Settings.SINGULAR_TABLE_NAMES == false {
return Otvet
}
Otvet = strings.ReplaceAll(Otvet, "postgres_gorm.Connect_WithApplicationName(", "postgres_gorm.Connect_WithApplicationName_SingularTableName(")
Otvet = strings.ReplaceAll(Otvet, "postgres_gorm.Start(", "postgres_gorm.Start_SingularTableName(")
return Otvet
}
2024-05-24 15:39:16 +02:00
2024-09-06 14:10:00 +02:00
// FindText_ConvertToString - возвращает имя переменной + имя колонки, преобразованное в тип string
func FindText_ConvertToString(Column1 *types.Column, VariableName string) string {
2024-05-24 15:39:16 +02:00
Otvet := ""
if Column1 == nil {
return Otvet
}
Otvet = VariableName + "." + Column1.NameGo
switch Column1.TypeGo {
case "time.Time":
Otvet = VariableName + ".String()"
case "int64":
Otvet = "strconv.Itoa(int(" + VariableName + "))"
case "int32":
Otvet = "strconv.Itoa(int(" + VariableName + "))"
case "bool":
Otvet = "strconv.FormatBool(" + VariableName + ")"
case "float32":
Otvet = "fmt.Sprintf(%f," + VariableName + ")"
case "float64":
Otvet = "fmt.Sprintf(%f," + VariableName + ")"
case "uuid.UUID":
Otvet = VariableName + ".String()"
}
return Otvet
}
2024-05-28 12:39:36 +02:00
// IsPrimaryKeyColumn - проверяет является ли колонка PrimaryKey
func IsPrimaryKeyColumn(Table1 *types.Table, Column *types.Column) bool {
Otvet := false
for _, Column1 := range Table1.MapColumns {
if Column1.IsPrimaryKey == true && Column1 == Column {
Otvet = true
break
}
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// Replace_ColumnNameM - заменяет "Replace_ColumnNameM(m.ID)" на "m.ID"
func Replace_ColumnNameM(Text string, Column *types.Column) string {
Otvet := Text
TextNew := "m." + Column.Name
2024-09-06 14:10:00 +02:00
Otvet = strings.ReplaceAll(Otvet, "Replace_ColumnNameM(m.ID)", TextNew)
return Otvet
}
2024-09-06 14:10:00 +02:00
// Replace_IntFromProtoRequest - заменяет "IntFromProto(Request.ID)" на "Request.ID"
func Replace_IntFromProtoRequest(Text string, Table1 *types.Table, Column *types.Column) string {
Otvet := Text
2024-09-06 14:10:00 +02:00
Variable, Golang_code := Convert_ProtobufVariableToGolangVariable(Table1, Column, "Request.")
TextNew := "Request." + Variable
if Golang_code != "" {
}
Otvet = strings.ReplaceAll(Otvet, "IntFromProto(Request.ID)", TextNew)
return Otvet
}
2024-08-15 14:16:34 +02:00
2024-09-06 14:10:00 +02:00
// Find_RequestFieldName_FromMass - возвращает имя поля для Request protobuf
func Find_RequestFieldName_FromMass(Column *types.Column, MassColumns []*types.Column) string {
2024-08-15 14:16:34 +02:00
Otvet := ""
2024-09-06 14:10:00 +02:00
TypeProto := Convert_GolangTypeNameToProtobufTypeName(Column.TypeGo)
2024-08-15 14:16:34 +02:00
Number := 0
for _, Column1 := range MassColumns {
2024-09-06 14:10:00 +02:00
TypeProto1 := Convert_GolangTypeNameToProtobufTypeName(Column1.TypeGo)
2024-08-21 14:01:01 +02:00
if TypeProto == TypeProto1 && Column != Column1 {
2024-08-15 14:16:34 +02:00
Number = Number + 1
}
if Column == Column1 {
break
}
}
Suffix := "_" + strconv.Itoa(Number)
2024-09-06 14:10:00 +02:00
Otvet = Convert_GolangTypeNameToProtobufFieldName(Column.TypeGo)
2024-08-21 14:01:01 +02:00
if Number > 1 {
Otvet = Otvet + Suffix
}
2024-08-15 14:16:34 +02:00
return Otvet
}
2024-09-06 14:10:00 +02:00
// Convert_GolangTypeNameToProtobufFieldName - возвращает имя поля для protobuf
func Convert_GolangTypeNameToProtobufFieldName(TypeGo string) string {
2024-08-15 14:16:34 +02:00
Otvet := ""
switch TypeGo {
case "time.Time":
Otvet = "Date"
case "string":
Otvet = "String"
case "int64", "int":
Otvet = "Int64"
case "int32":
Otvet = "Int32"
case "int16":
Otvet = "Int32"
case "int8":
Otvet = "Int32"
case "uint64":
Otvet = "Uint64"
case "uint32":
Otvet = "Uint32"
case "uint16":
Otvet = "Uint32"
case "uint8":
Otvet = "Uint32"
case "bool":
Otvet = "Bool"
case "float32":
Otvet = "Float32"
case "float64":
Otvet = "Float64"
case "uuid.UUID":
Otvet = "String"
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// Convert_GolangTypeNameToProtobufTypeName - возвращает имя типа для protobuf
func Convert_GolangTypeNameToProtobufTypeName(TypeGo string) string {
2024-08-15 14:16:34 +02:00
Otvet := ""
switch TypeGo {
case "time.Time":
Otvet = "google.protobuf.Timestamp"
case "string":
Otvet = "string"
case "int64", "int":
Otvet = "int64"
case "int32":
Otvet = "int32"
case "uint64":
Otvet = "uint64"
case "uint32":
Otvet = "uint32"
case "byte":
Otvet = "uint32"
case "[]byte":
Otvet = "bytes"
case "bool":
Otvet = "bool"
case "float32":
Otvet = "float"
case "float64":
Otvet = "double"
case "uuid.UUID":
Otvet = "string"
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindMass_Columns_from_MassColumnsString - преобразует массив строк названий колонок в массив столбцов
func FindMass_Columns_from_MassColumnsString(Table1 *types.Table, MassColumnsString []string) []*types.Column {
2024-08-15 14:16:34 +02:00
Otvet := make([]*types.Column, len(MassColumnsString))
for i, ColumnName := range MassColumnsString {
Column1, ok := Table1.MapColumns[ColumnName]
if ok == false {
log.Panic(Table1.Name + " .MapColumns[" + ColumnName + "] = false")
}
Otvet[i] = Column1
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// FindMass_TableColumns - преобразует TableColumns_String в TableColumns
func FindMass_TableColumns(MapAll map[string]*types.Table, MassTableColumns_String []types.TableColumns_String) []types.TableColumns {
2024-08-21 12:25:41 +02:00
Otvet := make([]types.TableColumns, 0)
2024-08-16 11:44:58 +02:00
for _, TableColumns_string1 := range MassTableColumns_String {
Table1, ok := MapAll[TableColumns_string1.TableName]
if ok == false {
2024-09-05 10:35:09 +02:00
log.Warn(" Error: not found table: ", TableColumns_string1.TableName)
continue
2024-08-16 11:44:58 +02:00
}
2024-09-06 14:10:00 +02:00
Columns1 := FindMass_Columns_from_MassColumnsString(Table1, TableColumns_string1.MassColumnNames)
2024-08-16 11:44:58 +02:00
TableColumns1 := types.TableColumns{}
TableColumns1.Table = Table1
TableColumns1.Columns = Columns1
Otvet = append(Otvet, TableColumns1)
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// Convert_ProtobufVariableToGolangVariable_with_MassColumns - возвращает имя переменной + имя колонки, преобразованное в тип golang из protobuf
func Convert_ProtobufVariableToGolangVariable_with_MassColumns(Column *types.Column, MassColumns []*types.Column, VariableName string) (VariableField string, GolangCode string) {
RequestFieldName := Find_RequestFieldName_FromMass(Column, MassColumns)
2024-08-15 14:16:34 +02:00
VariableField = VariableName + RequestFieldName
switch Column.TypeGo {
case "time.Time":
{
VariableField = VariableName + RequestFieldName + ".AsTime()"
return VariableField, GolangCode
}
case "uuid.UUID":
{
VariableField = "uuid.FromBytes([]byte(" + VariableName + RequestFieldName + "))"
GolangCode = Column.NameGo + `, err := uuid.FromBytes([]byte(Request.` + RequestFieldName + `))
if err != nil {
return &Otvet, err
}
`
return VariableField, GolangCode
}
}
return VariableField, GolangCode
}
2024-08-16 11:44:58 +02:00
2024-08-21 14:01:01 +02:00
//// ConvertGolangVariableToProtobufVariable_with_MassColumns - преобразованное в тип protobuf из golang
//func ConvertGolangVariableToProtobufVariable_with_MassColumns(Column *types.Column, MassColumns []*types.Column) string {
// Otvet := ""
//
2024-09-06 14:10:00 +02:00
// Otvet = Find_RequestFieldName_FromMass(Column, MassColumns)
2024-08-21 14:01:01 +02:00
// return Otvet
//}
2024-09-06 14:10:00 +02:00
// Find_RequestFieldNames_FromMass - возвращает строку с именами колонок для Protobuf
func Find_RequestFieldNames_FromMass(MassColumns []*types.Column) string {
2024-08-16 11:44:58 +02:00
Otvet := ""
TextFields := ""
//TextRequest := ""
2024-08-16 11:44:58 +02:00
Underline := ""
for _, Column1 := range MassColumns {
TextFields = TextFields + Underline + Column1.NameGo
2024-09-06 14:10:00 +02:00
TextRequest1 := Find_RequestFieldName_FromMass(Column1, MassColumns)
Otvet = Otvet + Underline + TextRequest1
2024-08-16 11:44:58 +02:00
Underline = "_"
}
return Otvet
}
2024-09-06 14:10:00 +02:00
// Replace_TemplateModel_to_Model - заменяет текст имя модели в шаблоне на имя модели новое
func Replace_TemplateModel_to_Model(Text, ModelName string) string {
Otvet := Text
Otvet = strings.ReplaceAll(Otvet, config.Settings.TEXT_TEMPLATE_MODEL, ModelName)
return Otvet
}
// Replace_TemplateTableName_to_TableName - заменяет текст имя таблицы в шаблоне на имя таблицы новое
func Replace_TemplateTableName_to_TableName(Text, TableName string) string {
2024-09-06 14:10:00 +02:00
Otvet := Text
Otvet = strings.ReplaceAll(Otvet, config.Settings.TEXT_TEMPLATE_TABLENAME, TableName)
2024-09-06 14:10:00 +02:00
return Otvet
}
// AddText_ModuleGenerated - добавляет текст: "Файл создан автоматически"
func AddText_ModuleGenerated(Text string) string {
Otvet := Text
Otvet = config.Settings.TEXT_MODULE_GENERATED + Otvet
return Otvet
}
// CommentLineInText - закомментирует строку в коде, добавит // в начало
func CommentLineInText(Text, TextFind string) string {
Otvet := Text
Otvet = strings.ReplaceAll(Otvet, `//`+TextFind, TextFind)
return Otvet
}
2024-09-09 14:29:27 +02:00
// Find_ColumnNamesWithComma - возвращает строку с именами колонок БД, через запятую
func Find_ColumnNamesWithComma(MassColumns []*types.Column) string {
Otvet := ""
Comma := ""
for _, v := range MassColumns {
Otvet = Otvet + Comma + v.Name
Comma = ", "
}
return Otvet
}
2024-09-17 13:41:37 +02:00
// Find_PrimaryKeyNamesWithComma - возвращает строку с именами колонок БД Primary key, через запятую
func Find_PrimaryKeyNamesWithComma(Table1 *types.Table) string {
Otvet := ""
MassPK := Find_PrimaryKeyColumns(Table1)
Comma := ""
for _, v := range MassPK {
Otvet = Otvet + Comma + v.NameGo
Comma = ", "
}
return Otvet
}
// Find_PrimaryKeysDefaultValues - возвращает строку с значениями по умолчанию колонок БД Primary key, через запятую
func Find_PrimaryKeysDefaultValues(Table1 *types.Table) string {
Otvet := ""
MassPrimaryKeys := Find_PrimaryKeyColumns(Table1)
Comma := ""
for _, Column1 := range MassPrimaryKeys {
DefaultValue := FindText_DefaultValue(Column1.TypeGo)
Otvet = Otvet + Comma + DefaultValue
Comma = ", "
}
return Otvet
}