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:
parent
7f19df6f6b
commit
aac5b3e83c
4 changed files with 24 additions and 33 deletions
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue