forked from WEB-IMB-WS2526/lab-development-imb
61 lines
1.7 KiB
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
|
|
}
|