todolist.gno
0.99 Kb ยท 63 lines
1package todolist
2
3import (
4 "std"
5 "strconv"
6
7 "gno.land/p/demo/avl"
8)
9
10type TodoList struct {
11 Title string
12 Tasks *avl.Tree
13 Owner std.Address
14}
15
16type Task struct {
17 Title string
18 Done bool
19}
20
21func NewTodoList(title string) *TodoList {
22 return &TodoList{
23 Title: title,
24 Tasks: avl.NewTree(),
25 Owner: std.OriginCaller(),
26 }
27}
28
29func NewTask(title string) *Task {
30 return &Task{
31 Title: title,
32 Done: false,
33 }
34}
35
36func (tl *TodoList) AddTask(id int, task *Task) {
37 tl.Tasks.Set(strconv.Itoa(id), task)
38}
39
40func ToggleTaskStatus(task *Task) {
41 task.Done = !task.Done
42}
43
44func (tl *TodoList) RemoveTask(taskId string) {
45 tl.Tasks.Remove(taskId)
46}
47
48func (tl *TodoList) GetTasks() []*Task {
49 tasks := make([]*Task, 0, tl.Tasks.Size())
50 tl.Tasks.Iterate("", "", func(key string, value any) bool {
51 tasks = append(tasks, value.(*Task))
52 return false
53 })
54 return tasks
55}
56
57func (tl *TodoList) GetTodolistOwner() std.Address {
58 return tl.Owner
59}
60
61func (tl *TodoList) GetTodolistTitle() string {
62 return tl.Title
63}