lab-development-imb/web/07/demos/taskmanager/task.go

61 lines
1.7 KiB
Go

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
}