mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-08 05:57:03 +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 {
|
type TreeCache interface {
|
||||||
treegetter.TreeGetter
|
treegetter.TreeGetter
|
||||||
treegetter.TreePutter
|
|
||||||
GetDocument(ctx context.Context, spaceId, id string) (doc textdocument.TextDocument, err error)
|
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 {
|
type updateListener struct {
|
||||||
|
@ -117,14 +117,22 @@ func (c *treeCache) GetTree(ctx context.Context, spaceId, id string) (tr objectt
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *treeCache) PutTree(ctx context.Context, spaceId string, payload treestorage.TreeStorageCreatePayload) (ot objecttree.ObjectTree, err error) {
|
func (c *treeCache) CreateDocument(ctx context.Context, spaceId string, payload objecttree.ObjectTreeCreatePayload) (ot textdocument.TextDocument, err error) {
|
||||||
ctx = context.WithValue(ctx, spaceKey, spaceId)
|
space, err := c.clientService.GetSpace(ctx, spaceId)
|
||||||
ctx = context.WithValue(ctx, treeCreateKey, payload)
|
|
||||||
v, err := c.cache.Get(ctx, payload.RootRawChange.Id)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
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) {
|
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(),
|
SpaceId: space.Id(),
|
||||||
Identity: s.account.Account().Identity,
|
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 {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
id = tree.Id()
|
id = doc.Id()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/app"
|
"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/objecttree"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const CName = "common.object.treegetter"
|
const CName = "common.object.treegetter"
|
||||||
|
@ -15,7 +14,3 @@ type TreeGetter interface {
|
||||||
GetTree(ctx context.Context, spaceId, treeId string) (objecttree.ObjectTree, error)
|
GetTree(ctx context.Context, spaceId, treeId string) (objecttree.ObjectTree, error)
|
||||||
DeleteTree(ctx context.Context, spaceId, treeId string) 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
|
SpaceSyncRpc() RpcHandler
|
||||||
|
|
||||||
DeriveTree(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) (objecttree.ObjectTree, 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)
|
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)
|
BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (objecttree.ObjectTree, error)
|
||||||
DeleteTree(ctx context.Context, id string) (err error)
|
DeleteTree(ctx context.Context, id string) (err error)
|
||||||
|
@ -230,51 +230,39 @@ func (s *space) DebugAllHeads() []headsync.TreeHeads {
|
||||||
return s.headSync.DebugAllHeads()
|
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() {
|
if s.isClosed.Load() {
|
||||||
err = ErrSpaceClosed
|
err = ErrSpaceClosed
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
treePutter, conforms := s.cache.(treegetter.TreePutter)
|
|
||||||
if !conforms {
|
|
||||||
err = ErrPutNotImplemented
|
|
||||||
return
|
|
||||||
}
|
|
||||||
root, err := objecttree.DeriveObjectTreeRoot(payload, s.aclList)
|
root, err := objecttree.DeriveObjectTreeRoot(payload, s.aclList)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
res := treestorage.TreeStorageCreatePayload{
|
res = treestorage.TreeStorageCreatePayload{
|
||||||
RootRawChange: root,
|
RootRawChange: root,
|
||||||
Changes: []*treechangeproto.RawTreeChangeWithId{root},
|
Changes: []*treechangeproto.RawTreeChangeWithId{root},
|
||||||
Heads: []string{root.Id},
|
Heads: []string{root.Id},
|
||||||
}
|
}
|
||||||
// here we must be sure that the object is created synchronously,
|
return
|
||||||
// so there won't be any conflicts, therefore we do it through cache
|
|
||||||
return treePutter.PutTree(ctx, s.id, res)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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() {
|
if s.isClosed.Load() {
|
||||||
err = ErrSpaceClosed
|
err = ErrSpaceClosed
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
treePutter, conforms := s.cache.(treegetter.TreePutter)
|
|
||||||
if !conforms {
|
|
||||||
err = ErrPutNotImplemented
|
|
||||||
return
|
|
||||||
}
|
|
||||||
root, err := objecttree.CreateObjectTreeRoot(payload, s.aclList)
|
root, err := objecttree.CreateObjectTreeRoot(payload, s.aclList)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
res := treestorage.TreeStorageCreatePayload{
|
res = treestorage.TreeStorageCreatePayload{
|
||||||
RootRawChange: root,
|
RootRawChange: root,
|
||||||
Changes: []*treechangeproto.RawTreeChangeWithId{root},
|
Changes: []*treechangeproto.RawTreeChangeWithId{root},
|
||||||
Heads: []string{root.Id},
|
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) {
|
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