package common import ( "encoding/json" "fmt" "strings" "time" ) func (todo Todo) Store(store *BoltStore, user string) error { if todo.Owner != user { return fmt.Errorf("unauthorized user") } todo.LastModified = time.Now() todoJson, err := json.Marshal(todo) if err != nil { return err } return store.SaveValueToBucket(user, todo.Name, string(todoJson)) } func (todoRequest StoreTodoRequest) Store(store *BoltStore, user string) error { todo := Todo{ Name: todoRequest.Name, Description: todoRequest.Description, Status: todoRequest.Status, Owner: user, LastModified: time.Now(), } todoJson, err := json.Marshal(todo) if err != nil { return err } return store.SaveValueToBucket(user, todo.Name, string(todoJson)) } func (todoList TodoList) FindByName(name string) (Todo, bool) { for _, todo := range todoList.Todos { if todo.Name == name { return todo, true } } return Todo{}, false } func (todo Todo) PrintIndexed(index int) { if todo.Deleted { return } var statusColor string // Select color based on the status (case-insensitive) switch strings.ToLower(todo.Status) { case Done: statusColor = ColorGreen case WIP: statusColor = ColorYellow case Pending, NotStarted: statusColor = ColorBlue case Blocked, Failed: statusColor = ColorRed default: statusColor = ColorReset // No color for unknown statuses } lastMod := todo.LastModified.Format("2006-01-02 15:04") fmt.Printf("%d) %s - %s%s%s\n", index, todo.Name, statusColor, strings.ToUpper(todo.Status), ColorReset) fmt.Printf("\t%s\n", todo.Description) fmt.Printf("\t%sLast Modified: %s%s\n", ColorReset, lastMod, ColorReset) } func (t Todo) IsEqual(other Todo) bool { return t.Name == other.Name && t.Description == other.Description && t.Status == other.Status && t.Owner == other.Owner && t.Deleted == other.Deleted }