Skip to content
This repository has been archived by the owner on Aug 16, 2022. It is now read-only.

Commit

Permalink
feat: create tag group and tag item (#45)
Browse files Browse the repository at this point in the history
* tag item and group schema

* feat: creat tags (GQL schema)

* tag items and tag groups resolvers

* datalayer (dummy memory) and usecases

* receive list by reference

* check if nil for list

* resolve notes

* generate new models
  • Loading branch information
mimoham24 committed Sep 15, 2021
1 parent c5d7ab7 commit 9d2fcec
Show file tree
Hide file tree
Showing 17 changed files with 1,622 additions and 5 deletions.
1,182 changes: 1,182 additions & 0 deletions internal/adapter/gql/generated.go

Large diffs are not rendered by default.

34 changes: 34 additions & 0 deletions internal/adapter/gql/gqlmodel/convert_tag.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package gqlmodel

import (
"github.com/reearth/reearth-backend/pkg/id"
"github.com/reearth/reearth-backend/pkg/tag"
)

func ToTagItem(ti *tag.Item) *TagItem {
return &TagItem{
ID: ti.ID().ID(),
SceneID: ti.Scene().ID(),
Label: ti.Label(),
LinkedDatasetID: ti.LinkedDatasetID().IDRef(),
LinkedDatasetSchemaID: ti.LinkedDatasetSchemaID().IDRef(),
LinkedDatasetFieldID: ti.LinkedDatasetFieldID().IDRef(),
}
}

func ToTagGroup(tg *tag.Group) *TagGroup {
tags := tg.Tags()
tids := tags.Tags()
var ids []*id.ID
for _, tid := range tids {
if !tid.IsNil() {
ids = append(ids, tid.IDRef())
}
}
return &TagGroup{
ID: tg.ID().ID(),
SceneID: tg.Scene().ID(),
Label: tg.Label(),
Tags: ids,
}
}
55 changes: 55 additions & 0 deletions internal/adapter/gql/gqlmodel/models_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 45 additions & 0 deletions internal/adapter/gql/resolver_mutation_tag.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package gql

import (
"context"

"github.com/reearth/reearth-backend/internal/adapter/gql/gqlmodel"
"github.com/reearth/reearth-backend/internal/usecase/interfaces"
"github.com/reearth/reearth-backend/pkg/id"
)

func (r *mutationResolver) CreateTagItem(ctx context.Context, input gqlmodel.CreateTagItemInput) (*gqlmodel.CreateTagItemPayload, error) {
exit := trace(ctx)
defer exit()

tag, err := r.usecases.Tag.CreateItem(ctx, interfaces.CreateTagItemParam{
Label: input.Label,
SceneID: id.SceneID(input.SceneID),
LinkedDatasetSchemaID: id.DatasetSchemaIDFromRefID(input.LinkedDatasetSchemaID),
LinkedDatasetID: id.DatasetIDFromRefID(input.LinkedDatasetID),
LinkedDatasetField: id.DatasetSchemaFieldIDFromRefID(input.LinkedDatasetField),
}, getOperator(ctx))
if err != nil {
return nil, err
}
return &gqlmodel.CreateTagItemPayload{
Tag: gqlmodel.ToTagItem(tag),
}, nil
}

func (r *mutationResolver) CreateTagGroup(ctx context.Context, input gqlmodel.CreateTagGroupInput) (*gqlmodel.CreateTagGroupPayload, error) {
exit := trace(ctx)
defer exit()

tag, err := r.usecases.Tag.CreateGroup(ctx, interfaces.CreateTagGroupParam{
Label: input.Label,
SceneID: id.SceneID(input.SceneID),
Tags: id.TagIDsFromIDRef(input.Tags),
}, getOperator(ctx))
if err != nil {
return nil, err
}
return &gqlmodel.CreateTagGroupPayload{
Tag: gqlmodel.ToTagGroup(tag),
}, nil
}
45 changes: 45 additions & 0 deletions internal/adapter/gql/resolver_tag.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package gql

import (
"context"

"github.com/reearth/reearth-backend/internal/adapter/gql/gqlmodel"
"github.com/reearth/reearth-backend/pkg/id"
)

type tagItemResolver struct{ *Resolver }

func (r *Resolver) TagItem() TagItemResolver {
return &tagItemResolver{r}
}

func (t tagItemResolver) LinkedDatasetSchema(ctx context.Context, obj *gqlmodel.TagItem) (*gqlmodel.DatasetSchema, error) {
exit := trace(ctx)
defer exit()

if obj.LinkedDatasetID == nil {
return nil, nil
}
return DataLoadersFromContext(ctx).DatasetSchema.Load(id.DatasetSchemaID(*obj.LinkedDatasetSchemaID))
}

func (t tagItemResolver) LinkedDataset(ctx context.Context, obj *gqlmodel.TagItem) (*gqlmodel.Dataset, error) {
exit := trace(ctx)
defer exit()

if obj.LinkedDatasetID == nil {
return nil, nil
}
return DataLoadersFromContext(ctx).Dataset.Load(id.DatasetID(*obj.LinkedDatasetID))
}

func (t tagItemResolver) LinkedDatasetField(ctx context.Context, obj *gqlmodel.TagItem) (*gqlmodel.DatasetField, error) {
exit := trace(ctx)
defer exit()

if obj.LinkedDatasetID == nil {
return nil, nil
}
ds, err := DataLoadersFromContext(ctx).Dataset.Load(id.DatasetID(*obj.LinkedDatasetID))
return ds.Field(*obj.LinkedDatasetFieldID), err
}
1 change: 1 addition & 0 deletions internal/infrastructure/memory/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ func InitRepos(c *repo.Container) *repo.Container {
c.PropertySchema = NewPropertySchema()
c.Property = NewProperty()
c.Scene = NewScene()
c.Tag = NewTag()
c.Team = NewTeam()
c.User = NewUser()
c.SceneLock = NewSceneLock()
Expand Down
68 changes: 68 additions & 0 deletions internal/infrastructure/memory/tag.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package memory

import (
"context"

"github.com/reearth/reearth-backend/internal/usecase/repo"
"github.com/reearth/reearth-backend/pkg/id"
"github.com/reearth/reearth-backend/pkg/tag"
)

type Tag struct {
//lock sync.Mutex
data map[id.TagID]tag.Tag
}

func NewTag() repo.Tag {
return &Tag{
data: map[id.TagID]tag.Tag{},
}
}

func (t Tag) FindByID(ctx context.Context, tagID id.TagID, ids []id.SceneID) (*tag.Tag, error) {
panic("implement me")
}

func (t Tag) FindByIDs(ctx context.Context, ids []id.TagID, ids2 []id.SceneID) ([]*tag.Tag, error) {
panic("implement me")
}

func (t Tag) FindItemByID(ctx context.Context, tagID id.TagID, ids []id.SceneID) (*tag.Item, error) {
panic("implement me")
}

func (t Tag) FindItemByIDs(ctx context.Context, ids []id.TagID, ids2 []id.SceneID) ([]*tag.Item, error) {
panic("implement me")
}

func (t Tag) FindGroupByID(ctx context.Context, tagID id.TagID, ids []id.SceneID) (*tag.Group, error) {
panic("implement me")
}

func (t Tag) FindGroupByIDs(ctx context.Context, ids []id.TagID, ids2 []id.SceneID) ([]*tag.Group, error) {
panic("implement me")
}

func (t Tag) FindByScene(ctx context.Context, sceneID id.SceneID) ([]*tag.Tag, error) {
panic("implement me")
}

func (t Tag) Save(ctx context.Context, t2 tag.Tag) error {
panic("implement me")
}

func (t Tag) SaveAll(ctx context.Context, tags []*tag.Tag) error {
panic("implement me")
}

func (t Tag) Remove(ctx context.Context, tagID id.TagID) error {
panic("implement me")
}

func (t Tag) RemoveAll(ctx context.Context, ids []id.TagID) error {
panic("implement me")
}

func (t Tag) RemoveByScene(ctx context.Context, sceneID id.SceneID) error {
panic("implement me")
}
1 change: 1 addition & 0 deletions internal/infrastructure/mongo/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ func InitRepos(ctx context.Context, c *repo.Container, mc *mongo.Client, databas
c.PropertySchema = NewPropertySchema(client)
c.Property = NewProperty(client)
c.Scene = NewScene(client)
c.Tag = NewTag(client)
c.Team = NewTeam(client)
c.User = NewUser(client)
c.SceneLock = NewSceneLock(client)
Expand Down
2 changes: 1 addition & 1 deletion internal/infrastructure/mongo/mongodoc/tag.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,6 @@ func (d *TagDocument) ModelGroup() (*tag.Group, error) {
ID(tid).
Label(d.Label).
Scene(sid).
Tags(*tag.NewListFromTags(ids)).
Tags(tag.NewListFromTags(ids)).
Build()
}
1 change: 1 addition & 0 deletions internal/usecase/interactor/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ func NewContainer(r *repo.Container, g *gateway.Container, config ContainerConfi
Project: NewProject(r, g),
Property: NewProperty(r, g),
Scene: NewScene(r, g),
Tag: NewTag(r),
Team: NewTeam(r),
User: NewUser(r, g, config.SignupSecret),
}
Expand Down

0 comments on commit 9d2fcec

Please sign in to comment.