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}