diff --git a/service/api/service.go b/service/api/service.go index 44be8430..7b2a8986 100644 --- a/service/api/service.go +++ b/service/api/service.go @@ -38,6 +38,12 @@ func (s *service) Name() (name string) { } func (s *service) Run(ctx context.Context) (err error) { + defer func() { + if err == nil { + log.Info("api server started running on port 8080") + } + }() + s.srv = &http.Server{ Addr: ":8080", } @@ -47,7 +53,15 @@ func (s *service) Run(ctx context.Context) (err error) { mux.HandleFunc("/appendDocument", s.appendDocument) s.srv.Handler = mux - return s.srv.ListenAndServe() + go s.runServer() + return nil +} + +func (s *service) runServer() { + err := s.srv.ListenAndServe() + if err != nil { + log.With(zap.Error(err)).Error("could not run api server") + } } func (s *service) Close(ctx context.Context) (err error) { diff --git a/service/sync/document/service.go b/service/sync/document/service.go index 24843a25..747d5006 100644 --- a/service/sync/document/service.go +++ b/service/sync/document/service.go @@ -3,23 +3,30 @@ package document import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/aclchanges/aclpb" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/acltree" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/testutils/testchanges/testchangepb" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage/treepb" "github.com/anytypeio/go-anytype-infrastructure-experiments/service/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/service/node" "github.com/anytypeio/go-anytype-infrastructure-experiments/service/sync/message" "github.com/anytypeio/go-anytype-infrastructure-experiments/service/sync/syncpb" "github.com/anytypeio/go-anytype-infrastructure-experiments/service/treecache" "github.com/gogo/protobuf/proto" + "go.uber.org/zap" ) var CName = "DocumentService" +var log = logger.NewNamed("documentservice") + type service struct { messageService message.Service treeCache treecache.Service account account.Service + // to create new documents we need to know all nodes + nodes []*node.Node } type Service interface { @@ -35,6 +42,10 @@ func (s *service) Init(ctx context.Context, a *app.App) (err error) { s.account = a.MustComponent(account.CName).(account.Service) s.messageService = a.MustComponent(message.CName).(message.Service) s.treeCache = a.MustComponent(treecache.CName).(treecache.Service) + + nodesService := a.MustComponent(node.CName).(node.Service) + s.nodes = nodesService.Nodes() + return nil } @@ -57,6 +68,8 @@ func (s *service) UpdateDocument(ctx context.Context, id, text string) (err erro snapshotPath []string heads []string ) + log.With(zap.String("id", id), zap.String("text", text)). + Debug("updating document") err = s.treeCache.Do(ctx, id, func(tree acltree.ACLTree) error { ch, err = tree.AddContent(ctx, func(builder acltree.ChangeBuilder) error { @@ -99,12 +112,22 @@ func (s *service) CreateDocument(ctx context.Context, text string) (id string, e snapshotPath []string heads []string ) + log.With(zap.String("id", id), zap.String("text", text)). + Debug("creating document") err = s.treeCache.Create(ctx, func(builder acltree.ChangeBuilder) error { err := builder.UserAdd(acc.Identity, acc.EncKey.GetPublic(), aclpb.ACLChange_Admin) if err != nil { return err } + // adding all predefined nodes to the document as admins + for _, n := range s.nodes { + err = builder.UserAdd(n.SigningKeyString, n.EncryptionKey, aclpb.ACLChange_Admin) + if err != nil { + return err + } + } + builder.AddChangeContent(createInitialChangeContent(text)) return nil }, func(tree acltree.ACLTree) error { diff --git a/service/treecache/service.go b/service/treecache/service.go index 85e370fe..78985a68 100644 --- a/service/treecache/service.go +++ b/service/treecache/service.go @@ -3,12 +3,14 @@ package treecache import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/aclchanges/aclpb" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/acltree" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage/treepb" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/ocache" "github.com/anytypeio/go-anytype-infrastructure-experiments/service/account" + "go.uber.org/zap" ) const CName = "treecache" @@ -16,6 +18,8 @@ const CName = "treecache" type ACLTreeFunc = func(tree acltree.ACLTree) error type ChangeBuildFunc = func(builder acltree.ChangeBuilder) error +var log = logger.NewNamed("treecache") + type Service interface { Do(ctx context.Context, treeId string, f ACLTreeFunc) error Add(ctx context.Context, treeId string, header *treepb.TreeHeader, changes []*aclpb.RawChange, f ACLTreeFunc) error @@ -48,6 +52,10 @@ func (s *service) Create(ctx context.Context, build ChangeBuildFunc, f ACLTreeFu } func (s *service) Do(ctx context.Context, treeId string, f ACLTreeFunc) error { + log. + With(zap.String("treeId", treeId)). + Debug("requesting tree from cache to perform operation") + tree, err := s.cache.Get(ctx, treeId) defer s.cache.Release(treeId) if err != nil { @@ -60,6 +68,10 @@ func (s *service) Do(ctx context.Context, treeId string, f ACLTreeFunc) error { } func (s *service) Add(ctx context.Context, treeId string, header *treepb.TreeHeader, changes []*aclpb.RawChange, f ACLTreeFunc) error { + log. + With(zap.String("treeId", treeId)). + Debug("adding tree with changes") + _, err := s.treeProvider.CreateTreeStorage(treeId, header, changes) if err != nil { return err