1
0
mirror of https://github.com/ManyakRus/crud_generator.git synced 2024-12-18 23:47:38 +02:00
crud_generator/internal/create_files/protobuf/protobuf.go

337 lines
9.1 KiB
Go
Raw Normal View History

package protobuf
2023-10-26 13:18:38 +02:00
import (
"github.com/ManyakRus/crud_generator/internal/config"
"github.com/ManyakRus/crud_generator/internal/constants"
"github.com/ManyakRus/crud_generator/internal/create_files"
"github.com/ManyakRus/crud_generator/internal/folders"
2023-10-26 13:18:38 +02:00
"github.com/ManyakRus/crud_generator/internal/types"
"github.com/ManyakRus/starter/log"
"github.com/ManyakRus/starter/micro"
"os"
"sort"
"strings"
)
2023-11-15 10:43:15 +02:00
// CreateAllFiles - создаёт все файлы в папке grpc proto
2023-10-26 13:18:38 +02:00
func CreateAllFiles(MapAll map[string]*types.Table) error {
var err error
err = CreateFileProto(MapAll)
if err != nil {
log.Error("CreateFileProto() error: ", err)
return err
}
return err
}
// CreateFileProto - создаёт 1 файл в папке grpc
func CreateFileProto(MapAll map[string]*types.Table) error {
var err error
//чтение файлов
DirBin := micro.ProgramDir_bin()
2023-11-01 16:34:57 +02:00
DirTemplates := DirBin + config.Settings.TEMPLATE_FOLDERNAME + micro.SeparatorFile()
DirReady := DirBin + config.Settings.READY_FOLDERNAME + micro.SeparatorFile()
2023-11-15 12:58:31 +02:00
DirTemplatesProto := DirTemplates + config.Settings.TEMPLATE_FOLDERNAME_GRPC_PROTO + micro.SeparatorFile()
DirReadyProto := DirReady + config.Settings.TEMPLATE_FOLDERNAME_GRPC_PROTO + micro.SeparatorFile()
2023-10-26 13:18:38 +02:00
FilenameReadyProto := DirReadyProto + config.Settings.SERVICE_NAME + ".proto"
//создадим папку готовых файлов
folders.CreateFolder(DirReadyProto)
2023-11-15 16:59:21 +02:00
FilenameTemplateProto := DirTemplatesProto + "service.proto_"
if config.Settings.TEMPLATE_EXTERNAL_PROTO_FILENAME != "" {
FilenameTemplateProto = config.Settings.TEMPLATE_EXTERNAL_PROTO_FILENAME
}
2023-10-26 13:18:38 +02:00
bytes, err := os.ReadFile(FilenameTemplateProto)
if err != nil {
log.Panic("ReadFile() ", FilenameTemplateProto, " error: ", err)
}
TextProto := string(bytes)
//заменим название сервиса
2023-11-07 16:58:02 +02:00
ServiceName := config.Settings.SERVICE_NAME
ServiceNameProto := micro.StringFromUpperCase(ServiceName)
TEMPLATE_SERVICE_NAME := config.Settings.TEMPLATE_SERVICE_NAME
TextProto = strings.ReplaceAll(TextProto, TEMPLATE_SERVICE_NAME, ServiceNameProto)
//заменим ещё раз с большой буквы
TEMPLATE_SERVICE_NAME = micro.StringFromUpperCase(TEMPLATE_SERVICE_NAME)
TextProto = strings.ReplaceAll(TextProto, TEMPLATE_SERVICE_NAME, ServiceNameProto)
2023-10-26 13:18:38 +02:00
//сортировка по названию таблиц
keys := make([]string, 0, len(MapAll))
for k := range MapAll {
keys = append(keys, k)
}
sort.Strings(keys)
//найдём новый текст для каждой таблицы
for _, key1 := range keys {
2024-02-07 17:10:52 +02:00
TextProtoNew := ""
2023-10-26 13:18:38 +02:00
Table1, ok := MapAll[key1]
if ok == false {
log.Panic("MapAll[key1] not found")
}
2023-11-03 13:21:35 +02:00
//проверка что таблица нормальная
err1 := create_files.CheckGoodTable(Table1)
if err1 != nil {
log.Warn(err1)
continue
}
2024-02-07 17:10:52 +02:00
Comments1 := create_files.FindModelComment(Table1)
TextFuncStart := `
` + Comments1 + `
service ` + Table1.NameGo + ` {`
TextFunctions := FindTextProtoTable1(TextProto, Table1)
TextProtoNew = TextProtoNew + TextFuncStart + TextFunctions + "}\n\n"
//найдём куда вставить текст
PosStart := 0
sFind := "\nservice " + Table1.NameGo + " "
pos1 := strings.Index(TextProto, sFind)
if pos1 < 0 {
PosStart = len(TextProto) - 1 //в конец
} else {
s2 := TextProto[pos1+1:]
sFind = "\n"
posEnd := strings.Index(s2, sFind)
if posEnd < 0 {
log.Panic("Not found text ", sFind)
}
PosStart = pos1 + posEnd + 1
}
2023-10-26 13:18:38 +02:00
2024-02-07 17:10:52 +02:00
//
TextProto = TextProto[:PosStart] + TextProtoNew + TextProto[PosStart:]
2023-10-26 13:18:38 +02:00
}
2024-01-15 12:19:27 +02:00
//
TextProto = create_files.DeleteEmptyLines(TextProto)
2023-10-26 13:18:38 +02:00
//запись файла
err = os.WriteFile(FilenameReadyProto, []byte(TextProto), constants.FILE_PERMISSIONS)
return err
}
//func FillTableProto1(TextProto string, Table1 *types.Table) string {
// Otvet := TextProto
//
// //ModelName := Table1.NameGo
//
//
// //создание текста
// TextProtoTable := FindTextProtoTable1(Table1)
//
// return Otvet
//}
// FindTextProtoTable1 - возвращает текст всех функций .proto для таблицы
func FindTextProtoTable1(TextProto string, Table1 *types.Table) string {
2024-01-15 12:19:27 +02:00
Otvet := "\n" //"\n\t//\n"
2023-10-26 13:18:38 +02:00
ModelName := Table1.NameGo
Otvet = Otvet + FindTextRead(TextProto, ModelName)
Otvet = Otvet + FindTextCreate(TextProto, ModelName)
Otvet = Otvet + FindTextUpdate(TextProto, ModelName)
Otvet = Otvet + FindTextSave(TextProto, ModelName)
if create_files.Has_Column_ExtID_ConnectionID(Table1) == true {
Otvet = Otvet + FindTextFindByExtId(TextProto, ModelName)
}
2023-12-01 15:00:11 +02:00
if create_files.Has_Column_IsDeleted(Table1) == true {
2023-10-26 13:18:38 +02:00
Otvet = Otvet + FindTextDelete(TextProto, ModelName)
2023-12-01 15:00:11 +02:00
if config.Settings.HAS_IS_DELETED == true {
Otvet = Otvet + FindTextRestore(TextProto, ModelName)
}
2023-10-26 13:18:38 +02:00
}
return Otvet
}
2024-02-07 17:10:52 +02:00
// FindTextService - возвращает текст одного сервиса
func FindTextService(TextProto string, ModelName string) string {
Otvet := ""
TextFind1 := "\nservice " + ModelName + " "
TextFind2 := "\n}"
Otvet = micro.StringBetween(TextProto, TextFind1, TextFind2)
return Otvet
}
2023-10-26 13:18:38 +02:00
// FindTextRead - возвращает текст .proto
func FindTextRead(TextProto string, ModelName string) string {
Otvet := ""
Otvet2 := TextRead(ModelName)
//проверка такой текст уже есть
2024-02-07 17:10:52 +02:00
TextService := FindTextService(TextProto, ModelName)
pos1 := strings.Index(TextService, Otvet2)
2023-10-26 13:18:38 +02:00
if pos1 >= 0 {
return Otvet
}
Otvet = "\t" + Otvet2 + "\n"
return Otvet
}
// FindTextCreate - возвращает текст .proto
func FindTextCreate(TextProto string, ModelName string) string {
Otvet := ""
Otvet2 := TextCreate(ModelName)
//проверка такой текст уже есть
2024-02-07 17:10:52 +02:00
TextService := FindTextService(TextProto, ModelName)
pos1 := strings.Index(TextService, Otvet2)
2023-10-26 13:18:38 +02:00
if pos1 >= 0 {
return Otvet
}
Otvet = "\t" + Otvet2 + "\n"
return Otvet
}
// FindTextUpdate - возвращает текст .proto
func FindTextUpdate(TextProto string, ModelName string) string {
Otvet := ""
Otvet2 := TextUpdate(ModelName)
//проверка такой текст уже есть
2024-02-07 17:10:52 +02:00
TextService := FindTextService(TextProto, ModelName)
pos1 := strings.Index(TextService, Otvet2)
2023-10-26 13:18:38 +02:00
if pos1 >= 0 {
return Otvet
}
Otvet = "\t" + Otvet2 + "\n"
return Otvet
}
// FindTextSave - возвращает текст .proto
func FindTextSave(TextProto string, ModelName string) string {
Otvet := ""
Otvet2 := TextSave(ModelName)
//проверка такой текст уже есть
2024-02-07 17:10:52 +02:00
TextService := FindTextService(TextProto, ModelName)
pos1 := strings.Index(TextService, Otvet2)
2023-10-26 13:18:38 +02:00
if pos1 >= 0 {
return Otvet
}
Otvet = "\t" + Otvet2 + "\n"
return Otvet
}
// FindTextDelete - возвращает текст .proto
func FindTextDelete(TextProto string, ModelName string) string {
Otvet := ""
Otvet2 := TextDelete(ModelName)
//проверка такой текст уже есть
2024-02-07 17:10:52 +02:00
TextService := FindTextService(TextProto, ModelName)
pos1 := strings.Index(TextService, Otvet2)
2023-10-26 13:18:38 +02:00
if pos1 >= 0 {
return Otvet
}
Otvet = "\t" + Otvet2 + "\n"
return Otvet
}
// FindTextRestore - возвращает текст .proto
func FindTextRestore(TextProto string, ModelName string) string {
Otvet := ""
Otvet2 := TextRestore(ModelName)
//проверка такой текст уже есть
2024-02-07 17:10:52 +02:00
TextService := FindTextService(TextProto, ModelName)
pos1 := strings.Index(TextService, Otvet2)
2023-10-26 13:18:38 +02:00
if pos1 >= 0 {
return Otvet
}
Otvet = "\t" + Otvet2 + "\n"
return Otvet
}
// FindTextFindByExtId - возвращает текст .proto
func FindTextFindByExtId(TextProto string, ModelName string) string {
Otvet := ""
Otvet2 := TextFindByExtId(ModelName)
//проверка такой текст уже есть
2024-02-07 17:10:52 +02:00
TextService := FindTextService(TextProto, ModelName)
pos1 := strings.Index(TextService, Otvet2)
2023-10-26 13:18:38 +02:00
if pos1 >= 0 {
return Otvet
}
Otvet = "\t" + Otvet2 + "\n"
return Otvet
}
// TextRead - возвращает текст .proto
func TextRead(ModelName string) string {
2024-02-07 17:10:52 +02:00
Otvet := "rpc Read(RequestId) returns (Response) {}"
2023-10-26 13:18:38 +02:00
return Otvet
}
// TextCreate - возвращает текст .proto
func TextCreate(ModelName string) string {
2024-02-07 17:10:52 +02:00
Otvet := "rpc Create(RequestModel) returns (Response) {}"
2023-10-26 13:18:38 +02:00
return Otvet
}
// TextUpdate - возвращает текст .proto
func TextUpdate(ModelName string) string {
2024-02-07 17:10:52 +02:00
Otvet := "rpc Update(RequestModel) returns (Response) {}"
2023-10-26 13:18:38 +02:00
return Otvet
}
// TextSave - возвращает текст .proto
func TextSave(ModelName string) string {
2024-02-07 17:10:52 +02:00
Otvet := "rpc Save(RequestModel) returns (Response) {}"
2023-10-26 13:18:38 +02:00
return Otvet
}
// TextDelete - возвращает текст .proto
func TextDelete(ModelName string) string {
2024-02-07 17:10:52 +02:00
Otvet := "rpc Delete(RequestId) returns (Response) {}"
2023-10-26 13:18:38 +02:00
return Otvet
}
// TextRestore - возвращает текст .proto
func TextRestore(ModelName string) string {
2024-02-07 17:10:52 +02:00
Otvet := "rpc Restore(RequestId) returns (Response) {}"
2023-10-26 13:18:38 +02:00
return Otvet
}
// TextFindByExtId - возвращает текст .proto
func TextFindByExtId(ModelName string) string {
2024-02-07 17:10:52 +02:00
Otvet := "rpc FindByExtID(RequestExtID) returns (Response) {}"
2023-10-26 13:18:38 +02:00
return Otvet
}