From 2d9030bc60e40bfed29310ca5bd81046cc469a0c Mon Sep 17 00:00:00 2001 From: ko_oler <kooler89@gmail.com> Date: Mon, 5 Feb 2024 12:16:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20FromMap=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=82=D0=B8=D0=BF=D0=B0=20ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- id/client.go | 1 + id/collection.go | 1 + id/environment.go | 1 + id/field.go | 1 + id/id.go | 37 +++++++++++++++++++++++++++++++++++++ id/id_test.go | 4 ++-- id/item.go | 1 + id/organization.go | 1 + id/revision.go | 1 + id/role.go | 20 +------------------- id/schema.go | 7 ++++--- id/service.go | 1 + id/space.go | 1 + id/user.go | 1 + 14 files changed, 54 insertions(+), 24 deletions(-) diff --git a/id/client.go b/id/client.go index c3c9a403..623ef05c 100644 --- a/id/client.go +++ b/id/client.go @@ -20,6 +20,7 @@ func (t *ClientID) String() string { func (t *ClientID) ToMap() map[string]any { m := t.SpaceID.ToMap() m["client_id"] = t.ClientID + m["type"] = Client return m } diff --git a/id/collection.go b/id/collection.go index 075abc84..26057019 100644 --- a/id/collection.go +++ b/id/collection.go @@ -19,6 +19,7 @@ func (t *CollectionID) String() string { func (t *CollectionID) ToMap() map[string]any { m := t.EnvironmentID.ToMap() m["col_id"] = t.CollectionID + m["type"] = Collection return m } diff --git a/id/environment.go b/id/environment.go index ec8643a3..f1bbb540 100644 --- a/id/environment.go +++ b/id/environment.go @@ -20,6 +20,7 @@ func (t *EnvironmentID) String() string { func (t *EnvironmentID) ToMap() map[string]any { m := t.SpaceID.ToMap() m["env_id"] = t.EnvironmentID + m["type"] = Environment return m } diff --git a/id/field.go b/id/field.go index b30eb591..dbba11d7 100644 --- a/id/field.go +++ b/id/field.go @@ -20,6 +20,7 @@ func (t *FieldID) String() string { func (t *FieldID) ToMap() map[string]any { m := t.ItemID.ToMap() m["field_name"] = t.FieldName + m["type"] = Field return m } diff --git a/id/id.go b/id/id.go index a1931feb..d333b618 100644 --- a/id/id.go +++ b/id/id.go @@ -92,3 +92,40 @@ func Join(parts ...string) string { } return s } + +func (id *ID) FromMap(m map[string]any) error { + if m == nil { + return errors.New("nil map") + } + + switch m["type"] { + case Organization: + id.Descriptor = new(OrganizationID) + case Service: + id.Descriptor = new(ServiceID) + case User: + id.Descriptor = new(UserID) + case Space: + id.Descriptor = new(SpaceID) + case Environment: + id.Descriptor = new(EnvironmentID) + case Client: + id.Descriptor = new(ClientID) + case Role: + id.Descriptor = new(RoleID) + case Collection: + id.Descriptor = new(CollectionID) + case Schema: + id.Descriptor = new(SchemaID) + case Item: + id.Descriptor = new(ItemID) + case Revision: + id.Descriptor = new(RevisionID) + case Field: + id.Descriptor = new(FieldID) + default: + return errors.New("type of ID not specified in map") + } + _ = id.Descriptor.FromMap(m) + return nil +} diff --git a/id/id_test.go b/id/id_test.go index 1a728406..757586d8 100644 --- a/id/id_test.go +++ b/id/id_test.go @@ -282,9 +282,9 @@ func Test_Map(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - v := tt.id + v := new(ID) _ = v.FromMap(tt.id.ToMap()) - require.Equal(t, tt.id, v) + require.Equal(t, tt.id, v, "проверка FromMap для типа ID, должен быть равен исходному значению") require.Equal(t, v.ToMap(), tt.id.ToMap()) }) } diff --git a/id/item.go b/id/item.go index 1668dd16..d32f0ccc 100644 --- a/id/item.go +++ b/id/item.go @@ -20,6 +20,7 @@ func (t *ItemID) String() string { func (t *ItemID) ToMap() map[string]any { m := t.CollectionID.ToMap() m["item_id"] = t.ItemID + m["type"] = Item return m } diff --git a/id/organization.go b/id/organization.go index 7f2ca659..ed870743 100644 --- a/id/organization.go +++ b/id/organization.go @@ -18,6 +18,7 @@ func (t *OrganizationID) String() string { func (t *OrganizationID) ToMap() map[string]any { return map[string]any{ "organization_id": t.OrganizationID, + "type": Organization, } } diff --git a/id/revision.go b/id/revision.go index 3a111dfe..6752e84d 100644 --- a/id/revision.go +++ b/id/revision.go @@ -20,6 +20,7 @@ func (t *RevisionID) String() string { func (t *RevisionID) ToMap() map[string]any { m := t.ItemID.ToMap() m["rev_id"] = t.RevisionID + m["type"] = Revision return m } diff --git a/id/role.go b/id/role.go index 7080b23e..b71f0f99 100644 --- a/id/role.go +++ b/id/role.go @@ -20,6 +20,7 @@ func (t *RoleID) String() string { func (t *RoleID) ToMap() map[string]any { m := t.SpaceID.ToMap() m["role_id"] = t.RoleID + m["type"] = Role return m } @@ -54,22 +55,3 @@ func parseRoleID(parts []string) (*RoleID, error) { id.RoleID = parts[3] return &id, nil } - -// -//func (t *RoleID) UnmarshalJSON(b []byte) error { -// var data string -// if err := jsoniter.Unmarshal(b, &data); err != nil { -// return err -// } -// knownID, err := Parse(data) -// if err != nil { -// return err -// } -// t.SpaceID = knownID.(*RoleID).SpaceID -// t.RoleID = knownID.(*RoleID).RoleID -// return nil -//} -// -//func (t *RoleID) MarshalJSON() ([]byte, error) { -// return []byte(t.String()), nil -//} diff --git a/id/schema.go b/id/schema.go index d77577a0..b845b70b 100644 --- a/id/schema.go +++ b/id/schema.go @@ -7,7 +7,7 @@ const ( type SchemaID struct { EnvironmentID - CollectionID string `json:"collection_id"` + CollectionID string `json:"col_id"` } func (t *SchemaID) Type() string { return Schema } @@ -18,7 +18,8 @@ func (t *SchemaID) String() string { func (t *SchemaID) ToMap() map[string]any { m := t.EnvironmentID.ToMap() - m["collection_id"] = t.CollectionID + m["col_id"] = t.CollectionID + m["type"] = Schema return m } @@ -26,7 +27,7 @@ func (t *SchemaID) FromMap(m map[string]any) error { if err := t.EnvironmentID.FromMap(m); err != nil { return err } - t.CollectionID = m["collection_id"].(string) + t.CollectionID = m["col_id"].(string) return nil } diff --git a/id/service.go b/id/service.go index 6c3a4400..dd52fc09 100644 --- a/id/service.go +++ b/id/service.go @@ -18,6 +18,7 @@ func (t *ServiceID) String() string { func (t *ServiceID) ToMap() map[string]any { return map[string]any{ "service_id": t.ServiceID, + "type": Service, } } diff --git a/id/space.go b/id/space.go index 3d9d6c35..aadcacc6 100644 --- a/id/space.go +++ b/id/space.go @@ -18,6 +18,7 @@ func (t *SpaceID) String() string { func (t *SpaceID) ToMap() map[string]any { return map[string]any{ "space_id": t.SpaceID, + "type": Space, } } diff --git a/id/user.go b/id/user.go index 1abaa0df..5422bd24 100644 --- a/id/user.go +++ b/id/user.go @@ -18,6 +18,7 @@ func (t *UserID) String() string { func (t *UserID) ToMap() map[string]any { return map[string]any{ "user_id": t.UserID, + "type": User, } } -- GitLab