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

83 lines
2.0 KiB
Go

package main
import (
"fmt"
"os"
"strconv"
)
func main() {
// Frage: Was macht dieser Teil genau?
if len(os.Args) < 2 {
fmt.Println("Usage: add <task> | list | done <id>")
return
}
// Lädt alle Tasks aus JSON-Datei in eine Liste
// Gibt eine leere Liste zurück, falls die JSON-Datei noch nicht existiert
// Gibt Fehlermeldung vom Typ error zurück, falls etwas schief gelaufen ist
tasklist, err := LoadTasks("tasks.json")
// TODO: Fehlerbehandlung
if err != nil {
fmt.Println("Fehler beim Laden der JSON-Datei: " + err.Error())
}
// Je nach Kommandozeilenargument wird:
// - Task neu erstellt und zur Liste hinzugefügt (auch in JSON-Datei)
// - Alle Tasks aus der Liste ausgegeben inkl. Status ("✓" für done, sonst " ")
// - Task als done markiert und Ergebnis ausgegeben
switch os.Args[1] {
case "add":
// TODO: Prüfen, ob 3. Kommandozeilenargument für Title vorliegt
if len(os.Args) < 3 {
fmt.Println("Geben Sie einen Titel ein.")
return
}
// TODO: Task zur Liste hinzufügen
tasklist.Add(os.Args[2])
// TODO: Liste in JSON-Datei speichern
tasklist.Save("tasks.json")
// Ergebnis ausgeben
fmt.Println("Task added.")
case "list":
// TODO: Durch alle Tasks der Liste iterieren
for _, task := range tasklist.Tasks {
// TODO: Task-Status bestimmen und inklusive ID und Title ausgeben
status := " "
if task.Done {
status = "✓"
}
fmt.Printf("[%s] %d: %s\n", status, task.ID, task.Title)
}
case "done":
// TODO: Prüfen, ob 3. Kommandozeilenargument für ID vorliegen
if len(os.Args) < 3 {
fmt.Println("Geben Sie eine ID ein.")
return
}
// TODO: Prüfen, ob ID vom Typ integer, sonst Fehlermeldung und Abbruch
// Tipp: strconv.Atoi(string)
id, err := strconv.Atoi(os.Args[2])
if err != nil {
fmt.Println("Falsche Eingabe der ID")
return
}
// TODO: Task auf done setzen
tasklist.Complete(id)
// TODO: Taskliste in JSON-Datei speichern
tasklist.Save("tasks.json")
// Ergebnis ausgeben
fmt.Println("Task marked as done.")
}
}