You've already forked crud_generator
							
							
				mirror of
				https://github.com/ManyakRus/crud_generator.git
				synced 2025-10-31 00:17:48 +02:00 
			
		
		
		
	сделал Read_ctx(ctx context.Context, db *gorm.DB, m *calendars.Calendar)
This commit is contained in:
		| @@ -151,23 +151,35 @@ message Request_ID_String { | ||||
|     string StringFind = 3; // строка поиска | ||||
| } | ||||
|  | ||||
| // Request_Model_MassString - модель и массив строк | ||||
| message Request_Model_MassString { | ||||
|     uint32 VersionModel= 1; //версия структуры модели | ||||
|     string ModelString = 2; //объект-модель в формате json | ||||
|     repeated string MassNames	= 3; //массив строк | ||||
| } | ||||
|  | ||||
|  | ||||
| // -------------------------- Response ---------------------------------------------- | ||||
|  | ||||
| // Response - возвращает строка json Модель | ||||
| message Response { | ||||
|     string ModelString 	= 1; //объект-модель в формате json | ||||
| } | ||||
|  | ||||
| // ResponseFloat64 - возвращает float64 | ||||
| message ResponseFloat64 { | ||||
|     double Otvet 	= 1; //Ответ - число | ||||
| } | ||||
|  | ||||
| // ResponseInt64 - возвращает int64 | ||||
| message ResponseInt64 { | ||||
|     int64 Otvet 	= 1; //Ответ - число | ||||
| } | ||||
|  | ||||
| // Response - параметры ответа на клиент | ||||
| message ResponseEmpty { | ||||
| } | ||||
|  | ||||
| // Response - параметры ответа на клиент | ||||
| message ResponseMass { | ||||
|     repeated string MassModelString 	= 1; //массив объект-модель в формате json | ||||
|   | ||||
| @@ -2,10 +2,49 @@ package server_grpc | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
| 	"github.com/ManyakRus/starter/micro" | ||||
| 	"github.com/ManyakRus/starter/contextmain" | ||||
| 	"github.com/ManyakRus/starter/postgres_gorm" | ||||
| 	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/api/grpc_proto" | ||||
| 	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/object_model/entities/lawsuit_status_types" | ||||
| 	"github.com/ManyakRus/starter/postgres_gorm" | ||||
| 	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/db/constants" | ||||
| 	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/db/crud/crud_lawsuit_status_types" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // LawsuitStatusType_UpdateManyFields - изменяет только нужные колонки в базе данных | ||||
| func (s *ServerGRPC) LawsuitStatusType_UpdateManyFields(ctx context.Context, Request *grpc_proto.Request_Model_MassString) (*grpc_proto.ResponseEmpty, error) { | ||||
| 	var Otvet grpc_proto.ResponseEmpty | ||||
| 	var err error | ||||
|  | ||||
| 	//проверим контекст уже отменён | ||||
| 	if micro.ContextDone(ctx) == true { | ||||
| 		err = context.Canceled | ||||
| 		return &Otvet, err | ||||
| 	} | ||||
|  | ||||
| 	//проверим совпадения версии модели | ||||
| 	VersionServer := lawsuit_status_types.LawsuitStatusType{}.GetStructVersion() | ||||
| 	VersionClient := Request.VersionModel | ||||
| 	if VersionServer != VersionClient { | ||||
| 		err = ErrorModelVersion(lawsuit_status_types.LawsuitStatusType{}) | ||||
| 		return &Otvet, err | ||||
| 	} | ||||
|  | ||||
| 	//получим модель из строки JSON | ||||
| 	Model := lawsuit_status_types.LawsuitStatusType{} | ||||
| 	err = Model.GetModelFromJSON(Request.ModelString) | ||||
| 	if err != nil { | ||||
| 		return &Otvet, err | ||||
| 	} | ||||
|  | ||||
| 	//запрос в БД | ||||
| 	db := postgres_gorm.GetConnection() | ||||
| 	err = crud_lawsuit_status_types.UpdateManyFields_ctx(ctx, db, &Model, Request.MassNames) | ||||
| 	if err != nil { | ||||
| 		return &Otvet, err | ||||
| 	} | ||||
|  | ||||
| 	return &Otvet, err | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -8,3 +8,36 @@ import ( | ||||
| 	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/object_model/entities/lawsuit_status_types" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestServerGRPC_LawsuitStatusType_UpdateManyFields(t *testing.T) { | ||||
| 	config_main.LoadEnv() | ||||
| 	crud_starter.InitCrudTransport_DB() | ||||
| 	var err error | ||||
|  | ||||
| 	//прочитаем из БД | ||||
| 	ctx := context.Background() | ||||
| 	Request := grpc_proto.RequestId{} | ||||
| 	Request.ID = LawsuitStatusType_ID_Test | ||||
| 	Request.VersionModel = lawsuit_status_types.LawsuitStatusType{}.GetStructVersion() | ||||
|  | ||||
| 	server1 := &ServerGRPC{} | ||||
| 	Response1, err := server1.LawsuitStatusType_Read(ctx, &Request) | ||||
| 	if err != nil { | ||||
| 		t.Error("TestServerGRPC_LawsuitStatusType_UpdateManyFields() error: ", err) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// запишем в БД с пустым списком полей (не запишется) | ||||
| 	var ModelString string | ||||
| 	ModelString = Response1.ModelString | ||||
| 	RequestModel := grpc_proto.Request_Model_MassString{} | ||||
| 	RequestModel.VersionModel = lawsuit_status_types.LawsuitStatusType{}.GetStructVersion() | ||||
| 	RequestModel.ModelString = ModelString | ||||
| 	RequestModel.MassNames = nil | ||||
|  | ||||
| 	_, err = server1.LawsuitStatusType_UpdateManyFields(ctx, &RequestModel) | ||||
| 	if err != nil { | ||||
| 		t.Error("TestServerGRPC_LawsuitStatusType_UpdateManyFields() error: ", err) | ||||
| 	} | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -12,3 +12,37 @@ import ( | ||||
| 	"gorm.io/gorm" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // UpdateManyFields - изменяет несколько полей в базе данных | ||||
| // MassNeedUpdateFields - список полей структуры golang для обновления | ||||
| func (crud Crud_DB) UpdateManyFields(m *lawsuit_status_types.LawsuitStatusType, MassNeedUpdateFields []string) error { | ||||
| 	var err error | ||||
|  | ||||
| 	ctxMain := contextmain.GetContext() | ||||
| 	ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*time.Duration(constants.TIMEOUT_DB_SECONDS)) | ||||
| 	defer ctxCancelFunc() | ||||
|  | ||||
| 	db := postgres_gorm.GetConnection() | ||||
|  | ||||
| 	err = UpdateManyFields_ctx(ctx, db, m, MassNeedUpdateFields) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // UpdateManyFields_ctx - изменяет несколько полей в базе данных | ||||
| // с учётом контекста и соединения к БД | ||||
| // MassNeedUpdateFields - список полей структуры golang для обновления | ||||
| func UpdateManyFields_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types.LawsuitStatusType, MassNeedUpdateFields []string) error { | ||||
| 	var err error | ||||
| 	if micro.ContextDone(ctx) == true { | ||||
| 		err = context.Canceled | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	if m.ID == 0 { | ||||
| 		err = errors.New(m.TableNameDB() + " UpdateManyFields() error: ID=0") | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	err = create_update_ctx(ctx, db, m, false, MassNeedUpdateFields) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
| @@ -13,6 +13,7 @@ func (crud Crud_DB) Read(m *lawsuit_status_types.LawsuitStatusType) error { | ||||
| } | ||||
|  | ||||
| // Read_ctx - изменяет 1 поле ColumnName в базе данных | ||||
| // с учётом контекста и соединения к БД | ||||
| func Read_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types.LawsuitStatusType) error { | ||||
| 	var err error | ||||
|  | ||||
|   | ||||
| @@ -6,3 +6,26 @@ import ( | ||||
| 	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/object_model/entities/lawsuit_status_types" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
|  | ||||
| func TestUpdateManyFields(t *testing.T) { | ||||
| 	config_main.LoadEnv() | ||||
|  | ||||
| 	postgres_gorm.Connect() | ||||
| 	defer postgres_gorm.CloseConnection() | ||||
|  | ||||
| 	//прочитаем из БД | ||||
| 	crud := Crud_DB{} | ||||
| 	Model := lawsuit_status_types.LawsuitStatusType{} | ||||
| 	Model.ID = Postgres_ID_Test | ||||
| 	err := crud.Read(&Model) | ||||
| 	if err != nil { | ||||
| 		t.Error("TestUpdateManyFields() Read() error: ", err) | ||||
| 	} | ||||
|  | ||||
| 	//запишем в БД это же значение | ||||
| 	err = crud.UpdateManyFields(&Otvet, nil) | ||||
| 	if err != nil { | ||||
| 		t.Error("TestUpdateManyFields() UpdateManyFields() error: ", err) | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -78,7 +78,7 @@ func Save_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types.LawsuitS | ||||
| 	} | ||||
|  | ||||
| 	is_create := !micro.BoolFromInt64(int64(m.ID)) | ||||
| 	err = create_update_ctx(ctx, db, m, is_create) | ||||
| 	err = create_update_ctx(ctx, db, m, is_create, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -102,7 +102,7 @@ func Update_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types.Lawsui | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	err = create_update_ctx(ctx, db, m, false) | ||||
| 	err = create_update_ctx(ctx, db, m, false, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -126,7 +126,7 @@ func Create_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types.Lawsui | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	err = create_update_ctx(ctx, db, m, true) | ||||
| 	err = create_update_ctx(ctx, db, m, true, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -140,12 +140,12 @@ func (crud Crud_DB) create_update(m *lawsuit_status_types.LawsuitStatusType, is_ | ||||
|  | ||||
| 	db := postgres_gorm.GetConnection() | ||||
|  | ||||
| 	err = create_update_ctx(ctx, db, m, is_create) | ||||
| 	err = create_update_ctx(ctx, db, m, is_create, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // create_update_ctx - записывает объект в базу данных | ||||
| func create_update_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types.LawsuitStatusType, is_create bool) error { | ||||
| func create_update_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types.LawsuitStatusType, is_create bool, MassNeedUpdateFields []string) error { | ||||
| 	var err error | ||||
|  | ||||
| 	// log.Trace("start Save() ", TableName, " id: ", int64(m.ID)) | ||||
| @@ -168,16 +168,21 @@ func create_update_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	// | ||||
| 	db.WithContext(ctx) | ||||
|  | ||||
| 	// заполним даты | ||||
| 	//Text_modified_at | ||||
| 	//Text_is_deleted_deleted_at | ||||
| 	//Text_created_at | ||||
| 	 | ||||
| 	// | ||||
| 	tx := db.WithContext(ctx).Model(&m) | ||||
|  | ||||
| 	//колонки для обновления | ||||
| 	MassNeedFields := crud_functions.MassNeedFields_from_MassNeedUpdateFields(MassNeedUpdateFields) | ||||
| 	if len(MassNeedUpdateFields) > 0 { | ||||
| 		tx = tx.Select(MassNeedFields) | ||||
| 	} | ||||
|  | ||||
| 	//колонки с null | ||||
| 	tx := db | ||||
| 	MassOmit := make([]string, 0) | ||||
| 	var ColumnName string | ||||
|  | ||||
| @@ -200,7 +205,11 @@ func create_update_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types | ||||
|  | ||||
| 	//запишем NULL в пустые колонки | ||||
| 	MapOmit := crud_functions.MapOmit_from_MassOmit(MassOmit) | ||||
| 	tx = db.Model(&m).Updates(MapOmit) | ||||
| 	tx = db.Model(&m) | ||||
| 	if len(MassNeedUpdateFields) > 0 { | ||||
| 		tx = tx.Select(MassNeedFields) | ||||
| 	} | ||||
| 	tx = tx.Updates(MapOmit) | ||||
| 	err = tx.Error | ||||
| 	if err != nil { | ||||
| 		err = fmt.Errorf(m.TableNameDB()+" Create_Update() id: %v, error: %v", m.ID, err) | ||||
|   | ||||
| @@ -78,7 +78,7 @@ func Save_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types.LawsuitS | ||||
| 	} | ||||
|  | ||||
| 	is_create := !micro.BoolFromInt64(int64(m.ID)) | ||||
| 	err = create_update_ctx(ctx, db, m, is_create) | ||||
| 	err = create_update_ctx(ctx, db, m, is_create, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -102,7 +102,7 @@ func Update_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types.Lawsui | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	err = create_update_ctx(ctx, db, m, false) | ||||
| 	err = create_update_ctx(ctx, db, m, false, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -126,7 +126,7 @@ func Create_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types.Lawsui | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	err = create_update_ctx(ctx, db, m, true) | ||||
| 	err = create_update_ctx(ctx, db, m, true, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -140,12 +140,12 @@ func (crud Crud_DB) create_update(m *lawsuit_status_types.LawsuitStatusType, is_ | ||||
|  | ||||
| 	db := postgres_gorm.GetConnection() | ||||
|  | ||||
| 	err = create_update_ctx(ctx, db, m, is_create) | ||||
| 	err = create_update_ctx(ctx, db, m, is_create, nil) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // create_update_ctx - записывает объект в базу данных | ||||
| func create_update_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types.LawsuitStatusType, is_create bool) error { | ||||
| func create_update_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types.LawsuitStatusType, is_create bool, MassNeedUpdateFields []string) error { | ||||
| 	var err error | ||||
|  | ||||
| 	// log.Trace("start Save() ", TableName, " id: ", int64(m.ID)) | ||||
| @@ -168,16 +168,21 @@ func create_update_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	// | ||||
| 	db.WithContext(ctx) | ||||
|  | ||||
| 	// заполним даты | ||||
| 	//Text_modified_at | ||||
| 	//Text_is_deleted_deleted_at | ||||
| 	//Text_created_at | ||||
|  | ||||
| 	// | ||||
| 	tx := db.WithContext(ctx).Model(&m) | ||||
|  | ||||
| 	//колонки для обновления | ||||
| 	MassNeedFields := crud_functions.MassNeedFields_from_MassNeedUpdateFields(MassNeedUpdateFields) | ||||
| 	if len(MassNeedUpdateFields) > 0 { | ||||
| 		tx = tx.Select(MassNeedFields) | ||||
| 	} | ||||
|  | ||||
| 	//колонки с null | ||||
| 	tx := db | ||||
| 	MassOmit := make([]string, 0) | ||||
| 	var ColumnName string | ||||
|  | ||||
| @@ -200,7 +205,11 @@ func create_update_ctx(ctx context.Context, db *gorm.DB, m *lawsuit_status_types | ||||
|  | ||||
| 	//запишем NULL в пустые колонки | ||||
| 	MapOmit := crud_functions.MapOmit_from_MassOmit(MassOmit) | ||||
| 	tx = db.Model(&m).Updates(MapOmit) | ||||
| 	tx = db.Model(&m) | ||||
| 	if len(MassNeedUpdateFields) > 0 { | ||||
| 		tx = tx.Select(MassNeedFields) | ||||
| 	} | ||||
| 	tx = tx.Updates(MapOmit) | ||||
| 	err = tx.Error | ||||
| 	if err != nil { | ||||
| 		err = fmt.Errorf(m.TableNameDB()+" Create_Update() id: %v, error: %v", m.ID, err) | ||||
|   | ||||
| @@ -1,6 +1,9 @@ | ||||
| package crud_functions | ||||
|  | ||||
| import "gorm.io/gorm" | ||||
| import ( | ||||
| 	"gorm.io/gorm" | ||||
| 	"slices" | ||||
| ) | ||||
|  | ||||
| // MapOmit_from_MassOmit - создает MapOmit из MassOmit | ||||
| func MapOmit_from_MassOmit(MassOmit []string) map[string]interface{} { | ||||
| @@ -11,3 +14,24 @@ func MapOmit_from_MassOmit(MassOmit []string) map[string]interface{} { | ||||
|  | ||||
| 	return MapOmit | ||||
| } | ||||
|  | ||||
| // MassNeedFields_from_MassNeedUpdateFields - создает MassFields из MassNeedUpdateFields | ||||
| // копирует все элементты и добавляет "ModifiedAt" и др. | ||||
| func MassNeedFields_from_MassNeedUpdateFields(MassNeedUpdateFields []string) []string { | ||||
| 	//колонки для обновления | ||||
| 	MassFields := make([]string, len(MassNeedUpdateFields)) | ||||
| 	copy(MassFields, MassNeedUpdateFields) | ||||
| 	MassFields = append(MassFields, "ModifiedAt") | ||||
|  | ||||
| 	// DeletedAt вместе с IsDeleted | ||||
| 	if slices.Contains(MassNeedUpdateFields, "IsDeleted") == true { | ||||
| 		MassFields = append(MassFields, "DeletedAt") | ||||
| 	} | ||||
|  | ||||
| 	//// CreatedAt вместе с ID=0 | ||||
| 	//if slices.Contains(MassNeedUpdateFields, "ID") == true { | ||||
| 	//	MassFields = append(MassFields, "CreatedAt") | ||||
| 	//} | ||||
|  | ||||
| 	return MassFields | ||||
| } | ||||
|   | ||||
| @@ -1 +1,51 @@ | ||||
| package crud_functions | ||||
|  | ||||
| import ( | ||||
| 	"gorm.io/gorm" | ||||
| 	"reflect" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestMapOmit_from_MassOmit(t *testing.T) { | ||||
| 	t.Run("Empty input slice", func(t *testing.T) { | ||||
| 		MassOmit := []string{} | ||||
| 		result := MapOmit_from_MassOmit(MassOmit) | ||||
| 		if len(result) != 0 { | ||||
| 			t.Errorf("Expected an empty map, but got %v", result) | ||||
| 		} | ||||
| 	}) | ||||
|  | ||||
| 	t.Run("Non-empty input slice", func(t *testing.T) { | ||||
| 		MassOmit := []string{"key1", "key2"} | ||||
| 		result := MapOmit_from_MassOmit(MassOmit) | ||||
| 		expected := map[string]interface{}{ | ||||
| 			"key1": gorm.Expr("NULL"), | ||||
| 			"key2": gorm.Expr("NULL"), | ||||
| 		} | ||||
| 		if !reflect.DeepEqual(result, expected) { | ||||
| 			t.Errorf("Expected %v, but got %v", expected, result) | ||||
| 		} | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestMassNeedFields_from_MassNeedUpdateFields(t *testing.T) { | ||||
| 	tests := []struct { | ||||
| 		name     string | ||||
| 		input    []string | ||||
| 		expected []string | ||||
| 	}{ | ||||
| 		{"Empty input", []string{}, []string{"ModifiedAt"}}, | ||||
| 		//{"Contains IsDeleted and ID", []string{"IsDeleted", "ID"}, []string{"IsDeleted", "ID", "ModifiedAt", "DeletedAt", "CreatedAt"}}, | ||||
| 		{"Contains only IsDeleted", []string{"IsDeleted"}, []string{"IsDeleted", "ModifiedAt", "DeletedAt"}}, | ||||
| 		//{"Contains only ID", []string{"ID"}, []string{"ID", "ModifiedAt", "CreatedAt"}}, | ||||
| 	} | ||||
|  | ||||
| 	for _, tt := range tests { | ||||
| 		t.Run(tt.name, func(t *testing.T) { | ||||
| 			result := MassNeedFields_from_MassNeedUpdateFields(tt.input) | ||||
| 			if !reflect.DeepEqual(result, tt.expected) { | ||||
| 				t.Errorf("Expected %v, but got %v", tt.expected, result) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package grpc_lawsuit_status_types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
| 	"github.com/ManyakRus/starter/log" | ||||
| 	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/api/grpc_proto" | ||||
| 	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/network/grpc/grpc_client" | ||||
| @@ -9,5 +10,44 @@ import ( | ||||
| 	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/network/grpc_nrpc" | ||||
| 	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/network/nrpc/nrpc_client" | ||||
| 	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/object_model/entities/lawsuit_status_types" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // UpdateManyFields - обновляет несколько полей в базе данных, по ИД | ||||
| func (crud Crud_GRPC) UpdateManyFields(m *lawsuit_status_types.LawsuitStatusType, MassNeedUpdateFields []string) error { | ||||
| 	var err error | ||||
|  | ||||
| 	// подключение | ||||
| 	grpc_client.Connect_GRPC_NRPC() | ||||
|  | ||||
| 	// подготовка запроса | ||||
| 	var VersionModel = crud.GetVersionModel() | ||||
|  | ||||
| 	ModelString, err := m.GetJSON() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	Request := &grpc_proto.Request_Model_MassString{} | ||||
| 	Request.VersionModel = VersionModel | ||||
| 	Request.ModelString = ModelString | ||||
| 	Request.MassNames = MassNeedUpdateFields | ||||
|  | ||||
| 	ctxMain := context.Background() | ||||
| 	ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*time.Duration(grpc_constants.GetTimeoutSeconds())) | ||||
| 	defer ctxCancelFunc() | ||||
|  | ||||
| 	// запрос | ||||
| 	if grpc_nrpc.NeedNRPC == true { | ||||
| 		_, err = nrpc_client.Client.LawsuitStatusType_UpdateManyFields(Request) | ||||
| 	} else { | ||||
| 		_, err = grpc_client.Client.LawsuitStatusType_UpdateManyFields(ctx, Request) | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		if grpc_client.IsErrorModelVersion(err) == true { | ||||
| 			log.Panic(err) | ||||
| 		} | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return err | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -6,3 +6,31 @@ import ( | ||||
| 	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/object_model/entities/lawsuit_status_types" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestCrud_GRPC_UpdateManyFields(t *testing.T) { | ||||
| 	config_main.LoadEnv() | ||||
| 	grpc_client.Connect() | ||||
| 	defer grpc_client.CloseConnection() | ||||
|  | ||||
| 	//прочитаем из БД | ||||
| 	crud := Crud_GRPC{} | ||||
| 	Otvet := lawsuit_status_types.LawsuitStatusType{} | ||||
| 	Otvet.ID = Postgres_ID_Test | ||||
| 	err := crud.Read(&Otvet) | ||||
| 	if err != nil { | ||||
| 		t.Error("TestCrud_GRPC_UpdateManyFields() error: ", err) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	//запишем в БД, пустой список полей (не изменится) | ||||
| 	err = crud.UpdateManyFields(&Otvet, nil) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		t.Error("TestCrud_GRPC_UpdateManyFields() error: ", err) | ||||
| 	} | ||||
|  | ||||
| 	if Otvet.ID == 0 { | ||||
| 		t.Error("TestCrud_GRPC_UpdateManyFields() error: ID =0") | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -24,6 +24,7 @@ type ICrud_LawsuitStatusType interface { | ||||
| 	Restore(*LawsuitStatusType) error | ||||
| 	Find_ByExtID(*LawsuitStatusType) error | ||||
| 	ReadFromCache(ID int64) (LawsuitStatusType, error) | ||||
| 	UpdateManyFields(*LawsuitStatusType, []string) error | ||||
| } | ||||
|  | ||||
| // TableName - возвращает имя таблицы в БД | ||||
| @@ -189,4 +190,15 @@ func (m LawsuitStatusType) SetCrudInterface(crud ICrud_LawsuitStatusType) { | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // UpdateManyFields - находит запись в БД по ID, и изменяет только нужные колонки | ||||
| func (m *LawsuitStatusType) UpdateManyFields(MassNeedUpdateFields []string) error { | ||||
| 	if Crud_LawsuitStatusType == nil { | ||||
| 		return constants.ErrorCrudIsNotInit | ||||
| 	} | ||||
|  | ||||
| 	err := Crud_LawsuitStatusType.UpdateManyFields(m, MassNeedUpdateFields) | ||||
|  | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // ---------------------------- конец CRUD операции ------------------------------------------------------------ | ||||
|   | ||||
| @@ -14,7 +14,8 @@ func main() { | ||||
| } | ||||
|  | ||||
| func StartApp() { | ||||
| 	//ConfigMain.LoadENV_or_SettingsTXT() | ||||
| 	//defer micro.ShowTimePassed(time.Now()) | ||||
|  | ||||
| 	config.LoadSettingsTxt() | ||||
|  | ||||
| 	config.FillSettings() | ||||
|   | ||||
| @@ -474,6 +474,7 @@ func ReplaceText_created_at(s string, Table1 *types.Table) string { | ||||
| 	return Otvet | ||||
| } | ||||
|  | ||||
| // RenameFunctions - заменяет названия функций, на названия из файла | ||||
| func RenameFunctions(TextDB string, Table1 *types.Table) string { | ||||
| 	Otvet := TextDB | ||||
|  | ||||
| @@ -528,6 +529,8 @@ func CreateFilesUpdateEveryColumn(Table1 *types.Table) error { | ||||
|  | ||||
| 	//заменим имя пакета на новое | ||||
| 	TextCrud = create_files.ReplacePackageName(TextCrud, DirReadyTable) | ||||
| 	TextCrud = strings.ReplaceAll(TextCrud, config.Settings.TEXT_TEMPLATE_MODEL, Table1.NameGo) | ||||
| 	TextCrud = strings.ReplaceAll(TextCrud, config.Settings.TEXT_TEMPLATE_TABLENAME, Table1.Name) | ||||
|  | ||||
| 	//заменим импорты | ||||
| 	if config.Settings.USE_DEFAULT_TEMPLATE == true { | ||||
| @@ -558,6 +561,9 @@ func CreateFilesUpdateEveryColumn(Table1 *types.Table) error { | ||||
| 		TextCrud = strings.ReplaceAll(TextCrud, `//`+constants.TEXT_CACHE_REMOVE, constants.TEXT_CACHE_REMOVE) | ||||
| 	} | ||||
|  | ||||
| 	//переименование функций | ||||
| 	TextCrud = RenameFunctions(TextCrud, Table1) | ||||
|  | ||||
| 	//удаление пустого импорта | ||||
| 	TextCrud = create_files.DeleteEmptyImport(TextCrud) | ||||
|  | ||||
| @@ -675,15 +681,8 @@ func CreateFilesUpdateEveryColumnTest(Table1 *types.Table) error { | ||||
|  | ||||
| 	//заменим имя пакета на новое | ||||
| 	TextCrud = create_files.ReplacePackageName(TextCrud, DirReadyTable) | ||||
|  | ||||
| 	//	TextCrud := "package " + config.Settings.PREFIX_CRUD + TableName + "\n\n" | ||||
| 	//	TextCrud = TextCrud + `import ( | ||||
| 	//	"testing" | ||||
| 	//	"github.com/ManyakRus/starter/config_main" | ||||
| 	//	"github.com/ManyakRus/starter/postgres_gorm" | ||||
| 	//) | ||||
| 	// | ||||
| 	//` | ||||
| 	TextCrud = strings.ReplaceAll(TextCrud, config.Settings.TEXT_TEMPLATE_MODEL, Table1.NameGo) | ||||
| 	TextCrud = strings.ReplaceAll(TextCrud, config.Settings.TEXT_TEMPLATE_TABLENAME, Table1.Name) | ||||
|  | ||||
| 	//заменим импорты | ||||
| 	if config.Settings.USE_DEFAULT_TEMPLATE == true { | ||||
| @@ -701,9 +700,6 @@ func CreateFilesUpdateEveryColumnTest(Table1 *types.Table) error { | ||||
| 	if TextUpdateEveryColumn == "" { | ||||
| 		return err | ||||
| 	} | ||||
| 	//ModelName := Table1.NameGo | ||||
| 	//TextCrud = strings.ReplaceAll(TextCrud, config.Settings.TEXT_TEMPLATE_MODEL, ModelName) | ||||
| 	//TextCrud = strings.ReplaceAll(TextCrud, config.Settings.TEXT_TEMPLATE_TABLENAME, Table1.Name) | ||||
| 	TextCrud = TextCrud + TextUpdateEveryColumn | ||||
|  | ||||
| 	TextCrud = config.Settings.TEXT_MODULE_GENERATED + TextCrud | ||||
|   | ||||
| @@ -397,19 +397,12 @@ func CreateFilesUpdateEveryColumn(Table1 *types.Table) error { | ||||
| 	} | ||||
| 	TextGRPC_Client := string(bytes) | ||||
| 	TextGRPC_Client = TextGRPC_Client + "\n" | ||||
| 	TextGRPC_Client = strings.ReplaceAll(TextGRPC_Client, config.Settings.TEXT_TEMPLATE_MODEL, Table1.NameGo) | ||||
| 	TextGRPC_Client = strings.ReplaceAll(TextGRPC_Client, config.Settings.TEXT_TEMPLATE_TABLENAME, Table1.Name) | ||||
|  | ||||
| 	//заменим имя пакета на новое | ||||
| 	TextGRPC_Client = create_files.ReplacePackageName(TextGRPC_Client, DirReadyTable) | ||||
|  | ||||
| 	//	TextGRPC_Client := "package " + config.Settings.PREFIX_CLIENT_GRPC + TableName + "\n\n" | ||||
| 	//	TextGRPC_Client = TextGRPC_Client + `import ( | ||||
| 	//	"context" | ||||
| 	//	"time" | ||||
| 	//	"github.com/ManyakRus/starter/log" | ||||
| 	//) | ||||
| 	// | ||||
| 	//` | ||||
|  | ||||
| 	//заменим импорты | ||||
| 	if config.Settings.USE_DEFAULT_TEMPLATE == true { | ||||
| 		TextGRPC_Client = create_files.DeleteTemplateRepositoryImports(TextGRPC_Client) | ||||
| @@ -557,6 +550,8 @@ func CreateTestFilesUpdateEveryColumn(Table1 *types.Table) error { | ||||
| 	} | ||||
| 	TextGRPC_Client := string(bytes) | ||||
| 	TextGRPC_Client = TextGRPC_Client + "\n" | ||||
| 	TextGRPC_Client = strings.ReplaceAll(TextGRPC_Client, config.Settings.TEXT_TEMPLATE_MODEL, Table1.NameGo) | ||||
| 	TextGRPC_Client = strings.ReplaceAll(TextGRPC_Client, config.Settings.TEXT_TEMPLATE_TABLENAME, Table1.Name) | ||||
|  | ||||
| 	//заменим имя пакета на новое | ||||
| 	TextGRPC_Client = create_files.ReplacePackageName(TextGRPC_Client, DirReadyTable) | ||||
|   | ||||
| @@ -391,15 +391,8 @@ func CreateFilesUpdateEveryColumn(Table1 *types.Table) error { | ||||
|  | ||||
| 	//заменим имя пакета на новое | ||||
| 	TextGRPCServer = create_files.ReplacePackageName(TextGRPCServer, DirReadyTable) | ||||
|  | ||||
| 	//	PackageName := micro.LastWord(config.Settings.TEMPLATE_FOLDERNAME_GRPC_SERVER) | ||||
| 	//	TextGRPCServer := "package " + PackageName + "\n\n" | ||||
| 	//	TextGRPCServer = TextGRPCServer + `import ( | ||||
| 	//	"context" | ||||
| 	//	"github.com/ManyakRus/starter/micro" | ||||
| 	//) | ||||
| 	// | ||||
| 	//` | ||||
| 	TextGRPCServer = strings.ReplaceAll(TextGRPCServer, config.Settings.TEXT_TEMPLATE_MODEL, Table1.NameGo) | ||||
| 	TextGRPCServer = strings.ReplaceAll(TextGRPCServer, config.Settings.TEXT_TEMPLATE_TABLENAME, Table1.Name) | ||||
|  | ||||
| 	//заменим импорты | ||||
| 	if config.Settings.USE_DEFAULT_TEMPLATE == true { | ||||
| @@ -426,9 +419,6 @@ func CreateFilesUpdateEveryColumn(Table1 *types.Table) error { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	//ModelName := Table1.NameGo | ||||
| 	//TextGRPCServer = strings.ReplaceAll(TextGRPCServer, config.Settings.TEXT_TEMPLATE_MODEL, ModelName) | ||||
| 	//TextGRPCServer = strings.ReplaceAll(TextGRPCServer, config.Settings.TEXT_TEMPLATE_TABLENAME, Table1.Name) | ||||
| 	TextGRPCServer = TextGRPCServer + TextUpdateEveryColumn | ||||
|  | ||||
| 	if config.Settings.USE_DEFAULT_TEMPLATE == true { | ||||
| @@ -538,16 +528,8 @@ func CreateTestFilesUpdateEveryColumn(Table1 *types.Table) error { | ||||
|  | ||||
| 	//заменим имя пакета на новое | ||||
| 	TextGRPCServer = create_files.ReplacePackageName(TextGRPCServer, DirReadyTable) | ||||
|  | ||||
| 	//	PackageName := micro.LastWord(config.Settings.TEMPLATE_FOLDERNAME_GRPC_SERVER) | ||||
| 	//	TextGRPCServer := "package " + PackageName + "\n\n" | ||||
| 	//	TextGRPCServer = TextGRPCServer + `import ( | ||||
| 	//	"context" | ||||
| 	//	"testing" | ||||
| 	//	"github.com/ManyakRus/starter/config_main" | ||||
| 	//) | ||||
| 	// | ||||
| 	//` | ||||
| 	TextGRPCServer = strings.ReplaceAll(TextGRPCServer, config.Settings.TEXT_TEMPLATE_MODEL, Table1.NameGo) | ||||
| 	TextGRPCServer = strings.ReplaceAll(TextGRPCServer, config.Settings.TEXT_TEMPLATE_TABLENAME, Table1.Name) | ||||
|  | ||||
| 	//заменим импорты | ||||
| 	if config.Settings.USE_DEFAULT_TEMPLATE == true { | ||||
| @@ -570,13 +552,11 @@ func CreateTestFilesUpdateEveryColumn(Table1 *types.Table) error { | ||||
|  | ||||
| 	//создание текста | ||||
| 	TextUpdateEveryColumn := FindTextUpdateEveryColumnTest(TextGRPCServerUpdateFunc, Table1) | ||||
|  | ||||
| 	// пустой файл не нужен | ||||
| 	if TextUpdateEveryColumn == "" { | ||||
| 		return err | ||||
| 	} | ||||
| 	//ModelName := Table1.NameGo | ||||
| 	//TextGRPCServer = strings.ReplaceAll(TextGRPCServer, config.Settings.TEXT_TEMPLATE_MODEL, ModelName) | ||||
| 	//TextGRPCServer = strings.ReplaceAll(TextGRPCServer, config.Settings.TEXT_TEMPLATE_TABLENAME, Table1.Name) | ||||
| 	TextGRPCServer = TextGRPCServer + TextUpdateEveryColumn | ||||
|  | ||||
| 	TextGRPCServer = config.Settings.TEXT_MODULE_GENERATED + TextGRPCServer | ||||
|   | ||||
| @@ -178,6 +178,7 @@ func CreateFilesModel_crud(Table1 *types.Table, DirTemplatesModel, DirReadyModel | ||||
| 		TextModel = DeleteFromInterfaceDelete(TextModel, Table1) | ||||
| 		TextModel = DeleteFromInterfaceRestore(TextModel, Table1) | ||||
| 		TextModel = DeleteFromInterfaceFind_ByExtID(TextModel, Table1) | ||||
| 		TextModel = DeleteFromInterfaceUpdateManyFields(TextModel, Table1) | ||||
| 		//кэш | ||||
| 		if config.Settings.NEED_CREATE_CACHE_API == false { | ||||
| 			//исправление Save() | ||||
| @@ -683,3 +684,19 @@ func DeleteFromInterfaceReadFromCache(TextModel string, Table1 *types.Table) str | ||||
|  | ||||
| 	return Otvet | ||||
| } | ||||
|  | ||||
| // DeleteFromInterfaceUpdateManyFields - удаляет функцию UpdateManyFields() из интерфейса | ||||
| func DeleteFromInterfaceUpdateManyFields(TextModel string, Table1 *types.Table) string { | ||||
| 	Otvet := TextModel | ||||
|  | ||||
| 	//проверим есть ли колонка IsDeleted | ||||
| 	if config.Settings.NEED_CREATE_UPDATE_EVERY_COLUMN == true { | ||||
| 		return Otvet | ||||
| 	} | ||||
|  | ||||
| 	ModelName := config.Settings.TEXT_TEMPLATE_MODEL | ||||
| 	TextFind := "\n\tUpdateManyFields(*" + ModelName + ", []string) error" | ||||
| 	Otvet = strings.ReplaceAll(Otvet, TextFind, "") | ||||
|  | ||||
| 	return Otvet | ||||
| } | ||||
|   | ||||
| @@ -83,6 +83,7 @@ func CreateFileProto(MapAll map[string]*types.Table) error { | ||||
| 		} | ||||
|  | ||||
| 		TextProtoNew = TextProtoNew + FindTextProtoTable1(TextProto, Table1) | ||||
| 		TextProtoNew = TextProtoNew + FindTextProtoTable1_UpdateManyFields(TextProto, Table1) | ||||
| 		TextProtoNew = TextProtoNew + FindTextProtoTable1_UpdateEveryColumn(TextProto, Table1) | ||||
|  | ||||
| 		if config.Settings.NEED_CREATE_CACHE_API == true { | ||||
| @@ -416,3 +417,36 @@ func TextReadFromCache(ModelName string) string { | ||||
|  | ||||
| 	return Otvet | ||||
| } | ||||
|  | ||||
| // FindTextProtoTable1_UpdateManyFields - возвращает текст функции UpdateManyFields() .proto для таблицы | ||||
| func FindTextProtoTable1_UpdateManyFields(TextProto string, Table1 *types.Table) string { | ||||
| 	Otvet := "\n" //"\n\t//\n" | ||||
|  | ||||
| 	ModelName := Table1.NameGo | ||||
| 	Otvet = Otvet + FindTextUpdateManyFields(TextProto, ModelName) | ||||
|  | ||||
| 	return Otvet | ||||
| } | ||||
|  | ||||
| // FindTextUpdateManyFields - возвращает текст .proto | ||||
| func FindTextUpdateManyFields(TextProto string, ModelName string) string { | ||||
| 	Otvet := "" | ||||
| 	Otvet2 := TextUpdateManyFields(ModelName) | ||||
|  | ||||
| 	//проверка такой текст уже есть | ||||
| 	pos1 := strings.Index(TextProto, Otvet2) | ||||
| 	if pos1 >= 0 { | ||||
| 		return Otvet | ||||
| 	} | ||||
|  | ||||
| 	Otvet = "\t" + Otvet2 + "\n" | ||||
|  | ||||
| 	return Otvet | ||||
| } | ||||
|  | ||||
| // TextUpdateManyFields - возвращает текст .proto | ||||
| func TextUpdateManyFields(ModelName string) string { | ||||
| 	Otvet := "rpc " + ModelName + "_UpdateManyFields(Request_Model_MassString) returns (ResponseEmpty) {}" | ||||
|  | ||||
| 	return Otvet | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user