Add Build method to document
This commit is contained in:
parent
1ed6a6f7da
commit
2bd5bf742d
@ -13,12 +13,16 @@ type AccountData struct {
|
|||||||
type Document struct {
|
type Document struct {
|
||||||
thread threadmodels.Thread
|
thread threadmodels.Thread
|
||||||
stateProvider InitialStateProvider
|
stateProvider InitialStateProvider
|
||||||
accountData AccountData
|
accountData *AccountData
|
||||||
decoder threadmodels.SigningPubKeyDecoder
|
decoder threadmodels.SigningPubKeyDecoder
|
||||||
aclTree *Tree
|
|
||||||
fullTree *Tree
|
treeBuilder *TreeBuilder
|
||||||
aclTreeBuilder *ACLTreeBuilder
|
aclTreeBuilder *ACLTreeBuilder
|
||||||
aclStateBuilder *ACLStateBuilder
|
aclStateBuilder *ACLStateBuilder
|
||||||
|
snapshotValidator *SnapshotValidator
|
||||||
|
docStateBuilder *documentStateBuilder
|
||||||
|
|
||||||
|
docContext *documentContext
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateResult int
|
type UpdateResult int
|
||||||
@ -33,12 +37,19 @@ const (
|
|||||||
func NewDocument(
|
func NewDocument(
|
||||||
thread threadmodels.Thread,
|
thread threadmodels.Thread,
|
||||||
stateProvider InitialStateProvider,
|
stateProvider InitialStateProvider,
|
||||||
accountData AccountData) *Document {
|
accountData *AccountData) *Document {
|
||||||
|
decoder := threadmodels.NewEd25519Decoder()
|
||||||
return &Document{
|
return &Document{
|
||||||
thread: thread,
|
thread: thread,
|
||||||
stateProvider: stateProvider,
|
stateProvider: stateProvider,
|
||||||
accountData: accountData,
|
accountData: accountData,
|
||||||
decoder: threadmodels.NewEd25519Decoder(),
|
decoder: decoder,
|
||||||
|
aclTreeBuilder: NewACLTreeBuilder(thread, decoder),
|
||||||
|
treeBuilder: NewTreeBuilder(thread, decoder),
|
||||||
|
snapshotValidator: NewSnapshotValidator(decoder, accountData),
|
||||||
|
aclStateBuilder: NewACLStateBuilder(decoder, accountData),
|
||||||
|
docStateBuilder: newDocumentStateBuilder(stateProvider),
|
||||||
|
docContext: &documentContext{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,10 +58,51 @@ func (d *Document) Update(changes []*pb.ACLChange) (DocumentState, UpdateResult,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Document) Build() (DocumentState, error) {
|
func (d *Document) Build() (DocumentState, error) {
|
||||||
//treeBuilder := NewTreeBuilder(d.thread, threadmodels.NewEd25519Decoder())
|
return d.build(false)
|
||||||
|
}
|
||||||
|
|
||||||
//return treeBuilder.Build(fromStart)
|
func (d *Document) build(fromStart bool) (DocumentState, error) {
|
||||||
return nil, nil
|
d.treeBuilder.Init()
|
||||||
|
d.aclTreeBuilder.Init()
|
||||||
|
|
||||||
|
var err error
|
||||||
|
d.docContext.fullTree, err = d.treeBuilder.Build(fromStart)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
d.docContext.aclTree, err = d.aclTreeBuilder.Build()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !fromStart {
|
||||||
|
d.snapshotValidator.Init(d.docContext.aclTree)
|
||||||
|
valid, err := d.snapshotValidator.ValidateSnapshot(d.docContext.fullTree.root)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if !valid {
|
||||||
|
return d.build(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = d.aclStateBuilder.Init(d.docContext.fullTree)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
d.docContext.aclState, err = d.aclStateBuilder.Build()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
d.docStateBuilder.init(d.docContext.aclState, d.docContext.fullTree)
|
||||||
|
d.docContext.docState, err = d.docStateBuilder.build()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return d.docContext.docState, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Document) State() DocumentState {
|
func (d *Document) State() DocumentState {
|
||||||
|
|||||||
@ -1,32 +1,8 @@
|
|||||||
package data
|
package data
|
||||||
|
|
||||||
import "github.com/anytypeio/go-anytype-infrastructure-experiments/data/threadmodels"
|
|
||||||
|
|
||||||
type documentContext struct {
|
type documentContext struct {
|
||||||
aclTree *Tree
|
aclTree *Tree
|
||||||
fullTree *Tree
|
fullTree *Tree
|
||||||
identity string
|
|
||||||
encryptionKey threadmodels.EncryptionPrivKey
|
|
||||||
decoder threadmodels.SigningPubKeyDecoder
|
|
||||||
aclState *ACLState
|
aclState *ACLState
|
||||||
docState DocumentState
|
docState DocumentState
|
||||||
changeCache map[string]*Change
|
|
||||||
identityKeys map[string]threadmodels.SigningPubKey
|
|
||||||
}
|
|
||||||
|
|
||||||
func newDocumentContext(
|
|
||||||
identity string,
|
|
||||||
encryptionKey threadmodels.EncryptionPrivKey,
|
|
||||||
decoder threadmodels.SigningPubKeyDecoder) *documentContext {
|
|
||||||
return &documentContext{
|
|
||||||
aclTree: &Tree{},
|
|
||||||
fullTree: &Tree{},
|
|
||||||
identity: identity,
|
|
||||||
encryptionKey: encryptionKey,
|
|
||||||
decoder: decoder,
|
|
||||||
aclState: nil,
|
|
||||||
docState: nil,
|
|
||||||
changeCache: make(map[string]*Change),
|
|
||||||
identityKeys: make(map[string]threadmodels.SigningPubKey),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user