1
0
mirror of https://github.com/ManyakRus/crud_generator.git synced 2025-02-07 23:16:43 +02:00

сделал StringIdentifier()

This commit is contained in:
Nikitin Aleksandr 2024-05-24 16:39:16 +03:00
parent 1bb0e0ae0a
commit 118503e1ae
4 changed files with 259 additions and 27 deletions

View File

@ -30,13 +30,6 @@ func (crud Crud_DB) ReadFromCache(ID int64) (lawsuit_status_types.LawsuitStatusT
var Otvet lawsuit_status_types.LawsuitStatusType
var err error
// поищем сначала в кэше
Otvet, ok := cache.Get(ID)
if ok {
return Otvet, nil
}
// поищем в БД
ctxMain := contextmain.GetContext()
ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*time.Duration(db_constants.TIMEOUT_DB_SECONDS))
defer ctxCancelFunc()
@ -53,11 +46,18 @@ func ReadFromCache_ctx(ctx context.Context, db *gorm.DB, ID int64) (lawsuit_stat
var Otvet lawsuit_status_types.LawsuitStatusType
var err error
// поищем сначала в кэше
Identifier := (ID)
Otvet, ok := cache.Get(Identifier)
if ok {
return Otvet, nil
}
// поищем в БД
Otvet.ID = AliasFromInt(ID)
err = Read_ctx(ctx, db, &Otvet)
if err == nil {
cache.Add(ID, Otvet)
cache.Add(Identifier, Otvet)
}
return Otvet, err

View File

@ -173,6 +173,19 @@ func FindPrimaryKeyColumn(Table1 *types.Table) (Column1 *types.Column) {
return Otvet
}
// FindPrimaryKeyColumns - возвращает несколько Column для колонки PrimaryKey
func FindPrimaryKeyColumns(Table1 *types.Table) []*types.Column {
Otvet := make([]*types.Column, 0)
for _, Column1 := range Table1.MapColumns {
if Column1.IsPrimaryKey == true {
Otvet = append(Otvet, Column1)
}
}
return Otvet
}
//// FindPrimaryKeyNameTypeGo - возвращает наименование и тип golang колонки PrimaryKey
//func FindPrimaryKeyNameTypeGo(Table1 *types.Table) (string, string) {
// Otvet := ""
@ -191,6 +204,20 @@ func FindPrimaryKeyColumn(Table1 *types.Table) (Column1 *types.Column) {
func ReplacePrimaryKeyOtvetID(Text string, Table1 *types.Table) string {
Otvet := Text
PrimaryKeyCount := Table1.PrimaryKeyColumnsCount
if PrimaryKeyCount == 1 {
Otvet = ReplacePrimaryKeyOtvetID1(Otvet, Table1)
} else {
Otvet = ReplacePrimaryKeyOtvetID_Many(Otvet, Table1)
}
return Otvet
}
// ReplacePrimaryKeyOtvetID1 - заменяет "Otvet.ID" на название колонки PrimaryKey
func ReplacePrimaryKeyOtvetID1(Text string, Table1 *types.Table) string {
Otvet := Text
ColumnNamePK, ColumnTypeGoPK := FindPrimaryKeyNameTypeGo(Table1)
//заменим ID-Alias на ID
@ -237,6 +264,66 @@ func ReplacePrimaryKeyOtvetID(Text string, Table1 *types.Table) string {
return Otvet
}
// ReplacePrimaryKeyOtvetID_Many - заменяет "Otvet.ID" на название колонки PrimaryKey
func ReplacePrimaryKeyOtvetID_Many(Text string, Table1 *types.Table) string {
Otvet := Text
TextOtvetIDID := ""
for _, Column1 := range Table1.MapColumns {
if Column1.IsPrimaryKey == false {
continue
}
TextOtvetIDID = TextOtvetIDID + "\tOtvet." + Column1.NameGo + " = " + Column1.NameGo + "\n"
}
Otvet = strings.ReplaceAll(Otvet, "\tOtvet.ID = AliasFromInt(ID)", TextOtvetIDID)
//TextNames, TextNamesTypes, TextProtoNames := FindTextIDMany(Table1)
////заменим ID-Alias на ID
//TableName := Table1.Name
//IDName, _ := FindPrimaryKeyNameType(Table1)
//Alias, ok := types.MapConvertID[TableName+"."+IDName]
//OtvetColumnName := "Otvet." + ColumnNamePK
//if ok == true {
// OtvetColumnName = Alias + "(" + OtvetColumnName + ")"
//}
////заменим int64(Otvet.ID) на Otvet.ID
//if mini_func.IsNumberType(ColumnTypeGoPK) == true {
// Otvet = strings.ReplaceAll(Otvet, "int64(Otvet.ID)", OtvetColumnName)
//} else if ColumnTypeGoPK == "string" {
// 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)
//} else if ColumnTypeGoPK == "uuid.UUID" || ColumnTypeGoPK == "uuid.NullUUID" {
// 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)
//} else if ColumnTypeGoPK == "time.Time" {
// 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)
//}
////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+")")
// Otvet = strings.ReplaceAll(Otvet, "AliasFromInt(Otvet.ID)", OtvetColumnName)
// Otvet = strings.ReplaceAll(Otvet, "AliasFromInt(ID)", Alias+"("+ColumnNamePK+")")
//} else {
// Otvet = strings.ReplaceAll(Otvet, "IntFromAlias(Otvet.ID)", "Otvet."+ColumnNamePK+"")
// Otvet = strings.ReplaceAll(Otvet, "AliasFromInt(Otvet.ID)", OtvetColumnName)
// Otvet = strings.ReplaceAll(Otvet, "AliasFromInt(ID)", "ID")
//}
return Otvet
}
// ReplacePrimaryKeyM_ID - заменяет "m.ID" на название колонки PrimaryKey
func ReplacePrimaryKeyM_ID(Text string, Table1 *types.Table) string {
Otvet := Text
@ -719,23 +806,28 @@ func CheckAndAddImport(Text, URL string) string {
func AddImportTime(Text string) string {
Otvet := Text
//если уже есть импорт
RepositoryURL := `time`
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 Text
//}
//
//Otvet = Otvet[:pos1+len(TextImport)] + "\n\t" + RepositoryURL + Otvet[pos1+len(TextImport):]
return Otvet
}
// CheckAndAddImportStrconv - добавляет пакет в секцию Import, если его там нет
func CheckAndAddImportStrconv(Text string) string {
Otvet := Text
RepositoryURL := `strconv`
Otvet = AddImport(Text, RepositoryURL)
return Otvet
}
// CheckAndAddImportFmt - добавляет пакет fmt в секцию Import, если его там нет
func CheckAndAddImportFmt(Text string) string {
Otvet := Text
RepositoryURL := `fmt`
Otvet = AddImport(Text, RepositoryURL)
return Otvet
}
@ -1957,10 +2049,23 @@ func ReplaceTextRequestID_PrimaryKey1(Text string, Table1 *types.Table, TextRequ
return Otvet
}
// ReplaceIDtoID - заменяет int64(ID) на ID
func ReplaceIDtoID(Text string, Table1 *types.Table) string {
Otvet := Text
PrimaryKeyCount := Table1.PrimaryKeyColumnsCount
if PrimaryKeyCount == 1 {
Otvet = ReplaceIDtoID1(Otvet, Table1)
} else {
Otvet = ReplaceIDtoID_Many(Otvet, Table1)
}
return Otvet
}
// ReplaceIDtoID1 - заменяет int64(ID) на ID
func ReplaceIDtoID1(Text string, Table1 *types.Table) string {
Otvet := Text
PrimaryKeyColumn := FindPrimaryKeyColumn(Table1)
OtvetColumnName := FindTextConvertGolangTypeToProtobufType(Table1, PrimaryKeyColumn, "")
if OtvetColumnName == "" {
@ -1974,6 +2079,45 @@ func ReplaceIDtoID(Text string, Table1 *types.Table) string {
return Otvet
}
// FindTextIDMany - находит все PrimaryKey строкой
func FindTextIDMany(Table1 *types.Table) (TextNames, TextNamesTypes, TextProtoNames string) {
//TextProtoNames := ""
//TextNamesTypes := ""
//TextNames := ""
Comma := ""
MassPrimaryKey := FindPrimaryKeyColumns(Table1)
for _, PrimaryKey1 := range MassPrimaryKey {
OtvetColumnName := FindTextConvertGolangTypeToProtobufType(Table1, PrimaryKey1, "")
if OtvetColumnName == "" {
continue
}
TextProtoNames = TextProtoNames + Comma + OtvetColumnName
TextNamesTypes = TextNamesTypes + Comma + PrimaryKey1.NameGo + " " + PrimaryKey1.TypeGo
TextNames = TextNames + Comma + PrimaryKey1.NameGo
Comma = ", "
}
return
}
// ReplaceIDtoID_Many - заменяет int64(ID) на ID, и остальные PrimaryKey
func ReplaceIDtoID_Many(Text string, Table1 *types.Table) string {
Otvet := Text
TextNames, TextNamesTypes, TextProtoNames := FindTextIDMany(Table1)
Otvet = strings.ReplaceAll(Otvet, "int64(ID)", TextProtoNames)
Otvet = strings.ReplaceAll(Otvet, "(ID int64", "("+TextNamesTypes)
Otvet = strings.ReplaceAll(Otvet, "(ID)", "("+TextNames+")")
Otvet = strings.ReplaceAll(Otvet, ", ID)", ", "+TextNames+")")
Otvet = strings.ReplaceAll(Otvet, ", ID int64)", ", "+TextNamesTypes+")")
return Otvet
}
// ReplaceOtvetIDEqual1 - заменяет Otvet.ID = -1
func ReplaceOtvetIDEqual1(Text string, Table1 *types.Table) string {
Otvet := Text
@ -2040,3 +2184,31 @@ func ReplaceConnect_WithApplicationName(Text string) string {
return Otvet
}
// FindTextConvertToString - возвращает имя переменной + имя колонки, преобразованное в тип string
func FindTextConvertToString(Column1 *types.Column, VariableName string) string {
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
}

View File

@ -26,6 +26,13 @@ func CreateAllFiles(MapAll map[string]*types.Table) error {
continue
}
//проверка что таблица нормальная
err2 := create_files.IsGoodTableNamePrefix(Table1)
if err2 != nil {
log.Warn(err2)
continue
}
//файлы crud
if config.Settings.NEED_CREATE_DB == true {
err = CreateFiles(Table1)
@ -879,9 +886,20 @@ func CreateFilesCache(Table1 *types.Table) error {
TextCache = create_files.FillVariable(TextCache, constants.TEXT_CACHE_SIZE_1000, sCACHE_ELEMENTS_COUNT)
//тип ID кэша
_, ColumnTypeGo := create_files.FindPrimaryKeyNameTypeGo(Table1)
TextCache = strings.ReplaceAll(TextCache, "LRU[int64", "LRU["+ColumnTypeGo)
TextCache = strings.ReplaceAll(TextCache, "ID int64", "ID "+ColumnTypeGo)
if Table1.PrimaryKeyColumnsCount == 1 {
_, ColumnTypeGo := create_files.FindPrimaryKeyNameTypeGo(Table1)
TextCache = strings.ReplaceAll(TextCache, "LRU[int64", "LRU["+ColumnTypeGo)
TextCache = strings.ReplaceAll(TextCache, "ID int64", "ID "+ColumnTypeGo)
} else {
TextCache = strings.ReplaceAll(TextCache, "LRU[int64", "LRU[string")
TextCache = create_files.ReplacePrimaryKeyOtvetID_Many(TextCache, Table1)
TextIDMany := "(ID)"
TextIDMany = create_files.ReplaceIDtoID_Many(TextIDMany, Table1)
TextCache = strings.ReplaceAll(TextCache, "(ID)", "("+Table1.Name+".StringIdentifier"+TextIDMany+")")
TextCache = create_files.ReplaceIDtoID_Many(TextCache, Table1)
//TextCache = strings.ReplaceAll(TextCache, "(ID,", "("+Table1.Name+".StringIdentifier"+TextIDMany+",")
//TextCache = strings.ReplaceAll(TextCache, "ID int64", "ID "+ColumnTypeGo)
}
//uuid
TextCache = create_files.CheckAndAddImportUUID_FromText(TextCache)

View File

@ -194,9 +194,18 @@ func CreateFilesModel_crud(Table1 *types.Table, DirTemplatesModel, DirReadyModel
}
TextModel = create_files.ReplaceIDtoID(TextModel, Table1)
//
TextModel = AddFunctionStringIdentifier(TextModel, Table1)
//добавим импорт uuid
TextModel = create_files.CheckAndAddImportUUID_FromText(TextModel)
//добавим импорт strconv
TextModel = create_files.CheckAndAddImportStrconv(TextModel)
//добавим импорт fmt
TextModel = create_files.CheckAndAddImportFmt(TextModel)
}
//
@ -712,3 +721,36 @@ func DeleteFromInterfaceUpdateManyFields(TextModel string, Table1 *types.Table)
return Otvet
}
// AddFunctionStringIdentifier - добавляет функцию StringIdentifier(), для таблиц где много PrimaryKey
func AddFunctionStringIdentifier(TextModel string, Table1 *types.Table) string {
Otvet := TextModel
if Table1.PrimaryKeyColumnsCount == 1 {
return Otvet
}
_, TextNamesTypes, _ := create_files.FindTextIDMany(Table1)
Text := `
// StringIdentifier - возвращает строковое представление PrimaryKey
func StringIdentifier(` + TextNamesTypes + `) string {
Otvet := ""
`
for _, Column1 := range Table1.MapColumns {
if Column1.IsPrimaryKey == false {
continue
}
TextConvert := create_files.FindTextConvertToString(Column1, Column1.NameGo)
Text = Text + "\tOtvet = Otvet + " + `"_" + ` + TextConvert + "\n"
}
Text = Text + `
return Otvet
}`
Otvet = Otvet + Text
return Otvet
}