1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-07 21:47:02 +09:00

Change object creation logic

This commit is contained in:
mcrakhman 2023-01-05 12:45:50 +01:00 committed by Mikhail Iudin
parent 7f19df6f6b
commit aac5b3e83c
No known key found for this signature in database
GPG key ID: FAAAA8BAABDFF1C0
4 changed files with 24 additions and 33 deletions

View file

@ -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) {

View file

@ -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
}

View file

@ -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)
}

View file

@ -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) {