From 9653b15d78a89000f80c413ec46ad5f8460f15f1 Mon Sep 17 00:00:00 2001 From: Dmitri Dolguikh Date: Mon, 3 Aug 2026 11:34:22 +0200 Subject: [PATCH] automatically fill empty public ids for view types Signed-off-by: Dmitri Dolguikh --- .../internals/network_map_db/db_store.go | 4 ++++ .../pgsql/sql_type_conversion_test.go | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/management/internals/network_map_db/db_store.go b/management/internals/network_map_db/db_store.go index ffbc63b0e..5b60e3e3a 100644 --- a/management/internals/network_map_db/db_store.go +++ b/management/internals/network_map_db/db_store.go @@ -11,6 +11,7 @@ import ( "github.com/netbirdio/netbird/management/server/integrations/integrated_validator" "github.com/netbirdio/netbird/shared/management/networkmap" "github.com/netbirdio/netbird/shared/management/networkmap/nmdata" + "github.com/rs/xid" ) const ( @@ -79,6 +80,9 @@ func FromSqlTypesToSharedTypes(src reflect.Value, dst reflect.Value) error { if s.Valid { dstField.SetString(s.String) } + if (dstFieldName == "PublicId" || dstFieldName == "PublicID") && s.String == "" { + dstField.SetString(xid.New().String()) // TODO (dmitri) this needs to be removed to support delta updates + } case "sql.NullTime": s := srcField.Interface().(sql.NullTime) if s.Valid { diff --git a/management/internals/network_map_db/pgsql/sql_type_conversion_test.go b/management/internals/network_map_db/pgsql/sql_type_conversion_test.go index c2e64a4e1..9cd7086a1 100644 --- a/management/internals/network_map_db/pgsql/sql_type_conversion_test.go +++ b/management/internals/network_map_db/pgsql/sql_type_conversion_test.go @@ -116,6 +116,14 @@ func TestWithMultipleFields(t *testing.T) { }, dst) } +func TestEmptyPublicIdsFilled(t *testing.T) { + src := withEmptyPublicIds{} + dst := emptyPublicIdTarget{} + assert.NoError(t, networkmapdb.FromSqlTypesToSharedTypes(reflect.ValueOf(&src), reflect.ValueOf(&dst))) + assert.NotEmpty(t, dst.PublicID) + assert.NotEmpty(t, dst.PublicId) +} + type withNullString struct { Name sql.NullString } @@ -199,3 +207,13 @@ type nullableTimePointerTarget struct { type withStringSlice struct { Field []string } + +type withEmptyPublicIds struct { + PublicID sql.NullString + PublicId sql.NullString +} + +type emptyPublicIdTarget struct { + PublicID string + PublicId string +}