From 5dd3dba28b3673cf5a34d9695f1bcc9a7175aa86 Mon Sep 17 00:00:00 2001 From: yk-eukarya <81808708+yk-eukarya@users.noreply.github.com> Date: Wed, 28 Jul 2021 10:07:48 +0300 Subject: [PATCH] feat: Refine dataset import (#26) * - Declare DatasetSchemaFieldID scalar - Extend AddLayerGroupInput to accept optional markerTitleFieldId - Use selected Field value as layer name * - fix mutation variable name - use representativeFieldID to set layer title --- gqlgen.yml | 2 ++ internal/adapter/graphql/controller_layer.go | 1 + internal/adapter/graphql/models_gen.go | 13 +++++----- internal/adapter/graphql/scalar.go | 13 ++++++++++ internal/graphql/generated.go | 25 ++++++++++++++++++++ internal/usecase/interactor/layer.go | 8 ++++++- internal/usecase/interfaces/layer.go | 1 + schema.graphql | 2 ++ 8 files changed, 58 insertions(+), 7 deletions(-) diff --git a/gqlgen.yml b/gqlgen.yml index 30993f75..f58884a9 100644 --- a/gqlgen.yml +++ b/gqlgen.yml @@ -31,6 +31,8 @@ models: model: github.com/reearth/reearth-backend/internal/adapter/graphql.PropertySchemaID PropertySchemaFieldID: model: github.com/reearth/reearth-backend/internal/adapter/graphql.PropertySchemaFieldID + DatasetSchemaFieldID: + model: github.com/reearth/reearth-backend/internal/adapter/graphql.DatasetSchemaFieldID TranslatedString: model: github.com/reearth/reearth-backend/internal/adapter/graphql.Map Lang: diff --git a/internal/adapter/graphql/controller_layer.go b/internal/adapter/graphql/controller_layer.go index 6faadf56..2beaaea0 100644 --- a/internal/adapter/graphql/controller_layer.go +++ b/internal/adapter/graphql/controller_layer.go @@ -56,6 +56,7 @@ func (c *LayerController) AddGroup(ctx context.Context, ginput *AddLayerGroupInp Index: ginput.Index, Name: refToString(ginput.Name), LinkedDatasetSchemaID: id.DatasetSchemaIDFromRefID(ginput.LinkedDatasetSchemaID), + RepresentativeFieldId: ginput.RepresentativeFieldID, }, operator) if err != nil { return nil, err diff --git a/internal/adapter/graphql/models_gen.go b/internal/adapter/graphql/models_gen.go index 22451d1d..07f3610c 100644 --- a/internal/adapter/graphql/models_gen.go +++ b/internal/adapter/graphql/models_gen.go @@ -76,12 +76,13 @@ type AddInfoboxFieldPayload struct { } type AddLayerGroupInput struct { - ParentLayerID id.ID `json:"parentLayerId"` - PluginID *id.PluginID `json:"pluginId"` - ExtensionID *id.PluginExtensionID `json:"extensionId"` - Index *int `json:"index"` - LinkedDatasetSchemaID *id.ID `json:"linkedDatasetSchemaID"` - Name *string `json:"name"` + ParentLayerID id.ID `json:"parentLayerId"` + PluginID *id.PluginID `json:"pluginId"` + ExtensionID *id.PluginExtensionID `json:"extensionId"` + Index *int `json:"index"` + LinkedDatasetSchemaID *id.ID `json:"linkedDatasetSchemaID"` + Name *string `json:"name"` + RepresentativeFieldID *id.DatasetSchemaFieldID `json:"representativeFieldId"` } type AddLayerGroupPayload struct { diff --git a/internal/adapter/graphql/scalar.go b/internal/adapter/graphql/scalar.go index 928b2530..b6d355e8 100644 --- a/internal/adapter/graphql/scalar.go +++ b/internal/adapter/graphql/scalar.go @@ -129,6 +129,19 @@ func UnmarshalPropertySchemaFieldID(v interface{}) (id.PropertySchemaFieldID, er return id.PropertySchemaFieldID(""), errors.New("invalid ID") } +func MarshalDatasetSchemaFieldID(t id.DatasetSchemaFieldID) graphql1.Marshaler { + return graphql1.WriterFunc(func(w io.Writer) { + _, _ = io.WriteString(w, strconv.Quote(t.String())) + }) +} + +func UnmarshalDatasetSchemaFieldID(v interface{}) (id.DatasetSchemaFieldID, error) { + if tmpStr, ok := v.(string); ok { + return id.DatasetSchemaFieldIDFrom(tmpStr) + } + return id.NewDatasetSchemaFieldID(), errors.New("invalid ID") +} + func MarshalMap(val map[string]string) graphql1.Marshaler { return graphql1.WriterFunc(func(w io.Writer) { _ = json.NewEncoder(w).Encode(val) diff --git a/internal/graphql/generated.go b/internal/graphql/generated.go index ba724c44..f7552350 100644 --- a/internal/graphql/generated.go +++ b/internal/graphql/generated.go @@ -5531,6 +5531,7 @@ scalar PluginExtensionID scalar PropertySchemaID scalar PropertySchemaFieldID scalar TranslatedString +scalar DatasetSchemaFieldID type LatLng { lat: Float! @@ -6501,6 +6502,7 @@ input AddLayerGroupInput { index: Int linkedDatasetSchemaID: ID name: String + representativeFieldId: DatasetSchemaFieldID } input RemoveLayerInput { @@ -28983,6 +28985,14 @@ func (ec *executionContext) unmarshalInputAddLayerGroupInput(ctx context.Context if err != nil { return it, err } + case "representativeFieldId": + var err error + + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("representativeFieldId")) + it.RepresentativeFieldID, err = ec.unmarshalODatasetSchemaFieldID2ᚖgithubᚗcomᚋreearthᚋreearthᚑbackendᚋpkgᚋidᚐDatasetSchemaFieldID(ctx, v) + if err != nil { + return it, err + } } } @@ -39644,6 +39654,21 @@ func (ec *executionContext) marshalODatasetSchemaField2ᚖgithubᚗcomᚋreearth return ec._DatasetSchemaField(ctx, sel, v) } +func (ec *executionContext) unmarshalODatasetSchemaFieldID2ᚖgithubᚗcomᚋreearthᚋreearthᚑbackendᚋpkgᚋidᚐDatasetSchemaFieldID(ctx context.Context, v interface{}) (*id.DatasetSchemaFieldID, error) { + if v == nil { + return nil, nil + } + res, err := graphql1.UnmarshalDatasetSchemaFieldID(v) + return &res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalODatasetSchemaFieldID2ᚖgithubᚗcomᚋreearthᚋreearthᚑbackendᚋpkgᚋidᚐDatasetSchemaFieldID(ctx context.Context, sel ast.SelectionSet, v *id.DatasetSchemaFieldID) graphql.Marshaler { + if v == nil { + return graphql.Null + } + return graphql1.MarshalDatasetSchemaFieldID(*v) +} + func (ec *executionContext) unmarshalODateTime2ᚖtimeᚐTime(ctx context.Context, v interface{}) (*time.Time, error) { if v == nil { return nil, nil diff --git a/internal/usecase/interactor/layer.go b/internal/usecase/interactor/layer.go index 79d7a020..6558c069 100644 --- a/internal/usecase/interactor/layer.go +++ b/internal/usecase/interactor/layer.go @@ -354,7 +354,13 @@ func (i *Layer) AddGroup(ctx context.Context, inp interfaces.AddLayerGroupInput, } // create item layers - representativeFieldID := datasetSchema.RepresentativeFieldID() + var representativeFieldID *id.DatasetSchemaFieldID + if inp.RepresentativeFieldId != nil { + representativeFieldID = inp.RepresentativeFieldId + } else { + representativeFieldID = datasetSchema.RepresentativeFieldID() + } + layerItems := make([]*layer.Item, 0, len(ds)) layerItemProperties := make([]*property.Property, 0, len(ds)) index := -1 diff --git a/internal/usecase/interfaces/layer.go b/internal/usecase/interfaces/layer.go index 44967111..9be04c60 100644 --- a/internal/usecase/interfaces/layer.go +++ b/internal/usecase/interfaces/layer.go @@ -28,6 +28,7 @@ type AddLayerGroupInput struct { ExtensionID *id.PluginExtensionID Index *int LinkedDatasetSchemaID *id.DatasetSchemaID + RepresentativeFieldId *id.DatasetSchemaFieldID Name string } diff --git a/schema.graphql b/schema.graphql index 9f052898..749e82cb 100644 --- a/schema.graphql +++ b/schema.graphql @@ -25,6 +25,7 @@ scalar PluginExtensionID scalar PropertySchemaID scalar PropertySchemaFieldID scalar TranslatedString +scalar DatasetSchemaFieldID type LatLng { lat: Float! @@ -995,6 +996,7 @@ input AddLayerGroupInput { index: Int linkedDatasetSchemaID: ID name: String + representativeFieldId: DatasetSchemaFieldID } input RemoveLayerInput {