diff --git a/bin/templates/crud_starter/crud_starter.go_ b/bin/templates/crud_starter/crud_starter.go_ new file mode 100644 index 0000000..4a80e2a --- /dev/null +++ b/bin/templates/crud_starter/crud_starter.go_ @@ -0,0 +1,95 @@ +package crud_starter + +import ( + model "gitlab.aescorp.ru/dsp_dev/claim/common/object_model" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/db/db_connections" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/db/db_employees" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/db/db_files" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/db/db_lawsuit_status_states" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/db/db_lawsuit_status_types" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/db/db_lawsuits" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/db/db_message_attachements" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/db/db_message_send_statuses" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/db/db_message_types" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/db/db_messages" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/db/db_organization_casebook" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/db/db_organizations" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/grpc/grpc_client/grpc_connections" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/grpc/grpc_client/grpc_employees" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/grpc/grpc_client/grpc_files" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/grpc/grpc_client/grpc_lawsuit_status_states" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/grpc/grpc_client/grpc_lawsuit_status_types" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/grpc/grpc_client/grpc_lawsuits" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/grpc/grpc_client/grpc_message_attachements" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/grpc/grpc_client/grpc_message_send_statuses" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/grpc/grpc_client/grpc_message_types" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/grpc/grpc_client/grpc_messages" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/grpc/grpc_client/grpc_organization_casebook" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/grpc/grpc_client/grpc_organizations" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/nrpc/nrpc_client/nrpc_connections" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/nrpc/nrpc_client/nrpc_employees" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/nrpc/nrpc_client/nrpc_files" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/nrpc/nrpc_client/nrpc_lawsuit_status_states" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/nrpc/nrpc_client/nrpc_lawsuit_status_types" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/nrpc/nrpc_client/nrpc_lawsuits" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/nrpc/nrpc_client/nrpc_message_attachements" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/nrpc/nrpc_client/nrpc_message_send_statuses" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/nrpc/nrpc_client/nrpc_message_types" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/nrpc/nrpc_client/nrpc_messages" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/nrpc/nrpc_client/nrpc_organization_casebook" + "gitlab.aescorp.ru/dsp_dev/claim/common/object_model/pkg/nrpc/nrpc_client/nrpc_organizations" +) + +// InitCrudTransport_DB - заполняет объекты crud для работы с БД напрямую +func InitCrudTransport_DB() { + + model.Connection{}.SetCrudInterface(db_connections.Crud_DB{}) + model.Employee{}.SetCrudInterface(db_employees.Crud_DB{}) + model.File{}.SetCrudInterface(db_files.Crud_DB{}) + model.LawsuitStatusState{}.SetCrudInterface(db_lawsuit_status_states.Crud_DB{}) + model.LawsuitStatusType{}.SetCrudInterface(db_lawsuit_status_types.Crud_DB{}) + model.Lawsuit{}.SetCrudInterface(db_lawsuits.Crud_DB{}) + model.MessageAttachement{}.SetCrudInterface(db_message_attachements.Crud_DB{}) + model.MessageSendStatus{}.SetCrudInterface(db_message_send_statuses.Crud_DB{}) + model.MessageType{}.SetCrudInterface(db_message_types.Crud_DB{}) + model.Message{}.SetCrudInterface(db_messages.Crud_DB{}) + model.OrganizationCasebook{}.SetCrudInterface(db_organization_casebook.Crud_DB{}) + model.Organization{}.SetCrudInterface(db_organizations.Crud_DB{}) + +} + +// InitCrudTransport_GRPC - заполняет объекты crud для работы с БД напрямую +func InitCrudTransport_GRPC() { + + model.Connection{}.SetCrudInterface(grpc_connections.Crud_GRPC{}) + model.Employee{}.SetCrudInterface(grpc_employees.Crud_GRPC{}) + model.File{}.SetCrudInterface(grpc_files.Crud_GRPC{}) + model.LawsuitStatusState{}.SetCrudInterface(grpc_lawsuit_status_states.Crud_GRPC{}) + model.LawsuitStatusType{}.SetCrudInterface(grpc_lawsuit_status_types.Crud_GRPC{}) + model.Lawsuit{}.SetCrudInterface(grpc_lawsuits.Crud_GRPC{}) + model.MessageAttachement{}.SetCrudInterface(grpc_message_attachements.Crud_GRPC{}) + model.MessageSendStatus{}.SetCrudInterface(grpc_message_send_statuses.Crud_GRPC{}) + model.MessageType{}.SetCrudInterface(grpc_message_types.Crud_GRPC{}) + model.Message{}.SetCrudInterface(grpc_messages.Crud_GRPC{}) + model.OrganizationCasebook{}.SetCrudInterface(grpc_organization_casebook.Crud_GRPC{}) + model.Organization{}.SetCrudInterface(grpc_organizations.Crud_GRPC{}) + +} + +// InitCrudTransport_NRPC - заполняет объекты crud для работы с БД напрямую +func InitCrudTransport_NRPC() { + + model.Connection{}.SetCrudInterface(nrpc_connections.Crud_NRPC{}) + model.Employee{}.SetCrudInterface(nrpc_employees.Crud_NRPC{}) + model.File{}.SetCrudInterface(nrpc_files.Crud_NRPC{}) + model.LawsuitStatusState{}.SetCrudInterface(nrpc_lawsuit_status_states.Crud_NRPC{}) + model.LawsuitStatusType{}.SetCrudInterface(nrpc_lawsuit_status_types.Crud_NRPC{}) + model.Lawsuit{}.SetCrudInterface(nrpc_lawsuits.Crud_NRPC{}) + model.MessageAttachement{}.SetCrudInterface(nrpc_message_attachements.Crud_NRPC{}) + model.MessageSendStatus{}.SetCrudInterface(nrpc_message_send_statuses.Crud_NRPC{}) + model.MessageType{}.SetCrudInterface(nrpc_message_types.Crud_NRPC{}) + model.Message{}.SetCrudInterface(nrpc_messages.Crud_NRPC{}) + model.OrganizationCasebook{}.SetCrudInterface(nrpc_organization_casebook.Crud_NRPC{}) + model.Organization{}.SetCrudInterface(nrpc_organizations.Crud_NRPC{}) + +} diff --git a/bin/templates/grpc/generation_code.sh b/bin/templates/grpc/generation_code.sh index 7c46f85..800f088 100755 --- a/bin/templates/grpc/generation_code.sh +++ b/bin/templates/grpc/generation_code.sh @@ -3,4 +3,4 @@ ADAPT_PATH=./ clear -protoc --go_out=${ADAPT_PATH} --nrpc_out=./ --go_opt=paths=import --go-grpc_out=${ADAPT_PATH} --go-grpc_opt=paths=import ${ADAPT_PATH}sync_service.proto +protoc --go_out=${ADAPT_PATH} --nrpc_out=./ --go_opt=paths=import --go-grpc_out=${ADAPT_PATH} --go-grpc_opt=paths=import ${ADAPT_PATH}Sync_service.proto diff --git a/internal/config/config.go b/internal/config/config.go index 2b6c962..13f95f5 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -11,25 +11,28 @@ var Settings SettingsINI // SettingsINI - структура для хранения всех нужных переменных окружения type SettingsINI struct { - INCLUDE_TABLES string - EXCLUDE_TABLES string - TEMPLATE_FOLDERNAME string - TEMPLATE_FOLDERNAME_MODEL string - TEMPLATE_FOLDERNAME_DB string - TEMPLATE_FOLDERNAME_GRPC string - TEMPLATE_FOLDERNAME_GRPC_SERVER string - TEMPLATE_FOLDERNAME_GRPC_CLIENT string - TEMPLATE_FOLDERNAME_NRPC string - TEMPLATE_FOLDERNAME_NRPC_SERVER string - TEMPLATE_FOLDERNAME_NRPC_CLIENT string - TEMPLATE_SERVICE_NAME string - NEED_CRUD bool - NEED_GRPC bool - NEED_NRPC bool - SERVICE_NAME string - TEXT_TEMPLATE_MODEL string - TEXT_TEMPLATE_TABLENAME string - HAS_IS_DELETED bool + INCLUDE_TABLES string + EXCLUDE_TABLES string + TEMPLATE_FOLDERNAME string + TEMPLATE_FOLDERNAME_MODEL string + TEMPLATE_FOLDERNAME_DB string + TEMPLATE_FOLDERNAME_GRPC string + TEMPLATE_FOLDERNAME_GRPC_SERVER string + TEMPLATE_FOLDERNAME_GRPC_CLIENT string + TEMPLATE_FOLDERNAME_NRPC string + TEMPLATE_FOLDERNAME_NRPC_SERVER string + TEMPLATE_FOLDERNAME_NRPC_CLIENT string + TEMPLATE_SERVICE_NAME string + TEMPLATE_FOLDERNAME_CRUD_STARTER string + NEED_CRUD bool + NEED_GRPC bool + NEED_NRPC bool + SERVICE_NAME string + SERVICE_REPOSITORY_URL string + TEXT_TEMPLATE_MODEL string + TEXT_TEMPLATE_TABLENAME string + HAS_IS_DELETED bool + NEED_MODEL_ONE_FOLDER bool } // FillSettings загружает переменные окружения в структуру из переменных окружения @@ -49,6 +52,9 @@ func FillSettings() { Settings.TEXT_TEMPLATE_MODEL = os.Getenv("TEXT_TEMPLATE_MODEL") Settings.TEXT_TEMPLATE_TABLENAME = os.Getenv("TEXT_TEMPLATE_TABLENAME") Settings.TEMPLATE_SERVICE_NAME = os.Getenv("TEMPLATE_SERVICE_NAME") + Settings.TEMPLATE_FOLDERNAME_CRUD_STARTER = os.Getenv("TEMPLATE_FOLDERNAME_CRUD_STARTER") + Settings.SERVICE_REPOSITORY_URL = os.Getenv("SERVICE_REPOSITORY_URL") + sHAS_IS_DELETED := os.Getenv("HAS_IS_DELETED") sNEED_CRUD := os.Getenv("NEED_CRUD") @@ -60,6 +66,9 @@ func FillSettings() { sNEED_NRPC := os.Getenv("NEED_NRPC") Settings.NEED_NRPC = BoolFromString(sNEED_NRPC) + sNEED_MODEL_ONE_FOLDER := os.Getenv("NEED_MODEL_ONE_FOLDER") + Settings.NEED_MODEL_ONE_FOLDER = BoolFromString(sNEED_MODEL_ONE_FOLDER) + Settings.SERVICE_NAME = os.Getenv("SERVICE_NAME") if Settings.TEMPLATE_FOLDERNAME == "" { diff --git a/internal/create_files/crud_starter/crud_starter.go b/internal/create_files/crud_starter/crud_starter.go new file mode 100644 index 0000000..ac685c7 --- /dev/null +++ b/internal/create_files/crud_starter/crud_starter.go @@ -0,0 +1,243 @@ +package crud_starter + +import ( + "github.com/ManyakRus/crud_generator/internal/config" + "github.com/ManyakRus/crud_generator/internal/constants" + "github.com/ManyakRus/crud_generator/internal/types" + "github.com/ManyakRus/starter/log" + "github.com/ManyakRus/starter/micro" + "os" + "sort" + "strings" +) + +// CreateAllFiles - создаёт все файлы в папке grpc +func CreateAllFiles(MapAll map[string]*types.Table) error { + var err error + + err = CreateFileCrudStarter(MapAll) + if err != nil { + log.Error("CreateFileCrudStarter() error: ", err) + return err + } + + return err +} + +// CreateFileCrudStarter - создаёт 1 файл в папке grpc +func CreateFileCrudStarter(MapAll map[string]*types.Table) error { + var err error + + if config.Settings.NEED_CRUD == false { + return err + } + + //чтение файлов + DirBin := micro.ProgramDir_bin() + //DirTemplates := DirBin + constants.FolderTemplates + micro.SeparatorFile() + DirReady := DirBin + constants.FolderReady + micro.SeparatorFile() + //DirTemplatesCrudStarter := DirTemplates + config.Settings.TEMPLATE_FOLDERNAME_CRUD_STARTER + micro.SeparatorFile() + //FilenameTemplateCrudStarter := DirTemplatesCrudStarter + "crud_starter.go_" + DirReadyCrudStarter := DirReady + "pkg" + micro.SeparatorFile() + "crud_starter" + micro.SeparatorFile() + FilenameReadyCrudStarter := DirReadyCrudStarter + "crud_starter.go" + + //bytes, err := os.ReadFile(FilenameTemplateCrudStarter) + //if err != nil { + // log.Panic("ReadFile() ", FilenameTemplateCrudStarter, " error: ", err) + //} + //TextCrudStarter := string(bytes) + // + ////заменим название сервиса + //TextCrudStarter = strings.ReplaceAll(TextCrudStarter, config.Settings.TEMPLATE_SERVICE_NAME, config.Settings.SERVICE_NAME) + + TextCrudStarter := constants.TEXT_GENERATED + `package crud_starter` + + //найдём новый текст для каждой таблицы + ModelURL := config.Settings.SERVICE_REPOSITORY_URL + if config.Settings.NEED_MODEL_ONE_FOLDER == false { + ModelURL = ModelURL + "/pkg/model" + } + + //импорт + TextImport := FindTextImport(MapAll, ModelURL) + TextCrudStarter = TextCrudStarter + "\n" + TextImport + + //DB + TextDB := FindTextDB(MapAll, ModelURL) + TextCrudStarter = TextCrudStarter + "\n" + TextDB + + //GRPC + if config.Settings.NEED_GRPC == true { + TextGRPC := FindTextGRPC(MapAll, ModelURL) + TextCrudStarter = TextCrudStarter + "\n" + TextGRPC + } + + //NRPC + if config.Settings.NEED_NRPC == true { + TextNRPC := FindTextNRPC(MapAll, ModelURL) + TextCrudStarter = TextCrudStarter + "\n" + TextNRPC + } + + //запись файла + err = os.WriteFile(FilenameReadyCrudStarter, []byte(TextCrudStarter), constants.FILE_PERMISSIONS) + + return err +} + +// FindTextImport - возвращает текст всех функций .proto для таблицы +func FindTextImport(MapAll map[string]*types.Table, ModelURL string) string { + Otvet := ` +import ( + model "` + ModelURL + `"` + //сортировка по названию таблиц + keys := make([]string, 0, len(MapAll)) + for k := range MapAll { + keys = append(keys, k) + } + sort.Strings(keys) + + TextDB := "" + TextGRPC := "" + TextNRPC := "" + for _, key1 := range keys { + Table1, ok := MapAll[key1] + if ok == false { + log.Panic("MapAll[key1] not found, key: ", key1) + } + TextDB = TextDB + FindTextImportDB1(Table1, ModelURL) + TextGRPC = TextGRPC + FindTextImportGRPC1(Table1, ModelURL) + TextNRPC = TextNRPC + FindTextImportNRPC1(Table1, ModelURL) + } + + Otvet = Otvet + TextDB + "\n" + TextGRPC + "\n" + TextNRPC + + Otvet = Otvet + "\n)" + + return Otvet +} + +// FindTextImportDB1 - возвращает текст всех функций .proto для таблицы +func FindTextImportDB1(Table1 *types.Table, ModelURL string) string { + TableName := strings.ToLower(Table1.Name) + Otvet := "\n\t\"" + ModelURL + "/pkg/db/" + TableName + `"` + + return Otvet +} + +// FindTextImportGRPC1 - возвращает текст всех функций .proto для таблицы +func FindTextImportGRPC1(Table1 *types.Table, ModelURL string) string { + TableName := strings.ToLower(Table1.Name) + Otvet := "\n\t\"" + ModelURL + "/pkg/grpc/grpc_client/grpc_" + TableName + `"` + + return Otvet +} + +// FindTextImportNRPC1 - возвращает текст всех функций .proto для таблицы +func FindTextImportNRPC1(Table1 *types.Table, ModelURL string) string { + TableName := strings.ToLower(Table1.Name) + Otvet := "\n\t\"" + ModelURL + "/pkg/nrpc/grpc_client/nrpc_" + TableName + `"` + + return Otvet +} + +// FindTextNRPC - возвращает текст всех функций .proto для таблицы +func FindTextDB(MapAll map[string]*types.Table, ModelURL string) string { + Otvet := ` +// InitCrudTransport_DB - заполняет объекты crud для работы с БД напрямую +func InitCrudTransport_DB() {` + //сортировка по названию таблиц + keys := make([]string, 0, len(MapAll)) + for k := range MapAll { + keys = append(keys, k) + } + sort.Strings(keys) + + for _, key1 := range keys { + Table1, ok := MapAll[key1] + if ok == false { + log.Panic("MapAll[key1] not found, key: ", key1) + } + Otvet = Otvet + FindTextDB1(Table1) + } + + Otvet = Otvet + "\n}" + + return Otvet +} + +// FindTextNRPC1 - возвращает текст всех функций .proto для таблицы +func FindTextDB1(Table1 *types.Table) string { + TableName := strings.ToLower(Table1.Name) + ModelName := Table1.NameGo + Otvet := "\n\t" + "model." + ModelName + "{}.SetCrudInterface(db_" + TableName + ".Crud_DB{})" + + return Otvet +} + +// FindTextNRPC - возвращает текст всех функций .proto для таблицы +func FindTextGRPC(MapAll map[string]*types.Table, ModelURL string) string { + Otvet := ` +// InitCrudTransport_GRPC - заполняет объекты crud для работы с БД напрямую +func InitCrudTransport_GRPC() {` + //сортировка по названию таблиц + keys := make([]string, 0, len(MapAll)) + for k := range MapAll { + keys = append(keys, k) + } + sort.Strings(keys) + + for _, key1 := range keys { + Table1, ok := MapAll[key1] + if ok == false { + log.Panic("MapAll[key1] not found, key: ", key1) + } + Otvet = Otvet + FindTextGRPC1(Table1) + } + + Otvet = Otvet + "\n}" + + return Otvet +} + +// FindTextNRPC1 - возвращает текст всех функций .proto для таблицы +func FindTextGRPC1(Table1 *types.Table) string { + TableName := strings.ToLower(Table1.Name) + ModelName := Table1.NameGo + Otvet := "\n\t" + "model." + ModelName + "{}.SetCrudInterface(grpc_" + TableName + ".Crud_GRPC{})" + + return Otvet +} + +// FindTextNRPC - возвращает текст всех функций .proto для таблицы +func FindTextNRPC(MapAll map[string]*types.Table, ModelURL string) string { + Otvet := ` +// InitCrudTransport_NRPC - заполняет объекты crud для работы с БД напрямую +func InitCrudTransport_NRPC() {` + //сортировка по названию таблиц + keys := make([]string, 0, len(MapAll)) + for k := range MapAll { + keys = append(keys, k) + } + sort.Strings(keys) + + for _, key1 := range keys { + Table1, ok := MapAll[key1] + if ok == false { + log.Panic("MapAll[key1] not found, key: ", key1) + } + Otvet = Otvet + FindTextNRPC1(Table1) + } + + Otvet = Otvet + "\n}" + + return Otvet +} + +// FindTextNRPC1 - возвращает текст всех функций .proto для таблицы +func FindTextNRPC1(Table1 *types.Table) string { + TableName := strings.ToLower(Table1.Name) + ModelName := Table1.NameGo + Otvet := "\n\t" + "model." + ModelName + "{}.SetCrudInterface(nrpc_" + TableName + ".Crud_NRPC{})" + + return Otvet +} diff --git a/internal/create_files/crud_starter/crud_starter_test.go b/internal/create_files/crud_starter/crud_starter_test.go new file mode 100644 index 0000000..b89077e --- /dev/null +++ b/internal/create_files/crud_starter/crud_starter_test.go @@ -0,0 +1 @@ +package crud_starter diff --git a/internal/folders/folders.go b/internal/folders/folders.go index 4ed0377..95528ab 100644 --- a/internal/folders/folders.go +++ b/internal/folders/folders.go @@ -81,7 +81,8 @@ func CreateAllFolders() { } log.Info("CreateFolder() ", Filename) } - // + + //model Filename = dir + config.Settings.SERVICE_NAME + micro.SeparatorFile() + "pkg" + micro.SeparatorFile() + "model" ok, err = micro.FileExists(Filename) if ok == false || err != nil { @@ -91,7 +92,9 @@ func CreateAllFolders() { } log.Info("CreateFolder() ", Filename) } + if config.Settings.NEED_CRUD == true { + //db Filename = dir + config.Settings.SERVICE_NAME + micro.SeparatorFile() + "pkg" + micro.SeparatorFile() + "db" ok, err = micro.FileExists(Filename) if ok == false || err != nil { @@ -101,6 +104,18 @@ func CreateAllFolders() { } log.Info("CreateFolder() ", Filename) } + + //crud_starter + Filename = dir + config.Settings.SERVICE_NAME + micro.SeparatorFile() + "pkg" + micro.SeparatorFile() + "crud_starter" + ok, err = micro.FileExists(Filename) + if ok == false || err != nil { + err = CreateFolder(Filename, 0777) + if err != nil { + log.Panic("CreateFolder() ", Filename, " error: ", err) + } + log.Info("CreateFolder() ", Filename) + } + } if config.Settings.NEED_GRPC == true { diff --git a/internal/logic/logic.go b/internal/logic/logic.go index f0073eb..7e918e5 100644 --- a/internal/logic/logic.go +++ b/internal/logic/logic.go @@ -1,6 +1,7 @@ package logic import ( + "github.com/ManyakRus/crud_generator/internal/create_files/crud_starter" "github.com/ManyakRus/crud_generator/internal/create_files/db" "github.com/ManyakRus/crud_generator/internal/create_files/grpc_client" "github.com/ManyakRus/crud_generator/internal/create_files/grpc_proto" @@ -63,6 +64,12 @@ func StartFillAll() error { return err } + //crud_starter + err = crud_starter.CreateAllFiles(MapAll) + if err != nil { + return err + } + return err }