From 1550cf0232fec6e566f25334393414fe1d28a5a7 Mon Sep 17 00:00:00 2001 From: Nikitin Aleksandr Date: Tue, 14 Nov 2023 18:03:01 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + bin/templates/cmd/main.go_ | 36 +++++++ .../internal/server_grpc/server_grpc_func.go_ | 18 ++++ .../server_grpc/server_grpc_starter.go_ | 95 +++++++++++++++++++ .../pkg/crud_starter/crud_starter_manual.go | 16 ++++ .../calc_struct_version.go | 24 +++++ .../calc_struct_version_test.go | 1 + .../pkg/network/grpc/constants/constants.go | 5 + internal/config/config.go | 3 + readme.rus | 3 + 10 files changed, 203 insertions(+) create mode 100644 bin/templates/cmd/main.go_ create mode 100644 bin/templates/internal/server_grpc/server_grpc_func.go_ create mode 100644 bin/templates/internal/server_grpc/server_grpc_starter.go_ create mode 100644 bin/templates/pkg/crud_starter/crud_starter_manual.go create mode 100644 bin/templates/pkg/functions/calc_struct_version/calc_struct_version.go create mode 100644 bin/templates/pkg/functions/calc_struct_version/calc_struct_version_test.go create mode 100644 bin/templates/pkg/network/grpc/constants/constants.go diff --git a/README.md b/README.md index 3b3022a..bd3fe0c 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ For each table in the Postgres SQL database, files will be created to perform cr create, read, update, save, delete (or delete + restore) files are generated: 1. model - struct structure with all fields from the database, and gorm + db + json annotations + Tables with fields in the database must be created manually in advance. + The code generator will find all the tables and their fields in the database and use them. 2. db - files for performing crud operations, exchange with the database, as well as files with tests 3. grpc server - files for performing crud operations over the network, using the GRPC protocol, diff --git a/bin/templates/cmd/main.go_ b/bin/templates/cmd/main.go_ new file mode 100644 index 0000000..1ebd51d --- /dev/null +++ b/bin/templates/cmd/main.go_ @@ -0,0 +1,36 @@ +package main + +import ( + configmain "github.com/ManyakRus/starter/config" + "github.com/ManyakRus/starter/stopapp" + "gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/crud_starter" +) + +// main - старт приложения +func main() { + StartApp() +} + +// StartApp - выполнение всех операций для старта приложения +func StartApp() { + configmain.LoadEnv() + + stopapp.StartWaitStop() + crud_starter.InitCrudTransport_DB() + postgres_gorm.StartDB() + StartGRPSServer() + StartNRPSServer() + + stopapp.GetWaitGroup_Main().Wait() + +} + +// StartGRPSServer - запускает GRPC server +func StartGRPSServer() { + server_grpc.Start() +} + +// StartNRPSServer - запускает GRPC server +func StartNRPSServer() { + server_nrpc.Start() +} diff --git a/bin/templates/internal/server_grpc/server_grpc_func.go_ b/bin/templates/internal/server_grpc/server_grpc_func.go_ new file mode 100644 index 0000000..f964de6 --- /dev/null +++ b/bin/templates/internal/server_grpc/server_grpc_func.go_ @@ -0,0 +1,18 @@ +package server_grpc + +import ( + "errors" + "github.com/ManyakRus/starter/micro" + "gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/network/grpc/grpc_client/constants" +) + +// ErrorModelVersion +func ErrorModelVersion(Model interface{}) error { + var err error + + TypeName := micro.GetType(Model) + + s := constants.TEXT_ERROR_MODEL_VERSION + " " + TypeName + err = errors.New(s) + return err +} diff --git a/bin/templates/internal/server_grpc/server_grpc_starter.go_ b/bin/templates/internal/server_grpc/server_grpc_starter.go_ new file mode 100644 index 0000000..0f0b134 --- /dev/null +++ b/bin/templates/internal/server_grpc/server_grpc_starter.go_ @@ -0,0 +1,95 @@ +package server_grpc + +import ( + "github.com/ManyakRus/starter/contextmain" + "github.com/ManyakRus/starter/log" + "github.com/ManyakRus/starter/stopapp" + "gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/network/grpc/grpc_proto" + "google.golang.org/grpc" + "net" + "os" +) + +// ServerGRPC is used to implement UnimplementedSyncServiceServer. +type ServerGRPC struct { + grpc_proto.UnimplementedSyncServiceServer +} + +type SettingsINI struct { + GRPC_PORT string +} + +var Settings SettingsINI + +var Conn *grpc.Server + +func Connect() { + //var err error + + if Settings.GRPC_PORT == "" { + FillSettings() + } + + Conn = grpc.NewServer() + grpc_proto.RegisterSyncServiceServer(Conn, &ServerGRPC{}) + + stopapp.GetWaitGroup_Main().Add(1) + go serve_go() + +} + +func serve_go() { + defer stopapp.GetWaitGroup_Main().Done() + + lis, err := net.Listen("tcp", ":"+Settings.GRPC_PORT) + if err != nil { + log.Fatalf("failed to listen: %v", err) + } + + log.Printf("Server GRPC listening at %v", lis.Addr()) + if err := Conn.Serve(lis); err != nil { + log.Fatalf("failed to serve: %v", err) + } + + return +} + +func FillSettings() { + Settings = SettingsINI{} + Settings.GRPC_PORT = os.Getenv("GRPC_PORT") + if Settings.GRPC_PORT == "" { + log.Panic("Need fill GRPC_PORT ! in OS Environment ") + } + +} + +// WaitStop - ожидает отмену глобального контекста +func WaitStop() { + defer stopapp.GetWaitGroup_Main().Done() + + select { + case <-contextmain.GetContext().Done(): + log.Warn("Context app is canceled. grpc_connect") + } + + //ждём пока отправляемых сейчас сообщений будет =0 + stopapp.WaitTotalMessagesSendingNow("grpc_connect") + + //закрываем соединение + CloseConnection() + +} + +// Start - необходимые процедуры для запуска сервера GRPC +func Start() { + Connect() + + stopapp.GetWaitGroup_Main().Add(1) + go WaitStop() + +} + +func CloseConnection() { + Conn.Stop() +} + diff --git a/bin/templates/pkg/crud_starter/crud_starter_manual.go b/bin/templates/pkg/crud_starter/crud_starter_manual.go new file mode 100644 index 0000000..568ae34 --- /dev/null +++ b/bin/templates/pkg/crud_starter/crud_starter_manual.go @@ -0,0 +1,16 @@ +package crud_starter + +import ( +) + +// initCrudTransport_manual_DB - заполняет объекты crud для работы с БД напрямую +func initCrudTransport_manual_DB() { +} + +// initCrudTransport_manual_GRPC - заполняет объекты crud для работы с БД напрямую +func initCrudTransport_manual_GRPC() { +} + +// initCrudTransport_manual_NRPC - заполняет объекты crud для работы с БД напрямую +func initCrudTransport_manual_NRPC() { +} diff --git a/bin/templates/pkg/functions/calc_struct_version/calc_struct_version.go b/bin/templates/pkg/functions/calc_struct_version/calc_struct_version.go new file mode 100644 index 0000000..ea44705 --- /dev/null +++ b/bin/templates/pkg/functions/calc_struct_version/calc_struct_version.go @@ -0,0 +1,24 @@ +package calc_struct_version + +import ( + "github.com/ManyakRus/starter/micro" + "reflect" +) + +// CalcStructVersion - вычисляет версию модели +func CalcStructVersion(t reflect.Type) uint32 { + var ReturnVar uint32 + + names := make([]string, t.NumField()) + + // имя + тип поля + s := "" + for i := range names { + s = s + t.Field(i).Name + s = s + t.Field(i).Type.Name() + } + + ReturnVar = micro.Hash(s) + + return ReturnVar +} diff --git a/bin/templates/pkg/functions/calc_struct_version/calc_struct_version_test.go b/bin/templates/pkg/functions/calc_struct_version/calc_struct_version_test.go new file mode 100644 index 0000000..b94001d --- /dev/null +++ b/bin/templates/pkg/functions/calc_struct_version/calc_struct_version_test.go @@ -0,0 +1 @@ +package calc_struct_version diff --git a/bin/templates/pkg/network/grpc/constants/constants.go b/bin/templates/pkg/network/grpc/constants/constants.go new file mode 100644 index 0000000..809887d --- /dev/null +++ b/bin/templates/pkg/network/grpc/constants/constants.go @@ -0,0 +1,5 @@ +package constants + +var TIMEOUT_SECONDS = 30 + +const TEXT_ERROR_MODEL_VERSION = "Error: wrong version object model" diff --git a/internal/config/config.go b/internal/config/config.go index 2cf8c8e..097cae8 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -47,6 +47,7 @@ type SettingsINI struct { PREFIX_SERVER_GRPC string COMMENT_MODEL_STRUCT string TEXT_MODULE_GENERATED string + TEMPLATE_FOLDERNAME_MAIN string } // FillSettings загружает переменные окружения в структуру из переменных окружения @@ -134,6 +135,8 @@ func FillSettings() { NEED_CREATE_NRPC_CLIENT_TEST := BoolFromString(sNEED_CREATE_NRPC_CLIENT_TEST) Settings.NEED_CREATE_NRPC_CLIENT_TEST = NEED_CREATE_NRPC_CLIENT_TEST + Settings.TEMPLATE_FOLDERNAME_MAIN = os.Getenv("TEMPLATE_FOLDERNAME_MAIN") + } // CurrentDirectory - возвращает текущую директорию ОС diff --git a/readme.rus b/readme.rus index 3687a91..576803d 100644 --- a/readme.rus +++ b/readme.rus @@ -5,6 +5,8 @@ create, read, update, save, delete (или delete + restore) генерируются файлы: 1. model - структура struct со всеми полями из БД, и аннотациями gorm + db + json + Таблицы с полями в базе данных должны быть созданы заранее вручную. + Кодогенератор найдёт в базе все таблицы и их поля, и использует их. 2. db - файлы выполнения crud операций, обмен с базой данных, а также файлы с тестами 3. grpc server - файлы для выполнения crud операций по сети, по протоколу GRPC, @@ -17,6 +19,7 @@ create, read, update, save, delete (или delete + restore) а также файлы с тестами 7. crud_starter - файл с функциями переключения на нужный протокол db или grpc или nrpc + Шаблоны кода хранятся в папке bin/templates. Шаблон кода - это файл .go скопированный из реального проекта - поэтому шаблон сделать (поменять на свой) легко - просто скопировать свой файл.