From 13a78dea5e84d7025f400c594eaffdb2ff97e655 Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Fri, 19 Apr 2024 16:52:20 +0900 Subject: [PATCH 01/17] fix pkg --- server/pkg/property/builder.go | 18 ++--- server/pkg/property/builder_test.go | 16 ++-- server/pkg/property/diff_test.go | 52 ++++++------- server/pkg/property/field.go | 42 +++++------ server/pkg/property/field_builder.go | 20 ++--- server/pkg/property/field_builder_test.go | 12 +-- server/pkg/property/field_test.go | 24 +++--- server/pkg/property/group_list_test.go | 4 +- server/pkg/property/group_test.go | 2 +- server/pkg/property/item.go | 10 +-- server/pkg/property/list_test.go | 10 +-- server/pkg/property/property.go | 90 ++++++++++++----------- server/pkg/property/property_test.go | 10 +-- 13 files changed, 157 insertions(+), 153 deletions(-) diff --git a/server/pkg/property/builder.go b/server/pkg/property/builder.go index 17d8a23859..70728c1076 100644 --- a/server/pkg/property/builder.go +++ b/server/pkg/property/builder.go @@ -9,13 +9,13 @@ func New() *Builder { } func (b *Builder) Build() (*Property, error) { - if b.p.id.IsNil() { + if b.p.IDField.IsNil() { return nil, ErrInvalidID } - if b.p.scene.IsNil() { + if b.p.SceneField.IsNil() { return nil, ErrInvalidSceneID } - if b.p.schema.IsNil() { + if b.p.SchemaField.IsNil() { return nil, ErrInvalidPropertySchemaID } return b.p, nil @@ -30,28 +30,28 @@ func (b *Builder) MustBuild() *Property { } func (b *Builder) ID(id ID) *Builder { - b.p.id = id + b.p.IDField = id return b } func (b *Builder) NewID() *Builder { - b.p.id = NewID() + b.p.IDField = NewID() return b } func (b *Builder) Scene(s SceneID) *Builder { - b.p.scene = s + b.p.SceneField = s return b } func (b *Builder) Schema(schema SchemaID) *Builder { - b.p.schema = schema + b.p.SchemaField = schema return b } func (b *Builder) Items(items []Item) *Builder { if len(items) == 0 { - b.p.items = nil + b.p.ItemsField = nil return b } @@ -68,6 +68,6 @@ func (b *Builder) Items(items []Item) *Builder { newItems = append(newItems, f) } - b.p.items = newItems + b.p.ItemsField = newItems return b } diff --git a/server/pkg/property/builder_test.go b/server/pkg/property/builder_test.go index 312cc3ef29..3e2665934d 100644 --- a/server/pkg/property/builder_test.go +++ b/server/pkg/property/builder_test.go @@ -121,18 +121,18 @@ func TestBuilder_Build(t *testing.T) { }, fields: []*Field{ { - field: propertySchemaField1ID, - v: OptionalValueFrom(ValueTypeString.ValueFrom("xxx")), + FieldField: propertySchemaField1ID, + ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("xxx")), }, }, }, }, }, Expected: &Property{ - id: pid, - scene: sid, - schema: scid, - items: []Item{ + IDField: pid, + SceneField: sid, + SchemaField: scid, + ItemsField: []Item{ &Group{ itemBase: itemBase{ ID: iid, @@ -140,8 +140,8 @@ func TestBuilder_Build(t *testing.T) { }, fields: []*Field{ { - field: propertySchemaField1ID, - v: OptionalValueFrom(ValueTypeString.ValueFrom("xxx")), + FieldField: propertySchemaField1ID, + ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("xxx")), }, }, }, diff --git a/server/pkg/property/diff_test.go b/server/pkg/property/diff_test.go index def1528274..d92ee36fe1 100644 --- a/server/pkg/property/diff_test.go +++ b/server/pkg/property/diff_test.go @@ -260,10 +260,10 @@ func TestSchemaDiff_Migrate(t *testing.T) { args: testProperty1.Clone(), want: true, wantProperty: &Property{ - id: testProperty1.ID(), - scene: testProperty1.Scene(), - schema: newSchemaID, - items: []Item{ + IDField: testProperty1.ID(), + SceneField: testProperty1.Scene(), + SchemaField: newSchemaID, + ItemsField: []Item{ &Group{ itemBase: itemBase{ ID: testGroup1.ID(), @@ -283,7 +283,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { SchemaGroup: testGroup2.SchemaGroup(), }, fields: []*Field{ - {field: testField2.Field(), v: NewOptionalValue(ValueTypeString, nil)}, // type changed + {FieldField: testField2.Field(), ValueField: NewOptionalValue(ValueTypeString, nil)}, // type changed }, }, }, @@ -305,10 +305,10 @@ func TestSchemaDiff_Migrate(t *testing.T) { args: testProperty1.Clone(), want: true, wantProperty: &Property{ - id: testProperty1.ID(), - scene: testProperty1.Scene(), - schema: newSchemaID, - items: []Item{ + IDField: testProperty1.ID(), + SceneField: testProperty1.Scene(), + SchemaField: newSchemaID, + ItemsField: []Item{ &Group{ itemBase: itemBase{ ID: testGroup1.ID(), @@ -344,10 +344,10 @@ func TestSchemaDiff_Migrate(t *testing.T) { args: testProperty1.Clone(), want: true, wantProperty: &Property{ - id: testProperty1.ID(), - scene: testProperty1.Scene(), - schema: newSchemaID, - items: []Item{ + IDField: testProperty1.ID(), + SceneField: testProperty1.Scene(), + SchemaField: newSchemaID, + ItemsField: []Item{ &Group{ itemBase: itemBase{ ID: testGroup1.ID(), @@ -362,7 +362,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { SchemaGroup: "x", }, fields: []*Field{ - {field: testField1.Field(), v: NewOptionalValue(ValueTypeNumber, nil)}, + {FieldField: testField1.Field(), ValueField: NewOptionalValue(ValueTypeNumber, nil)}, }, }, }, @@ -382,10 +382,10 @@ func TestSchemaDiff_Migrate(t *testing.T) { args: testProperty1.Clone(), want: true, wantProperty: &Property{ - id: testProperty1.ID(), - scene: testProperty1.Scene(), - schema: newSchemaID, - items: []Item{ + IDField: testProperty1.ID(), + SceneField: testProperty1.Scene(), + SchemaField: newSchemaID, + ItemsField: []Item{ &Group{ itemBase: itemBase{ ID: testGroup1.ID(), @@ -412,10 +412,10 @@ func TestSchemaDiff_Migrate(t *testing.T) { args: testProperty1.Clone(), want: true, wantProperty: &Property{ - id: testProperty1.ID(), - scene: testProperty1.Scene(), - schema: newSchemaID, - items: []Item{ + IDField: testProperty1.ID(), + SceneField: testProperty1.Scene(), + SchemaField: newSchemaID, + ItemsField: []Item{ &Group{ itemBase: itemBase{ ID: testGroup1.ID(), @@ -441,10 +441,10 @@ func TestSchemaDiff_Migrate(t *testing.T) { args: testProperty1.Clone(), want: true, wantProperty: &Property{ - id: testProperty1.ID(), - scene: testProperty1.Scene(), - schema: newSchemaID, - items: []Item{ + IDField: testProperty1.ID(), + SceneField: testProperty1.Scene(), + SchemaField: newSchemaID, + ItemsField: []Item{ testGroup1, &GroupList{ itemBase: itemBase{ diff --git a/server/pkg/property/field.go b/server/pkg/property/field.go index c83c66ff85..29f01eb80b 100644 --- a/server/pkg/property/field.go +++ b/server/pkg/property/field.go @@ -15,9 +15,9 @@ var ( ) type Field struct { - field FieldID - links *Links - v *OptionalValue + FieldField FieldID `msgpack:"FieldField"` + LinksField *Links `msgpack:"LinksField"` + ValueField *OptionalValue `msgpack:"ValueField"` } func (p *Field) Clone() *Field { @@ -25,49 +25,49 @@ func (p *Field) Clone() *Field { return nil } return &Field{ - field: p.field, - links: p.links.Clone(), - v: p.v.Clone(), + FieldField: p.FieldField, + LinksField: p.LinksField.Clone(), + ValueField: p.ValueField.Clone(), } } func (p *Field) Field() FieldID { - return p.field + return p.FieldField } func (p *Field) FieldRef() *FieldID { if p == nil { return nil } - return p.field.Ref() + return p.FieldField.Ref() } func (p *Field) Links() *Links { if p == nil { return nil } - return p.links + return p.LinksField } func (p *Field) Type() ValueType { if p == nil { return ValueTypeUnknown } - return p.v.Type() + return p.ValueField.Type() } func (p *Field) Value() *Value { if p == nil { return nil } - return p.v.Value() + return p.ValueField.Value() } func (p *Field) TypeAndValue() *OptionalValue { if p == nil { return nil } - return p.v + return p.ValueField } func (p *Field) ActualValue(ds *dataset.Dataset) *ValueAndDatasetValue { @@ -76,8 +76,8 @@ func (p *Field) ActualValue(ds *dataset.Dataset) *ValueAndDatasetValue { } var dv *dataset.Value - if p.links != nil { - if l := p.links.Last(); l != nil { + if p.LinksField != nil { + if l := p.LinksField.Last(); l != nil { d := l.Dataset() if d != nil && ds.ID() == *d && l.DatasetSchemaField() != nil { dv = ds.Field(*l.DatasetSchemaField()).Value() @@ -115,10 +115,10 @@ func (p *Field) Update(value *Value, field *SchemaField) error { if p == nil { return nil } - if field == nil || p.field != field.ID() || !field.Validate(p.v) { + if field == nil || p.FieldField != field.ID() || !field.Validate(p.ValueField) { return ErrInvalidPropertyValue } - p.v.SetValue(value) + p.ValueField.SetValue(value) return nil } @@ -126,14 +126,14 @@ func (p *Field) UpdateUnsafe(value *Value) { if p == nil { return } - p.v.SetValue(value) + p.ValueField.SetValue(value) } func (p *Field) Cast(t ValueType) bool { if p == nil || t == ValueTypeUnknown || p.Type() == ValueTypeUnknown || p.Type() == t { return false } - p.v = p.v.Cast(t) + p.ValueField = p.ValueField.Cast(t) p.Unlink() return true } @@ -142,7 +142,7 @@ func (p *Field) Link(links *Links) { if p == nil { return } - p.links = links.Clone() + p.LinksField = links.Clone() } func (p *Field) Unlink() { @@ -153,7 +153,7 @@ func (p *Field) UpdateField(field FieldID) { if p == nil { return } - p.field = field + p.FieldField = field } func (p *Field) IsEmpty() bool { @@ -172,7 +172,7 @@ func (p *Field) MigrateSchema(ctx context.Context, newSchema *Schema, dl dataset invalid := schemaField == nil // if value is not compatible for type, value will be cleared - if !schemaField.Validate(p.v) { + if !schemaField.Validate(p.ValueField) { p.UpdateUnsafe(nil) } diff --git a/server/pkg/property/field_builder.go b/server/pkg/property/field_builder.go index 0f9593516f..05d0e16a5d 100644 --- a/server/pkg/property/field_builder.go +++ b/server/pkg/property/field_builder.go @@ -9,7 +9,7 @@ type FieldBuilder struct { func NewField(field FieldID) *FieldBuilder { return &FieldBuilder{ p: &Field{ - field: field, + FieldField: field, }, } } @@ -20,14 +20,14 @@ func FieldFrom(sf *SchemaField) *FieldBuilder { } return &FieldBuilder{ p: &Field{ - field: sf.ID(), - v: NewOptionalValue(sf.Type(), nil), + FieldField: sf.ID(), + ValueField: NewOptionalValue(sf.Type(), nil), }, } } func (b *FieldBuilder) Build() *Field { - if b.p.field == "" || b.p.v == nil { + if b.p.FieldField == "" || b.p.ValueField == nil { return nil } return b.p @@ -36,29 +36,29 @@ func (b *FieldBuilder) Build() *Field { func (b *FieldBuilder) MustBuild() *Field { f := b.Build() if f == nil { - panic(fmt.Sprintf("field ID or type is invalid: id=%s, type=%s", b.p.field, b.p.v.Type())) + panic(fmt.Sprintf("field ID or type is invalid: id=%s, type=%s", b.p.FieldField, b.p.ValueField.Type())) } return f } func (b *FieldBuilder) Field(field FieldID) *FieldBuilder { - b.p.field = field + b.p.FieldField = field return b } func (b *FieldBuilder) Value(v *OptionalValue) *FieldBuilder { - b.p.v = v.Clone() + b.p.ValueField = v.Clone() return b } func (b *FieldBuilder) Type(t ValueType) *FieldBuilder { - if b.p.v.Type() != t { - b.p.v = NewOptionalValue(t, nil) + if b.p.ValueField.Type() != t { + b.p.ValueField = NewOptionalValue(t, nil) } return b } func (b *FieldBuilder) Links(l *Links) *FieldBuilder { - b.p.links = l.Clone() + b.p.LinksField = l.Clone() return b } diff --git a/server/pkg/property/field_builder_test.go b/server/pkg/property/field_builder_test.go index f6041dfb9a..bcae38a2ba 100644 --- a/server/pkg/property/field_builder_test.go +++ b/server/pkg/property/field_builder_test.go @@ -46,9 +46,9 @@ func TestFieldBuilder_Build(t *testing.T) { Value: OptionalValueFrom(ValueTypeString.ValueFrom("vvv")), }, Expected: &Field{ - field: "A", - links: NewLinks([]*Link{l}), - v: OptionalValueFrom(ValueTypeString.ValueFrom("vvv")), + FieldField: "A", + LinksField: NewLinks([]*Link{l}), + ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("vvv")), }, }, } @@ -91,9 +91,9 @@ func TestFieldBuilder_MustBuild(t *testing.T) { Value: OptionalValueFrom(ValueTypeString.ValueFrom("vvv")), }, Expected: &Field{ - field: "A", - links: NewLinks([]*Link{l}), - v: OptionalValueFrom(ValueTypeString.ValueFrom("vvv")), + FieldField: "A", + LinksField: NewLinks([]*Link{l}), + ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("vvv")), }, }, } diff --git a/server/pkg/property/field_test.go b/server/pkg/property/field_test.go index 851a78c265..27bf2a3a58 100644 --- a/server/pkg/property/field_test.go +++ b/server/pkg/property/field_test.go @@ -220,7 +220,7 @@ func TestField_Link(t *testing.T) { t.Parallel() tt.target.Link(tt.args) if tt.target != nil { - assert.Equal(t, tt.args, tt.target.links) + assert.Equal(t, tt.args, tt.target.LinksField) } }) } @@ -253,27 +253,27 @@ func TestField_Cast(t *testing.T) { { name: "ok", target: &Field{ - field: FieldID("foobar"), - v: OptionalValueFrom(ValueTypeString.ValueFrom("-123")), - links: dgp.Clone(), + FieldField: FieldID("foobar"), + ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("-123")), + LinksField: dgp.Clone(), }, args: args{t: ValueTypeNumber}, want: &Field{ - field: FieldID("foobar"), - v: OptionalValueFrom(ValueTypeNumber.ValueFrom(-123)), + FieldField: FieldID("foobar"), + ValueField: OptionalValueFrom(ValueTypeNumber.ValueFrom(-123)), }, }, { name: "failed", target: &Field{ - field: FieldID("foobar"), - v: OptionalValueFrom(ValueTypeString.ValueFrom("foo")), - links: dgp.Clone(), + FieldField: FieldID("foobar"), + ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("foo")), + LinksField: dgp.Clone(), }, args: args{t: ValueTypeLatLng}, want: &Field{ - field: FieldID("foobar"), - v: NewOptionalValue(ValueTypeLatLng, nil), + FieldField: FieldID("foobar"), + ValueField: NewOptionalValue(ValueTypeLatLng, nil), }, }, { @@ -308,7 +308,7 @@ func TestField_GuessSchema(t *testing.T) { }{ { name: "ok", - target: &Field{field: "a", v: NewOptionalValue(ValueTypeLatLng, nil)}, + target: &Field{FieldField: "a", ValueField: NewOptionalValue(ValueTypeLatLng, nil)}, want: &SchemaField{id: "a", propertyType: ValueTypeLatLng}, }, { diff --git a/server/pkg/property/group_list_test.go b/server/pkg/property/group_list_test.go index 08886d0601..6a711b513a 100644 --- a/server/pkg/property/group_list_test.go +++ b/server/pkg/property/group_list_test.go @@ -1028,7 +1028,7 @@ func TestGroupList_GuessSchema(t *testing.T) { SchemaGroup: "aa", }, fields: []*Field{ - {field: "a", v: NewOptionalValue(ValueTypeLatLng, nil)}, + {FieldField: "a", ValueField: NewOptionalValue(ValueTypeLatLng, nil)}, }, }, { @@ -1036,7 +1036,7 @@ func TestGroupList_GuessSchema(t *testing.T) { SchemaGroup: "aa", }, fields: []*Field{ - {field: "b", v: NewOptionalValue(ValueTypeString, nil)}, + {FieldField: "b", ValueField: NewOptionalValue(ValueTypeString, nil)}, }, }, }, diff --git a/server/pkg/property/group_test.go b/server/pkg/property/group_test.go index a0db4f037d..85aa7b7ea4 100644 --- a/server/pkg/property/group_test.go +++ b/server/pkg/property/group_test.go @@ -471,7 +471,7 @@ func TestGroup_RepresentativeFieldValue(t *testing.T) { Schema: NewSchema().ID(MustSchemaID("xx~1.0.0/aa")).Groups(NewSchemaGroupList([]*SchemaGroup{sg})).MustBuild(), Value: ValueTypeString.ValueFrom("abc"), }, - Expected: &Field{field: "aa", v: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}}, + Expected: &Field{FieldField: "aa", ValueField: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}}, }, } diff --git a/server/pkg/property/item.go b/server/pkg/property/item.go index 2db681b26a..0c9ca29804 100644 --- a/server/pkg/property/item.go +++ b/server/pkg/property/item.go @@ -28,8 +28,8 @@ type Item interface { } type itemBase struct { - ID ItemID - SchemaGroup SchemaGroupID + ID ItemID `msgpack:"ID"` + SchemaGroup SchemaGroupID `msgpack:"SchemaGroup"` } func ToGroup(i Item) *Group { @@ -53,9 +53,9 @@ func InitItemFrom(psg *SchemaGroup) Item { } type GroupAndField struct { - ParentGroup *GroupList - Group *Group - Field *Field + ParentGroup *GroupList `msgpack:"ParentGroup"` + Group *Group `msgpack:"Group"` + Field *Field `msgpack:"Field"` } func (f GroupAndField) SchemaFieldPointer() SchemaFieldPointer { diff --git a/server/pkg/property/list_test.go b/server/pkg/property/list_test.go index d2fe403b8a..de785be97c 100644 --- a/server/pkg/property/list_test.go +++ b/server/pkg/property/list_test.go @@ -24,7 +24,7 @@ func TestList_IDs(t *testing.T) { }{ { name: "ok", - target: List{&Property{id: p1}, &Property{id: p2}, &Property{id: p1}}, + target: List{&Property{IDField: p1}, &Property{IDField: p2}, &Property{IDField: p1}}, want: []ID{p1, p2}, }, } @@ -49,7 +49,7 @@ func TestList_Schemas(t *testing.T) { }{ { name: "ok", - target: List{&Property{schema: ps1}, &Property{schema: ps2}, &Property{schema: ps1}}, + target: List{&Property{SchemaField: ps1}, &Property{SchemaField: ps2}, &Property{SchemaField: ps1}}, want: []SchemaID{ps1, ps2}, }, } @@ -74,10 +74,10 @@ func TestList_Map(t *testing.T) { }{ { name: "ok", - target: List{&Property{id: p1}, &Property{id: p2}, &Property{id: p1}}, + target: List{&Property{IDField: p1}, &Property{IDField: p2}, &Property{IDField: p1}}, want: Map{ - p1: &Property{id: p1}, - p2: &Property{id: p2}, + p1: &Property{IDField: p1}, + p2: &Property{IDField: p2}, }, }, } diff --git a/server/pkg/property/property.go b/server/pkg/property/property.go index 762401341e..48fe62510d 100644 --- a/server/pkg/property/property.go +++ b/server/pkg/property/property.go @@ -9,29 +9,29 @@ import ( ) type Property struct { - id ID - scene SceneID - schema SchemaID - items []Item + IDField ID `msgpack:"IDField"` + SceneField SceneID `msgpack:"SceneField"` + SchemaField SchemaID `msgpack:"SchemaField"` + ItemsField []Item `msgpack:"ItemsField"` } func (p *Property) ID() ID { - return p.id + return p.IDField } func (p *Property) IDRef() *ID { if p == nil { return nil } - return p.id.Ref() + return p.IDField.Ref() } func (p *Property) Scene() SceneID { - return p.scene + return p.SceneField } func (p *Property) Schema() SchemaID { - return p.schema + return p.SchemaField } func (p *Property) Field(ptr *Pointer) (*Field, *GroupList, *Group) { @@ -52,7 +52,7 @@ func (p *Property) Items() []Item { if p == nil { return nil } - return append([]Item{}, p.items...) + return append([]Item{}, p.ItemsField...) } func (p *Property) Item(ptr *Pointer) Item { @@ -60,7 +60,7 @@ func (p *Property) Item(ptr *Pointer) Item { return nil } - for _, i := range p.items { + for _, i := range p.ItemsField { if ptr.TestItem(i.SchemaGroup(), i.ID()) { return i } @@ -74,7 +74,7 @@ func (p *Property) GroupAndList(ptr *Pointer) (*Group, *GroupList) { return nil, nil } - for _, i := range p.items { + for _, i := range p.ItemsField { if ptr.TestSchemaGroup(i.SchemaGroup()) { if gl := ToGroupList(i); gl != nil { return gl.GroupByPointer(ptr), gl @@ -92,7 +92,7 @@ func (p *Property) ItemBySchema(id SchemaGroupID) Item { if p == nil { return nil } - for _, f := range p.items { + for _, f := range p.ItemsField { if f.SchemaGroup() == id { return f } @@ -131,7 +131,7 @@ func (p *Property) ListItem(ptr *Pointer) (*Group, *GroupList) { return item.Group(i), item } } else if iid, ok := ptr.Item(); ok { - for _, item := range p.items { + for _, item := range p.ItemsField { litem := ToGroupList(item) if g := litem.Group(iid); g != nil { return g, litem @@ -149,7 +149,7 @@ func (p *Property) HasLinkedField() bool { if p == nil { return false } - for _, f := range p.items { + for _, f := range p.ItemsField { if f.HasLinkedField() { return true } @@ -162,25 +162,25 @@ func (p *Property) Clone() *Property { return nil } - items := make([]Item, 0, len(p.items)) - for _, i := range p.items { + items := make([]Item, 0, len(p.ItemsField)) + for _, i := range p.ItemsField { items = append(items, i.CloneItem()) } return &Property{ - id: p.id, - schema: p.schema, - scene: p.scene, - items: items, + IDField: p.IDField, + SchemaField: p.SchemaField, + SceneField: p.SceneField, + ItemsField: items, } } func (p *Property) Fields(ptr *Pointer) []*Field { - if p == nil || len(p.items) == 0 { + if p == nil || len(p.ItemsField) == 0 { return nil } res := []*Field{} - for _, g := range p.items { + for _, g := range p.ItemsField { res = append(res, g.Fields(ptr)...) } return res @@ -190,7 +190,7 @@ func (p *Property) RemoveFields(ptr *Pointer) (res bool) { if p == nil { return } - for _, g := range p.items { + for _, g := range p.ItemsField { if g.RemoveFields(ptr) { res = true } @@ -203,7 +203,7 @@ func (p *Property) FieldsByLinkedDataset(s DatasetSchemaID, i DatasetID) []*Fiel return nil } res := []*Field{} - for _, g := range p.items { + for _, g := range p.ItemsField { res = append(res, g.FieldsByLinkedDataset(s, i)...) } return res @@ -213,7 +213,7 @@ func (p *Property) IsDatasetLinked(s DatasetSchemaID, i DatasetID) bool { if p == nil { return false } - for _, g := range p.items { + for _, g := range p.ItemsField { if g.IsDatasetLinked(s, i) { return true } @@ -227,7 +227,7 @@ func (p *Property) Datasets() []DatasetID { } res := []DatasetID{} - for _, f := range p.items { + for _, f := range p.ItemsField { res = append(res, f.Datasets()...) } @@ -238,7 +238,7 @@ func (p *Property) AddItem(i Item) bool { if p == nil || p.ItemBySchema(i.SchemaGroup()) != nil || p.Item(PointItem(i.ID())) != nil { return false } - p.items = append(p.items, i) + p.ItemsField = append(p.ItemsField, i) return true } @@ -247,10 +247,10 @@ func (p *Property) RemoveItem(ptr *Pointer) { return } - for i := 0; i < len(p.items); i++ { - item := p.items[i] + for i := 0; i < len(p.ItemsField); i++ { + item := p.ItemsField[i] if ptr.TestItem(item.SchemaGroup(), item.ID()) { - p.items = append(p.items[:i], p.items[i+1:]...) + p.ItemsField = append(p.ItemsField[:i], p.ItemsField[i+1:]...) return } } @@ -278,7 +278,7 @@ func (p *Property) Prune() (res bool) { if p == nil { return } - for _, i := range p.items { + for _, i := range p.ItemsField { if i.Prune() { res = true } @@ -518,9 +518,9 @@ func (p *Property) MigrateSchema(ctx context.Context, newSchema *Schema, dl data if p == nil || dl == nil { return } - p.schema = newSchema.ID() + p.SchemaField = newSchema.ID() - for _, f := range p.items { + for _, f := range p.ItemsField { f.MigrateSchema(ctx, newSchema, dl) } @@ -531,7 +531,7 @@ func (p *Property) MigrateDataset(q DatasetMigrationParam) { if p == nil { return } - for _, f := range p.items { + for _, f := range p.ItemsField { f.MigrateDataset(q) } p.Prune() @@ -544,11 +544,11 @@ func (p *Property) ValidateSchema(ps *Schema) error { if ps == nil { return errors.New("invalid schema") } - if p.schema != ps.ID() { + if p.SchemaField != ps.ID() { return errors.New("invalid schema id") } - for _, i := range p.items { + for _, i := range p.ItemsField { sg := i.SchemaGroup() if err := i.ValidateSchema(ps.Groups().Group(sg)); err != nil { return fmt.Errorf("%s (%s): %w", p.ID(), sg, err) @@ -590,11 +590,11 @@ func (p *Property) MoveFields(from, to *Pointer) (res bool) { } func (p *Property) GroupAndFields(ptr *Pointer) []GroupAndField { - if p == nil || len(p.items) == 0 { + if p == nil || len(p.ItemsField) == 0 { return nil } res := []GroupAndField{} - for _, i := range p.items { + for _, i := range p.ItemsField { if ptr == nil || ptr.TestSchemaGroup(i.SchemaGroup()) { res = append(res, i.GroupAndFields(ptr)...) } @@ -617,8 +617,8 @@ func (p *Property) GuessSchema() *Schema { return nil } - groups := make([]*SchemaGroup, 0, len(p.items)) - for _, i := range p.items { + groups := make([]*SchemaGroup, 0, len(p.ItemsField)) + for _, i := range p.ItemsField { if g := i.GuessSchema(); g != nil { groups = append(groups, g) } @@ -631,13 +631,17 @@ func (p *Property) GuessSchema() *Schema { } func (p *Property) updateSchema(s SchemaID) bool { - if p == nil || s.IsNil() || p.schema.Equal(s) { + if p == nil || s.IsNil() || p.SchemaField.Equal(s) { return false } - p.schema = s.Clone() + p.SchemaField = s.Clone() return true } func (p *Property) SetSchema(schema SchemaID) { - p.schema = schema.Clone() + p.SchemaField = schema.Clone() +} + +func PropertyCacheKey(id ID) string { + return fmt.Sprintf("Property:%s", id) } diff --git a/server/pkg/property/property_test.go b/server/pkg/property/property_test.go index bce31ff37b..d469aa2c3d 100644 --- a/server/pkg/property/property_test.go +++ b/server/pkg/property/property_test.go @@ -692,7 +692,7 @@ func TestProperty_GroupAndList(t *testing.T) { { name: "found", target: &Property{ - items: []Item{ + ItemsField: []Item{ &GroupList{ itemBase: itemBase{ ID: pgid1, @@ -740,7 +740,7 @@ func TestProperty_GroupAndList(t *testing.T) { { name: "list only", target: &Property{ - items: []Item{ + ItemsField: []Item{ &GroupList{ itemBase: itemBase{ ID: pgid1, @@ -816,14 +816,14 @@ func TestProperty_AddItem(t *testing.T) { }, { name: "schema group duplicated", - target: &Property{items: []Item{&Group{itemBase: itemBase{SchemaGroup: "a"}}}}, + target: &Property{ItemsField: []Item{&Group{itemBase: itemBase{SchemaGroup: "a"}}}}, args: args{i: &Group{itemBase: itemBase{SchemaGroup: "a"}}}, want: false, wantItems: []Item{&Group{itemBase: itemBase{SchemaGroup: "a"}}}, }, { name: "id duplicated", - target: &Property{items: []Item{&Group{itemBase: itemBase{ID: iid}}}}, + target: &Property{ItemsField: []Item{&Group{itemBase: itemBase{ID: iid}}}}, args: args{i: &Group{itemBase: itemBase{ID: iid}}}, want: false, wantItems: []Item{&Group{itemBase: itemBase{ID: iid}}}, @@ -843,7 +843,7 @@ func TestProperty_AddItem(t *testing.T) { t.Parallel() assert.Equal(t, tt.want, tt.target.AddItem(tt.args.i)) if tt.target != nil { - assert.Equal(t, tt.wantItems, tt.target.items) + assert.Equal(t, tt.wantItems, tt.target.ItemsField) } }) } From 3d04f25da44af271f32ff822c41b94237627763c Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Tue, 23 Apr 2024 17:20:25 +0900 Subject: [PATCH 02/17] fix pkg --- server/pkg/property/builder_test.go | 4 +- server/pkg/property/diff_test.go | 22 +-- server/pkg/property/group.go | 52 +++--- server/pkg/property/group_builder.go | 2 +- server/pkg/property/group_builder_test.go | 4 +- server/pkg/property/group_list.go | 84 ++++----- server/pkg/property/group_list_builder.go | 4 +- .../pkg/property/group_list_builder_test.go | 4 +- server/pkg/property/group_list_test.go | 14 +- server/pkg/property/group_test.go | 2 +- server/pkg/property/link.go | 160 +++++++++--------- server/pkg/property/property_test.go | 8 +- server/pkg/property/value_optional.go | 22 +-- server/pkg/property/value_optional_test.go | 32 ++-- server/pkg/property/value_test.go | 4 +- server/pkg/value/array.go | 2 +- server/pkg/value/bool.go | 2 +- server/pkg/value/coordinates.go | 2 +- server/pkg/value/latlng.go | 2 +- server/pkg/value/latlngheight.go | 2 +- server/pkg/value/number.go | 2 +- server/pkg/value/optional.go | 32 ++-- server/pkg/value/optional_test.go | 76 ++++----- server/pkg/value/polygon.go | 2 +- server/pkg/value/rect.go | 2 +- server/pkg/value/ref.go | 2 +- server/pkg/value/string.go | 2 +- server/pkg/value/type.go | 4 +- server/pkg/value/type_test.go | 8 +- server/pkg/value/url.go | 2 +- server/pkg/value/value.go | 36 ++-- server/pkg/value/value_test.go | 90 +++++----- 32 files changed, 343 insertions(+), 343 deletions(-) diff --git a/server/pkg/property/builder_test.go b/server/pkg/property/builder_test.go index 3e2665934d..f985fdf9e2 100644 --- a/server/pkg/property/builder_test.go +++ b/server/pkg/property/builder_test.go @@ -119,7 +119,7 @@ func TestBuilder_Build(t *testing.T) { ID: iid, SchemaGroup: propertySchemaGroup1ID, }, - fields: []*Field{ + FieldsField: []*Field{ { FieldField: propertySchemaField1ID, ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("xxx")), @@ -138,7 +138,7 @@ func TestBuilder_Build(t *testing.T) { ID: iid, SchemaGroup: propertySchemaGroup1ID, }, - fields: []*Field{ + FieldsField: []*Field{ { FieldField: propertySchemaField1ID, ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("xxx")), diff --git a/server/pkg/property/diff_test.go b/server/pkg/property/diff_test.go index d92ee36fe1..7b6f978f88 100644 --- a/server/pkg/property/diff_test.go +++ b/server/pkg/property/diff_test.go @@ -269,20 +269,20 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: testGroup1.ID(), SchemaGroup: testGroup1.SchemaGroup(), }, - fields: []*Field{}, // deleted + FieldsField: []*Field{}, // deleted }, &GroupList{ itemBase: itemBase{ ID: testGroupList1.ID(), SchemaGroup: testGroupList1.SchemaGroup(), }, - groups: []*Group{ + GroupsField: []*Group{ { itemBase: itemBase{ ID: testGroup2.ID(), SchemaGroup: testGroup2.SchemaGroup(), }, - fields: []*Field{ + FieldsField: []*Field{ {FieldField: testField2.Field(), ValueField: NewOptionalValue(ValueTypeString, nil)}, // type changed }, }, @@ -314,7 +314,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: testGroup1.ID(), SchemaGroup: testGroup1.SchemaGroup(), }, - fields: []*Field{}, // deleted + FieldsField: []*Field{}, // deleted }, testGroupList1, &Group{ @@ -322,7 +322,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: itemID, SchemaGroup: "x", }, - fields: []*Field{testField1}, + FieldsField: []*Field{testField1}, }, }, }, @@ -353,7 +353,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: testGroup1.ID(), SchemaGroup: testGroup1.SchemaGroup(), }, - fields: []*Field{}, // deleted + FieldsField: []*Field{}, // deleted }, testGroupList1, &Group{ @@ -361,7 +361,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: itemID, SchemaGroup: "x", }, - fields: []*Field{ + FieldsField: []*Field{ {FieldField: testField1.Field(), ValueField: NewOptionalValue(ValueTypeNumber, nil)}, }, }, @@ -391,7 +391,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: testGroup1.ID(), SchemaGroup: testGroup1.SchemaGroup(), }, - fields: []*Field{}, // deleted + FieldsField: []*Field{}, // deleted }, testGroupList1, }, @@ -421,7 +421,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: testGroup1.ID(), SchemaGroup: testGroup1.SchemaGroup(), }, - fields: []*Field{}, // deleted + FieldsField: []*Field{}, // deleted }, testGroupList1, }, @@ -451,13 +451,13 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: testGroupList1.ID(), SchemaGroup: testGroupList1.SchemaGroup(), }, - groups: []*Group{ + GroupsField: []*Group{ { itemBase: itemBase{ ID: testGroup2.ID(), SchemaGroup: testGroup2.SchemaGroup(), }, - fields: []*Field{}, // deleted + FieldsField: []*Field{}, // deleted }, }, }, diff --git a/server/pkg/property/group.go b/server/pkg/property/group.go index 9f303918ba..39479ce787 100644 --- a/server/pkg/property/group.go +++ b/server/pkg/property/group.go @@ -10,7 +10,7 @@ import ( // Group represents a group of property type Group struct { itemBase - fields []*Field + FieldsField []*Field `msgpack:"FieldsField"` } // Group implements Item interface @@ -42,7 +42,7 @@ func (g *Group) HasLinkedField() bool { if g == nil { return false } - for _, f := range g.fields { + for _, f := range g.FieldsField { if f.Links().IsLinked() { return true } @@ -56,7 +56,7 @@ func (g *Group) Datasets() []DatasetID { } res := []DatasetID{} - for _, f := range g.fields { + for _, f := range g.FieldsField { res = append(res, f.Datasets()...) } @@ -68,7 +68,7 @@ func (g *Group) FieldsByLinkedDataset(s DatasetSchemaID, i DatasetID) []*Field { return nil } res := []*Field{} - for _, f := range g.fields { + for _, f := range g.FieldsField { if f.Links().HasSchemaAndDataset(s, i) { res = append(res, f) } @@ -80,7 +80,7 @@ func (g *Group) IsDatasetLinked(s DatasetSchemaID, i DatasetID) bool { if g == nil { return false } - for _, f := range g.fields { + for _, f := range g.FieldsField { if f.IsDatasetLinked(s, i) { return true } @@ -90,7 +90,7 @@ func (g *Group) IsDatasetLinked(s DatasetSchemaID, i DatasetID) bool { func (g *Group) IsEmpty() bool { if g != nil { - for _, f := range g.fields { + for _, f := range g.FieldsField { if !f.IsEmpty() { return false } @@ -103,7 +103,7 @@ func (g *Group) Prune() (res bool) { if g == nil { return } - for _, f := range g.fields { + for _, f := range g.FieldsField { if f.IsEmpty() { if g.RemoveField(f.Field()) { res = true @@ -119,7 +119,7 @@ func (g *Group) MigrateSchema(ctx context.Context, newSchema *Schema, dl dataset return } - for _, f := range g.fields { + for _, f := range g.FieldsField { if !f.MigrateSchema(ctx, newSchema, dl) { g.RemoveField(f.Field()) } @@ -164,7 +164,7 @@ func (g *Group) AddFields(fields ...*Field) { } for _, f := range fields { _ = g.RemoveField(f.Field()) - g.fields = append(g.fields, f) + g.FieldsField = append(g.FieldsField, f) } } @@ -172,9 +172,9 @@ func (g *Group) RemoveField(fid FieldID) (res bool) { if g == nil { return false } - for i, f := range g.fields { + for i, f := range g.FieldsField { if f.Field() == fid { - g.fields = append(g.fields[:i], g.fields[i+1:]...) + g.FieldsField = append(g.FieldsField[:i], g.FieldsField[i+1:]...) return true } } @@ -185,8 +185,8 @@ func (g *Group) FieldIDs() []FieldID { if g == nil { return nil } - fields := make([]FieldID, 0, len(g.fields)) - for _, f := range g.fields { + fields := make([]FieldID, 0, len(g.FieldsField)) + for _, f := range g.FieldsField { fields = append(fields, f.Field()) } return fields @@ -197,7 +197,7 @@ func (g *Group) Field(fid FieldID) *Field { if g == nil { return nil } - for _, f := range g.fields { + for _, f := range g.FieldsField { if f.Field() == fid { return f } @@ -209,7 +209,7 @@ func (g *Group) MigrateDataset(q DatasetMigrationParam) { if g == nil { return } - for _, f := range g.fields { + for _, f := range g.FieldsField { f.MigrateDataset(q) } } @@ -239,7 +239,7 @@ func (p *Group) ValidateSchema(ps *SchemaGroup) error { return errors.New("invalid schema group id") } - for _, i := range p.fields { + for _, i := range p.FieldsField { f := ps.Field(i.Field()) if f.Type() != i.Type() { return errors.New("invalid field type") @@ -253,13 +253,13 @@ func (p *Group) Clone() *Group { if p == nil { return nil } - fields := make([]*Field, 0, len(p.fields)) - for _, f := range p.fields { + fields := make([]*Field, 0, len(p.FieldsField)) + for _, f := range p.FieldsField { fields = append(fields, f.Clone()) } return &Group{ - fields: fields, - itemBase: p.itemBase, + FieldsField: fields, + itemBase: p.itemBase, } } @@ -268,7 +268,7 @@ func (p *Group) CloneItem() Item { } func (g *Group) Fields(p *Pointer) []*Field { - if g == nil || len(g.fields) == 0 || (p != nil && !p.TestItem(g.SchemaGroup(), g.ID())) { + if g == nil || len(g.FieldsField) == 0 || (p != nil && !p.TestItem(g.SchemaGroup(), g.ID())) { return nil } @@ -279,7 +279,7 @@ func (g *Group) Fields(p *Pointer) []*Field { return nil } - return append(g.fields[:0:0], g.fields...) + return append(g.FieldsField[:0:0], g.FieldsField...) } func (g *Group) RemoveFields(ptr *Pointer) (res bool) { @@ -295,11 +295,11 @@ func (g *Group) RemoveFields(ptr *Pointer) (res bool) { } func (p *Group) GroupAndFields(ptr *Pointer) []GroupAndField { - if p == nil || len(p.fields) == 0 { + if p == nil || len(p.FieldsField) == 0 { return nil } res := []GroupAndField{} - for _, f := range p.fields { + for _, f := range p.FieldsField { if ptr == nil || ptr.Test(p.SchemaGroup(), p.ID(), f.Field()) { res = append(res, GroupAndField{ Group: p, @@ -315,8 +315,8 @@ func (g *Group) GuessSchema() *SchemaGroup { return nil } - fields := make([]*SchemaField, 0, len(g.fields)) - for _, f := range g.fields { + fields := make([]*SchemaField, 0, len(g.FieldsField)) + for _, f := range g.FieldsField { if sf := f.GuessSchema(); sf != nil { fields = append(fields, sf) } diff --git a/server/pkg/property/group_builder.go b/server/pkg/property/group_builder.go index 6ec41ced74..96838a80b8 100644 --- a/server/pkg/property/group_builder.go +++ b/server/pkg/property/group_builder.go @@ -70,6 +70,6 @@ func (b *GroupBuilder) Fields(fields []*Field) *GroupBuilder { ids[f.Field()] = struct{}{} newFields = append(newFields, f) } - b.p.fields = newFields + b.p.FieldsField = newFields return b } diff --git a/server/pkg/property/group_builder_test.go b/server/pkg/property/group_builder_test.go index 8dd6dc3d49..f6f4d696c8 100644 --- a/server/pkg/property/group_builder_test.go +++ b/server/pkg/property/group_builder_test.go @@ -40,7 +40,7 @@ func TestGroupBuilder_Build(t *testing.T) { ID: iid, SchemaGroup: "a", }, - fields: []*Field{f}, + FieldsField: []*Field{f}, }, }, } @@ -97,7 +97,7 @@ func TestGroupBuilder_MustBuild(t *testing.T) { ID: iid, SchemaGroup: "a", }, - fields: []*Field{f}, + FieldsField: []*Field{f}, }, }, } diff --git a/server/pkg/property/group_list.go b/server/pkg/property/group_list.go index 0fbd90a0ec..bf331adc04 100644 --- a/server/pkg/property/group_list.go +++ b/server/pkg/property/group_list.go @@ -11,7 +11,7 @@ import ( type GroupList struct { itemBase - groups []*Group + GroupsField []*Group `msgpack:"GroupsField"` } // List implements Item interface @@ -52,7 +52,7 @@ func (g *GroupList) HasLinkedField() bool { if g == nil { return false } - for _, f := range g.groups { + for _, f := range g.GroupsField { if f.HasLinkedField() { return true } @@ -66,7 +66,7 @@ func (g *GroupList) Datasets() []DatasetID { } res := []DatasetID{} - for _, f := range g.groups { + for _, f := range g.GroupsField { res = append(res, f.Datasets()...) } @@ -78,7 +78,7 @@ func (g *GroupList) FieldsByLinkedDataset(s DatasetSchemaID, i DatasetID) []*Fie return nil } res := []*Field{} - for _, g := range g.groups { + for _, g := range g.GroupsField { res = append(res, g.FieldsByLinkedDataset(s, i)...) } return res @@ -88,7 +88,7 @@ func (g *GroupList) IsDatasetLinked(s DatasetSchemaID, i DatasetID) bool { if g == nil { return false } - for _, d := range g.groups { + for _, d := range g.GroupsField { if d.IsDatasetLinked(s, i) { return true } @@ -97,14 +97,14 @@ func (g *GroupList) IsDatasetLinked(s DatasetSchemaID, i DatasetID) bool { } func (g *GroupList) IsEmpty() bool { - return g != nil && (g.groups == nil || len(g.groups) == 0) + return g != nil && (g.GroupsField == nil || len(g.GroupsField) == 0) } func (g *GroupList) Prune() (res bool) { if g == nil { return } - for _, f := range g.groups { + for _, f := range g.GroupsField { if f.Prune() { res = true } @@ -117,7 +117,7 @@ func (g *GroupList) MigrateSchema(ctx context.Context, newSchema *Schema, dl dat return } - for _, f := range g.groups { + for _, f := range g.GroupsField { f.MigrateSchema(ctx, newSchema, dl) } @@ -129,7 +129,7 @@ func (g *GroupList) Groups() []*Group { if g == nil { return nil } - return append([]*Group{}, g.groups...) + return append([]*Group{}, g.GroupsField...) } // Group returns a group whose id is specified @@ -137,7 +137,7 @@ func (g *GroupList) Group(gid ItemID) *Group { if g == nil { return nil } - for _, g := range g.groups { + for _, g := range g.GroupsField { if g.ID() == gid { return g } @@ -160,13 +160,13 @@ func (p *GroupList) Clone() *GroupList { if p == nil { return nil } - groups := make([]*Group, 0, len(p.groups)) - for _, g := range p.groups { + groups := make([]*Group, 0, len(p.GroupsField)) + for _, g := range p.GroupsField { groups = append(groups, g.Clone()) } return &GroupList{ - groups: groups, - itemBase: p.itemBase, + GroupsField: groups, + itemBase: p.itemBase, } } @@ -175,7 +175,7 @@ func (p *GroupList) CloneItem() Item { } func (g *GroupList) Fields(ptr *Pointer) []*Field { - if g == nil || len(g.groups) == 0 || (ptr != nil && !ptr.TestSchemaGroup(g.SchemaGroup())) { + if g == nil || len(g.GroupsField) == 0 || (ptr != nil && !ptr.TestSchemaGroup(g.SchemaGroup())) { return nil } @@ -188,7 +188,7 @@ func (g *GroupList) Fields(ptr *Pointer) []*Field { } var fields []*Field - for _, g := range g.groups { + for _, g := range g.GroupsField { if f := g.Fields(ptr); len(f) > 0 { fields = append(fields, f...) } @@ -210,7 +210,7 @@ func (g *GroupList) RemoveFields(ptr *Pointer) (res bool) { } if fid, ok := ptr.Field(); ok { - for _, g := range g.groups { + for _, g := range g.GroupsField { if g.RemoveField(fid) { res = true } @@ -221,11 +221,11 @@ func (g *GroupList) RemoveFields(ptr *Pointer) (res bool) { } func (p *GroupList) GroupAndFields(ptr *Pointer) []GroupAndField { - if p == nil || len(p.groups) == 0 { + if p == nil || len(p.GroupsField) == 0 { return nil } res := []GroupAndField{} - for _, g := range p.groups { + for _, g := range p.GroupsField { if ptr == nil || ptr.TestItem(g.SchemaGroup(), g.ID()) { for _, r := range g.GroupAndFields(ptr) { res = append(res, GroupAndField{ @@ -247,7 +247,7 @@ func (g *GroupList) GuessSchema() *SchemaGroup { fieldm := map[FieldID]struct{}{} fields := []*SchemaField{} - for _, g := range g.groups { + for _, g := range g.GroupsField { if gsg := g.GuessSchema(); gsg != nil { for _, f := range gsg.Fields() { if _, ok := fieldm[f.ID()]; ok { @@ -266,24 +266,24 @@ func (g *GroupList) GuessSchema() *SchemaGroup { // GroupAt returns a group whose index is specified func (g *GroupList) GroupAt(i int) *Group { - if g == nil || i < 0 || i > len(g.groups)-1 { + if g == nil || i < 0 || i > len(g.GroupsField)-1 { return nil } - return g.groups[i] + return g.GroupsField[i] } func (g *GroupList) Has(i ItemID) bool { if g == nil { return false } - return util.ListHas[ItemID, Group](g.groups, (*Group).ID, i) + return util.ListHas[ItemID, Group](g.GroupsField, (*Group).ID, i) } func (g *GroupList) Count() int { if g == nil { return 0 } - return len(g.groups) + return len(g.GroupsField) } func (g *GroupList) Add(gg *Group, index int) { @@ -291,11 +291,11 @@ func (g *GroupList) Add(gg *Group, index int) { return } - le := len(g.groups) + le := len(g.GroupsField) if index < 0 || le <= index { - g.groups = append(g.groups, gg) + g.GroupsField = append(g.GroupsField, gg) } else { - g.groups = append(g.groups[:index], append([]*Group{gg}, g.groups[index:]...)...) + g.GroupsField = append(g.GroupsField[:index], append([]*Group{gg}, g.GroupsField[index:]...)...) } } @@ -304,7 +304,7 @@ func (g *GroupList) AddOrMove(gg *Group, index int) { return } - le := len(g.groups) + le := len(g.GroupsField) if index < 0 || le <= index { index = le } @@ -314,7 +314,7 @@ func (g *GroupList) AddOrMove(gg *Group, index int) { g.Move(gid, index) return } - g.groups = append(g.groups[:index], append([]*Group{gg}, g.groups[index:]...)...) + g.GroupsField = append(g.GroupsField[:index], append([]*Group{gg}, g.GroupsField[index:]...)...) } func (g *GroupList) Move(id ItemID, toIndex int) { @@ -322,7 +322,7 @@ func (g *GroupList) Move(id ItemID, toIndex int) { return } - for fromIndex, gg := range g.groups { + for fromIndex, gg := range g.GroupsField { if gg.ID() == id { g.MoveAt(fromIndex, toIndex) return @@ -335,7 +335,7 @@ func (g *GroupList) MoveAt(fromIndex int, toIndex int) { return } - le := len(g.groups) + le := len(g.GroupsField) if fromIndex < 0 || le <= fromIndex { return } @@ -346,12 +346,12 @@ func (g *GroupList) MoveAt(fromIndex int, toIndex int) { return } - f := g.groups[fromIndex] - g.groups = append(g.groups[:fromIndex], g.groups[fromIndex+1:]...) + f := g.GroupsField[fromIndex] + g.GroupsField = append(g.GroupsField[:fromIndex], g.GroupsField[fromIndex+1:]...) newSlice := make([]*Group, toIndex+1) - copy(newSlice, g.groups[:toIndex]) + copy(newSlice, g.GroupsField[:toIndex]) newSlice[toIndex] = f - g.groups = append(newSlice, g.groups[toIndex:]...) + g.GroupsField = append(newSlice, g.GroupsField[toIndex:]...) } func (g *GroupList) Remove(id ItemID) bool { @@ -359,7 +359,7 @@ func (g *GroupList) Remove(id ItemID) bool { return false } - for index, gg := range g.groups { + for index, gg := range g.GroupsField { if gg.ID() == id { g.RemoveAt(index) return true @@ -374,7 +374,7 @@ func (g *GroupList) RemoveAt(index int) { return } - le := len(g.groups) + le := len(g.GroupsField) if index < 0 || le <= index { return } @@ -382,9 +382,9 @@ func (g *GroupList) RemoveAt(index int) { if index == le { groups = []*Group{} } else { - groups = g.groups[index+1:] + groups = g.GroupsField[index+1:] } - g.groups = append(g.groups[:index], groups...) + g.GroupsField = append(g.GroupsField[:index], groups...) } func (g *GroupList) Empty() { @@ -392,7 +392,7 @@ func (g *GroupList) Empty() { return } - g.groups = []*Group{} + g.GroupsField = []*Group{} } func (g *GroupList) GetOrCreateField(ps *Schema, ptr *Pointer) (*Field, bool) { @@ -443,7 +443,7 @@ func (g *GroupList) MigrateDataset(q DatasetMigrationParam) { if g == nil { return } - for _, f := range g.groups { + for _, f := range g.GroupsField { f.MigrateDataset(q) } } @@ -459,7 +459,7 @@ func (p *GroupList) ValidateSchema(ps *SchemaGroup) error { return errors.New("invalid schema group id") } - for _, i := range p.groups { + for _, i := range p.GroupsField { if err := i.ValidateSchema(ps); err != nil { return fmt.Errorf("%s: %w", i.ID(), err) } diff --git a/server/pkg/property/group_list_builder.go b/server/pkg/property/group_list_builder.go index cd3b8bdd72..dcceb2f1db 100644 --- a/server/pkg/property/group_list_builder.go +++ b/server/pkg/property/group_list_builder.go @@ -29,7 +29,7 @@ func (b *GroupListBuilder) Build() (*GroupList, error) { if b.p.itemBase.SchemaGroup == "" { return nil, ErrInvalidID } - for _, g := range b.p.groups { + for _, g := range b.p.GroupsField { if g.SchemaGroup() != b.p.SchemaGroup() { return nil, ErrInvalidGroupInGroupList } @@ -78,6 +78,6 @@ func (b *GroupListBuilder) Groups(groups []*Group) *GroupListBuilder { ids[g.ID()] = struct{}{} newGroups = append(newGroups, g) } - b.p.groups = newGroups + b.p.GroupsField = newGroups return b } diff --git a/server/pkg/property/group_list_builder_test.go b/server/pkg/property/group_list_builder_test.go index a9046cfa98..d73e035466 100644 --- a/server/pkg/property/group_list_builder_test.go +++ b/server/pkg/property/group_list_builder_test.go @@ -34,7 +34,7 @@ func TestGroupListBuilder_Build(t *testing.T) { ID: pid, SchemaGroup: "x", }, - groups: groups, + GroupsField: groups, }, }, { @@ -103,7 +103,7 @@ func TestGroupListBuilder_MustBuild(t *testing.T) { ID: pid, SchemaGroup: "x", }, - groups: groups, + GroupsField: groups, }, }, { diff --git a/server/pkg/property/group_list_test.go b/server/pkg/property/group_list_test.go index 6a711b513a..b07cf6b0d6 100644 --- a/server/pkg/property/group_list_test.go +++ b/server/pkg/property/group_list_test.go @@ -53,7 +53,7 @@ func TestGroupList_HasLinkedField(t *testing.T) { dssid := NewDatasetSchemaID() f := FieldFrom(sf). Value(OptionalValueFrom(v)). - Links(&Links{links: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). + Links(&Links{LinksField: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). MustBuild() groups := []*Group{NewGroup().ID(pid).SchemaGroup("xx").Fields([]*Field{f}).MustBuild()} groups2 := []*Group{NewGroup().ID(pid).SchemaGroup("xx").MustBuild()} @@ -96,7 +96,7 @@ func TestGroupList_Datasets(t *testing.T) { dssid := NewDatasetSchemaID() f := FieldFrom(sf). Value(OptionalValueFrom(v)). - Links(&Links{links: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). + Links(&Links{LinksField: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). MustBuild() groups := []*Group{NewGroup().ID(pid).SchemaGroup("xx").Fields([]*Field{f}).MustBuild()} groups2 := []*Group{NewGroup().ID(pid).SchemaGroup("xx").MustBuild()} @@ -138,7 +138,7 @@ func TestGroupList_FieldsByLinkedDataset(t *testing.T) { dssid := NewDatasetSchemaID() f := FieldFrom(sf). Value(OptionalValueFrom(v)). - Links(&Links{links: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). + Links(&Links{LinksField: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). MustBuild() groups := []*Group{NewGroup().ID(pid).SchemaGroup("xx").Fields([]*Field{f}).MustBuild()} groups2 := []*Group{NewGroup().ID(pid).SchemaGroup("xx").MustBuild()} @@ -180,7 +180,7 @@ func TestGroupList_IsEmpty(t *testing.T) { dssid := NewDatasetSchemaID() f := FieldFrom(sf). Value(OptionalValueFrom(v)). - Links(&Links{links: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). + Links(&Links{LinksField: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). MustBuild() groups := []*Group{NewGroup().ID(pid).SchemaGroup("xx").Fields([]*Field{f}).MustBuild()} @@ -1022,12 +1022,12 @@ func TestGroupList_GuessSchema(t *testing.T) { itemBase: itemBase{ SchemaGroup: "aa", }, - groups: []*Group{ + GroupsField: []*Group{ { itemBase: itemBase{ SchemaGroup: "aa", }, - fields: []*Field{ + FieldsField: []*Field{ {FieldField: "a", ValueField: NewOptionalValue(ValueTypeLatLng, nil)}, }, }, @@ -1035,7 +1035,7 @@ func TestGroupList_GuessSchema(t *testing.T) { itemBase: itemBase{ SchemaGroup: "aa", }, - fields: []*Field{ + FieldsField: []*Field{ {FieldField: "b", ValueField: NewOptionalValue(ValueTypeString, nil)}, }, }, diff --git a/server/pkg/property/group_test.go b/server/pkg/property/group_test.go index 85aa7b7ea4..4deba3d3e1 100644 --- a/server/pkg/property/group_test.go +++ b/server/pkg/property/group_test.go @@ -471,7 +471,7 @@ func TestGroup_RepresentativeFieldValue(t *testing.T) { Schema: NewSchema().ID(MustSchemaID("xx~1.0.0/aa")).Groups(NewSchemaGroupList([]*SchemaGroup{sg})).MustBuild(), Value: ValueTypeString.ValueFrom("abc"), }, - Expected: &Field{FieldField: "aa", ValueField: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}}, + Expected: &Field{FieldField: "aa", ValueField: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeString, nil)}}, }, } diff --git a/server/pkg/property/link.go b/server/pkg/property/link.go index a0bb4b82b4..10b2051097 100644 --- a/server/pkg/property/link.go +++ b/server/pkg/property/link.go @@ -7,13 +7,13 @@ import ( ) type Links struct { - links []*Link + LinksField []*Link `msgpack:"LinksField"` } type Link struct { - dataset *DatasetID - schema *DatasetSchemaID - field *DatasetFieldID + DatasetField *DatasetID `msgpack:"DatasetField"` + SchemaField *DatasetSchemaID `msgpack:"SchemaField"` + FieldField *DatasetFieldID `msgpack:"FieldField"` } func NewLinks(links []*Link) *Links { @@ -25,7 +25,7 @@ func NewLinks(links []*Link) *Links { links2 = append(links2, l.Clone()) } return &Links{ - links: links2, + LinksField: links2, } } @@ -34,37 +34,37 @@ func (l *Links) Clone() *Links { return nil } return &Links{ - links: append([]*Link{}, l.links...), + LinksField: append([]*Link{}, l.LinksField...), } } func (l *Links) IsLinked() bool { - return l != nil && l.links != nil && len(l.links) > 0 + return l != nil && l.LinksField != nil && len(l.LinksField) > 0 } func (l *Links) IsLinkedFully() bool { - return l != nil && l.links != nil && len(l.links) > 0 && len(l.DatasetIDs()) == len(l.links) + return l != nil && l.LinksField != nil && len(l.LinksField) > 0 && len(l.DatasetIDs()) == len(l.LinksField) } func (l *Links) Len() int { - if l == nil || l.links == nil { + if l == nil || l.LinksField == nil { return 0 } - return len(l.links) + return len(l.LinksField) } func (l *Links) First() *Link { - if l == nil || l.links == nil || len(l.links) == 0 { + if l == nil || l.LinksField == nil || len(l.LinksField) == 0 { return nil } - return l.links[0] + return l.LinksField[0] } func (l *Links) Last() *Link { - if l == nil || l.links == nil || len(l.links) == 0 { + if l == nil || l.LinksField == nil || len(l.LinksField) == 0 { return nil } - return l.links[len(l.links)-1] + return l.LinksField[len(l.LinksField)-1] } func (l *Links) LastValue(ds *dataset.Dataset) *dataset.Value { @@ -72,7 +72,7 @@ func (l *Links) LastValue(ds *dataset.Dataset) *dataset.Value { } func (l *Links) Validate(dsm dataset.SchemaMap, dm dataset.Map) bool { - if l == nil || l.links == nil { + if l == nil || l.LinksField == nil { return false } firstDatasetSchema := l.First().DatasetSchema() @@ -80,19 +80,19 @@ func (l *Links) Validate(dsm dataset.SchemaMap, dm dataset.Map) bool { return false } fields := l.DatasetSchemaFieldIDs() - if fields == nil || len(fields) != len(l.links) { + if fields == nil || len(fields) != len(l.LinksField) { return false } firstDataset := l.First().Dataset() res, resf := dsm.GraphSearchByFields(*firstDatasetSchema, fields...) - if len(res) != len(l.links) || resf == nil { + if len(res) != len(l.LinksField) || resf == nil { return false } if firstDataset != nil { res2, resf2 := dm.GraphSearchByFields(*firstDataset, fields...) - return len(res2) == len(l.links) && resf2 != nil + return len(res2) == len(l.LinksField) && resf2 != nil } return true @@ -103,47 +103,47 @@ func (l *Links) Replace( dm map[DatasetID]DatasetID, fm map[DatasetFieldID]DatasetFieldID, ) { - if l == nil || l.links == nil { + if l == nil || l.LinksField == nil { return } - links := make([]*Link, 0, len(l.links)) + links := make([]*Link, 0, len(l.LinksField)) - for _, link := range l.links { + for _, link := range l.LinksField { nl := &Link{} - if link.schema != nil { - if nds, ok := dsm[*link.schema]; ok { + if link.SchemaField != nil { + if nds, ok := dsm[*link.SchemaField]; ok { nid := nds - nl.schema = &nid + nl.SchemaField = &nid } else { // Datasetは全てIDが再割り当てされるため、リンクが途切れていることになる // よってリンク自体が無効になる - l.links = nil + l.LinksField = nil return } } - if link.dataset != nil { - if nds, ok := dm[*link.dataset]; ok { + if link.DatasetField != nil { + if nds, ok := dm[*link.DatasetField]; ok { nid := nds - nl.dataset = &nid + nl.DatasetField = &nid } else { // Datasetは全てIDが再割り当てされるため、リンクが途切れていることになる // よってリンク自体が無効になる - l.links = nil + l.LinksField = nil return } } - if link.field != nil { - if nf, ok := fm[*link.field]; ok { + if link.FieldField != nil { + if nf, ok := fm[*link.FieldField]; ok { nid := nf - nl.field = &nid + nl.FieldField = &nid } else { // Datasetは全てIDが再割り当てされるため、リンクが途切れていることになる // よってリンク自体が無効になる - l.links = nil + l.LinksField = nil return } } @@ -151,15 +151,15 @@ func (l *Links) Replace( links = append(links, nl) } - l.links = links + l.LinksField = links } func (l *Links) Links() []*Link { - if l == nil || l.links == nil || len(l.links) == 0 { + if l == nil || l.LinksField == nil || len(l.LinksField) == 0 { return nil } - links2 := make([]*Link, 0, len(l.links)) - for _, l := range l.links { + links2 := make([]*Link, 0, len(l.LinksField)) + for _, l := range l.LinksField { links2 = append(links2, l.Clone()) } return links2 @@ -169,10 +169,10 @@ func (l *Links) DatasetIDs() []DatasetID { if l == nil { return nil } - datasets := make([]DatasetID, 0, len(l.links)) - for _, i := range l.links { - if i.dataset != nil { - datasets = append(datasets, *i.dataset) + datasets := make([]DatasetID, 0, len(l.LinksField)) + for _, i := range l.LinksField { + if i.DatasetField != nil { + datasets = append(datasets, *i.DatasetField) } else { return datasets } @@ -184,10 +184,10 @@ func (l *Links) DatasetSchemaIDs() []DatasetSchemaID { if l == nil { return nil } - schemas := make([]DatasetSchemaID, 0, len(l.links)) - for _, i := range l.links { - if i.schema != nil { - schemas = append(schemas, *i.schema) + schemas := make([]DatasetSchemaID, 0, len(l.LinksField)) + for _, i := range l.LinksField { + if i.SchemaField != nil { + schemas = append(schemas, *i.SchemaField) } else { return schemas } @@ -216,10 +216,10 @@ func (l *Links) DatasetSchemaFieldIDs() []DatasetFieldID { if l == nil { return nil } - fields := make([]DatasetFieldID, 0, len(l.links)) - for _, i := range l.links { - if i.field != nil { - fields = append(fields, *i.field) + fields := make([]DatasetFieldID, 0, len(l.LinksField)) + for _, i := range l.LinksField { + if i.FieldField != nil { + fields = append(fields, *i.FieldField) } else { return fields } @@ -231,8 +231,8 @@ func (l *Links) HasDataset(did DatasetID) bool { if l == nil { return false } - for _, l2 := range l.links { - if l2 != nil && l2.dataset != nil && *l2.dataset == did { + for _, l2 := range l.LinksField { + if l2 != nil && l2.DatasetField != nil && *l2.DatasetField == did { return true } } @@ -243,8 +243,8 @@ func (l *Links) HasDatasetSchema(dsid DatasetSchemaID) bool { if l == nil { return false } - for _, l2 := range l.links { - if l2 != nil && l2.schema != nil && *l2.schema == dsid { + for _, l2 := range l.LinksField { + if l2 != nil && l2.SchemaField != nil && *l2.SchemaField == dsid { return true } } @@ -255,8 +255,8 @@ func (l *Links) HasDatasetSchemaAndDataset(dsid DatasetSchemaID, did DatasetID) if l == nil { return false } - for _, l2 := range l.links { - if l2 != nil && (l2.schema != nil && *l2.schema == dsid || l2.dataset != nil && *l2.dataset == did) { + for _, l2 := range l.LinksField { + if l2 != nil && (l2.SchemaField != nil && *l2.SchemaField == dsid || l2.DatasetField != nil && *l2.DatasetField == did) { return true } } @@ -268,9 +268,9 @@ func NewLink(d DatasetID, ds DatasetSchemaID, f DatasetFieldID) *Link { schema := ds field := f return &Link{ - dataset: &dataset, - schema: &schema, - field: &field, + DatasetField: &dataset, + SchemaField: &schema, + FieldField: &field, } } @@ -278,8 +278,8 @@ func NewLinkFieldOnly(ds DatasetSchemaID, f DatasetFieldID) *Link { schema := ds field := f return &Link{ - schema: &schema, - field: &field, + SchemaField: &schema, + FieldField: &field, } } @@ -287,28 +287,28 @@ func (l *Link) Dataset() *DatasetID { if l == nil { return nil } - return l.dataset.CloneRef() + return l.DatasetField.CloneRef() } func (l *Link) DatasetSchema() *DatasetSchemaID { if l == nil { return nil } - return l.schema.CloneRef() + return l.SchemaField.CloneRef() } func (l *Link) DatasetSchemaField() *DatasetFieldID { if l == nil { return nil } - return l.field.CloneRef() + return l.FieldField.CloneRef() } func (l *Link) Value(ds *dataset.Dataset) *dataset.Value { - if l == nil || ds == nil || l.dataset == nil || l.field == nil || ds.ID() != *l.dataset { + if l == nil || ds == nil || l.DatasetField == nil || l.FieldField == nil || ds.ID() != *l.DatasetField { return nil } - f := ds.Field(*l.field) + f := ds.Field(*l.FieldField) if f == nil { return nil } @@ -316,24 +316,24 @@ func (l *Link) Value(ds *dataset.Dataset) *dataset.Value { } func (l *Link) Validate(dss *dataset.Schema, ds *dataset.Dataset) bool { - if l == nil || l.field == nil || l.schema == nil || dss == nil { + if l == nil || l.FieldField == nil || l.SchemaField == nil || dss == nil { return false } // DS - if dss.ID() != *l.schema { + if dss.ID() != *l.SchemaField { return false } - if f := dss.Field(*l.field); f == nil { + if f := dss.Field(*l.FieldField); f == nil { return false } // D - if l.dataset != nil { - if ds == nil || ds.ID() != *l.dataset || ds.Schema() != dss.ID() { + if l.DatasetField != nil { + if ds == nil || ds.ID() != *l.DatasetField || ds.Schema() != dss.ID() { return false } - if f := ds.Field(*l.field); f == nil { + if f := ds.Field(*l.FieldField); f == nil { return false } } @@ -342,7 +342,7 @@ func (l *Link) Validate(dss *dataset.Schema, ds *dataset.Dataset) bool { } func (l *Links) IsEmpty() bool { - return l == nil || l.links == nil || len(l.links) == 0 + return l == nil || l.LinksField == nil || len(l.LinksField) == 0 } func (l *Link) Clone() *Link { @@ -350,9 +350,9 @@ func (l *Link) Clone() *Link { return nil } return &Link{ - dataset: l.Dataset(), - schema: l.DatasetSchema(), - field: l.DatasetSchemaField(), + DatasetField: l.Dataset(), + SchemaField: l.DatasetSchema(), + FieldField: l.DatasetSchemaField(), } } @@ -365,14 +365,14 @@ func (l *Link) ApplyDataset(ds *DatasetID) *Link { return l.Clone() } return &Link{ - dataset: ds.CloneRef(), - schema: l.DatasetSchema(), - field: l.DatasetSchemaField(), + DatasetField: ds.CloneRef(), + SchemaField: l.DatasetSchema(), + FieldField: l.DatasetSchemaField(), } } func (l *Links) ApplyDataset(ds *DatasetID) *Links { - if l == nil || l.links == nil || len(l.links) == 0 { + if l == nil || l.LinksField == nil || len(l.LinksField) == 0 { return nil } @@ -383,7 +383,7 @@ func (l *Links) ApplyDataset(ds *DatasetID) *Links { return links } - links.links[0] = first.ApplyDataset(ds) + links.LinksField[0] = first.ApplyDataset(ds) return links } diff --git a/server/pkg/property/property_test.go b/server/pkg/property/property_test.go index d469aa2c3d..a9aea15f0c 100644 --- a/server/pkg/property/property_test.go +++ b/server/pkg/property/property_test.go @@ -698,7 +698,7 @@ func TestProperty_GroupAndList(t *testing.T) { ID: pgid1, SchemaGroup: SchemaGroupID("aaaa"), }, - groups: []*Group{ + GroupsField: []*Group{ { itemBase: itemBase{ ID: pgid2, @@ -727,7 +727,7 @@ func TestProperty_GroupAndList(t *testing.T) { ID: pgid1, SchemaGroup: SchemaGroupID("aaaa"), }, - groups: []*Group{ + GroupsField: []*Group{ { itemBase: itemBase{ ID: pgid2, @@ -746,7 +746,7 @@ func TestProperty_GroupAndList(t *testing.T) { ID: pgid1, SchemaGroup: SchemaGroupID("aaaa"), }, - groups: []*Group{ + GroupsField: []*Group{ { itemBase: itemBase{ ID: pgid2, @@ -770,7 +770,7 @@ func TestProperty_GroupAndList(t *testing.T) { ID: pgid1, SchemaGroup: SchemaGroupID("aaaa"), }, - groups: []*Group{ + GroupsField: []*Group{ { itemBase: itemBase{ ID: pgid2, diff --git a/server/pkg/property/value_optional.go b/server/pkg/property/value_optional.go index f87ab78eab..f97d775a42 100644 --- a/server/pkg/property/value_optional.go +++ b/server/pkg/property/value_optional.go @@ -3,7 +3,7 @@ package property import "github.com/reearth/reearth/server/pkg/value" type OptionalValue struct { - ov value.Optional + OptionalValueField value.Optional `msgpack:"OptionalValueField"` } func NewOptionalValue(t ValueType, v *Value) *OptionalValue { @@ -15,7 +15,7 @@ func NewOptionalValue(t ValueType, v *Value) *OptionalValue { if ov == nil { return nil } - return &OptionalValue{ov: *ov} + return &OptionalValue{OptionalValueField: *ov} } func OptionalValueFrom(v *Value) *OptionalValue { @@ -27,7 +27,7 @@ func OptionalValueFrom(v *Value) *OptionalValue { return nil } return &OptionalValue{ - ov: *ov, + OptionalValueField: *ov, } } @@ -35,14 +35,14 @@ func (ov *OptionalValue) Type() ValueType { if ov == nil { return ValueTypeUnknown } - return ValueType(ov.ov.Type()) + return ValueType(ov.OptionalValueField.Type()) } func (ov *OptionalValue) Value() *Value { if ov == nil { return nil } - vv := ov.ov.Value() + vv := ov.OptionalValueField.Value() if vv == nil { return nil } @@ -57,12 +57,12 @@ func (ov *OptionalValue) Clone() *OptionalValue { if ov == nil { return nil } - nov := ov.ov.Clone() + nov := ov.OptionalValueField.Clone() if nov == nil { return nil } return &OptionalValue{ - ov: *nov, + OptionalValueField: *nov, } } @@ -71,9 +71,9 @@ func (ov *OptionalValue) SetValue(v *Value) { return } if v == nil { - ov.ov.SetValue(nil) + ov.OptionalValueField.SetValue(nil) } else { - ov.ov.SetValue(&v.v) + ov.OptionalValueField.SetValue(&v.v) } } @@ -81,9 +81,9 @@ func (ov *OptionalValue) Cast(t ValueType) *OptionalValue { if ov == nil { return nil } - vv := ov.ov.Cast(value.Type(t), types) + vv := ov.OptionalValueField.Cast(value.Type(t), types) if vv == nil { return nil } - return &OptionalValue{ov: *vv} + return &OptionalValue{OptionalValueField: *vv} } diff --git a/server/pkg/property/value_optional_test.go b/server/pkg/property/value_optional_test.go index 7d4f3c8a3e..5ffed607db 100644 --- a/server/pkg/property/value_optional_test.go +++ b/server/pkg/property/value_optional_test.go @@ -24,14 +24,14 @@ func TestNewNilableValue(t *testing.T) { t: ValueTypeString, v: ValueTypeString.ValueFrom("foo"), }, - want: &OptionalValue{ov: *value.OptionalFrom(value.TypeString.ValueFrom("foo", types))}, + want: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("foo", types))}, }, { name: "nil value", args: args{ t: ValueTypeString, }, - want: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}, + want: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeString, nil)}, }, { name: "invalid value", @@ -75,7 +75,7 @@ func TestOptionalValueFrom(t *testing.T) { args: args{ v: ValueTypeString.ValueFrom("foo"), }, - want: &OptionalValue{ov: *value.NewOptional(value.TypeString, value.TypeString.ValueFrom("foo", types))}, + want: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeString, value.TypeString.ValueFrom("foo", types))}, }, { name: "empty value", @@ -108,7 +108,7 @@ func TestOptionalValue_Type(t *testing.T) { }{ { name: "ok", - value: &OptionalValue{ov: *value.NewOptional(value.TypeBool, nil)}, + value: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeBool, nil)}, want: ValueTypeBool, }, { @@ -140,7 +140,7 @@ func TestOptionalValue_Value(t *testing.T) { }{ { name: "ok", - value: &OptionalValue{ov: *value.OptionalFrom(value.TypeString.ValueFrom("foobar", types))}, + value: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("foobar", types))}, want: ValueTypeString.ValueFrom("foobar"), }, { @@ -177,7 +177,7 @@ func TestOptionalValue_TypeAndValue(t *testing.T) { }{ { name: "ok", - value: &OptionalValue{ov: *value.OptionalFrom(value.TypeString.ValueFrom("foobar", types))}, + value: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("foobar", types))}, wantt: ValueTypeString, wantv: ValueTypeString.ValueFrom("foobar"), }, @@ -222,17 +222,17 @@ func TestOptionalValue_SetValue(t *testing.T) { }{ { name: "set", - value: &OptionalValue{ov: *value.OptionalFrom(value.TypeString.ValueFrom("foo", types))}, + value: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("foo", types))}, args: args{v: ValueTypeString.ValueFrom("foobar")}, }, { name: "set to nil", - value: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}, + value: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeString, nil)}, args: args{v: ValueTypeString.ValueFrom("foobar")}, }, { name: "invalid value", - value: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}, + value: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeString, nil)}, args: args{v: ValueTypeNumber.ValueFrom(1)}, invalid: true, }, @@ -282,7 +282,7 @@ func TestOptionalValue_Clone(t *testing.T) { { name: "ok", target: &OptionalValue{ - ov: *value.NewOptional(value.TypeString, value.TypeString.ValueFrom("foo", types)), + OptionalValueField: *value.NewOptional(value.TypeString, value.TypeString.ValueFrom("foo", types)), }, }, { @@ -321,21 +321,21 @@ func TestOptionalValue_Cast(t *testing.T) { }{ { name: "diff type", - target: &OptionalValue{ov: *value.OptionalFrom(value.TypeNumber.ValueFrom(1.1, types))}, + target: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeNumber.ValueFrom(1.1, types))}, args: args{t: ValueTypeString}, - want: &OptionalValue{ov: *value.OptionalFrom(value.TypeString.ValueFrom("1.1", types))}, + want: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("1.1", types))}, }, { name: "same type", - target: &OptionalValue{ov: *value.OptionalFrom(value.TypeNumber.ValueFrom(1.1, types))}, + target: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeNumber.ValueFrom(1.1, types))}, args: args{t: ValueTypeNumber}, - want: &OptionalValue{ov: *value.OptionalFrom(value.TypeNumber.ValueFrom(1.1, types))}, + want: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeNumber.ValueFrom(1.1, types))}, }, { name: "to sting", - target: &OptionalValue{ov: *value.OptionalFrom(value.TypeLatLng.ValueFrom(LatLng{Lat: 1, Lng: 2}, types))}, + target: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeLatLng.ValueFrom(LatLng{Lat: 1, Lng: 2}, types))}, args: args{t: ValueTypeString}, - want: &OptionalValue{ov: *value.OptionalFrom(value.TypeString.ValueFrom("2.000000, 1.000000", types))}, + want: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("2.000000, 1.000000", types))}, }, { name: "empty", diff --git a/server/pkg/property/value_test.go b/server/pkg/property/value_test.go index 4b995a7498..c28d6e4de4 100644 --- a/server/pkg/property/value_test.go +++ b/server/pkg/property/value_test.go @@ -17,7 +17,7 @@ func TestValueType_None(t *testing.T) { { name: "default", tr: ValueTypeString, - want: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}, + want: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeString, nil)}, }, { name: "unknown", @@ -111,7 +111,7 @@ func TestValue_Some(t *testing.T) { v: *value.TypeString.ValueFrom("foo", types), }, want: &OptionalValue{ - ov: *value.OptionalFrom(value.TypeString.ValueFrom("foo", types)), + OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("foo", types)), }, }, { diff --git a/server/pkg/value/array.go b/server/pkg/value/array.go index d737337241..14cb5db266 100644 --- a/server/pkg/value/array.go +++ b/server/pkg/value/array.go @@ -56,6 +56,6 @@ func (v *Value) ValueArray() (vv []any, ok bool) { if v == nil { return } - vv, ok = v.v.([]any) + vv, ok = v.VField.([]any) return } diff --git a/server/pkg/value/bool.go b/server/pkg/value/bool.go index 381accfc1d..7f93b215d6 100644 --- a/server/pkg/value/bool.go +++ b/server/pkg/value/bool.go @@ -52,6 +52,6 @@ func (v *Value) ValueBool() (vv bool, ok bool) { if v == nil { return } - vv, ok = v.v.(bool) + vv, ok = v.VField.(bool) return } diff --git a/server/pkg/value/coordinates.go b/server/pkg/value/coordinates.go index a5a853e92c..658b790bfd 100644 --- a/server/pkg/value/coordinates.go +++ b/server/pkg/value/coordinates.go @@ -101,6 +101,6 @@ func (v *Value) ValueCoordinates() (vv Coordinates, ok bool) { if v == nil { return } - vv, ok = v.v.(Coordinates) + vv, ok = v.VField.(Coordinates) return } diff --git a/server/pkg/value/latlng.go b/server/pkg/value/latlng.go index ee2d00f9a3..760eb64322 100644 --- a/server/pkg/value/latlng.go +++ b/server/pkg/value/latlng.go @@ -91,6 +91,6 @@ func (v *Value) ValueLatLng() (vv LatLng, ok bool) { if v == nil { return } - vv, ok = v.v.(LatLng) + vv, ok = v.VField.(LatLng) return } diff --git a/server/pkg/value/latlngheight.go b/server/pkg/value/latlngheight.go index 5ee85b707a..bc707b83ea 100644 --- a/server/pkg/value/latlngheight.go +++ b/server/pkg/value/latlngheight.go @@ -96,6 +96,6 @@ func (v *Value) ValueLatLngHeight() (vv LatLngHeight, ok bool) { if v == nil { return } - vv, ok = v.v.(LatLngHeight) + vv, ok = v.VField.(LatLngHeight) return } diff --git a/server/pkg/value/number.go b/server/pkg/value/number.go index 261ca909fa..f667d3daa4 100644 --- a/server/pkg/value/number.go +++ b/server/pkg/value/number.go @@ -146,6 +146,6 @@ func (v *Value) ValueNumber() (vv float64, ok bool) { if v == nil { return } - vv, ok = v.v.(float64) + vv, ok = v.VField.(float64) return } diff --git a/server/pkg/value/optional.go b/server/pkg/value/optional.go index 8bf0b084ac..025ff2fa9c 100644 --- a/server/pkg/value/optional.go +++ b/server/pkg/value/optional.go @@ -1,8 +1,8 @@ package value type Optional struct { - t Type - v *Value + TField Type `msgpack:"FieldField"` + VField *Value `msgpack:"ValueField"` } func NewOptional(t Type, v *Value) *Optional { @@ -10,8 +10,8 @@ func NewOptional(t Type, v *Value) *Optional { return nil } return &Optional{ - t: t, - v: v, + TField: t, + VField: v, } } @@ -20,8 +20,8 @@ func OptionalFrom(v *Value) *Optional { return nil } return &Optional{ - t: v.Type(), - v: v, + TField: v.Type(), + VField: v, } } @@ -29,14 +29,14 @@ func (ov *Optional) Type() Type { if ov == nil { return TypeUnknown } - return ov.t + return ov.TField } func (ov *Optional) Value() *Value { - if ov == nil || ov.t == TypeUnknown || ov.v == nil { + if ov == nil || ov.TField == TypeUnknown || ov.VField == nil { return nil } - return ov.v.Clone() + return ov.VField.Clone() } func (ov *Optional) TypeAndValue() (Type, *Value) { @@ -44,10 +44,10 @@ func (ov *Optional) TypeAndValue() (Type, *Value) { } func (ov *Optional) SetValue(v *Value) { - if ov == nil || ov.t == TypeUnknown || (v != nil && ov.t != v.Type()) { + if ov == nil || ov.TField == TypeUnknown || (v != nil && ov.TField != v.Type()) { return } - ov.v = v.Clone() + ov.VField = v.Clone() } func (ov *Optional) Clone() *Optional { @@ -55,20 +55,20 @@ func (ov *Optional) Clone() *Optional { return nil } return &Optional{ - t: ov.t, - v: ov.v.Clone(), + TField: ov.TField, + VField: ov.VField.Clone(), } } // Cast tries to convert the value to the new type and generates a new Optional. func (ov *Optional) Cast(t Type, p TypePropertyMap) *Optional { - if ov == nil || ov.t == TypeUnknown { + if ov == nil || ov.TField == TypeUnknown { return nil } - if ov.v == nil { + if ov.VField == nil { return NewOptional(t, nil) } - nv := ov.v.Cast(t, p) + nv := ov.VField.Cast(t, p) return NewOptional(t, nv) } diff --git a/server/pkg/value/optional_test.go b/server/pkg/value/optional_test.go index 8cf645578f..98fe838f71 100644 --- a/server/pkg/value/optional_test.go +++ b/server/pkg/value/optional_test.go @@ -23,22 +23,22 @@ func TestNewOptional(t *testing.T) { t: TypeString, v: TypeString.ValueFrom("foo", nil), }, - want: &Optional{t: TypeString, v: TypeString.ValueFrom("foo", nil)}, + want: &Optional{TField: TypeString, VField: TypeString.ValueFrom("foo", nil)}, }, { name: "custom type", args: args{ t: Type("foo"), - v: &Value{t: Type("foo")}, + v: &Value{TField: Type("foo")}, }, - want: &Optional{t: Type("foo"), v: &Value{t: Type("foo")}}, + want: &Optional{TField: Type("foo"), VField: &Value{TField: Type("foo")}}, }, { name: "nil value", args: args{ t: Type("foo"), }, - want: &Optional{t: Type("foo"), v: nil}, + want: &Optional{TField: Type("foo"), VField: nil}, }, { name: "invalid value", @@ -82,19 +82,19 @@ func TestOptionalFrom(t *testing.T) { args: args{ v: TypeString.ValueFrom("foo", nil), }, - want: &Optional{t: TypeString, v: TypeString.ValueFrom("foo", nil)}, + want: &Optional{TField: TypeString, VField: TypeString.ValueFrom("foo", nil)}, }, { name: "custom type", args: args{ - v: &Value{t: Type("foo")}, + v: &Value{TField: Type("foo")}, }, - want: &Optional{t: Type("foo"), v: &Value{t: Type("foo")}}, + want: &Optional{TField: Type("foo"), VField: &Value{TField: Type("foo")}}, }, { name: "invalid value", args: args{ - v: &Value{v: "string"}, + v: &Value{VField: "string"}, }, want: nil, }, @@ -122,7 +122,7 @@ func TestOptional_Type(t *testing.T) { }{ { name: "ok", - value: &Optional{t: Type("foo")}, + value: &Optional{TField: Type("foo")}, want: Type("foo"), }, { @@ -154,8 +154,8 @@ func TestOptional_Value(t *testing.T) { }{ { name: "ok", - value: &Optional{t: TypeString, v: &Value{t: TypeString, v: "foobar"}}, - want: &Value{t: TypeString, v: "foobar"}, + value: &Optional{TField: TypeString, VField: &Value{TField: TypeString, VField: "foobar"}}, + want: &Value{TField: TypeString, VField: "foobar"}, }, { name: "empty", @@ -191,9 +191,9 @@ func TestOptional_TypeAndValue(t *testing.T) { }{ { name: "ok", - value: &Optional{t: TypeString, v: &Value{t: TypeString, v: "foobar"}}, + value: &Optional{TField: TypeString, VField: &Value{TField: TypeString, VField: "foobar"}}, wantt: TypeString, - wantv: &Value{t: TypeString, v: "foobar"}, + wantv: &Value{TField: TypeString, VField: "foobar"}, }, { name: "empty", @@ -237,43 +237,43 @@ func TestOptional_SetValue(t *testing.T) { { name: "set", value: &Optional{ - t: TypeString, - v: &Value{t: TypeString, v: "foobar"}, + TField: TypeString, + VField: &Value{TField: TypeString, VField: "foobar"}, }, - args: args{v: &Value{t: TypeString, v: "bar"}}, + args: args{v: &Value{TField: TypeString, VField: "bar"}}, }, { name: "set to nil", value: &Optional{ - t: TypeString, + TField: TypeString, }, - args: args{v: &Value{t: TypeString, v: "bar"}}, + args: args{v: &Value{TField: TypeString, VField: "bar"}}, }, { name: "invalid value", value: &Optional{ - t: TypeNumber, - v: &Value{t: TypeNumber, v: 1}, + TField: TypeNumber, + VField: &Value{TField: TypeNumber, VField: 1}, }, - args: args{v: &Value{t: TypeString, v: "bar"}}, + args: args{v: &Value{TField: TypeString, VField: "bar"}}, invalid: true, }, { name: "nil value", value: &Optional{ - t: TypeNumber, - v: &Value{t: TypeNumber, v: 1}, + TField: TypeNumber, + VField: &Value{TField: TypeNumber, VField: 1}, }, }, { name: "empty", value: &Optional{}, - args: args{v: &Value{t: TypeString, v: "bar"}}, + args: args{v: &Value{TField: TypeString, VField: "bar"}}, invalid: true, }, { name: "nil", - args: args{v: &Value{t: TypeString, v: "bar"}}, + args: args{v: &Value{TField: TypeString, VField: "bar"}}, }, } @@ -283,18 +283,18 @@ func TestOptional_SetValue(t *testing.T) { t.Parallel() var v *Value if tt.value != nil { - v = tt.value.v + v = tt.value.VField } tt.value.SetValue(tt.args.v) if tt.value != nil { if tt.invalid { - assert.Same(t, v, tt.value.v) + assert.Same(t, v, tt.value.VField) } else { - assert.Equal(t, tt.args.v, tt.value.v) + assert.Equal(t, tt.args.v, tt.value.VField) if tt.args.v != nil { - assert.NotSame(t, tt.args.v, tt.value.v) + assert.NotSame(t, tt.args.v, tt.value.VField) } } } @@ -309,7 +309,7 @@ func TestOptional_Clone(t *testing.T) { }{ { name: "ok", - target: &Optional{t: TypeString, v: TypeString.ValueFrom("foo", nil)}, + target: &Optional{TField: TypeString, VField: TypeString.ValueFrom("foo", nil)}, }, { name: "empty", @@ -348,27 +348,27 @@ func TestOptional_Cast(t *testing.T) { }{ { name: "diff type", - target: &Optional{t: TypeNumber, v: TypeNumber.ValueFrom(1.1, nil)}, + target: &Optional{TField: TypeNumber, VField: TypeNumber.ValueFrom(1.1, nil)}, args: args{t: TypeString}, - want: &Optional{t: TypeString, v: TypeString.ValueFrom("1.1", nil)}, + want: &Optional{TField: TypeString, VField: TypeString.ValueFrom("1.1", nil)}, }, { name: "same type", - target: &Optional{t: TypeNumber, v: TypeNumber.ValueFrom(1.1, nil)}, + target: &Optional{TField: TypeNumber, VField: TypeNumber.ValueFrom(1.1, nil)}, args: args{t: TypeNumber}, - want: &Optional{t: TypeNumber, v: TypeNumber.ValueFrom(1.1, nil)}, + want: &Optional{TField: TypeNumber, VField: TypeNumber.ValueFrom(1.1, nil)}, }, { name: "nil value", - target: &Optional{t: TypeNumber}, + target: &Optional{TField: TypeNumber}, args: args{t: TypeString}, - want: &Optional{t: TypeString}, + want: &Optional{TField: TypeString}, }, { name: "to string", - target: &Optional{t: TypeLatLng, v: TypeLatLng.ValueFrom(LatLng{Lat: 1, Lng: 2}, nil)}, + target: &Optional{TField: TypeLatLng, VField: TypeLatLng.ValueFrom(LatLng{Lat: 1, Lng: 2}, nil)}, args: args{t: TypeString}, - want: &Optional{t: TypeString, v: TypeString.ValueFrom("2.000000, 1.000000", nil)}, + want: &Optional{TField: TypeString, VField: TypeString.ValueFrom("2.000000, 1.000000", nil)}, }, { name: "empty", diff --git a/server/pkg/value/polygon.go b/server/pkg/value/polygon.go index c3860fe890..e96871ece1 100644 --- a/server/pkg/value/polygon.go +++ b/server/pkg/value/polygon.go @@ -78,6 +78,6 @@ func (v *Value) ValuePolygon() (vv Polygon, ok bool) { if v == nil { return } - vv, ok = v.v.(Polygon) + vv, ok = v.VField.(Polygon) return } diff --git a/server/pkg/value/rect.go b/server/pkg/value/rect.go index e5efceb8ae..11c03428ba 100644 --- a/server/pkg/value/rect.go +++ b/server/pkg/value/rect.go @@ -72,6 +72,6 @@ func (v *Value) ValueRect() (vv Rect, ok bool) { if v == nil { return } - vv, ok = v.v.(Rect) + vv, ok = v.VField.(Rect) return } diff --git a/server/pkg/value/ref.go b/server/pkg/value/ref.go index 7ce764e6d8..43c9a47270 100644 --- a/server/pkg/value/ref.go +++ b/server/pkg/value/ref.go @@ -49,6 +49,6 @@ func (v *Value) ValueRef() (vv string, ok bool) { if v == nil { return } - vv, ok = v.v.(string) + vv, ok = v.VField.(string) return } diff --git a/server/pkg/value/string.go b/server/pkg/value/string.go index 941fc1e887..4e11199d10 100644 --- a/server/pkg/value/string.go +++ b/server/pkg/value/string.go @@ -54,6 +54,6 @@ func (v *Value) ValueString() (vv string, ok bool) { if v == nil { return } - vv, ok = v.v.(string) + vv, ok = v.VField.(string) return } diff --git a/server/pkg/value/type.go b/server/pkg/value/type.go index 72d85760ce..54884d6afe 100644 --- a/server/pkg/value/type.go +++ b/server/pkg/value/type.go @@ -45,14 +45,14 @@ func (t Type) ValueFrom(i interface{}, p TypePropertyMap) *Value { if p != nil { if vt, ok := p[t]; ok && vt != nil { if v, ok2 := vt.I2V(i); ok2 { - return &Value{p: p, v: v, t: t} + return &Value{PField: p, VField: v, TField: t} } } } if vt, ok := defaultTypes[t]; ok && vt != nil { if v, ok2 := vt.I2V(i); ok2 { - return &Value{p: p, v: v, t: t} + return &Value{PField: p, VField: v, TField: t} } } diff --git a/server/pkg/value/type_test.go b/server/pkg/value/type_test.go index f4596d52b9..f4f1633d57 100644 --- a/server/pkg/value/type_test.go +++ b/server/pkg/value/type_test.go @@ -59,12 +59,12 @@ func TestType_None(t *testing.T) { { name: "default", tr: TypeString, - want: &Optional{t: TypeString}, + want: &Optional{TField: TypeString}, }, { name: "custom", tr: Type("foo"), - want: &Optional{t: Type("foo")}, + want: &Optional{TField: Type("foo")}, }, { name: "unknown", @@ -104,7 +104,7 @@ func TestType_ValueFrom(t *testing.T) { args: args{ i: "hoge", }, - want: &Value{t: TypeString, v: "hoge"}, + want: &Value{TField: TypeString, VField: "hoge"}, }, { name: "custom type", @@ -113,7 +113,7 @@ func TestType_ValueFrom(t *testing.T) { i: "hoge", p: tpm, }, - want: &Value{p: tpm, t: Type("foo"), v: "hogea"}, + want: &Value{PField: tpm, TField: Type("foo"), VField: "hogea"}, }, { name: "nil", diff --git a/server/pkg/value/url.go b/server/pkg/value/url.go index 4f86822337..3dab0f5767 100644 --- a/server/pkg/value/url.go +++ b/server/pkg/value/url.go @@ -63,6 +63,6 @@ func (v *Value) ValueURL() (vv *url.URL, ok bool) { if v == nil { return } - vv, ok = v.v.(*url.URL) + vv, ok = v.VField.(*url.URL) return } diff --git a/server/pkg/value/value.go b/server/pkg/value/value.go index 5e3f71c98a..88f467737b 100644 --- a/server/pkg/value/value.go +++ b/server/pkg/value/value.go @@ -5,20 +5,20 @@ import ( ) type Value struct { - p TypePropertyMap - v interface{} - t Type + PField TypePropertyMap `msgpack:"PField"` + VField interface{} `msgpack:"VField"` + TField Type `msgpack:"TField"` } func (v *Value) IsEmpty() bool { - return v == nil || v.t == TypeUnknown || v.v == nil + return v == nil || v.TField == TypeUnknown || v.VField == nil } func (v *Value) Clone() *Value { if v.IsEmpty() { return nil } - return v.t.ValueFrom(v.v, v.p) + return v.TField.ValueFrom(v.VField, v.PField) } func (v *Value) Some() *Optional { @@ -29,26 +29,26 @@ func (v *Value) Value() interface{} { if v == nil { return nil } - return v.v + return v.VField } func (v *Value) Type() Type { if v == nil { return TypeUnknown } - return v.t + return v.TField } func (v *Value) TypeProperty() (tp TypeProperty) { if v.IsEmpty() { return } - if v.p != nil { - if tp, ok := v.p[v.t]; ok { + if v.PField != nil { + if tp, ok := v.PField[v.TField]; ok { return tp } } - if tp, ok := defaultTypes[v.t]; ok { + if tp, ok := defaultTypes[v.TField]; ok { return tp } return @@ -56,12 +56,12 @@ func (v *Value) TypeProperty() (tp TypeProperty) { // Interface converts the value into generic representation func (v *Value) Interface() interface{} { - if v == nil || v.t == TypeUnknown { + if v == nil || v.TField == TypeUnknown { return nil } if tp := v.TypeProperty(); tp != nil { - if i, ok2 := tp.V2I(v.v); ok2 { + if i, ok2 := tp.V2I(v.VField); ok2 { return i } } @@ -70,19 +70,19 @@ func (v *Value) Interface() interface{} { } func (v *Value) String() string { - if v == nil || v.t == TypeUnknown { + if v == nil || v.TField == TypeUnknown { return "" } if tp := v.TypeProperty(); tp != nil { - return tp.String(v.v) + return tp.String(v.VField) } return "" } func (v *Value) Validate() bool { - if v == nil || v.t == TypeUnknown { + if v == nil || v.TField == TypeUnknown { return false } @@ -98,11 +98,11 @@ func (v *Value) MarshalJSON() ([]byte, error) { } func (v *Value) Cast(t Type, p TypePropertyMap) *Value { - if v == nil || v.t == TypeUnknown { + if v == nil || v.TField == TypeUnknown { return nil } - if v.t == t { + if v.TField == t { return v.Clone() } - return t.ValueFrom(v.v, p) + return t.ValueFrom(v.VField, p) } diff --git a/server/pkg/value/value_test.go b/server/pkg/value/value_test.go index d1275595b5..38ced8e6d1 100644 --- a/server/pkg/value/value_test.go +++ b/server/pkg/value/value_test.go @@ -24,8 +24,8 @@ func TestValue_IsEmpty(t *testing.T) { { name: "non-empty", value: &Value{ - t: Type("hoge"), - v: "foo", + TField: Type("hoge"), + VField: "foo", }, want: false, }, @@ -54,25 +54,25 @@ func TestValue_Clone(t *testing.T) { { name: "ok", value: &Value{ - t: TypeString, - v: "foo", + TField: TypeString, + VField: "foo", }, want: &Value{ - t: TypeString, - v: "foo", + TField: TypeString, + VField: "foo", }, }, { name: "custom type property", value: &Value{ - t: Type("hoge"), - v: "foo", - p: tpm, + TField: Type("hoge"), + VField: "foo", + PField: tpm, }, want: &Value{ - t: Type("hoge"), - v: "fooa", - p: tpm, + TField: Type("hoge"), + VField: "fooa", + PField: tpm, }, }, { @@ -110,30 +110,30 @@ func TestValue_Some(t *testing.T) { { name: "ok", value: &Value{ - t: TypeString, - v: "foo", + TField: TypeString, + VField: "foo", }, want: &Optional{ - t: TypeString, - v: &Value{ - t: TypeString, - v: "foo", + TField: TypeString, + VField: &Value{ + TField: TypeString, + VField: "foo", }, }, }, { name: "custom type property", value: &Value{ - t: Type("hoge"), - v: "fooa", - p: tpm, + TField: Type("hoge"), + VField: "fooa", + PField: tpm, }, want: &Optional{ - t: Type("hoge"), - v: &Value{ - t: Type("hoge"), - v: "fooa", - p: tpm, + TField: Type("hoge"), + VField: &Value{ + TField: Type("hoge"), + VField: "fooa", + PField: tpm, }, }, }, @@ -168,7 +168,7 @@ func TestValue_Value(t *testing.T) { }{ { name: "ok", - value: &Value{t: TypeURL, v: u}, + value: &Value{TField: TypeURL, VField: u}, want: u, }, { @@ -201,7 +201,7 @@ func TestValue_Type(t *testing.T) { }{ { name: "ok", - value: &Value{t: TypeString}, + value: &Value{TField: TypeString}, want: TypeString, }, { @@ -238,17 +238,17 @@ func TestValue_TypeProperty(t *testing.T) { { name: "default type", value: &Value{ - v: "string", - t: TypeString, + VField: "string", + TField: TypeString, }, want: defaultTypes[TypeString], }, { name: "custom type", value: &Value{ - v: "string", - t: Type("hoge"), - p: tpm, + VField: "string", + TField: Type("hoge"), + PField: tpm, }, want: tp, }, @@ -290,20 +290,20 @@ func TestValue_Interface(t *testing.T) { }{ { name: "string", - value: &Value{t: TypeString, v: "hoge"}, + value: &Value{TField: TypeString, VField: "hoge"}, want: "hoge", }, { name: "latlng", - value: &Value{t: TypeLatLng, v: LatLng{Lat: 1, Lng: 2}}, + value: &Value{TField: TypeLatLng, VField: LatLng{Lat: 1, Lng: 2}}, want: LatLng{Lat: 1, Lng: 2}, }, { name: "custom", value: &Value{ - p: tpm, - t: Type("foo"), - v: "foo", + PField: tpm, + TField: Type("foo"), + VField: "foo", }, want: "foobar", }, @@ -342,25 +342,25 @@ func TestValue_Cast(t *testing.T) { }{ { name: "diff type", - target: &Value{t: TypeNumber, v: 1.1}, + target: &Value{TField: TypeNumber, VField: 1.1}, args: args{t: TypeString}, - want: &Value{t: TypeString, v: "1.1"}, + want: &Value{TField: TypeString, VField: "1.1"}, }, { name: "same type", - target: &Value{t: TypeNumber, v: 1.1}, + target: &Value{TField: TypeNumber, VField: 1.1}, args: args{t: TypeNumber}, - want: &Value{t: TypeNumber, v: 1.1}, + want: &Value{TField: TypeNumber, VField: 1.1}, }, { name: "to string", - target: &Value{t: TypeLatLng, v: LatLng{Lat: 1, Lng: 2}}, + target: &Value{TField: TypeLatLng, VField: LatLng{Lat: 1, Lng: 2}}, args: args{t: TypeString}, - want: &Value{t: TypeString, v: "2.000000, 1.000000"}, + want: &Value{TField: TypeString, VField: "2.000000, 1.000000"}, }, { name: "invalid value", - target: &Value{t: TypeNumber}, + target: &Value{TField: TypeNumber}, args: args{t: TypeString}, want: nil, }, From d90856b9a4cf7f895f68f1522435bd060f26e2f3 Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 25 Apr 2024 10:10:38 +0900 Subject: [PATCH 03/17] Revert "fix pkg" This reverts commit 3d04f25da44af271f32ff822c41b94237627763c. --- server/pkg/property/builder_test.go | 4 +- server/pkg/property/diff_test.go | 22 +-- server/pkg/property/group.go | 52 +++--- server/pkg/property/group_builder.go | 2 +- server/pkg/property/group_builder_test.go | 4 +- server/pkg/property/group_list.go | 84 ++++----- server/pkg/property/group_list_builder.go | 4 +- .../pkg/property/group_list_builder_test.go | 4 +- server/pkg/property/group_list_test.go | 14 +- server/pkg/property/group_test.go | 2 +- server/pkg/property/link.go | 160 +++++++++--------- server/pkg/property/property_test.go | 8 +- server/pkg/property/value_optional.go | 22 +-- server/pkg/property/value_optional_test.go | 32 ++-- server/pkg/property/value_test.go | 4 +- server/pkg/value/array.go | 2 +- server/pkg/value/bool.go | 2 +- server/pkg/value/coordinates.go | 2 +- server/pkg/value/latlng.go | 2 +- server/pkg/value/latlngheight.go | 2 +- server/pkg/value/number.go | 2 +- server/pkg/value/optional.go | 32 ++-- server/pkg/value/optional_test.go | 76 ++++----- server/pkg/value/polygon.go | 2 +- server/pkg/value/rect.go | 2 +- server/pkg/value/ref.go | 2 +- server/pkg/value/string.go | 2 +- server/pkg/value/type.go | 4 +- server/pkg/value/type_test.go | 8 +- server/pkg/value/url.go | 2 +- server/pkg/value/value.go | 36 ++-- server/pkg/value/value_test.go | 90 +++++----- 32 files changed, 343 insertions(+), 343 deletions(-) diff --git a/server/pkg/property/builder_test.go b/server/pkg/property/builder_test.go index f985fdf9e2..3e2665934d 100644 --- a/server/pkg/property/builder_test.go +++ b/server/pkg/property/builder_test.go @@ -119,7 +119,7 @@ func TestBuilder_Build(t *testing.T) { ID: iid, SchemaGroup: propertySchemaGroup1ID, }, - FieldsField: []*Field{ + fields: []*Field{ { FieldField: propertySchemaField1ID, ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("xxx")), @@ -138,7 +138,7 @@ func TestBuilder_Build(t *testing.T) { ID: iid, SchemaGroup: propertySchemaGroup1ID, }, - FieldsField: []*Field{ + fields: []*Field{ { FieldField: propertySchemaField1ID, ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("xxx")), diff --git a/server/pkg/property/diff_test.go b/server/pkg/property/diff_test.go index 7b6f978f88..d92ee36fe1 100644 --- a/server/pkg/property/diff_test.go +++ b/server/pkg/property/diff_test.go @@ -269,20 +269,20 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: testGroup1.ID(), SchemaGroup: testGroup1.SchemaGroup(), }, - FieldsField: []*Field{}, // deleted + fields: []*Field{}, // deleted }, &GroupList{ itemBase: itemBase{ ID: testGroupList1.ID(), SchemaGroup: testGroupList1.SchemaGroup(), }, - GroupsField: []*Group{ + groups: []*Group{ { itemBase: itemBase{ ID: testGroup2.ID(), SchemaGroup: testGroup2.SchemaGroup(), }, - FieldsField: []*Field{ + fields: []*Field{ {FieldField: testField2.Field(), ValueField: NewOptionalValue(ValueTypeString, nil)}, // type changed }, }, @@ -314,7 +314,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: testGroup1.ID(), SchemaGroup: testGroup1.SchemaGroup(), }, - FieldsField: []*Field{}, // deleted + fields: []*Field{}, // deleted }, testGroupList1, &Group{ @@ -322,7 +322,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: itemID, SchemaGroup: "x", }, - FieldsField: []*Field{testField1}, + fields: []*Field{testField1}, }, }, }, @@ -353,7 +353,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: testGroup1.ID(), SchemaGroup: testGroup1.SchemaGroup(), }, - FieldsField: []*Field{}, // deleted + fields: []*Field{}, // deleted }, testGroupList1, &Group{ @@ -361,7 +361,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: itemID, SchemaGroup: "x", }, - FieldsField: []*Field{ + fields: []*Field{ {FieldField: testField1.Field(), ValueField: NewOptionalValue(ValueTypeNumber, nil)}, }, }, @@ -391,7 +391,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: testGroup1.ID(), SchemaGroup: testGroup1.SchemaGroup(), }, - FieldsField: []*Field{}, // deleted + fields: []*Field{}, // deleted }, testGroupList1, }, @@ -421,7 +421,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: testGroup1.ID(), SchemaGroup: testGroup1.SchemaGroup(), }, - FieldsField: []*Field{}, // deleted + fields: []*Field{}, // deleted }, testGroupList1, }, @@ -451,13 +451,13 @@ func TestSchemaDiff_Migrate(t *testing.T) { ID: testGroupList1.ID(), SchemaGroup: testGroupList1.SchemaGroup(), }, - GroupsField: []*Group{ + groups: []*Group{ { itemBase: itemBase{ ID: testGroup2.ID(), SchemaGroup: testGroup2.SchemaGroup(), }, - FieldsField: []*Field{}, // deleted + fields: []*Field{}, // deleted }, }, }, diff --git a/server/pkg/property/group.go b/server/pkg/property/group.go index 39479ce787..9f303918ba 100644 --- a/server/pkg/property/group.go +++ b/server/pkg/property/group.go @@ -10,7 +10,7 @@ import ( // Group represents a group of property type Group struct { itemBase - FieldsField []*Field `msgpack:"FieldsField"` + fields []*Field } // Group implements Item interface @@ -42,7 +42,7 @@ func (g *Group) HasLinkedField() bool { if g == nil { return false } - for _, f := range g.FieldsField { + for _, f := range g.fields { if f.Links().IsLinked() { return true } @@ -56,7 +56,7 @@ func (g *Group) Datasets() []DatasetID { } res := []DatasetID{} - for _, f := range g.FieldsField { + for _, f := range g.fields { res = append(res, f.Datasets()...) } @@ -68,7 +68,7 @@ func (g *Group) FieldsByLinkedDataset(s DatasetSchemaID, i DatasetID) []*Field { return nil } res := []*Field{} - for _, f := range g.FieldsField { + for _, f := range g.fields { if f.Links().HasSchemaAndDataset(s, i) { res = append(res, f) } @@ -80,7 +80,7 @@ func (g *Group) IsDatasetLinked(s DatasetSchemaID, i DatasetID) bool { if g == nil { return false } - for _, f := range g.FieldsField { + for _, f := range g.fields { if f.IsDatasetLinked(s, i) { return true } @@ -90,7 +90,7 @@ func (g *Group) IsDatasetLinked(s DatasetSchemaID, i DatasetID) bool { func (g *Group) IsEmpty() bool { if g != nil { - for _, f := range g.FieldsField { + for _, f := range g.fields { if !f.IsEmpty() { return false } @@ -103,7 +103,7 @@ func (g *Group) Prune() (res bool) { if g == nil { return } - for _, f := range g.FieldsField { + for _, f := range g.fields { if f.IsEmpty() { if g.RemoveField(f.Field()) { res = true @@ -119,7 +119,7 @@ func (g *Group) MigrateSchema(ctx context.Context, newSchema *Schema, dl dataset return } - for _, f := range g.FieldsField { + for _, f := range g.fields { if !f.MigrateSchema(ctx, newSchema, dl) { g.RemoveField(f.Field()) } @@ -164,7 +164,7 @@ func (g *Group) AddFields(fields ...*Field) { } for _, f := range fields { _ = g.RemoveField(f.Field()) - g.FieldsField = append(g.FieldsField, f) + g.fields = append(g.fields, f) } } @@ -172,9 +172,9 @@ func (g *Group) RemoveField(fid FieldID) (res bool) { if g == nil { return false } - for i, f := range g.FieldsField { + for i, f := range g.fields { if f.Field() == fid { - g.FieldsField = append(g.FieldsField[:i], g.FieldsField[i+1:]...) + g.fields = append(g.fields[:i], g.fields[i+1:]...) return true } } @@ -185,8 +185,8 @@ func (g *Group) FieldIDs() []FieldID { if g == nil { return nil } - fields := make([]FieldID, 0, len(g.FieldsField)) - for _, f := range g.FieldsField { + fields := make([]FieldID, 0, len(g.fields)) + for _, f := range g.fields { fields = append(fields, f.Field()) } return fields @@ -197,7 +197,7 @@ func (g *Group) Field(fid FieldID) *Field { if g == nil { return nil } - for _, f := range g.FieldsField { + for _, f := range g.fields { if f.Field() == fid { return f } @@ -209,7 +209,7 @@ func (g *Group) MigrateDataset(q DatasetMigrationParam) { if g == nil { return } - for _, f := range g.FieldsField { + for _, f := range g.fields { f.MigrateDataset(q) } } @@ -239,7 +239,7 @@ func (p *Group) ValidateSchema(ps *SchemaGroup) error { return errors.New("invalid schema group id") } - for _, i := range p.FieldsField { + for _, i := range p.fields { f := ps.Field(i.Field()) if f.Type() != i.Type() { return errors.New("invalid field type") @@ -253,13 +253,13 @@ func (p *Group) Clone() *Group { if p == nil { return nil } - fields := make([]*Field, 0, len(p.FieldsField)) - for _, f := range p.FieldsField { + fields := make([]*Field, 0, len(p.fields)) + for _, f := range p.fields { fields = append(fields, f.Clone()) } return &Group{ - FieldsField: fields, - itemBase: p.itemBase, + fields: fields, + itemBase: p.itemBase, } } @@ -268,7 +268,7 @@ func (p *Group) CloneItem() Item { } func (g *Group) Fields(p *Pointer) []*Field { - if g == nil || len(g.FieldsField) == 0 || (p != nil && !p.TestItem(g.SchemaGroup(), g.ID())) { + if g == nil || len(g.fields) == 0 || (p != nil && !p.TestItem(g.SchemaGroup(), g.ID())) { return nil } @@ -279,7 +279,7 @@ func (g *Group) Fields(p *Pointer) []*Field { return nil } - return append(g.FieldsField[:0:0], g.FieldsField...) + return append(g.fields[:0:0], g.fields...) } func (g *Group) RemoveFields(ptr *Pointer) (res bool) { @@ -295,11 +295,11 @@ func (g *Group) RemoveFields(ptr *Pointer) (res bool) { } func (p *Group) GroupAndFields(ptr *Pointer) []GroupAndField { - if p == nil || len(p.FieldsField) == 0 { + if p == nil || len(p.fields) == 0 { return nil } res := []GroupAndField{} - for _, f := range p.FieldsField { + for _, f := range p.fields { if ptr == nil || ptr.Test(p.SchemaGroup(), p.ID(), f.Field()) { res = append(res, GroupAndField{ Group: p, @@ -315,8 +315,8 @@ func (g *Group) GuessSchema() *SchemaGroup { return nil } - fields := make([]*SchemaField, 0, len(g.FieldsField)) - for _, f := range g.FieldsField { + fields := make([]*SchemaField, 0, len(g.fields)) + for _, f := range g.fields { if sf := f.GuessSchema(); sf != nil { fields = append(fields, sf) } diff --git a/server/pkg/property/group_builder.go b/server/pkg/property/group_builder.go index 96838a80b8..6ec41ced74 100644 --- a/server/pkg/property/group_builder.go +++ b/server/pkg/property/group_builder.go @@ -70,6 +70,6 @@ func (b *GroupBuilder) Fields(fields []*Field) *GroupBuilder { ids[f.Field()] = struct{}{} newFields = append(newFields, f) } - b.p.FieldsField = newFields + b.p.fields = newFields return b } diff --git a/server/pkg/property/group_builder_test.go b/server/pkg/property/group_builder_test.go index f6f4d696c8..8dd6dc3d49 100644 --- a/server/pkg/property/group_builder_test.go +++ b/server/pkg/property/group_builder_test.go @@ -40,7 +40,7 @@ func TestGroupBuilder_Build(t *testing.T) { ID: iid, SchemaGroup: "a", }, - FieldsField: []*Field{f}, + fields: []*Field{f}, }, }, } @@ -97,7 +97,7 @@ func TestGroupBuilder_MustBuild(t *testing.T) { ID: iid, SchemaGroup: "a", }, - FieldsField: []*Field{f}, + fields: []*Field{f}, }, }, } diff --git a/server/pkg/property/group_list.go b/server/pkg/property/group_list.go index bf331adc04..0fbd90a0ec 100644 --- a/server/pkg/property/group_list.go +++ b/server/pkg/property/group_list.go @@ -11,7 +11,7 @@ import ( type GroupList struct { itemBase - GroupsField []*Group `msgpack:"GroupsField"` + groups []*Group } // List implements Item interface @@ -52,7 +52,7 @@ func (g *GroupList) HasLinkedField() bool { if g == nil { return false } - for _, f := range g.GroupsField { + for _, f := range g.groups { if f.HasLinkedField() { return true } @@ -66,7 +66,7 @@ func (g *GroupList) Datasets() []DatasetID { } res := []DatasetID{} - for _, f := range g.GroupsField { + for _, f := range g.groups { res = append(res, f.Datasets()...) } @@ -78,7 +78,7 @@ func (g *GroupList) FieldsByLinkedDataset(s DatasetSchemaID, i DatasetID) []*Fie return nil } res := []*Field{} - for _, g := range g.GroupsField { + for _, g := range g.groups { res = append(res, g.FieldsByLinkedDataset(s, i)...) } return res @@ -88,7 +88,7 @@ func (g *GroupList) IsDatasetLinked(s DatasetSchemaID, i DatasetID) bool { if g == nil { return false } - for _, d := range g.GroupsField { + for _, d := range g.groups { if d.IsDatasetLinked(s, i) { return true } @@ -97,14 +97,14 @@ func (g *GroupList) IsDatasetLinked(s DatasetSchemaID, i DatasetID) bool { } func (g *GroupList) IsEmpty() bool { - return g != nil && (g.GroupsField == nil || len(g.GroupsField) == 0) + return g != nil && (g.groups == nil || len(g.groups) == 0) } func (g *GroupList) Prune() (res bool) { if g == nil { return } - for _, f := range g.GroupsField { + for _, f := range g.groups { if f.Prune() { res = true } @@ -117,7 +117,7 @@ func (g *GroupList) MigrateSchema(ctx context.Context, newSchema *Schema, dl dat return } - for _, f := range g.GroupsField { + for _, f := range g.groups { f.MigrateSchema(ctx, newSchema, dl) } @@ -129,7 +129,7 @@ func (g *GroupList) Groups() []*Group { if g == nil { return nil } - return append([]*Group{}, g.GroupsField...) + return append([]*Group{}, g.groups...) } // Group returns a group whose id is specified @@ -137,7 +137,7 @@ func (g *GroupList) Group(gid ItemID) *Group { if g == nil { return nil } - for _, g := range g.GroupsField { + for _, g := range g.groups { if g.ID() == gid { return g } @@ -160,13 +160,13 @@ func (p *GroupList) Clone() *GroupList { if p == nil { return nil } - groups := make([]*Group, 0, len(p.GroupsField)) - for _, g := range p.GroupsField { + groups := make([]*Group, 0, len(p.groups)) + for _, g := range p.groups { groups = append(groups, g.Clone()) } return &GroupList{ - GroupsField: groups, - itemBase: p.itemBase, + groups: groups, + itemBase: p.itemBase, } } @@ -175,7 +175,7 @@ func (p *GroupList) CloneItem() Item { } func (g *GroupList) Fields(ptr *Pointer) []*Field { - if g == nil || len(g.GroupsField) == 0 || (ptr != nil && !ptr.TestSchemaGroup(g.SchemaGroup())) { + if g == nil || len(g.groups) == 0 || (ptr != nil && !ptr.TestSchemaGroup(g.SchemaGroup())) { return nil } @@ -188,7 +188,7 @@ func (g *GroupList) Fields(ptr *Pointer) []*Field { } var fields []*Field - for _, g := range g.GroupsField { + for _, g := range g.groups { if f := g.Fields(ptr); len(f) > 0 { fields = append(fields, f...) } @@ -210,7 +210,7 @@ func (g *GroupList) RemoveFields(ptr *Pointer) (res bool) { } if fid, ok := ptr.Field(); ok { - for _, g := range g.GroupsField { + for _, g := range g.groups { if g.RemoveField(fid) { res = true } @@ -221,11 +221,11 @@ func (g *GroupList) RemoveFields(ptr *Pointer) (res bool) { } func (p *GroupList) GroupAndFields(ptr *Pointer) []GroupAndField { - if p == nil || len(p.GroupsField) == 0 { + if p == nil || len(p.groups) == 0 { return nil } res := []GroupAndField{} - for _, g := range p.GroupsField { + for _, g := range p.groups { if ptr == nil || ptr.TestItem(g.SchemaGroup(), g.ID()) { for _, r := range g.GroupAndFields(ptr) { res = append(res, GroupAndField{ @@ -247,7 +247,7 @@ func (g *GroupList) GuessSchema() *SchemaGroup { fieldm := map[FieldID]struct{}{} fields := []*SchemaField{} - for _, g := range g.GroupsField { + for _, g := range g.groups { if gsg := g.GuessSchema(); gsg != nil { for _, f := range gsg.Fields() { if _, ok := fieldm[f.ID()]; ok { @@ -266,24 +266,24 @@ func (g *GroupList) GuessSchema() *SchemaGroup { // GroupAt returns a group whose index is specified func (g *GroupList) GroupAt(i int) *Group { - if g == nil || i < 0 || i > len(g.GroupsField)-1 { + if g == nil || i < 0 || i > len(g.groups)-1 { return nil } - return g.GroupsField[i] + return g.groups[i] } func (g *GroupList) Has(i ItemID) bool { if g == nil { return false } - return util.ListHas[ItemID, Group](g.GroupsField, (*Group).ID, i) + return util.ListHas[ItemID, Group](g.groups, (*Group).ID, i) } func (g *GroupList) Count() int { if g == nil { return 0 } - return len(g.GroupsField) + return len(g.groups) } func (g *GroupList) Add(gg *Group, index int) { @@ -291,11 +291,11 @@ func (g *GroupList) Add(gg *Group, index int) { return } - le := len(g.GroupsField) + le := len(g.groups) if index < 0 || le <= index { - g.GroupsField = append(g.GroupsField, gg) + g.groups = append(g.groups, gg) } else { - g.GroupsField = append(g.GroupsField[:index], append([]*Group{gg}, g.GroupsField[index:]...)...) + g.groups = append(g.groups[:index], append([]*Group{gg}, g.groups[index:]...)...) } } @@ -304,7 +304,7 @@ func (g *GroupList) AddOrMove(gg *Group, index int) { return } - le := len(g.GroupsField) + le := len(g.groups) if index < 0 || le <= index { index = le } @@ -314,7 +314,7 @@ func (g *GroupList) AddOrMove(gg *Group, index int) { g.Move(gid, index) return } - g.GroupsField = append(g.GroupsField[:index], append([]*Group{gg}, g.GroupsField[index:]...)...) + g.groups = append(g.groups[:index], append([]*Group{gg}, g.groups[index:]...)...) } func (g *GroupList) Move(id ItemID, toIndex int) { @@ -322,7 +322,7 @@ func (g *GroupList) Move(id ItemID, toIndex int) { return } - for fromIndex, gg := range g.GroupsField { + for fromIndex, gg := range g.groups { if gg.ID() == id { g.MoveAt(fromIndex, toIndex) return @@ -335,7 +335,7 @@ func (g *GroupList) MoveAt(fromIndex int, toIndex int) { return } - le := len(g.GroupsField) + le := len(g.groups) if fromIndex < 0 || le <= fromIndex { return } @@ -346,12 +346,12 @@ func (g *GroupList) MoveAt(fromIndex int, toIndex int) { return } - f := g.GroupsField[fromIndex] - g.GroupsField = append(g.GroupsField[:fromIndex], g.GroupsField[fromIndex+1:]...) + f := g.groups[fromIndex] + g.groups = append(g.groups[:fromIndex], g.groups[fromIndex+1:]...) newSlice := make([]*Group, toIndex+1) - copy(newSlice, g.GroupsField[:toIndex]) + copy(newSlice, g.groups[:toIndex]) newSlice[toIndex] = f - g.GroupsField = append(newSlice, g.GroupsField[toIndex:]...) + g.groups = append(newSlice, g.groups[toIndex:]...) } func (g *GroupList) Remove(id ItemID) bool { @@ -359,7 +359,7 @@ func (g *GroupList) Remove(id ItemID) bool { return false } - for index, gg := range g.GroupsField { + for index, gg := range g.groups { if gg.ID() == id { g.RemoveAt(index) return true @@ -374,7 +374,7 @@ func (g *GroupList) RemoveAt(index int) { return } - le := len(g.GroupsField) + le := len(g.groups) if index < 0 || le <= index { return } @@ -382,9 +382,9 @@ func (g *GroupList) RemoveAt(index int) { if index == le { groups = []*Group{} } else { - groups = g.GroupsField[index+1:] + groups = g.groups[index+1:] } - g.GroupsField = append(g.GroupsField[:index], groups...) + g.groups = append(g.groups[:index], groups...) } func (g *GroupList) Empty() { @@ -392,7 +392,7 @@ func (g *GroupList) Empty() { return } - g.GroupsField = []*Group{} + g.groups = []*Group{} } func (g *GroupList) GetOrCreateField(ps *Schema, ptr *Pointer) (*Field, bool) { @@ -443,7 +443,7 @@ func (g *GroupList) MigrateDataset(q DatasetMigrationParam) { if g == nil { return } - for _, f := range g.GroupsField { + for _, f := range g.groups { f.MigrateDataset(q) } } @@ -459,7 +459,7 @@ func (p *GroupList) ValidateSchema(ps *SchemaGroup) error { return errors.New("invalid schema group id") } - for _, i := range p.GroupsField { + for _, i := range p.groups { if err := i.ValidateSchema(ps); err != nil { return fmt.Errorf("%s: %w", i.ID(), err) } diff --git a/server/pkg/property/group_list_builder.go b/server/pkg/property/group_list_builder.go index dcceb2f1db..cd3b8bdd72 100644 --- a/server/pkg/property/group_list_builder.go +++ b/server/pkg/property/group_list_builder.go @@ -29,7 +29,7 @@ func (b *GroupListBuilder) Build() (*GroupList, error) { if b.p.itemBase.SchemaGroup == "" { return nil, ErrInvalidID } - for _, g := range b.p.GroupsField { + for _, g := range b.p.groups { if g.SchemaGroup() != b.p.SchemaGroup() { return nil, ErrInvalidGroupInGroupList } @@ -78,6 +78,6 @@ func (b *GroupListBuilder) Groups(groups []*Group) *GroupListBuilder { ids[g.ID()] = struct{}{} newGroups = append(newGroups, g) } - b.p.GroupsField = newGroups + b.p.groups = newGroups return b } diff --git a/server/pkg/property/group_list_builder_test.go b/server/pkg/property/group_list_builder_test.go index d73e035466..a9046cfa98 100644 --- a/server/pkg/property/group_list_builder_test.go +++ b/server/pkg/property/group_list_builder_test.go @@ -34,7 +34,7 @@ func TestGroupListBuilder_Build(t *testing.T) { ID: pid, SchemaGroup: "x", }, - GroupsField: groups, + groups: groups, }, }, { @@ -103,7 +103,7 @@ func TestGroupListBuilder_MustBuild(t *testing.T) { ID: pid, SchemaGroup: "x", }, - GroupsField: groups, + groups: groups, }, }, { diff --git a/server/pkg/property/group_list_test.go b/server/pkg/property/group_list_test.go index b07cf6b0d6..6a711b513a 100644 --- a/server/pkg/property/group_list_test.go +++ b/server/pkg/property/group_list_test.go @@ -53,7 +53,7 @@ func TestGroupList_HasLinkedField(t *testing.T) { dssid := NewDatasetSchemaID() f := FieldFrom(sf). Value(OptionalValueFrom(v)). - Links(&Links{LinksField: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). + Links(&Links{links: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). MustBuild() groups := []*Group{NewGroup().ID(pid).SchemaGroup("xx").Fields([]*Field{f}).MustBuild()} groups2 := []*Group{NewGroup().ID(pid).SchemaGroup("xx").MustBuild()} @@ -96,7 +96,7 @@ func TestGroupList_Datasets(t *testing.T) { dssid := NewDatasetSchemaID() f := FieldFrom(sf). Value(OptionalValueFrom(v)). - Links(&Links{LinksField: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). + Links(&Links{links: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). MustBuild() groups := []*Group{NewGroup().ID(pid).SchemaGroup("xx").Fields([]*Field{f}).MustBuild()} groups2 := []*Group{NewGroup().ID(pid).SchemaGroup("xx").MustBuild()} @@ -138,7 +138,7 @@ func TestGroupList_FieldsByLinkedDataset(t *testing.T) { dssid := NewDatasetSchemaID() f := FieldFrom(sf). Value(OptionalValueFrom(v)). - Links(&Links{LinksField: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). + Links(&Links{links: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). MustBuild() groups := []*Group{NewGroup().ID(pid).SchemaGroup("xx").Fields([]*Field{f}).MustBuild()} groups2 := []*Group{NewGroup().ID(pid).SchemaGroup("xx").MustBuild()} @@ -180,7 +180,7 @@ func TestGroupList_IsEmpty(t *testing.T) { dssid := NewDatasetSchemaID() f := FieldFrom(sf). Value(OptionalValueFrom(v)). - Links(&Links{LinksField: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). + Links(&Links{links: []*Link{NewLink(dsid, dssid, NewDatasetFieldID())}}). MustBuild() groups := []*Group{NewGroup().ID(pid).SchemaGroup("xx").Fields([]*Field{f}).MustBuild()} @@ -1022,12 +1022,12 @@ func TestGroupList_GuessSchema(t *testing.T) { itemBase: itemBase{ SchemaGroup: "aa", }, - GroupsField: []*Group{ + groups: []*Group{ { itemBase: itemBase{ SchemaGroup: "aa", }, - FieldsField: []*Field{ + fields: []*Field{ {FieldField: "a", ValueField: NewOptionalValue(ValueTypeLatLng, nil)}, }, }, @@ -1035,7 +1035,7 @@ func TestGroupList_GuessSchema(t *testing.T) { itemBase: itemBase{ SchemaGroup: "aa", }, - FieldsField: []*Field{ + fields: []*Field{ {FieldField: "b", ValueField: NewOptionalValue(ValueTypeString, nil)}, }, }, diff --git a/server/pkg/property/group_test.go b/server/pkg/property/group_test.go index 4deba3d3e1..85aa7b7ea4 100644 --- a/server/pkg/property/group_test.go +++ b/server/pkg/property/group_test.go @@ -471,7 +471,7 @@ func TestGroup_RepresentativeFieldValue(t *testing.T) { Schema: NewSchema().ID(MustSchemaID("xx~1.0.0/aa")).Groups(NewSchemaGroupList([]*SchemaGroup{sg})).MustBuild(), Value: ValueTypeString.ValueFrom("abc"), }, - Expected: &Field{FieldField: "aa", ValueField: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeString, nil)}}, + Expected: &Field{FieldField: "aa", ValueField: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}}, }, } diff --git a/server/pkg/property/link.go b/server/pkg/property/link.go index 10b2051097..a0bb4b82b4 100644 --- a/server/pkg/property/link.go +++ b/server/pkg/property/link.go @@ -7,13 +7,13 @@ import ( ) type Links struct { - LinksField []*Link `msgpack:"LinksField"` + links []*Link } type Link struct { - DatasetField *DatasetID `msgpack:"DatasetField"` - SchemaField *DatasetSchemaID `msgpack:"SchemaField"` - FieldField *DatasetFieldID `msgpack:"FieldField"` + dataset *DatasetID + schema *DatasetSchemaID + field *DatasetFieldID } func NewLinks(links []*Link) *Links { @@ -25,7 +25,7 @@ func NewLinks(links []*Link) *Links { links2 = append(links2, l.Clone()) } return &Links{ - LinksField: links2, + links: links2, } } @@ -34,37 +34,37 @@ func (l *Links) Clone() *Links { return nil } return &Links{ - LinksField: append([]*Link{}, l.LinksField...), + links: append([]*Link{}, l.links...), } } func (l *Links) IsLinked() bool { - return l != nil && l.LinksField != nil && len(l.LinksField) > 0 + return l != nil && l.links != nil && len(l.links) > 0 } func (l *Links) IsLinkedFully() bool { - return l != nil && l.LinksField != nil && len(l.LinksField) > 0 && len(l.DatasetIDs()) == len(l.LinksField) + return l != nil && l.links != nil && len(l.links) > 0 && len(l.DatasetIDs()) == len(l.links) } func (l *Links) Len() int { - if l == nil || l.LinksField == nil { + if l == nil || l.links == nil { return 0 } - return len(l.LinksField) + return len(l.links) } func (l *Links) First() *Link { - if l == nil || l.LinksField == nil || len(l.LinksField) == 0 { + if l == nil || l.links == nil || len(l.links) == 0 { return nil } - return l.LinksField[0] + return l.links[0] } func (l *Links) Last() *Link { - if l == nil || l.LinksField == nil || len(l.LinksField) == 0 { + if l == nil || l.links == nil || len(l.links) == 0 { return nil } - return l.LinksField[len(l.LinksField)-1] + return l.links[len(l.links)-1] } func (l *Links) LastValue(ds *dataset.Dataset) *dataset.Value { @@ -72,7 +72,7 @@ func (l *Links) LastValue(ds *dataset.Dataset) *dataset.Value { } func (l *Links) Validate(dsm dataset.SchemaMap, dm dataset.Map) bool { - if l == nil || l.LinksField == nil { + if l == nil || l.links == nil { return false } firstDatasetSchema := l.First().DatasetSchema() @@ -80,19 +80,19 @@ func (l *Links) Validate(dsm dataset.SchemaMap, dm dataset.Map) bool { return false } fields := l.DatasetSchemaFieldIDs() - if fields == nil || len(fields) != len(l.LinksField) { + if fields == nil || len(fields) != len(l.links) { return false } firstDataset := l.First().Dataset() res, resf := dsm.GraphSearchByFields(*firstDatasetSchema, fields...) - if len(res) != len(l.LinksField) || resf == nil { + if len(res) != len(l.links) || resf == nil { return false } if firstDataset != nil { res2, resf2 := dm.GraphSearchByFields(*firstDataset, fields...) - return len(res2) == len(l.LinksField) && resf2 != nil + return len(res2) == len(l.links) && resf2 != nil } return true @@ -103,47 +103,47 @@ func (l *Links) Replace( dm map[DatasetID]DatasetID, fm map[DatasetFieldID]DatasetFieldID, ) { - if l == nil || l.LinksField == nil { + if l == nil || l.links == nil { return } - links := make([]*Link, 0, len(l.LinksField)) + links := make([]*Link, 0, len(l.links)) - for _, link := range l.LinksField { + for _, link := range l.links { nl := &Link{} - if link.SchemaField != nil { - if nds, ok := dsm[*link.SchemaField]; ok { + if link.schema != nil { + if nds, ok := dsm[*link.schema]; ok { nid := nds - nl.SchemaField = &nid + nl.schema = &nid } else { // Datasetは全てIDが再割り当てされるため、リンクが途切れていることになる // よってリンク自体が無効になる - l.LinksField = nil + l.links = nil return } } - if link.DatasetField != nil { - if nds, ok := dm[*link.DatasetField]; ok { + if link.dataset != nil { + if nds, ok := dm[*link.dataset]; ok { nid := nds - nl.DatasetField = &nid + nl.dataset = &nid } else { // Datasetは全てIDが再割り当てされるため、リンクが途切れていることになる // よってリンク自体が無効になる - l.LinksField = nil + l.links = nil return } } - if link.FieldField != nil { - if nf, ok := fm[*link.FieldField]; ok { + if link.field != nil { + if nf, ok := fm[*link.field]; ok { nid := nf - nl.FieldField = &nid + nl.field = &nid } else { // Datasetは全てIDが再割り当てされるため、リンクが途切れていることになる // よってリンク自体が無効になる - l.LinksField = nil + l.links = nil return } } @@ -151,15 +151,15 @@ func (l *Links) Replace( links = append(links, nl) } - l.LinksField = links + l.links = links } func (l *Links) Links() []*Link { - if l == nil || l.LinksField == nil || len(l.LinksField) == 0 { + if l == nil || l.links == nil || len(l.links) == 0 { return nil } - links2 := make([]*Link, 0, len(l.LinksField)) - for _, l := range l.LinksField { + links2 := make([]*Link, 0, len(l.links)) + for _, l := range l.links { links2 = append(links2, l.Clone()) } return links2 @@ -169,10 +169,10 @@ func (l *Links) DatasetIDs() []DatasetID { if l == nil { return nil } - datasets := make([]DatasetID, 0, len(l.LinksField)) - for _, i := range l.LinksField { - if i.DatasetField != nil { - datasets = append(datasets, *i.DatasetField) + datasets := make([]DatasetID, 0, len(l.links)) + for _, i := range l.links { + if i.dataset != nil { + datasets = append(datasets, *i.dataset) } else { return datasets } @@ -184,10 +184,10 @@ func (l *Links) DatasetSchemaIDs() []DatasetSchemaID { if l == nil { return nil } - schemas := make([]DatasetSchemaID, 0, len(l.LinksField)) - for _, i := range l.LinksField { - if i.SchemaField != nil { - schemas = append(schemas, *i.SchemaField) + schemas := make([]DatasetSchemaID, 0, len(l.links)) + for _, i := range l.links { + if i.schema != nil { + schemas = append(schemas, *i.schema) } else { return schemas } @@ -216,10 +216,10 @@ func (l *Links) DatasetSchemaFieldIDs() []DatasetFieldID { if l == nil { return nil } - fields := make([]DatasetFieldID, 0, len(l.LinksField)) - for _, i := range l.LinksField { - if i.FieldField != nil { - fields = append(fields, *i.FieldField) + fields := make([]DatasetFieldID, 0, len(l.links)) + for _, i := range l.links { + if i.field != nil { + fields = append(fields, *i.field) } else { return fields } @@ -231,8 +231,8 @@ func (l *Links) HasDataset(did DatasetID) bool { if l == nil { return false } - for _, l2 := range l.LinksField { - if l2 != nil && l2.DatasetField != nil && *l2.DatasetField == did { + for _, l2 := range l.links { + if l2 != nil && l2.dataset != nil && *l2.dataset == did { return true } } @@ -243,8 +243,8 @@ func (l *Links) HasDatasetSchema(dsid DatasetSchemaID) bool { if l == nil { return false } - for _, l2 := range l.LinksField { - if l2 != nil && l2.SchemaField != nil && *l2.SchemaField == dsid { + for _, l2 := range l.links { + if l2 != nil && l2.schema != nil && *l2.schema == dsid { return true } } @@ -255,8 +255,8 @@ func (l *Links) HasDatasetSchemaAndDataset(dsid DatasetSchemaID, did DatasetID) if l == nil { return false } - for _, l2 := range l.LinksField { - if l2 != nil && (l2.SchemaField != nil && *l2.SchemaField == dsid || l2.DatasetField != nil && *l2.DatasetField == did) { + for _, l2 := range l.links { + if l2 != nil && (l2.schema != nil && *l2.schema == dsid || l2.dataset != nil && *l2.dataset == did) { return true } } @@ -268,9 +268,9 @@ func NewLink(d DatasetID, ds DatasetSchemaID, f DatasetFieldID) *Link { schema := ds field := f return &Link{ - DatasetField: &dataset, - SchemaField: &schema, - FieldField: &field, + dataset: &dataset, + schema: &schema, + field: &field, } } @@ -278,8 +278,8 @@ func NewLinkFieldOnly(ds DatasetSchemaID, f DatasetFieldID) *Link { schema := ds field := f return &Link{ - SchemaField: &schema, - FieldField: &field, + schema: &schema, + field: &field, } } @@ -287,28 +287,28 @@ func (l *Link) Dataset() *DatasetID { if l == nil { return nil } - return l.DatasetField.CloneRef() + return l.dataset.CloneRef() } func (l *Link) DatasetSchema() *DatasetSchemaID { if l == nil { return nil } - return l.SchemaField.CloneRef() + return l.schema.CloneRef() } func (l *Link) DatasetSchemaField() *DatasetFieldID { if l == nil { return nil } - return l.FieldField.CloneRef() + return l.field.CloneRef() } func (l *Link) Value(ds *dataset.Dataset) *dataset.Value { - if l == nil || ds == nil || l.DatasetField == nil || l.FieldField == nil || ds.ID() != *l.DatasetField { + if l == nil || ds == nil || l.dataset == nil || l.field == nil || ds.ID() != *l.dataset { return nil } - f := ds.Field(*l.FieldField) + f := ds.Field(*l.field) if f == nil { return nil } @@ -316,24 +316,24 @@ func (l *Link) Value(ds *dataset.Dataset) *dataset.Value { } func (l *Link) Validate(dss *dataset.Schema, ds *dataset.Dataset) bool { - if l == nil || l.FieldField == nil || l.SchemaField == nil || dss == nil { + if l == nil || l.field == nil || l.schema == nil || dss == nil { return false } // DS - if dss.ID() != *l.SchemaField { + if dss.ID() != *l.schema { return false } - if f := dss.Field(*l.FieldField); f == nil { + if f := dss.Field(*l.field); f == nil { return false } // D - if l.DatasetField != nil { - if ds == nil || ds.ID() != *l.DatasetField || ds.Schema() != dss.ID() { + if l.dataset != nil { + if ds == nil || ds.ID() != *l.dataset || ds.Schema() != dss.ID() { return false } - if f := ds.Field(*l.FieldField); f == nil { + if f := ds.Field(*l.field); f == nil { return false } } @@ -342,7 +342,7 @@ func (l *Link) Validate(dss *dataset.Schema, ds *dataset.Dataset) bool { } func (l *Links) IsEmpty() bool { - return l == nil || l.LinksField == nil || len(l.LinksField) == 0 + return l == nil || l.links == nil || len(l.links) == 0 } func (l *Link) Clone() *Link { @@ -350,9 +350,9 @@ func (l *Link) Clone() *Link { return nil } return &Link{ - DatasetField: l.Dataset(), - SchemaField: l.DatasetSchema(), - FieldField: l.DatasetSchemaField(), + dataset: l.Dataset(), + schema: l.DatasetSchema(), + field: l.DatasetSchemaField(), } } @@ -365,14 +365,14 @@ func (l *Link) ApplyDataset(ds *DatasetID) *Link { return l.Clone() } return &Link{ - DatasetField: ds.CloneRef(), - SchemaField: l.DatasetSchema(), - FieldField: l.DatasetSchemaField(), + dataset: ds.CloneRef(), + schema: l.DatasetSchema(), + field: l.DatasetSchemaField(), } } func (l *Links) ApplyDataset(ds *DatasetID) *Links { - if l == nil || l.LinksField == nil || len(l.LinksField) == 0 { + if l == nil || l.links == nil || len(l.links) == 0 { return nil } @@ -383,7 +383,7 @@ func (l *Links) ApplyDataset(ds *DatasetID) *Links { return links } - links.LinksField[0] = first.ApplyDataset(ds) + links.links[0] = first.ApplyDataset(ds) return links } diff --git a/server/pkg/property/property_test.go b/server/pkg/property/property_test.go index a9aea15f0c..d469aa2c3d 100644 --- a/server/pkg/property/property_test.go +++ b/server/pkg/property/property_test.go @@ -698,7 +698,7 @@ func TestProperty_GroupAndList(t *testing.T) { ID: pgid1, SchemaGroup: SchemaGroupID("aaaa"), }, - GroupsField: []*Group{ + groups: []*Group{ { itemBase: itemBase{ ID: pgid2, @@ -727,7 +727,7 @@ func TestProperty_GroupAndList(t *testing.T) { ID: pgid1, SchemaGroup: SchemaGroupID("aaaa"), }, - GroupsField: []*Group{ + groups: []*Group{ { itemBase: itemBase{ ID: pgid2, @@ -746,7 +746,7 @@ func TestProperty_GroupAndList(t *testing.T) { ID: pgid1, SchemaGroup: SchemaGroupID("aaaa"), }, - GroupsField: []*Group{ + groups: []*Group{ { itemBase: itemBase{ ID: pgid2, @@ -770,7 +770,7 @@ func TestProperty_GroupAndList(t *testing.T) { ID: pgid1, SchemaGroup: SchemaGroupID("aaaa"), }, - GroupsField: []*Group{ + groups: []*Group{ { itemBase: itemBase{ ID: pgid2, diff --git a/server/pkg/property/value_optional.go b/server/pkg/property/value_optional.go index f97d775a42..f87ab78eab 100644 --- a/server/pkg/property/value_optional.go +++ b/server/pkg/property/value_optional.go @@ -3,7 +3,7 @@ package property import "github.com/reearth/reearth/server/pkg/value" type OptionalValue struct { - OptionalValueField value.Optional `msgpack:"OptionalValueField"` + ov value.Optional } func NewOptionalValue(t ValueType, v *Value) *OptionalValue { @@ -15,7 +15,7 @@ func NewOptionalValue(t ValueType, v *Value) *OptionalValue { if ov == nil { return nil } - return &OptionalValue{OptionalValueField: *ov} + return &OptionalValue{ov: *ov} } func OptionalValueFrom(v *Value) *OptionalValue { @@ -27,7 +27,7 @@ func OptionalValueFrom(v *Value) *OptionalValue { return nil } return &OptionalValue{ - OptionalValueField: *ov, + ov: *ov, } } @@ -35,14 +35,14 @@ func (ov *OptionalValue) Type() ValueType { if ov == nil { return ValueTypeUnknown } - return ValueType(ov.OptionalValueField.Type()) + return ValueType(ov.ov.Type()) } func (ov *OptionalValue) Value() *Value { if ov == nil { return nil } - vv := ov.OptionalValueField.Value() + vv := ov.ov.Value() if vv == nil { return nil } @@ -57,12 +57,12 @@ func (ov *OptionalValue) Clone() *OptionalValue { if ov == nil { return nil } - nov := ov.OptionalValueField.Clone() + nov := ov.ov.Clone() if nov == nil { return nil } return &OptionalValue{ - OptionalValueField: *nov, + ov: *nov, } } @@ -71,9 +71,9 @@ func (ov *OptionalValue) SetValue(v *Value) { return } if v == nil { - ov.OptionalValueField.SetValue(nil) + ov.ov.SetValue(nil) } else { - ov.OptionalValueField.SetValue(&v.v) + ov.ov.SetValue(&v.v) } } @@ -81,9 +81,9 @@ func (ov *OptionalValue) Cast(t ValueType) *OptionalValue { if ov == nil { return nil } - vv := ov.OptionalValueField.Cast(value.Type(t), types) + vv := ov.ov.Cast(value.Type(t), types) if vv == nil { return nil } - return &OptionalValue{OptionalValueField: *vv} + return &OptionalValue{ov: *vv} } diff --git a/server/pkg/property/value_optional_test.go b/server/pkg/property/value_optional_test.go index 5ffed607db..7d4f3c8a3e 100644 --- a/server/pkg/property/value_optional_test.go +++ b/server/pkg/property/value_optional_test.go @@ -24,14 +24,14 @@ func TestNewNilableValue(t *testing.T) { t: ValueTypeString, v: ValueTypeString.ValueFrom("foo"), }, - want: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("foo", types))}, + want: &OptionalValue{ov: *value.OptionalFrom(value.TypeString.ValueFrom("foo", types))}, }, { name: "nil value", args: args{ t: ValueTypeString, }, - want: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeString, nil)}, + want: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}, }, { name: "invalid value", @@ -75,7 +75,7 @@ func TestOptionalValueFrom(t *testing.T) { args: args{ v: ValueTypeString.ValueFrom("foo"), }, - want: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeString, value.TypeString.ValueFrom("foo", types))}, + want: &OptionalValue{ov: *value.NewOptional(value.TypeString, value.TypeString.ValueFrom("foo", types))}, }, { name: "empty value", @@ -108,7 +108,7 @@ func TestOptionalValue_Type(t *testing.T) { }{ { name: "ok", - value: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeBool, nil)}, + value: &OptionalValue{ov: *value.NewOptional(value.TypeBool, nil)}, want: ValueTypeBool, }, { @@ -140,7 +140,7 @@ func TestOptionalValue_Value(t *testing.T) { }{ { name: "ok", - value: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("foobar", types))}, + value: &OptionalValue{ov: *value.OptionalFrom(value.TypeString.ValueFrom("foobar", types))}, want: ValueTypeString.ValueFrom("foobar"), }, { @@ -177,7 +177,7 @@ func TestOptionalValue_TypeAndValue(t *testing.T) { }{ { name: "ok", - value: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("foobar", types))}, + value: &OptionalValue{ov: *value.OptionalFrom(value.TypeString.ValueFrom("foobar", types))}, wantt: ValueTypeString, wantv: ValueTypeString.ValueFrom("foobar"), }, @@ -222,17 +222,17 @@ func TestOptionalValue_SetValue(t *testing.T) { }{ { name: "set", - value: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("foo", types))}, + value: &OptionalValue{ov: *value.OptionalFrom(value.TypeString.ValueFrom("foo", types))}, args: args{v: ValueTypeString.ValueFrom("foobar")}, }, { name: "set to nil", - value: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeString, nil)}, + value: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}, args: args{v: ValueTypeString.ValueFrom("foobar")}, }, { name: "invalid value", - value: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeString, nil)}, + value: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}, args: args{v: ValueTypeNumber.ValueFrom(1)}, invalid: true, }, @@ -282,7 +282,7 @@ func TestOptionalValue_Clone(t *testing.T) { { name: "ok", target: &OptionalValue{ - OptionalValueField: *value.NewOptional(value.TypeString, value.TypeString.ValueFrom("foo", types)), + ov: *value.NewOptional(value.TypeString, value.TypeString.ValueFrom("foo", types)), }, }, { @@ -321,21 +321,21 @@ func TestOptionalValue_Cast(t *testing.T) { }{ { name: "diff type", - target: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeNumber.ValueFrom(1.1, types))}, + target: &OptionalValue{ov: *value.OptionalFrom(value.TypeNumber.ValueFrom(1.1, types))}, args: args{t: ValueTypeString}, - want: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("1.1", types))}, + want: &OptionalValue{ov: *value.OptionalFrom(value.TypeString.ValueFrom("1.1", types))}, }, { name: "same type", - target: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeNumber.ValueFrom(1.1, types))}, + target: &OptionalValue{ov: *value.OptionalFrom(value.TypeNumber.ValueFrom(1.1, types))}, args: args{t: ValueTypeNumber}, - want: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeNumber.ValueFrom(1.1, types))}, + want: &OptionalValue{ov: *value.OptionalFrom(value.TypeNumber.ValueFrom(1.1, types))}, }, { name: "to sting", - target: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeLatLng.ValueFrom(LatLng{Lat: 1, Lng: 2}, types))}, + target: &OptionalValue{ov: *value.OptionalFrom(value.TypeLatLng.ValueFrom(LatLng{Lat: 1, Lng: 2}, types))}, args: args{t: ValueTypeString}, - want: &OptionalValue{OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("2.000000, 1.000000", types))}, + want: &OptionalValue{ov: *value.OptionalFrom(value.TypeString.ValueFrom("2.000000, 1.000000", types))}, }, { name: "empty", diff --git a/server/pkg/property/value_test.go b/server/pkg/property/value_test.go index c28d6e4de4..4b995a7498 100644 --- a/server/pkg/property/value_test.go +++ b/server/pkg/property/value_test.go @@ -17,7 +17,7 @@ func TestValueType_None(t *testing.T) { { name: "default", tr: ValueTypeString, - want: &OptionalValue{OptionalValueField: *value.NewOptional(value.TypeString, nil)}, + want: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}, }, { name: "unknown", @@ -111,7 +111,7 @@ func TestValue_Some(t *testing.T) { v: *value.TypeString.ValueFrom("foo", types), }, want: &OptionalValue{ - OptionalValueField: *value.OptionalFrom(value.TypeString.ValueFrom("foo", types)), + ov: *value.OptionalFrom(value.TypeString.ValueFrom("foo", types)), }, }, { diff --git a/server/pkg/value/array.go b/server/pkg/value/array.go index 14cb5db266..d737337241 100644 --- a/server/pkg/value/array.go +++ b/server/pkg/value/array.go @@ -56,6 +56,6 @@ func (v *Value) ValueArray() (vv []any, ok bool) { if v == nil { return } - vv, ok = v.VField.([]any) + vv, ok = v.v.([]any) return } diff --git a/server/pkg/value/bool.go b/server/pkg/value/bool.go index 7f93b215d6..381accfc1d 100644 --- a/server/pkg/value/bool.go +++ b/server/pkg/value/bool.go @@ -52,6 +52,6 @@ func (v *Value) ValueBool() (vv bool, ok bool) { if v == nil { return } - vv, ok = v.VField.(bool) + vv, ok = v.v.(bool) return } diff --git a/server/pkg/value/coordinates.go b/server/pkg/value/coordinates.go index 658b790bfd..a5a853e92c 100644 --- a/server/pkg/value/coordinates.go +++ b/server/pkg/value/coordinates.go @@ -101,6 +101,6 @@ func (v *Value) ValueCoordinates() (vv Coordinates, ok bool) { if v == nil { return } - vv, ok = v.VField.(Coordinates) + vv, ok = v.v.(Coordinates) return } diff --git a/server/pkg/value/latlng.go b/server/pkg/value/latlng.go index 760eb64322..ee2d00f9a3 100644 --- a/server/pkg/value/latlng.go +++ b/server/pkg/value/latlng.go @@ -91,6 +91,6 @@ func (v *Value) ValueLatLng() (vv LatLng, ok bool) { if v == nil { return } - vv, ok = v.VField.(LatLng) + vv, ok = v.v.(LatLng) return } diff --git a/server/pkg/value/latlngheight.go b/server/pkg/value/latlngheight.go index bc707b83ea..5ee85b707a 100644 --- a/server/pkg/value/latlngheight.go +++ b/server/pkg/value/latlngheight.go @@ -96,6 +96,6 @@ func (v *Value) ValueLatLngHeight() (vv LatLngHeight, ok bool) { if v == nil { return } - vv, ok = v.VField.(LatLngHeight) + vv, ok = v.v.(LatLngHeight) return } diff --git a/server/pkg/value/number.go b/server/pkg/value/number.go index f667d3daa4..261ca909fa 100644 --- a/server/pkg/value/number.go +++ b/server/pkg/value/number.go @@ -146,6 +146,6 @@ func (v *Value) ValueNumber() (vv float64, ok bool) { if v == nil { return } - vv, ok = v.VField.(float64) + vv, ok = v.v.(float64) return } diff --git a/server/pkg/value/optional.go b/server/pkg/value/optional.go index 025ff2fa9c..8bf0b084ac 100644 --- a/server/pkg/value/optional.go +++ b/server/pkg/value/optional.go @@ -1,8 +1,8 @@ package value type Optional struct { - TField Type `msgpack:"FieldField"` - VField *Value `msgpack:"ValueField"` + t Type + v *Value } func NewOptional(t Type, v *Value) *Optional { @@ -10,8 +10,8 @@ func NewOptional(t Type, v *Value) *Optional { return nil } return &Optional{ - TField: t, - VField: v, + t: t, + v: v, } } @@ -20,8 +20,8 @@ func OptionalFrom(v *Value) *Optional { return nil } return &Optional{ - TField: v.Type(), - VField: v, + t: v.Type(), + v: v, } } @@ -29,14 +29,14 @@ func (ov *Optional) Type() Type { if ov == nil { return TypeUnknown } - return ov.TField + return ov.t } func (ov *Optional) Value() *Value { - if ov == nil || ov.TField == TypeUnknown || ov.VField == nil { + if ov == nil || ov.t == TypeUnknown || ov.v == nil { return nil } - return ov.VField.Clone() + return ov.v.Clone() } func (ov *Optional) TypeAndValue() (Type, *Value) { @@ -44,10 +44,10 @@ func (ov *Optional) TypeAndValue() (Type, *Value) { } func (ov *Optional) SetValue(v *Value) { - if ov == nil || ov.TField == TypeUnknown || (v != nil && ov.TField != v.Type()) { + if ov == nil || ov.t == TypeUnknown || (v != nil && ov.t != v.Type()) { return } - ov.VField = v.Clone() + ov.v = v.Clone() } func (ov *Optional) Clone() *Optional { @@ -55,20 +55,20 @@ func (ov *Optional) Clone() *Optional { return nil } return &Optional{ - TField: ov.TField, - VField: ov.VField.Clone(), + t: ov.t, + v: ov.v.Clone(), } } // Cast tries to convert the value to the new type and generates a new Optional. func (ov *Optional) Cast(t Type, p TypePropertyMap) *Optional { - if ov == nil || ov.TField == TypeUnknown { + if ov == nil || ov.t == TypeUnknown { return nil } - if ov.VField == nil { + if ov.v == nil { return NewOptional(t, nil) } - nv := ov.VField.Cast(t, p) + nv := ov.v.Cast(t, p) return NewOptional(t, nv) } diff --git a/server/pkg/value/optional_test.go b/server/pkg/value/optional_test.go index 98fe838f71..8cf645578f 100644 --- a/server/pkg/value/optional_test.go +++ b/server/pkg/value/optional_test.go @@ -23,22 +23,22 @@ func TestNewOptional(t *testing.T) { t: TypeString, v: TypeString.ValueFrom("foo", nil), }, - want: &Optional{TField: TypeString, VField: TypeString.ValueFrom("foo", nil)}, + want: &Optional{t: TypeString, v: TypeString.ValueFrom("foo", nil)}, }, { name: "custom type", args: args{ t: Type("foo"), - v: &Value{TField: Type("foo")}, + v: &Value{t: Type("foo")}, }, - want: &Optional{TField: Type("foo"), VField: &Value{TField: Type("foo")}}, + want: &Optional{t: Type("foo"), v: &Value{t: Type("foo")}}, }, { name: "nil value", args: args{ t: Type("foo"), }, - want: &Optional{TField: Type("foo"), VField: nil}, + want: &Optional{t: Type("foo"), v: nil}, }, { name: "invalid value", @@ -82,19 +82,19 @@ func TestOptionalFrom(t *testing.T) { args: args{ v: TypeString.ValueFrom("foo", nil), }, - want: &Optional{TField: TypeString, VField: TypeString.ValueFrom("foo", nil)}, + want: &Optional{t: TypeString, v: TypeString.ValueFrom("foo", nil)}, }, { name: "custom type", args: args{ - v: &Value{TField: Type("foo")}, + v: &Value{t: Type("foo")}, }, - want: &Optional{TField: Type("foo"), VField: &Value{TField: Type("foo")}}, + want: &Optional{t: Type("foo"), v: &Value{t: Type("foo")}}, }, { name: "invalid value", args: args{ - v: &Value{VField: "string"}, + v: &Value{v: "string"}, }, want: nil, }, @@ -122,7 +122,7 @@ func TestOptional_Type(t *testing.T) { }{ { name: "ok", - value: &Optional{TField: Type("foo")}, + value: &Optional{t: Type("foo")}, want: Type("foo"), }, { @@ -154,8 +154,8 @@ func TestOptional_Value(t *testing.T) { }{ { name: "ok", - value: &Optional{TField: TypeString, VField: &Value{TField: TypeString, VField: "foobar"}}, - want: &Value{TField: TypeString, VField: "foobar"}, + value: &Optional{t: TypeString, v: &Value{t: TypeString, v: "foobar"}}, + want: &Value{t: TypeString, v: "foobar"}, }, { name: "empty", @@ -191,9 +191,9 @@ func TestOptional_TypeAndValue(t *testing.T) { }{ { name: "ok", - value: &Optional{TField: TypeString, VField: &Value{TField: TypeString, VField: "foobar"}}, + value: &Optional{t: TypeString, v: &Value{t: TypeString, v: "foobar"}}, wantt: TypeString, - wantv: &Value{TField: TypeString, VField: "foobar"}, + wantv: &Value{t: TypeString, v: "foobar"}, }, { name: "empty", @@ -237,43 +237,43 @@ func TestOptional_SetValue(t *testing.T) { { name: "set", value: &Optional{ - TField: TypeString, - VField: &Value{TField: TypeString, VField: "foobar"}, + t: TypeString, + v: &Value{t: TypeString, v: "foobar"}, }, - args: args{v: &Value{TField: TypeString, VField: "bar"}}, + args: args{v: &Value{t: TypeString, v: "bar"}}, }, { name: "set to nil", value: &Optional{ - TField: TypeString, + t: TypeString, }, - args: args{v: &Value{TField: TypeString, VField: "bar"}}, + args: args{v: &Value{t: TypeString, v: "bar"}}, }, { name: "invalid value", value: &Optional{ - TField: TypeNumber, - VField: &Value{TField: TypeNumber, VField: 1}, + t: TypeNumber, + v: &Value{t: TypeNumber, v: 1}, }, - args: args{v: &Value{TField: TypeString, VField: "bar"}}, + args: args{v: &Value{t: TypeString, v: "bar"}}, invalid: true, }, { name: "nil value", value: &Optional{ - TField: TypeNumber, - VField: &Value{TField: TypeNumber, VField: 1}, + t: TypeNumber, + v: &Value{t: TypeNumber, v: 1}, }, }, { name: "empty", value: &Optional{}, - args: args{v: &Value{TField: TypeString, VField: "bar"}}, + args: args{v: &Value{t: TypeString, v: "bar"}}, invalid: true, }, { name: "nil", - args: args{v: &Value{TField: TypeString, VField: "bar"}}, + args: args{v: &Value{t: TypeString, v: "bar"}}, }, } @@ -283,18 +283,18 @@ func TestOptional_SetValue(t *testing.T) { t.Parallel() var v *Value if tt.value != nil { - v = tt.value.VField + v = tt.value.v } tt.value.SetValue(tt.args.v) if tt.value != nil { if tt.invalid { - assert.Same(t, v, tt.value.VField) + assert.Same(t, v, tt.value.v) } else { - assert.Equal(t, tt.args.v, tt.value.VField) + assert.Equal(t, tt.args.v, tt.value.v) if tt.args.v != nil { - assert.NotSame(t, tt.args.v, tt.value.VField) + assert.NotSame(t, tt.args.v, tt.value.v) } } } @@ -309,7 +309,7 @@ func TestOptional_Clone(t *testing.T) { }{ { name: "ok", - target: &Optional{TField: TypeString, VField: TypeString.ValueFrom("foo", nil)}, + target: &Optional{t: TypeString, v: TypeString.ValueFrom("foo", nil)}, }, { name: "empty", @@ -348,27 +348,27 @@ func TestOptional_Cast(t *testing.T) { }{ { name: "diff type", - target: &Optional{TField: TypeNumber, VField: TypeNumber.ValueFrom(1.1, nil)}, + target: &Optional{t: TypeNumber, v: TypeNumber.ValueFrom(1.1, nil)}, args: args{t: TypeString}, - want: &Optional{TField: TypeString, VField: TypeString.ValueFrom("1.1", nil)}, + want: &Optional{t: TypeString, v: TypeString.ValueFrom("1.1", nil)}, }, { name: "same type", - target: &Optional{TField: TypeNumber, VField: TypeNumber.ValueFrom(1.1, nil)}, + target: &Optional{t: TypeNumber, v: TypeNumber.ValueFrom(1.1, nil)}, args: args{t: TypeNumber}, - want: &Optional{TField: TypeNumber, VField: TypeNumber.ValueFrom(1.1, nil)}, + want: &Optional{t: TypeNumber, v: TypeNumber.ValueFrom(1.1, nil)}, }, { name: "nil value", - target: &Optional{TField: TypeNumber}, + target: &Optional{t: TypeNumber}, args: args{t: TypeString}, - want: &Optional{TField: TypeString}, + want: &Optional{t: TypeString}, }, { name: "to string", - target: &Optional{TField: TypeLatLng, VField: TypeLatLng.ValueFrom(LatLng{Lat: 1, Lng: 2}, nil)}, + target: &Optional{t: TypeLatLng, v: TypeLatLng.ValueFrom(LatLng{Lat: 1, Lng: 2}, nil)}, args: args{t: TypeString}, - want: &Optional{TField: TypeString, VField: TypeString.ValueFrom("2.000000, 1.000000", nil)}, + want: &Optional{t: TypeString, v: TypeString.ValueFrom("2.000000, 1.000000", nil)}, }, { name: "empty", diff --git a/server/pkg/value/polygon.go b/server/pkg/value/polygon.go index e96871ece1..c3860fe890 100644 --- a/server/pkg/value/polygon.go +++ b/server/pkg/value/polygon.go @@ -78,6 +78,6 @@ func (v *Value) ValuePolygon() (vv Polygon, ok bool) { if v == nil { return } - vv, ok = v.VField.(Polygon) + vv, ok = v.v.(Polygon) return } diff --git a/server/pkg/value/rect.go b/server/pkg/value/rect.go index 11c03428ba..e5efceb8ae 100644 --- a/server/pkg/value/rect.go +++ b/server/pkg/value/rect.go @@ -72,6 +72,6 @@ func (v *Value) ValueRect() (vv Rect, ok bool) { if v == nil { return } - vv, ok = v.VField.(Rect) + vv, ok = v.v.(Rect) return } diff --git a/server/pkg/value/ref.go b/server/pkg/value/ref.go index 43c9a47270..7ce764e6d8 100644 --- a/server/pkg/value/ref.go +++ b/server/pkg/value/ref.go @@ -49,6 +49,6 @@ func (v *Value) ValueRef() (vv string, ok bool) { if v == nil { return } - vv, ok = v.VField.(string) + vv, ok = v.v.(string) return } diff --git a/server/pkg/value/string.go b/server/pkg/value/string.go index 4e11199d10..941fc1e887 100644 --- a/server/pkg/value/string.go +++ b/server/pkg/value/string.go @@ -54,6 +54,6 @@ func (v *Value) ValueString() (vv string, ok bool) { if v == nil { return } - vv, ok = v.VField.(string) + vv, ok = v.v.(string) return } diff --git a/server/pkg/value/type.go b/server/pkg/value/type.go index 54884d6afe..72d85760ce 100644 --- a/server/pkg/value/type.go +++ b/server/pkg/value/type.go @@ -45,14 +45,14 @@ func (t Type) ValueFrom(i interface{}, p TypePropertyMap) *Value { if p != nil { if vt, ok := p[t]; ok && vt != nil { if v, ok2 := vt.I2V(i); ok2 { - return &Value{PField: p, VField: v, TField: t} + return &Value{p: p, v: v, t: t} } } } if vt, ok := defaultTypes[t]; ok && vt != nil { if v, ok2 := vt.I2V(i); ok2 { - return &Value{PField: p, VField: v, TField: t} + return &Value{p: p, v: v, t: t} } } diff --git a/server/pkg/value/type_test.go b/server/pkg/value/type_test.go index f4f1633d57..f4596d52b9 100644 --- a/server/pkg/value/type_test.go +++ b/server/pkg/value/type_test.go @@ -59,12 +59,12 @@ func TestType_None(t *testing.T) { { name: "default", tr: TypeString, - want: &Optional{TField: TypeString}, + want: &Optional{t: TypeString}, }, { name: "custom", tr: Type("foo"), - want: &Optional{TField: Type("foo")}, + want: &Optional{t: Type("foo")}, }, { name: "unknown", @@ -104,7 +104,7 @@ func TestType_ValueFrom(t *testing.T) { args: args{ i: "hoge", }, - want: &Value{TField: TypeString, VField: "hoge"}, + want: &Value{t: TypeString, v: "hoge"}, }, { name: "custom type", @@ -113,7 +113,7 @@ func TestType_ValueFrom(t *testing.T) { i: "hoge", p: tpm, }, - want: &Value{PField: tpm, TField: Type("foo"), VField: "hogea"}, + want: &Value{p: tpm, t: Type("foo"), v: "hogea"}, }, { name: "nil", diff --git a/server/pkg/value/url.go b/server/pkg/value/url.go index 3dab0f5767..4f86822337 100644 --- a/server/pkg/value/url.go +++ b/server/pkg/value/url.go @@ -63,6 +63,6 @@ func (v *Value) ValueURL() (vv *url.URL, ok bool) { if v == nil { return } - vv, ok = v.VField.(*url.URL) + vv, ok = v.v.(*url.URL) return } diff --git a/server/pkg/value/value.go b/server/pkg/value/value.go index 88f467737b..5e3f71c98a 100644 --- a/server/pkg/value/value.go +++ b/server/pkg/value/value.go @@ -5,20 +5,20 @@ import ( ) type Value struct { - PField TypePropertyMap `msgpack:"PField"` - VField interface{} `msgpack:"VField"` - TField Type `msgpack:"TField"` + p TypePropertyMap + v interface{} + t Type } func (v *Value) IsEmpty() bool { - return v == nil || v.TField == TypeUnknown || v.VField == nil + return v == nil || v.t == TypeUnknown || v.v == nil } func (v *Value) Clone() *Value { if v.IsEmpty() { return nil } - return v.TField.ValueFrom(v.VField, v.PField) + return v.t.ValueFrom(v.v, v.p) } func (v *Value) Some() *Optional { @@ -29,26 +29,26 @@ func (v *Value) Value() interface{} { if v == nil { return nil } - return v.VField + return v.v } func (v *Value) Type() Type { if v == nil { return TypeUnknown } - return v.TField + return v.t } func (v *Value) TypeProperty() (tp TypeProperty) { if v.IsEmpty() { return } - if v.PField != nil { - if tp, ok := v.PField[v.TField]; ok { + if v.p != nil { + if tp, ok := v.p[v.t]; ok { return tp } } - if tp, ok := defaultTypes[v.TField]; ok { + if tp, ok := defaultTypes[v.t]; ok { return tp } return @@ -56,12 +56,12 @@ func (v *Value) TypeProperty() (tp TypeProperty) { // Interface converts the value into generic representation func (v *Value) Interface() interface{} { - if v == nil || v.TField == TypeUnknown { + if v == nil || v.t == TypeUnknown { return nil } if tp := v.TypeProperty(); tp != nil { - if i, ok2 := tp.V2I(v.VField); ok2 { + if i, ok2 := tp.V2I(v.v); ok2 { return i } } @@ -70,19 +70,19 @@ func (v *Value) Interface() interface{} { } func (v *Value) String() string { - if v == nil || v.TField == TypeUnknown { + if v == nil || v.t == TypeUnknown { return "" } if tp := v.TypeProperty(); tp != nil { - return tp.String(v.VField) + return tp.String(v.v) } return "" } func (v *Value) Validate() bool { - if v == nil || v.TField == TypeUnknown { + if v == nil || v.t == TypeUnknown { return false } @@ -98,11 +98,11 @@ func (v *Value) MarshalJSON() ([]byte, error) { } func (v *Value) Cast(t Type, p TypePropertyMap) *Value { - if v == nil || v.TField == TypeUnknown { + if v == nil || v.t == TypeUnknown { return nil } - if v.TField == t { + if v.t == t { return v.Clone() } - return t.ValueFrom(v.VField, p) + return t.ValueFrom(v.v, p) } diff --git a/server/pkg/value/value_test.go b/server/pkg/value/value_test.go index 38ced8e6d1..d1275595b5 100644 --- a/server/pkg/value/value_test.go +++ b/server/pkg/value/value_test.go @@ -24,8 +24,8 @@ func TestValue_IsEmpty(t *testing.T) { { name: "non-empty", value: &Value{ - TField: Type("hoge"), - VField: "foo", + t: Type("hoge"), + v: "foo", }, want: false, }, @@ -54,25 +54,25 @@ func TestValue_Clone(t *testing.T) { { name: "ok", value: &Value{ - TField: TypeString, - VField: "foo", + t: TypeString, + v: "foo", }, want: &Value{ - TField: TypeString, - VField: "foo", + t: TypeString, + v: "foo", }, }, { name: "custom type property", value: &Value{ - TField: Type("hoge"), - VField: "foo", - PField: tpm, + t: Type("hoge"), + v: "foo", + p: tpm, }, want: &Value{ - TField: Type("hoge"), - VField: "fooa", - PField: tpm, + t: Type("hoge"), + v: "fooa", + p: tpm, }, }, { @@ -110,30 +110,30 @@ func TestValue_Some(t *testing.T) { { name: "ok", value: &Value{ - TField: TypeString, - VField: "foo", + t: TypeString, + v: "foo", }, want: &Optional{ - TField: TypeString, - VField: &Value{ - TField: TypeString, - VField: "foo", + t: TypeString, + v: &Value{ + t: TypeString, + v: "foo", }, }, }, { name: "custom type property", value: &Value{ - TField: Type("hoge"), - VField: "fooa", - PField: tpm, + t: Type("hoge"), + v: "fooa", + p: tpm, }, want: &Optional{ - TField: Type("hoge"), - VField: &Value{ - TField: Type("hoge"), - VField: "fooa", - PField: tpm, + t: Type("hoge"), + v: &Value{ + t: Type("hoge"), + v: "fooa", + p: tpm, }, }, }, @@ -168,7 +168,7 @@ func TestValue_Value(t *testing.T) { }{ { name: "ok", - value: &Value{TField: TypeURL, VField: u}, + value: &Value{t: TypeURL, v: u}, want: u, }, { @@ -201,7 +201,7 @@ func TestValue_Type(t *testing.T) { }{ { name: "ok", - value: &Value{TField: TypeString}, + value: &Value{t: TypeString}, want: TypeString, }, { @@ -238,17 +238,17 @@ func TestValue_TypeProperty(t *testing.T) { { name: "default type", value: &Value{ - VField: "string", - TField: TypeString, + v: "string", + t: TypeString, }, want: defaultTypes[TypeString], }, { name: "custom type", value: &Value{ - VField: "string", - TField: Type("hoge"), - PField: tpm, + v: "string", + t: Type("hoge"), + p: tpm, }, want: tp, }, @@ -290,20 +290,20 @@ func TestValue_Interface(t *testing.T) { }{ { name: "string", - value: &Value{TField: TypeString, VField: "hoge"}, + value: &Value{t: TypeString, v: "hoge"}, want: "hoge", }, { name: "latlng", - value: &Value{TField: TypeLatLng, VField: LatLng{Lat: 1, Lng: 2}}, + value: &Value{t: TypeLatLng, v: LatLng{Lat: 1, Lng: 2}}, want: LatLng{Lat: 1, Lng: 2}, }, { name: "custom", value: &Value{ - PField: tpm, - TField: Type("foo"), - VField: "foo", + p: tpm, + t: Type("foo"), + v: "foo", }, want: "foobar", }, @@ -342,25 +342,25 @@ func TestValue_Cast(t *testing.T) { }{ { name: "diff type", - target: &Value{TField: TypeNumber, VField: 1.1}, + target: &Value{t: TypeNumber, v: 1.1}, args: args{t: TypeString}, - want: &Value{TField: TypeString, VField: "1.1"}, + want: &Value{t: TypeString, v: "1.1"}, }, { name: "same type", - target: &Value{TField: TypeNumber, VField: 1.1}, + target: &Value{t: TypeNumber, v: 1.1}, args: args{t: TypeNumber}, - want: &Value{TField: TypeNumber, VField: 1.1}, + want: &Value{t: TypeNumber, v: 1.1}, }, { name: "to string", - target: &Value{TField: TypeLatLng, VField: LatLng{Lat: 1, Lng: 2}}, + target: &Value{t: TypeLatLng, v: LatLng{Lat: 1, Lng: 2}}, args: args{t: TypeString}, - want: &Value{TField: TypeString, VField: "2.000000, 1.000000"}, + want: &Value{t: TypeString, v: "2.000000, 1.000000"}, }, { name: "invalid value", - target: &Value{TField: TypeNumber}, + target: &Value{t: TypeNumber}, args: args{t: TypeString}, want: nil, }, From 3cc0369c9dcf7557a60c8d9f0651f318f4af41e5 Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 25 Apr 2024 10:10:53 +0900 Subject: [PATCH 04/17] Revert "fix pkg" This reverts commit 13a78dea5e84d7025f400c594eaffdb2ff97e655. --- server/pkg/property/builder.go | 18 ++--- server/pkg/property/builder_test.go | 16 ++-- server/pkg/property/diff_test.go | 52 ++++++------- server/pkg/property/field.go | 42 +++++------ server/pkg/property/field_builder.go | 20 ++--- server/pkg/property/field_builder_test.go | 12 +-- server/pkg/property/field_test.go | 24 +++--- server/pkg/property/group_list_test.go | 4 +- server/pkg/property/group_test.go | 2 +- server/pkg/property/item.go | 10 +-- server/pkg/property/list_test.go | 10 +-- server/pkg/property/property.go | 90 +++++++++++------------ server/pkg/property/property_test.go | 10 +-- 13 files changed, 153 insertions(+), 157 deletions(-) diff --git a/server/pkg/property/builder.go b/server/pkg/property/builder.go index 70728c1076..17d8a23859 100644 --- a/server/pkg/property/builder.go +++ b/server/pkg/property/builder.go @@ -9,13 +9,13 @@ func New() *Builder { } func (b *Builder) Build() (*Property, error) { - if b.p.IDField.IsNil() { + if b.p.id.IsNil() { return nil, ErrInvalidID } - if b.p.SceneField.IsNil() { + if b.p.scene.IsNil() { return nil, ErrInvalidSceneID } - if b.p.SchemaField.IsNil() { + if b.p.schema.IsNil() { return nil, ErrInvalidPropertySchemaID } return b.p, nil @@ -30,28 +30,28 @@ func (b *Builder) MustBuild() *Property { } func (b *Builder) ID(id ID) *Builder { - b.p.IDField = id + b.p.id = id return b } func (b *Builder) NewID() *Builder { - b.p.IDField = NewID() + b.p.id = NewID() return b } func (b *Builder) Scene(s SceneID) *Builder { - b.p.SceneField = s + b.p.scene = s return b } func (b *Builder) Schema(schema SchemaID) *Builder { - b.p.SchemaField = schema + b.p.schema = schema return b } func (b *Builder) Items(items []Item) *Builder { if len(items) == 0 { - b.p.ItemsField = nil + b.p.items = nil return b } @@ -68,6 +68,6 @@ func (b *Builder) Items(items []Item) *Builder { newItems = append(newItems, f) } - b.p.ItemsField = newItems + b.p.items = newItems return b } diff --git a/server/pkg/property/builder_test.go b/server/pkg/property/builder_test.go index 3e2665934d..312cc3ef29 100644 --- a/server/pkg/property/builder_test.go +++ b/server/pkg/property/builder_test.go @@ -121,18 +121,18 @@ func TestBuilder_Build(t *testing.T) { }, fields: []*Field{ { - FieldField: propertySchemaField1ID, - ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("xxx")), + field: propertySchemaField1ID, + v: OptionalValueFrom(ValueTypeString.ValueFrom("xxx")), }, }, }, }, }, Expected: &Property{ - IDField: pid, - SceneField: sid, - SchemaField: scid, - ItemsField: []Item{ + id: pid, + scene: sid, + schema: scid, + items: []Item{ &Group{ itemBase: itemBase{ ID: iid, @@ -140,8 +140,8 @@ func TestBuilder_Build(t *testing.T) { }, fields: []*Field{ { - FieldField: propertySchemaField1ID, - ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("xxx")), + field: propertySchemaField1ID, + v: OptionalValueFrom(ValueTypeString.ValueFrom("xxx")), }, }, }, diff --git a/server/pkg/property/diff_test.go b/server/pkg/property/diff_test.go index d92ee36fe1..def1528274 100644 --- a/server/pkg/property/diff_test.go +++ b/server/pkg/property/diff_test.go @@ -260,10 +260,10 @@ func TestSchemaDiff_Migrate(t *testing.T) { args: testProperty1.Clone(), want: true, wantProperty: &Property{ - IDField: testProperty1.ID(), - SceneField: testProperty1.Scene(), - SchemaField: newSchemaID, - ItemsField: []Item{ + id: testProperty1.ID(), + scene: testProperty1.Scene(), + schema: newSchemaID, + items: []Item{ &Group{ itemBase: itemBase{ ID: testGroup1.ID(), @@ -283,7 +283,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { SchemaGroup: testGroup2.SchemaGroup(), }, fields: []*Field{ - {FieldField: testField2.Field(), ValueField: NewOptionalValue(ValueTypeString, nil)}, // type changed + {field: testField2.Field(), v: NewOptionalValue(ValueTypeString, nil)}, // type changed }, }, }, @@ -305,10 +305,10 @@ func TestSchemaDiff_Migrate(t *testing.T) { args: testProperty1.Clone(), want: true, wantProperty: &Property{ - IDField: testProperty1.ID(), - SceneField: testProperty1.Scene(), - SchemaField: newSchemaID, - ItemsField: []Item{ + id: testProperty1.ID(), + scene: testProperty1.Scene(), + schema: newSchemaID, + items: []Item{ &Group{ itemBase: itemBase{ ID: testGroup1.ID(), @@ -344,10 +344,10 @@ func TestSchemaDiff_Migrate(t *testing.T) { args: testProperty1.Clone(), want: true, wantProperty: &Property{ - IDField: testProperty1.ID(), - SceneField: testProperty1.Scene(), - SchemaField: newSchemaID, - ItemsField: []Item{ + id: testProperty1.ID(), + scene: testProperty1.Scene(), + schema: newSchemaID, + items: []Item{ &Group{ itemBase: itemBase{ ID: testGroup1.ID(), @@ -362,7 +362,7 @@ func TestSchemaDiff_Migrate(t *testing.T) { SchemaGroup: "x", }, fields: []*Field{ - {FieldField: testField1.Field(), ValueField: NewOptionalValue(ValueTypeNumber, nil)}, + {field: testField1.Field(), v: NewOptionalValue(ValueTypeNumber, nil)}, }, }, }, @@ -382,10 +382,10 @@ func TestSchemaDiff_Migrate(t *testing.T) { args: testProperty1.Clone(), want: true, wantProperty: &Property{ - IDField: testProperty1.ID(), - SceneField: testProperty1.Scene(), - SchemaField: newSchemaID, - ItemsField: []Item{ + id: testProperty1.ID(), + scene: testProperty1.Scene(), + schema: newSchemaID, + items: []Item{ &Group{ itemBase: itemBase{ ID: testGroup1.ID(), @@ -412,10 +412,10 @@ func TestSchemaDiff_Migrate(t *testing.T) { args: testProperty1.Clone(), want: true, wantProperty: &Property{ - IDField: testProperty1.ID(), - SceneField: testProperty1.Scene(), - SchemaField: newSchemaID, - ItemsField: []Item{ + id: testProperty1.ID(), + scene: testProperty1.Scene(), + schema: newSchemaID, + items: []Item{ &Group{ itemBase: itemBase{ ID: testGroup1.ID(), @@ -441,10 +441,10 @@ func TestSchemaDiff_Migrate(t *testing.T) { args: testProperty1.Clone(), want: true, wantProperty: &Property{ - IDField: testProperty1.ID(), - SceneField: testProperty1.Scene(), - SchemaField: newSchemaID, - ItemsField: []Item{ + id: testProperty1.ID(), + scene: testProperty1.Scene(), + schema: newSchemaID, + items: []Item{ testGroup1, &GroupList{ itemBase: itemBase{ diff --git a/server/pkg/property/field.go b/server/pkg/property/field.go index 29f01eb80b..c83c66ff85 100644 --- a/server/pkg/property/field.go +++ b/server/pkg/property/field.go @@ -15,9 +15,9 @@ var ( ) type Field struct { - FieldField FieldID `msgpack:"FieldField"` - LinksField *Links `msgpack:"LinksField"` - ValueField *OptionalValue `msgpack:"ValueField"` + field FieldID + links *Links + v *OptionalValue } func (p *Field) Clone() *Field { @@ -25,49 +25,49 @@ func (p *Field) Clone() *Field { return nil } return &Field{ - FieldField: p.FieldField, - LinksField: p.LinksField.Clone(), - ValueField: p.ValueField.Clone(), + field: p.field, + links: p.links.Clone(), + v: p.v.Clone(), } } func (p *Field) Field() FieldID { - return p.FieldField + return p.field } func (p *Field) FieldRef() *FieldID { if p == nil { return nil } - return p.FieldField.Ref() + return p.field.Ref() } func (p *Field) Links() *Links { if p == nil { return nil } - return p.LinksField + return p.links } func (p *Field) Type() ValueType { if p == nil { return ValueTypeUnknown } - return p.ValueField.Type() + return p.v.Type() } func (p *Field) Value() *Value { if p == nil { return nil } - return p.ValueField.Value() + return p.v.Value() } func (p *Field) TypeAndValue() *OptionalValue { if p == nil { return nil } - return p.ValueField + return p.v } func (p *Field) ActualValue(ds *dataset.Dataset) *ValueAndDatasetValue { @@ -76,8 +76,8 @@ func (p *Field) ActualValue(ds *dataset.Dataset) *ValueAndDatasetValue { } var dv *dataset.Value - if p.LinksField != nil { - if l := p.LinksField.Last(); l != nil { + if p.links != nil { + if l := p.links.Last(); l != nil { d := l.Dataset() if d != nil && ds.ID() == *d && l.DatasetSchemaField() != nil { dv = ds.Field(*l.DatasetSchemaField()).Value() @@ -115,10 +115,10 @@ func (p *Field) Update(value *Value, field *SchemaField) error { if p == nil { return nil } - if field == nil || p.FieldField != field.ID() || !field.Validate(p.ValueField) { + if field == nil || p.field != field.ID() || !field.Validate(p.v) { return ErrInvalidPropertyValue } - p.ValueField.SetValue(value) + p.v.SetValue(value) return nil } @@ -126,14 +126,14 @@ func (p *Field) UpdateUnsafe(value *Value) { if p == nil { return } - p.ValueField.SetValue(value) + p.v.SetValue(value) } func (p *Field) Cast(t ValueType) bool { if p == nil || t == ValueTypeUnknown || p.Type() == ValueTypeUnknown || p.Type() == t { return false } - p.ValueField = p.ValueField.Cast(t) + p.v = p.v.Cast(t) p.Unlink() return true } @@ -142,7 +142,7 @@ func (p *Field) Link(links *Links) { if p == nil { return } - p.LinksField = links.Clone() + p.links = links.Clone() } func (p *Field) Unlink() { @@ -153,7 +153,7 @@ func (p *Field) UpdateField(field FieldID) { if p == nil { return } - p.FieldField = field + p.field = field } func (p *Field) IsEmpty() bool { @@ -172,7 +172,7 @@ func (p *Field) MigrateSchema(ctx context.Context, newSchema *Schema, dl dataset invalid := schemaField == nil // if value is not compatible for type, value will be cleared - if !schemaField.Validate(p.ValueField) { + if !schemaField.Validate(p.v) { p.UpdateUnsafe(nil) } diff --git a/server/pkg/property/field_builder.go b/server/pkg/property/field_builder.go index 05d0e16a5d..0f9593516f 100644 --- a/server/pkg/property/field_builder.go +++ b/server/pkg/property/field_builder.go @@ -9,7 +9,7 @@ type FieldBuilder struct { func NewField(field FieldID) *FieldBuilder { return &FieldBuilder{ p: &Field{ - FieldField: field, + field: field, }, } } @@ -20,14 +20,14 @@ func FieldFrom(sf *SchemaField) *FieldBuilder { } return &FieldBuilder{ p: &Field{ - FieldField: sf.ID(), - ValueField: NewOptionalValue(sf.Type(), nil), + field: sf.ID(), + v: NewOptionalValue(sf.Type(), nil), }, } } func (b *FieldBuilder) Build() *Field { - if b.p.FieldField == "" || b.p.ValueField == nil { + if b.p.field == "" || b.p.v == nil { return nil } return b.p @@ -36,29 +36,29 @@ func (b *FieldBuilder) Build() *Field { func (b *FieldBuilder) MustBuild() *Field { f := b.Build() if f == nil { - panic(fmt.Sprintf("field ID or type is invalid: id=%s, type=%s", b.p.FieldField, b.p.ValueField.Type())) + panic(fmt.Sprintf("field ID or type is invalid: id=%s, type=%s", b.p.field, b.p.v.Type())) } return f } func (b *FieldBuilder) Field(field FieldID) *FieldBuilder { - b.p.FieldField = field + b.p.field = field return b } func (b *FieldBuilder) Value(v *OptionalValue) *FieldBuilder { - b.p.ValueField = v.Clone() + b.p.v = v.Clone() return b } func (b *FieldBuilder) Type(t ValueType) *FieldBuilder { - if b.p.ValueField.Type() != t { - b.p.ValueField = NewOptionalValue(t, nil) + if b.p.v.Type() != t { + b.p.v = NewOptionalValue(t, nil) } return b } func (b *FieldBuilder) Links(l *Links) *FieldBuilder { - b.p.LinksField = l.Clone() + b.p.links = l.Clone() return b } diff --git a/server/pkg/property/field_builder_test.go b/server/pkg/property/field_builder_test.go index bcae38a2ba..f6041dfb9a 100644 --- a/server/pkg/property/field_builder_test.go +++ b/server/pkg/property/field_builder_test.go @@ -46,9 +46,9 @@ func TestFieldBuilder_Build(t *testing.T) { Value: OptionalValueFrom(ValueTypeString.ValueFrom("vvv")), }, Expected: &Field{ - FieldField: "A", - LinksField: NewLinks([]*Link{l}), - ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("vvv")), + field: "A", + links: NewLinks([]*Link{l}), + v: OptionalValueFrom(ValueTypeString.ValueFrom("vvv")), }, }, } @@ -91,9 +91,9 @@ func TestFieldBuilder_MustBuild(t *testing.T) { Value: OptionalValueFrom(ValueTypeString.ValueFrom("vvv")), }, Expected: &Field{ - FieldField: "A", - LinksField: NewLinks([]*Link{l}), - ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("vvv")), + field: "A", + links: NewLinks([]*Link{l}), + v: OptionalValueFrom(ValueTypeString.ValueFrom("vvv")), }, }, } diff --git a/server/pkg/property/field_test.go b/server/pkg/property/field_test.go index 27bf2a3a58..851a78c265 100644 --- a/server/pkg/property/field_test.go +++ b/server/pkg/property/field_test.go @@ -220,7 +220,7 @@ func TestField_Link(t *testing.T) { t.Parallel() tt.target.Link(tt.args) if tt.target != nil { - assert.Equal(t, tt.args, tt.target.LinksField) + assert.Equal(t, tt.args, tt.target.links) } }) } @@ -253,27 +253,27 @@ func TestField_Cast(t *testing.T) { { name: "ok", target: &Field{ - FieldField: FieldID("foobar"), - ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("-123")), - LinksField: dgp.Clone(), + field: FieldID("foobar"), + v: OptionalValueFrom(ValueTypeString.ValueFrom("-123")), + links: dgp.Clone(), }, args: args{t: ValueTypeNumber}, want: &Field{ - FieldField: FieldID("foobar"), - ValueField: OptionalValueFrom(ValueTypeNumber.ValueFrom(-123)), + field: FieldID("foobar"), + v: OptionalValueFrom(ValueTypeNumber.ValueFrom(-123)), }, }, { name: "failed", target: &Field{ - FieldField: FieldID("foobar"), - ValueField: OptionalValueFrom(ValueTypeString.ValueFrom("foo")), - LinksField: dgp.Clone(), + field: FieldID("foobar"), + v: OptionalValueFrom(ValueTypeString.ValueFrom("foo")), + links: dgp.Clone(), }, args: args{t: ValueTypeLatLng}, want: &Field{ - FieldField: FieldID("foobar"), - ValueField: NewOptionalValue(ValueTypeLatLng, nil), + field: FieldID("foobar"), + v: NewOptionalValue(ValueTypeLatLng, nil), }, }, { @@ -308,7 +308,7 @@ func TestField_GuessSchema(t *testing.T) { }{ { name: "ok", - target: &Field{FieldField: "a", ValueField: NewOptionalValue(ValueTypeLatLng, nil)}, + target: &Field{field: "a", v: NewOptionalValue(ValueTypeLatLng, nil)}, want: &SchemaField{id: "a", propertyType: ValueTypeLatLng}, }, { diff --git a/server/pkg/property/group_list_test.go b/server/pkg/property/group_list_test.go index 6a711b513a..08886d0601 100644 --- a/server/pkg/property/group_list_test.go +++ b/server/pkg/property/group_list_test.go @@ -1028,7 +1028,7 @@ func TestGroupList_GuessSchema(t *testing.T) { SchemaGroup: "aa", }, fields: []*Field{ - {FieldField: "a", ValueField: NewOptionalValue(ValueTypeLatLng, nil)}, + {field: "a", v: NewOptionalValue(ValueTypeLatLng, nil)}, }, }, { @@ -1036,7 +1036,7 @@ func TestGroupList_GuessSchema(t *testing.T) { SchemaGroup: "aa", }, fields: []*Field{ - {FieldField: "b", ValueField: NewOptionalValue(ValueTypeString, nil)}, + {field: "b", v: NewOptionalValue(ValueTypeString, nil)}, }, }, }, diff --git a/server/pkg/property/group_test.go b/server/pkg/property/group_test.go index 85aa7b7ea4..a0db4f037d 100644 --- a/server/pkg/property/group_test.go +++ b/server/pkg/property/group_test.go @@ -471,7 +471,7 @@ func TestGroup_RepresentativeFieldValue(t *testing.T) { Schema: NewSchema().ID(MustSchemaID("xx~1.0.0/aa")).Groups(NewSchemaGroupList([]*SchemaGroup{sg})).MustBuild(), Value: ValueTypeString.ValueFrom("abc"), }, - Expected: &Field{FieldField: "aa", ValueField: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}}, + Expected: &Field{field: "aa", v: &OptionalValue{ov: *value.NewOptional(value.TypeString, nil)}}, }, } diff --git a/server/pkg/property/item.go b/server/pkg/property/item.go index 0c9ca29804..2db681b26a 100644 --- a/server/pkg/property/item.go +++ b/server/pkg/property/item.go @@ -28,8 +28,8 @@ type Item interface { } type itemBase struct { - ID ItemID `msgpack:"ID"` - SchemaGroup SchemaGroupID `msgpack:"SchemaGroup"` + ID ItemID + SchemaGroup SchemaGroupID } func ToGroup(i Item) *Group { @@ -53,9 +53,9 @@ func InitItemFrom(psg *SchemaGroup) Item { } type GroupAndField struct { - ParentGroup *GroupList `msgpack:"ParentGroup"` - Group *Group `msgpack:"Group"` - Field *Field `msgpack:"Field"` + ParentGroup *GroupList + Group *Group + Field *Field } func (f GroupAndField) SchemaFieldPointer() SchemaFieldPointer { diff --git a/server/pkg/property/list_test.go b/server/pkg/property/list_test.go index de785be97c..d2fe403b8a 100644 --- a/server/pkg/property/list_test.go +++ b/server/pkg/property/list_test.go @@ -24,7 +24,7 @@ func TestList_IDs(t *testing.T) { }{ { name: "ok", - target: List{&Property{IDField: p1}, &Property{IDField: p2}, &Property{IDField: p1}}, + target: List{&Property{id: p1}, &Property{id: p2}, &Property{id: p1}}, want: []ID{p1, p2}, }, } @@ -49,7 +49,7 @@ func TestList_Schemas(t *testing.T) { }{ { name: "ok", - target: List{&Property{SchemaField: ps1}, &Property{SchemaField: ps2}, &Property{SchemaField: ps1}}, + target: List{&Property{schema: ps1}, &Property{schema: ps2}, &Property{schema: ps1}}, want: []SchemaID{ps1, ps2}, }, } @@ -74,10 +74,10 @@ func TestList_Map(t *testing.T) { }{ { name: "ok", - target: List{&Property{IDField: p1}, &Property{IDField: p2}, &Property{IDField: p1}}, + target: List{&Property{id: p1}, &Property{id: p2}, &Property{id: p1}}, want: Map{ - p1: &Property{IDField: p1}, - p2: &Property{IDField: p2}, + p1: &Property{id: p1}, + p2: &Property{id: p2}, }, }, } diff --git a/server/pkg/property/property.go b/server/pkg/property/property.go index 48fe62510d..762401341e 100644 --- a/server/pkg/property/property.go +++ b/server/pkg/property/property.go @@ -9,29 +9,29 @@ import ( ) type Property struct { - IDField ID `msgpack:"IDField"` - SceneField SceneID `msgpack:"SceneField"` - SchemaField SchemaID `msgpack:"SchemaField"` - ItemsField []Item `msgpack:"ItemsField"` + id ID + scene SceneID + schema SchemaID + items []Item } func (p *Property) ID() ID { - return p.IDField + return p.id } func (p *Property) IDRef() *ID { if p == nil { return nil } - return p.IDField.Ref() + return p.id.Ref() } func (p *Property) Scene() SceneID { - return p.SceneField + return p.scene } func (p *Property) Schema() SchemaID { - return p.SchemaField + return p.schema } func (p *Property) Field(ptr *Pointer) (*Field, *GroupList, *Group) { @@ -52,7 +52,7 @@ func (p *Property) Items() []Item { if p == nil { return nil } - return append([]Item{}, p.ItemsField...) + return append([]Item{}, p.items...) } func (p *Property) Item(ptr *Pointer) Item { @@ -60,7 +60,7 @@ func (p *Property) Item(ptr *Pointer) Item { return nil } - for _, i := range p.ItemsField { + for _, i := range p.items { if ptr.TestItem(i.SchemaGroup(), i.ID()) { return i } @@ -74,7 +74,7 @@ func (p *Property) GroupAndList(ptr *Pointer) (*Group, *GroupList) { return nil, nil } - for _, i := range p.ItemsField { + for _, i := range p.items { if ptr.TestSchemaGroup(i.SchemaGroup()) { if gl := ToGroupList(i); gl != nil { return gl.GroupByPointer(ptr), gl @@ -92,7 +92,7 @@ func (p *Property) ItemBySchema(id SchemaGroupID) Item { if p == nil { return nil } - for _, f := range p.ItemsField { + for _, f := range p.items { if f.SchemaGroup() == id { return f } @@ -131,7 +131,7 @@ func (p *Property) ListItem(ptr *Pointer) (*Group, *GroupList) { return item.Group(i), item } } else if iid, ok := ptr.Item(); ok { - for _, item := range p.ItemsField { + for _, item := range p.items { litem := ToGroupList(item) if g := litem.Group(iid); g != nil { return g, litem @@ -149,7 +149,7 @@ func (p *Property) HasLinkedField() bool { if p == nil { return false } - for _, f := range p.ItemsField { + for _, f := range p.items { if f.HasLinkedField() { return true } @@ -162,25 +162,25 @@ func (p *Property) Clone() *Property { return nil } - items := make([]Item, 0, len(p.ItemsField)) - for _, i := range p.ItemsField { + items := make([]Item, 0, len(p.items)) + for _, i := range p.items { items = append(items, i.CloneItem()) } return &Property{ - IDField: p.IDField, - SchemaField: p.SchemaField, - SceneField: p.SceneField, - ItemsField: items, + id: p.id, + schema: p.schema, + scene: p.scene, + items: items, } } func (p *Property) Fields(ptr *Pointer) []*Field { - if p == nil || len(p.ItemsField) == 0 { + if p == nil || len(p.items) == 0 { return nil } res := []*Field{} - for _, g := range p.ItemsField { + for _, g := range p.items { res = append(res, g.Fields(ptr)...) } return res @@ -190,7 +190,7 @@ func (p *Property) RemoveFields(ptr *Pointer) (res bool) { if p == nil { return } - for _, g := range p.ItemsField { + for _, g := range p.items { if g.RemoveFields(ptr) { res = true } @@ -203,7 +203,7 @@ func (p *Property) FieldsByLinkedDataset(s DatasetSchemaID, i DatasetID) []*Fiel return nil } res := []*Field{} - for _, g := range p.ItemsField { + for _, g := range p.items { res = append(res, g.FieldsByLinkedDataset(s, i)...) } return res @@ -213,7 +213,7 @@ func (p *Property) IsDatasetLinked(s DatasetSchemaID, i DatasetID) bool { if p == nil { return false } - for _, g := range p.ItemsField { + for _, g := range p.items { if g.IsDatasetLinked(s, i) { return true } @@ -227,7 +227,7 @@ func (p *Property) Datasets() []DatasetID { } res := []DatasetID{} - for _, f := range p.ItemsField { + for _, f := range p.items { res = append(res, f.Datasets()...) } @@ -238,7 +238,7 @@ func (p *Property) AddItem(i Item) bool { if p == nil || p.ItemBySchema(i.SchemaGroup()) != nil || p.Item(PointItem(i.ID())) != nil { return false } - p.ItemsField = append(p.ItemsField, i) + p.items = append(p.items, i) return true } @@ -247,10 +247,10 @@ func (p *Property) RemoveItem(ptr *Pointer) { return } - for i := 0; i < len(p.ItemsField); i++ { - item := p.ItemsField[i] + for i := 0; i < len(p.items); i++ { + item := p.items[i] if ptr.TestItem(item.SchemaGroup(), item.ID()) { - p.ItemsField = append(p.ItemsField[:i], p.ItemsField[i+1:]...) + p.items = append(p.items[:i], p.items[i+1:]...) return } } @@ -278,7 +278,7 @@ func (p *Property) Prune() (res bool) { if p == nil { return } - for _, i := range p.ItemsField { + for _, i := range p.items { if i.Prune() { res = true } @@ -518,9 +518,9 @@ func (p *Property) MigrateSchema(ctx context.Context, newSchema *Schema, dl data if p == nil || dl == nil { return } - p.SchemaField = newSchema.ID() + p.schema = newSchema.ID() - for _, f := range p.ItemsField { + for _, f := range p.items { f.MigrateSchema(ctx, newSchema, dl) } @@ -531,7 +531,7 @@ func (p *Property) MigrateDataset(q DatasetMigrationParam) { if p == nil { return } - for _, f := range p.ItemsField { + for _, f := range p.items { f.MigrateDataset(q) } p.Prune() @@ -544,11 +544,11 @@ func (p *Property) ValidateSchema(ps *Schema) error { if ps == nil { return errors.New("invalid schema") } - if p.SchemaField != ps.ID() { + if p.schema != ps.ID() { return errors.New("invalid schema id") } - for _, i := range p.ItemsField { + for _, i := range p.items { sg := i.SchemaGroup() if err := i.ValidateSchema(ps.Groups().Group(sg)); err != nil { return fmt.Errorf("%s (%s): %w", p.ID(), sg, err) @@ -590,11 +590,11 @@ func (p *Property) MoveFields(from, to *Pointer) (res bool) { } func (p *Property) GroupAndFields(ptr *Pointer) []GroupAndField { - if p == nil || len(p.ItemsField) == 0 { + if p == nil || len(p.items) == 0 { return nil } res := []GroupAndField{} - for _, i := range p.ItemsField { + for _, i := range p.items { if ptr == nil || ptr.TestSchemaGroup(i.SchemaGroup()) { res = append(res, i.GroupAndFields(ptr)...) } @@ -617,8 +617,8 @@ func (p *Property) GuessSchema() *Schema { return nil } - groups := make([]*SchemaGroup, 0, len(p.ItemsField)) - for _, i := range p.ItemsField { + groups := make([]*SchemaGroup, 0, len(p.items)) + for _, i := range p.items { if g := i.GuessSchema(); g != nil { groups = append(groups, g) } @@ -631,17 +631,13 @@ func (p *Property) GuessSchema() *Schema { } func (p *Property) updateSchema(s SchemaID) bool { - if p == nil || s.IsNil() || p.SchemaField.Equal(s) { + if p == nil || s.IsNil() || p.schema.Equal(s) { return false } - p.SchemaField = s.Clone() + p.schema = s.Clone() return true } func (p *Property) SetSchema(schema SchemaID) { - p.SchemaField = schema.Clone() -} - -func PropertyCacheKey(id ID) string { - return fmt.Sprintf("Property:%s", id) + p.schema = schema.Clone() } diff --git a/server/pkg/property/property_test.go b/server/pkg/property/property_test.go index d469aa2c3d..bce31ff37b 100644 --- a/server/pkg/property/property_test.go +++ b/server/pkg/property/property_test.go @@ -692,7 +692,7 @@ func TestProperty_GroupAndList(t *testing.T) { { name: "found", target: &Property{ - ItemsField: []Item{ + items: []Item{ &GroupList{ itemBase: itemBase{ ID: pgid1, @@ -740,7 +740,7 @@ func TestProperty_GroupAndList(t *testing.T) { { name: "list only", target: &Property{ - ItemsField: []Item{ + items: []Item{ &GroupList{ itemBase: itemBase{ ID: pgid1, @@ -816,14 +816,14 @@ func TestProperty_AddItem(t *testing.T) { }, { name: "schema group duplicated", - target: &Property{ItemsField: []Item{&Group{itemBase: itemBase{SchemaGroup: "a"}}}}, + target: &Property{items: []Item{&Group{itemBase: itemBase{SchemaGroup: "a"}}}}, args: args{i: &Group{itemBase: itemBase{SchemaGroup: "a"}}}, want: false, wantItems: []Item{&Group{itemBase: itemBase{SchemaGroup: "a"}}}, }, { name: "id duplicated", - target: &Property{ItemsField: []Item{&Group{itemBase: itemBase{ID: iid}}}}, + target: &Property{items: []Item{&Group{itemBase: itemBase{ID: iid}}}}, args: args{i: &Group{itemBase: itemBase{ID: iid}}}, want: false, wantItems: []Item{&Group{itemBase: itemBase{ID: iid}}}, @@ -843,7 +843,7 @@ func TestProperty_AddItem(t *testing.T) { t.Parallel() assert.Equal(t, tt.want, tt.target.AddItem(tt.args.i)) if tt.target != nil { - assert.Equal(t, tt.wantItems, tt.target.ItemsField) + assert.Equal(t, tt.wantItems, tt.target.items) } }) } From cbfb5a3e1b610f8fad289b9d9a1e1b1fd5ef9a04 Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 25 Apr 2024 13:53:03 +0900 Subject: [PATCH 05/17] common.go --- server/internal/usecase/interactor/common.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/internal/usecase/interactor/common.go b/server/internal/usecase/interactor/common.go index ce4a673c93..46ff53e8a8 100644 --- a/server/internal/usecase/interactor/common.go +++ b/server/internal/usecase/interactor/common.go @@ -48,7 +48,7 @@ func NewContainer(r *repo.Container, g *gateway.Container, Plugin: NewPlugin(r, g), Policy: NewPolicy(r), Project: NewProject(r, g), - Property: NewProperty(r, g), + Property: NewProperty(r, g, redisAdapter), Published: published, Scene: NewScene(r, g), Tag: NewTag(r), From 38745d67206aac42c3dc46cdd97ad00383483dd5 Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 25 Apr 2024 13:54:26 +0900 Subject: [PATCH 06/17] property pkg --- server/pkg/property/property.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/pkg/property/property.go b/server/pkg/property/property.go index 762401341e..2705077aef 100644 --- a/server/pkg/property/property.go +++ b/server/pkg/property/property.go @@ -641,3 +641,7 @@ func (p *Property) updateSchema(s SchemaID) bool { func (p *Property) SetSchema(schema SchemaID) { p.schema = schema.Clone() } + +func PropertyCacheKey(id ID) string { + return fmt.Sprintf("Property:%s", id) +} From 54fb9bc75f784992345c82c85791ff93783fb19e Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 25 Apr 2024 13:55:18 +0900 Subject: [PATCH 07/17] gql nlslayer test --- server/e2e/gql_nlslayer_test.go | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/server/e2e/gql_nlslayer_test.go b/server/e2e/gql_nlslayer_test.go index 13b9f21021..f7a34e76b3 100644 --- a/server/e2e/gql_nlslayer_test.go +++ b/server/e2e/gql_nlslayer_test.go @@ -672,19 +672,23 @@ func moveInfoboxBlock(e *httpexpect.Expect, layerId, infoboxBlockId string, inde return requestBody, res, res.Path("$.data.moveNLSInfoboxBlock.infoboxBlockId").Raw().(string) } -func TestInfoboxBlocksCRUD(t *testing.T) { - mr, err := miniredis.Run() - if err != nil { - t.Fatal(err) +func infoboxBlocksCRUD(t *testing.T, isUseRedis bool) { + redisAddress := "" + if isUseRedis { + mr, err := miniredis.Run() + if err != nil { + t.Fatal(err) + } + defer mr.Close() + redisAddress = mr.Addr() } - defer mr.Close() e := StartServer(t, &config.Config{ Origins: []string{"https://example.com"}, AuthSrv: config.AuthSrvConfig{ Disabled: true, }, - RedisHost: mr.Addr(), + RedisHost: redisAddress, }, true, baseSeeder) pId := createProject(e) @@ -743,6 +747,14 @@ func TestInfoboxBlocksCRUD(t *testing.T) { Path("$.data.node.newLayers[0].infobox.blocks").Equal([]any{}) } +func TestInfoboxBlocksCRUD(t *testing.T) { + infoboxBlocksCRUD(t, false) +} + +func TestInfoboxBlocksCRUDWithRedis(t *testing.T) { + infoboxBlocksCRUD(t, true) +} + func addCustomProperties( e *httpexpect.Expect, layerId string, From ab56ff9d2621c655eee03b4febfc684d7396bb06 Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 25 Apr 2024 13:56:52 +0900 Subject: [PATCH 08/17] property interactor --- .../internal/usecase/interactor/property.go | 78 ++++++++++++++++++- 1 file changed, 76 insertions(+), 2 deletions(-) diff --git a/server/internal/usecase/interactor/property.go b/server/internal/usecase/interactor/property.go index 4d83425663..fc14bb8ae5 100644 --- a/server/internal/usecase/interactor/property.go +++ b/server/internal/usecase/interactor/property.go @@ -3,7 +3,9 @@ package interactor import ( "context" "errors" + "log" + "github.com/go-redis/redis/v8" "github.com/reearth/reearth/server/internal/usecase" "github.com/reearth/reearth/server/internal/usecase/gateway" "github.com/reearth/reearth/server/internal/usecase/interfaces" @@ -11,6 +13,7 @@ import ( "github.com/reearth/reearth/server/pkg/id" "github.com/reearth/reearth/server/pkg/property" "github.com/reearth/reearthx/usecasex" + "github.com/vmihailenco/msgpack/v5" ) type Property struct { @@ -24,9 +27,10 @@ type Property struct { assetRepo repo.Asset file gateway.File transaction usecasex.Transaction + redis gateway.RedisGateway } -func NewProperty(r *repo.Container, gr *gateway.Container) interfaces.Property { +func NewProperty(r *repo.Container, gr *gateway.Container, redis gateway.RedisGateway) interfaces.Property { return &Property{ commonSceneLock: commonSceneLock{sceneLockRepo: r.SceneLock}, propertyRepo: r.Property, @@ -37,6 +41,7 @@ func NewProperty(r *repo.Container, gr *gateway.Container) interfaces.Property { assetRepo: r.Asset, transaction: r.Transaction, file: gr.File, + redis: redis, } } @@ -88,10 +93,20 @@ func (i *Property) UpdateValue(ctx context.Context, inp interfaces.UpdatePropert } }() - p, err = i.propertyRepo.FindByID(ctx, inp.PropertyID) + propertyCache, err := getPropertyFromCache(ctx, i.redis, property.PropertyCacheKey(inp.PropertyID)) if err != nil { return nil, nil, nil, nil, err } + + if propertyCache == nil { + p, err = i.propertyRepo.FindByID(ctx, inp.PropertyID) + if err != nil { + return nil, nil, nil, nil, err + } + } else { + p = propertyCache + } + if err := i.CanWriteScene(p.Scene(), operator); err != nil { return nil, nil, nil, nil, err } @@ -116,6 +131,12 @@ func (i *Property) UpdateValue(ctx context.Context, inp interfaces.UpdatePropert } tx.Commit() + + err = setToCache[*property.Property](ctx, i.redis, property.PropertyCacheKey(p.ID()), p) + if err != nil { + return nil, nil, nil, nil, err + } + return p, pgl, pg, field, nil } @@ -432,3 +453,56 @@ func (i *Property) UpdateItems(ctx context.Context, inp interfaces.UpdatePropert return p, nil } + +type PropertyForRedis struct { + ID string `msgpack:"id"` + Scene string `msgpack:"scene"` + Schema string `msgpack:"schema"` + Items []ItemForRedis `msgpack:"items"` +} + +type ItemForRedis struct { + ID string `msgpack:"ID"` + SchemaGroup string `msgpack:"SchemaGroup"` + Fields []FieldForRedis `msgpack:"fields"` +} + +type FieldForRedis struct { + Field string `msgpack:"field"` + Links interface{} `msgpack:"links"` + V ValueForRedis `msgpack:"v"` +} + +type ValueForRedis struct { + Ov OptionalValueForRedis `msgpack:"ov"` +} + +type OptionalValueForRedis struct { + Field string `msgpack:"Field"` + Value map[string]interface{} `msgpack:"Value"` +} + +func getPropertyFromCache(ctx context.Context, redisClient any, cacheKey string) (*property.Property, error) { + redisAdapter, ok := checkRedisClient(redisClient) + if !ok { + return nil, errors.New("invalid redis client") + } + + val, err := redisAdapter.GetValue(ctx, cacheKey) + if err != nil { + if err == redis.Nil { + return nil, nil + } + return nil, err + } + + var p PropertyForRedis + if err := msgpack.Unmarshal([]byte(val), &p); err != nil { + return nil, err + } + + log.Printf("p: %+v", p) + + var propertyDomain property.Property + return &propertyDomain, nil +} From 4bcee9d738debaf262c4dfee4b1558691aacb35a Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Fri, 10 May 2024 15:47:19 +0900 Subject: [PATCH 09/17] fix --- .../internal/usecase/interactor/property.go | 168 ++++++++++++++++-- server/pkg/value/value.go | 15 ++ 2 files changed, 165 insertions(+), 18 deletions(-) diff --git a/server/internal/usecase/interactor/property.go b/server/internal/usecase/interactor/property.go index fc14bb8ae5..8cdb43b30e 100644 --- a/server/internal/usecase/interactor/property.go +++ b/server/internal/usecase/interactor/property.go @@ -12,6 +12,7 @@ import ( "github.com/reearth/reearth/server/internal/usecase/repo" "github.com/reearth/reearth/server/pkg/id" "github.com/reearth/reearth/server/pkg/property" + "github.com/reearth/reearth/server/pkg/value" "github.com/reearth/reearthx/usecasex" "github.com/vmihailenco/msgpack/v5" ) @@ -132,7 +133,7 @@ func (i *Property) UpdateValue(ctx context.Context, inp interfaces.UpdatePropert tx.Commit() - err = setToCache[*property.Property](ctx, i.redis, property.PropertyCacheKey(p.ID()), p) + err = setPropertyToCache(ctx, i.redis, property.PropertyCacheKey(p.ID()), p) if err != nil { return nil, nil, nil, nil, err } @@ -455,31 +456,43 @@ func (i *Property) UpdateItems(ctx context.Context, inp interfaces.UpdatePropert } type PropertyForRedis struct { - ID string `msgpack:"id"` - Scene string `msgpack:"scene"` - Schema string `msgpack:"schema"` - Items []ItemForRedis `msgpack:"items"` + ID string `msgpack:"ID"` + Scene string `msgpack:"Scene"` + Schema string `msgpack:"Schema"` + Items []GroupForRedis `msgpack:"Items"` } -type ItemForRedis struct { - ID string `msgpack:"ID"` - SchemaGroup string `msgpack:"SchemaGroup"` - Fields []FieldForRedis `msgpack:"fields"` +type GroupForRedis struct { + ID string `msgpack:"ID"` + SchemaGroup string `msgpack:"SchemaGroup"` + Fields []*FieldForRedis `msgpack:"Fields"` } type FieldForRedis struct { - Field string `msgpack:"field"` - Links interface{} `msgpack:"links"` - V ValueForRedis `msgpack:"v"` + Field string `msgpack:"Field"` + Links *LinksForRedis `msgpack:"Links,omitempty"` + V *OptionalValueForRedis `msgpack:"V,omitempty"` } -type ValueForRedis struct { - Ov OptionalValueForRedis `msgpack:"ov"` +type LinksForRedis struct { + Links []*LinkForRedis `msgpack:"Links"` +} + +type LinkForRedis struct { + Dataset *string `msgpack:"Dataset,omitempty"` + Schema *string `msgpack:"Schema,omitempty"` + Field *string `msgpack:"Field,omitempty"` } type OptionalValueForRedis struct { - Field string `msgpack:"Field"` - Value map[string]interface{} `msgpack:"Value"` + Type string `msgpack:"Type"` + Value *ValueForRedis `msgpack:"Value,omitempty"` +} + +type ValueForRedis struct { + P map[string]interface{} `msgpack:"P"` + V interface{} `msgpack:"V"` + T string `msgpack:"T"` } func getPropertyFromCache(ctx context.Context, redisClient any, cacheKey string) (*property.Property, error) { @@ -503,6 +516,125 @@ func getPropertyFromCache(ctx context.Context, redisClient any, cacheKey string) log.Printf("p: %+v", p) - var propertyDomain property.Property - return &propertyDomain, nil + propertyDomain, err := convertPropertyFromRedis(p) + if err != nil { + return nil, err + } + + return propertyDomain, nil +} + +func setPropertyToCache(ctx context.Context, redisClient any, cacheKey string, data *property.Property) error { + redisAdapter, ok := checkRedisClient(redisClient) + if !ok { + return nil + } + + propertyForRedis := convertPropertyToRedis(data) + + serializedData, err := msgpack.Marshal(propertyForRedis) + if err != nil { + return err + } + + return redisAdapter.SetValue(ctx, cacheKey, serializedData) +} + +func convertPropertyToRedis(p *property.Property) PropertyForRedis { + ptr := &property.Pointer{} + fields := p.Items()[0].Fields(ptr) + + fieldsForRedis := make([]*FieldForRedis, 0, len(fields)) + for _, field := range fields { + valueForRedis := ValueForRedis{ + P: map[string]interface{}{}, + V: field.TypeAndValue().Value().Value(), + T: string(field.TypeAndValue().Value().Type()), + } + + optionalValueForRedis := OptionalValueForRedis{ + Type: string(field.TypeAndValue().Type()), + Value: &valueForRedis, + } + + fieldForRedis := FieldForRedis{ + Field: field.Field().String(), + Links: nil, + V: &optionalValueForRedis, + } + + fieldsForRedis = append(fieldsForRedis, &fieldForRedis) + } + + groupForRedis := GroupForRedis{ + ID: p.Items()[0].ID().String(), + SchemaGroup: p.Items()[0].SchemaGroup().String(), + Fields: fieldsForRedis, + } + + propertyForRedis := PropertyForRedis{ + ID: p.ID().String(), + Scene: p.Scene().String(), + Schema: p.Schema().String(), + Items: []GroupForRedis{groupForRedis}, + } + + return propertyForRedis +} + +func convertPropertyFromRedis(p PropertyForRedis) (*property.Property, error) { + + fieldsDomain := make([]*property.Field, 0, len(p.Items[0].Fields)) + for _, field := range p.Items[0].Fields { + valueDomain := value.NewValue( + nil, + field.V.Value.V, + value.Type(field.V.Value.T), + ) + + var v *property.Value + switch field.V.Type { + case "string": + v = property.ValueTypeString.ValueFrom(valueDomain) + case "spacing": + v = property.ValueTypeSpacing.ValueFrom(valueDomain) + case "number": + v = property.ValueTypeNumber.ValueFrom(valueDomain) + } + + optionalValueDomain := property.NewOptionalValue( + property.ValueType(field.V.Type), + // property.ValueTypeString.ValueFrom(valueDomain), + // property.ValueType(field.V.Type).ValueFrom(valueDomain), + v, + ) + + optionalValueDomain2 := property.OptionalValueFrom( + v, + ) + + log.Printf("optionalValueDomain2: %+v", optionalValueDomain2) + + fieldDomain := property.NewField(property.FieldID(field.Field)). + Value(optionalValueDomain). + Links(nil). + MustBuild() + + fieldsDomain = append(fieldsDomain, fieldDomain) + } + + groupDomain := property.NewGroup(). + ID(property.MustItemID(p.Items[0].ID)). + SchemaGroup(property.SchemaGroupID(p.Items[0].SchemaGroup)). + Fields(fieldsDomain). + MustBuild() + + propertyDomain := property.New(). + ID(property.MustID(p.ID)). + Scene(property.MustSceneID(p.Scene)). + Schema(property.MustSchemaID(p.Schema)). + Items([]property.Item{groupDomain}). + MustBuild() + + return propertyDomain, nil } diff --git a/server/pkg/value/value.go b/server/pkg/value/value.go index 5e3f71c98a..23a4b5139b 100644 --- a/server/pkg/value/value.go +++ b/server/pkg/value/value.go @@ -10,6 +10,21 @@ type Value struct { t Type } +func NewValue( + p TypePropertyMap, + v interface{}, + t Type, +) *Value { + if t == TypeUnknown { + return nil + } + return &Value{ + p: p, + v: v, + t: t, + } +} + func (v *Value) IsEmpty() bool { return v == nil || v.t == TypeUnknown || v.v == nil } From 30c7821e1d1b83cdbd2ea2122b56227a89a7c358 Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 16 May 2024 14:13:18 +0900 Subject: [PATCH 10/17] property pkg --- server/pkg/property/value.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/server/pkg/property/value.go b/server/pkg/property/value.go index 1f33d9da57..1dea1658a8 100644 --- a/server/pkg/property/value.go +++ b/server/pkg/property/value.go @@ -36,6 +36,16 @@ var types = value.TypePropertyMap{ value.Type(ValueTypeTimeline): &typePropertyTimeline{}, } +func NewValue(v *value.Value) *Value { + if v == nil { + return nil + } + + return &Value{ + v: *v, + } +} + func (vt ValueType) Valid() bool { if _, ok := types[value.Type(vt)]; ok { return true From e3e2d9ee0161bceec2b2ef1fdb19ccfffcc487ab Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 16 May 2024 14:13:49 +0900 Subject: [PATCH 11/17] interactor property --- .../internal/usecase/interactor/property.go | 20 +------------------ 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/server/internal/usecase/interactor/property.go b/server/internal/usecase/interactor/property.go index 8cdb43b30e..f8a641d989 100644 --- a/server/internal/usecase/interactor/property.go +++ b/server/internal/usecase/interactor/property.go @@ -592,29 +592,11 @@ func convertPropertyFromRedis(p PropertyForRedis) (*property.Property, error) { value.Type(field.V.Value.T), ) - var v *property.Value - switch field.V.Type { - case "string": - v = property.ValueTypeString.ValueFrom(valueDomain) - case "spacing": - v = property.ValueTypeSpacing.ValueFrom(valueDomain) - case "number": - v = property.ValueTypeNumber.ValueFrom(valueDomain) - } - optionalValueDomain := property.NewOptionalValue( property.ValueType(field.V.Type), - // property.ValueTypeString.ValueFrom(valueDomain), - // property.ValueType(field.V.Type).ValueFrom(valueDomain), - v, + property.NewValue(valueDomain), ) - optionalValueDomain2 := property.OptionalValueFrom( - v, - ) - - log.Printf("optionalValueDomain2: %+v", optionalValueDomain2) - fieldDomain := property.NewField(property.FieldID(field.Field)). Value(optionalValueDomain). Links(nil). From cf8cc590acbb5885a8485c7724bb6a3863ca70f2 Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 16 May 2024 14:30:03 +0900 Subject: [PATCH 12/17] interactor property --- server/internal/usecase/interactor/property.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/internal/usecase/interactor/property.go b/server/internal/usecase/interactor/property.go index f8a641d989..5a2bcd267d 100644 --- a/server/internal/usecase/interactor/property.go +++ b/server/internal/usecase/interactor/property.go @@ -498,7 +498,7 @@ type ValueForRedis struct { func getPropertyFromCache(ctx context.Context, redisClient any, cacheKey string) (*property.Property, error) { redisAdapter, ok := checkRedisClient(redisClient) if !ok { - return nil, errors.New("invalid redis client") + return nil, nil } val, err := redisAdapter.GetValue(ctx, cacheKey) From a4aa0ff1b9f881fd046c64b9de7c18f8df9701b8 Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 16 May 2024 14:36:27 +0900 Subject: [PATCH 13/17] fix --- server/internal/usecase/interactor/property.go | 2 +- server/pkg/value/value.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/internal/usecase/interactor/property.go b/server/internal/usecase/interactor/property.go index 5a2bcd267d..25c14cb023 100644 --- a/server/internal/usecase/interactor/property.go +++ b/server/internal/usecase/interactor/property.go @@ -586,7 +586,7 @@ func convertPropertyFromRedis(p PropertyForRedis) (*property.Property, error) { fieldsDomain := make([]*property.Field, 0, len(p.Items[0].Fields)) for _, field := range p.Items[0].Fields { - valueDomain := value.NewValue( + valueDomain := value.New( nil, field.V.Value.V, value.Type(field.V.Value.T), diff --git a/server/pkg/value/value.go b/server/pkg/value/value.go index 23a4b5139b..63aa48fd71 100644 --- a/server/pkg/value/value.go +++ b/server/pkg/value/value.go @@ -10,7 +10,7 @@ type Value struct { t Type } -func NewValue( +func New( p TypePropertyMap, v interface{}, t Type, From 4c19f5ba59cc88c934c6d247761c7f71dde051d4 Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 16 May 2024 14:40:33 +0900 Subject: [PATCH 14/17] go.work.sum --- go.work.sum | 2 ++ 1 file changed, 2 insertions(+) diff --git a/go.work.sum b/go.work.sum index b32d3172de..a58792ad92 100644 --- a/go.work.sum +++ b/go.work.sum @@ -166,6 +166,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1 h1:xvqufLtNVwAhN8NMyWklVgxnWohi+wtMGQMhtxexlm0= github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g= +github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/garyburd/redigo v1.1.1-0.20170914051019-70e1b1943d4f h1:Sk0u0gIncQaQD23zAoAZs2DNi2u2l5UTLi4CmCBL5v8= @@ -192,6 +193,7 @@ github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754 h1:tpom+2CJmpzAWj5 github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/lint v0.0.0-20170918230701-e5d664eb928e h1:ior8LN6127GsA53E9mD9nH/oP/LVbJplmLH5V8o+/Uk= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= From c5d951f2198cac864ac2873788c0a8bcf7074baa Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 16 May 2024 14:52:09 +0900 Subject: [PATCH 15/17] fix --- server/internal/usecase/interactor/property.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/server/internal/usecase/interactor/property.go b/server/internal/usecase/interactor/property.go index 25c14cb023..4bd96cd8ca 100644 --- a/server/internal/usecase/interactor/property.go +++ b/server/internal/usecase/interactor/property.go @@ -3,7 +3,6 @@ package interactor import ( "context" "errors" - "log" "github.com/go-redis/redis/v8" "github.com/reearth/reearth/server/internal/usecase" @@ -514,8 +513,6 @@ func getPropertyFromCache(ctx context.Context, redisClient any, cacheKey string) return nil, err } - log.Printf("p: %+v", p) - propertyDomain, err := convertPropertyFromRedis(p) if err != nil { return nil, err From 9d39a4f50549ec3538eef57a0a3a448f9f7ac3e3 Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 16 May 2024 16:09:03 +0900 Subject: [PATCH 16/17] fix --- server/internal/usecase/interactor/property.go | 9 +++++---- server/pkg/property/field.go | 8 ++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/server/internal/usecase/interactor/property.go b/server/internal/usecase/interactor/property.go index 4bd96cd8ca..8c08a3b896 100644 --- a/server/internal/usecase/interactor/property.go +++ b/server/internal/usecase/interactor/property.go @@ -594,10 +594,11 @@ func convertPropertyFromRedis(p PropertyForRedis) (*property.Property, error) { property.NewValue(valueDomain), ) - fieldDomain := property.NewField(property.FieldID(field.Field)). - Value(optionalValueDomain). - Links(nil). - MustBuild() + fieldDomain := property.NewFieldDomain( + property.FieldID(field.Field), + nil, + optionalValueDomain, + ) fieldsDomain = append(fieldsDomain, fieldDomain) } diff --git a/server/pkg/property/field.go b/server/pkg/property/field.go index c83c66ff85..bef2d27750 100644 --- a/server/pkg/property/field.go +++ b/server/pkg/property/field.go @@ -20,6 +20,14 @@ type Field struct { v *OptionalValue } +func NewFieldDomain(field FieldID, links *Links, v *OptionalValue) *Field { + return &Field{ + field: field, + links: links, + v: v, + } +} + func (p *Field) Clone() *Field { if p == nil { return nil From 45204fa41992f74656b147b81ee65ca884c4c5a0 Mon Sep 17 00:00:00 2001 From: akiyatomohiro Date: Thu, 16 May 2024 19:03:47 +0900 Subject: [PATCH 17/17] fix --- server/internal/usecase/interactor/property.go | 18 ++++++++++++++++-- server/pkg/property/value.go | 4 ++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/server/internal/usecase/interactor/property.go b/server/internal/usecase/interactor/property.go index 8c08a3b896..5b50daca6b 100644 --- a/server/internal/usecase/interactor/property.go +++ b/server/internal/usecase/interactor/property.go @@ -583,9 +583,23 @@ func convertPropertyFromRedis(p PropertyForRedis) (*property.Property, error) { fieldsDomain := make([]*property.Field, 0, len(p.Items[0].Fields)) for _, field := range p.Items[0].Fields { + + var v interface{} + if field.Field == "padding" { + m := field.V.Value.V.(map[string]interface{}) + v = property.Spacing{ + Top: m["Top"].(float64), + Bottom: m["Bottom"].(float64), + Left: m["Left"].(float64), + Right: m["Right"].(float64), + } + } else { + v = field.V.Value.V + } + valueDomain := value.New( - nil, - field.V.Value.V, + property.DefaultTypes(), + v, value.Type(field.V.Value.T), ) diff --git a/server/pkg/property/value.go b/server/pkg/property/value.go index 1dea1658a8..94501f587e 100644 --- a/server/pkg/property/value.go +++ b/server/pkg/property/value.go @@ -255,3 +255,7 @@ func ValueFromStringOrNumber(s string) *Value { return ValueTypeString.ValueFrom(s) } + +func DefaultTypes() value.TypePropertyMap { + return types +}