-
Notifications
You must be signed in to change notification settings - Fork 1
/
core.gno
71 lines (59 loc) · 1.76 KB
/
core.gno
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// base implementation
package zentasktic
import (
"strconv"
"gno.land/p/demo/avl"
)
// holding the path of an object since creation
// each time we move an object from one realm to another, we add to its path
type ObjectPath struct {
ObjectType string `json:"objectType"` // Task, Project
Id string `json:"id"` // this is the Id of the object moved, Task, Project
RealmId string `json:"realmId"`
}
type ZObjectPathManager struct {
Paths avl.Tree
PathId int
}
func NewZObjectPathManager() *ZObjectPathManager {
return &ZObjectPathManager{
Paths: *avl.NewTree(),
PathId: 1,
}
}
func (zopm *ZObjectPathManager) AddPath(o ObjectPath) error {
zopm.PathId++
updated := zopm.Paths.Set(strconv.Itoa(zopm.PathId), o)
if !updated {
return ErrObjectPathNotUpdated
}
return nil
}
func (zopm *ZObjectPathManager) GetObjectJourney(objectType string, objectId string) (string, error) {
var objectPaths []ObjectPath
// Iterate over the Paths AVL tree to collect all ObjectPath objects.
zopm.Paths.Iterate("", "", func(key string, value interface{}) bool {
if objectPath, ok := value.(ObjectPath); ok {
if objectPath.ObjectType == objectType && objectPath.Id == objectId {
objectPaths = append(objectPaths, objectPath)
}
}
return false // Continue iteration until all nodes have been visited.
})
// Create an ObjectJourney with all collected paths.
objectJourney := &ObjectJourney{
ObjectPaths: objectPaths,
}
// Use the custom MarshalJSON method to marshal the journey into JSON.
marshalledJourney, merr := objectJourney.MarshalJSON()
if merr != nil {
return "", merr
}
return string(marshalledJourney), nil
}
// GetZenStatus
/* todo: leave it to the client
func () GetZenStatus() (zenStatus string, err error) {
// implementation
}
*/