package main import ( "encoding/json" "os" ) // TODO: Task repräsentiert eine einzelne To-Do-Aufgabe mit ID, Titel und Status. // Tipp: struct verwenden type Task struct { ID int `json:"id"` Title string `json:"title"` Done bool `json:"done"` } // TODO: TaskList enthält eine Liste von Aufgaben (Tasks). type TaskList struct { Tasks []Task `json:"tasks"` } // TODO: Fügt einen neuen Task mit übergebenen Titel in die Liste ein. // Die neue ID entspricht der Anzahl der Elemente in der Liste. (ok, weil keine Tasks gelöscht werden) func (tl *TaskList) Add(title string) { id := len(tl.Tasks) + 1 newTask := Task{ID: id, Title: title, Done: false} tl.Tasks = append(tl.Tasks, newTask) } // TODO: Setzt vorhandenen Task mit übergebener ID auf den Status done. // Annahme: Wir wissen nicht, wie ID erstellt wird. func (tl *TaskList) Complete(id int) { for i := range tl.Tasks { if tl.Tasks[i].ID == id { tl.Tasks[i].Done = true } } } // Liste wird im JSON-Format in einer Datei mit übergebenen Dateinamen gespeichert func (tl *TaskList) Save(filename string) error { data, err := json.MarshalIndent(tl, "", " ") if err != nil { return err } return os.WriteFile(filename, data, 0644) } // TODO: Lädt eine Liste von Tasks aus einer JSON-Datei (Dateiname als Parameter übergeben) // Falls die Datei noch nicht existiert, wird eine leere Liste (neu) zurückgegeben // Tipp 1: Einlesen einer Datei: os.ReadFile(filename) // Tipp 2: JSON-Daten in TaskList-Struktur umwandeln: json.Unmarshal(data, &tl) func LoadTasks(filename string) (*TaskList, error) { data, err := os.ReadFile(filename) if err != nil { return &TaskList{}, nil } var tl TaskList jsonErr := json.Unmarshal(data, &tl) return &tl, jsonErr }