diff --git a/client/clientspace/clientcache/treecache.go b/client/clientspace/clientcache/treecache.go index cd3b9450..7304ed54 100644 --- a/client/clientspace/clientcache/treecache.go +++ b/client/clientspace/clientcache/treecache.go @@ -35,8 +35,8 @@ type treeCache struct { type TreeCache interface { treegetter.TreeGetter - treegetter.TreePutter GetDocument(ctx context.Context, spaceId, id string) (doc textdocument.TextDocument, err error) + CreateDocument(ctx context.Context, spaceId string, payload objecttree.ObjectTreeCreatePayload) (ot textdocument.TextDocument, err error) } type updateListener struct { @@ -117,14 +117,22 @@ func (c *treeCache) GetTree(ctx context.Context, spaceId, id string) (tr objectt return } -func (c *treeCache) PutTree(ctx context.Context, spaceId string, payload treestorage.TreeStorageCreatePayload) (ot objecttree.ObjectTree, err error) { - ctx = context.WithValue(ctx, spaceKey, spaceId) - ctx = context.WithValue(ctx, treeCreateKey, payload) - v, err := c.cache.Get(ctx, payload.RootRawChange.Id) +func (c *treeCache) CreateDocument(ctx context.Context, spaceId string, payload objecttree.ObjectTreeCreatePayload) (ot textdocument.TextDocument, err error) { + space, err := c.clientService.GetSpace(ctx, spaceId) if err != nil { return } - return v.(objecttree.ObjectTree), nil + create, err := space.CreateTree(context.Background(), payload) + if err != nil { + return + } + ctx = context.WithValue(ctx, spaceKey, spaceId) + ctx = context.WithValue(ctx, treeCreateKey, create) + v, err := c.cache.Get(ctx, create.RootRawChange.Id) + if err != nil { + return + } + return v.(textdocument.TextDocument), nil } func (c *treeCache) DeleteTree(ctx context.Context, spaceId, treeId string) (err error) { diff --git a/client/document/service.go b/client/document/service.go index 7b6004aa..600ad111 100644 --- a/client/document/service.go +++ b/client/document/service.go @@ -58,11 +58,11 @@ func (s *service) CreateDocument(spaceId string) (id string, err error) { SpaceId: space.Id(), Identity: s.account.Account().Identity, } - tree, err := space.CreateTree(context.Background(), payload) + doc, err := s.cache.CreateDocument(context.Background(), space.Id(), payload) if err != nil { return } - id = tree.Id() + id = doc.Id() return } diff --git a/common/commonspace/object/treegetter/treegetter.go b/common/commonspace/object/treegetter/treegetter.go index 8f2d7cd6..8b3ba472 100644 --- a/common/commonspace/object/treegetter/treegetter.go +++ b/common/commonspace/object/treegetter/treegetter.go @@ -5,7 +5,6 @@ import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage" ) const CName = "common.object.treegetter" @@ -15,7 +14,3 @@ type TreeGetter interface { GetTree(ctx context.Context, spaceId, treeId string) (objecttree.ObjectTree, error) DeleteTree(ctx context.Context, spaceId, treeId string) error } - -type TreePutter interface { - PutTree(ctx context.Context, spaceId string, payload treestorage.TreeStorageCreatePayload) (objecttree.ObjectTree, error) -} diff --git a/common/commonspace/space.go b/common/commonspace/space.go index 08170653..ee863d16 100644 --- a/common/commonspace/space.go +++ b/common/commonspace/space.go @@ -81,8 +81,8 @@ type Space interface { SpaceSyncRpc() RpcHandler - DeriveTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (objecttree.ObjectTree, error) - CreateTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (objecttree.ObjectTree, error) + DeriveTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (res treestorage.TreeStorageCreatePayload, err error) + CreateTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (res treestorage.TreeStorageCreatePayload, err error) PutTree(ctx context.Context, payload treestorage.TreeStorageCreatePayload, listener updatelistener.UpdateListener) (t objecttree.ObjectTree, err error) BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (objecttree.ObjectTree, error) DeleteTree(ctx context.Context, id string) (err error) @@ -230,51 +230,39 @@ func (s *space) DebugAllHeads() []headsync.TreeHeads { return s.headSync.DebugAllHeads() } -func (s *space) DeriveTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (t objecttree.ObjectTree, err error) { +func (s *space) DeriveTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (res treestorage.TreeStorageCreatePayload, err error) { if s.isClosed.Load() { err = ErrSpaceClosed return } - treePutter, conforms := s.cache.(treegetter.TreePutter) - if !conforms { - err = ErrPutNotImplemented - return - } root, err := objecttree.DeriveObjectTreeRoot(payload, s.aclList) if err != nil { return } - res := treestorage.TreeStorageCreatePayload{ + res = treestorage.TreeStorageCreatePayload{ RootRawChange: root, Changes: []*treechangeproto.RawTreeChangeWithId{root}, Heads: []string{root.Id}, } - // here we must be sure that the object is created synchronously, - // so there won't be any conflicts, therefore we do it through cache - return treePutter.PutTree(ctx, s.id, res) + return } -func (s *space) CreateTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (t objecttree.ObjectTree, err error) { +func (s *space) CreateTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (res treestorage.TreeStorageCreatePayload, err error) { if s.isClosed.Load() { err = ErrSpaceClosed return } - treePutter, conforms := s.cache.(treegetter.TreePutter) - if !conforms { - err = ErrPutNotImplemented - return - } root, err := objecttree.CreateObjectTreeRoot(payload, s.aclList) if err != nil { return } - res := treestorage.TreeStorageCreatePayload{ + res = treestorage.TreeStorageCreatePayload{ RootRawChange: root, Changes: []*treechangeproto.RawTreeChangeWithId{root}, Heads: []string{root.Id}, } - return treePutter.PutTree(ctx, s.id, res) + return } func (s *space) PutTree(ctx context.Context, payload treestorage.TreeStorageCreatePayload, listener updatelistener.UpdateListener) (t objecttree.ObjectTree, err error) {