development-ib-fork/web/06/eigene_loesungen/Aufgabe_02/book.go

138 lines
2.0 KiB
Go

package main
import (
"encoding/json"
"fmt"
"os"
)
type Book struct {
Title string `json:"title"`
Author string `json:"author"`
Read bool `json:"read"`
ID int `json:"id"`
}
func addBook(title string, author string) error {
fmt.Println("add...")
books, err := readJson()
if err != nil {
return err
}
var newID int
if len(books) == 0 {
newID = 1
} else {
last := books[len(books)-1]
newID = last.ID + 1
}
newBook := Book{Title: title, Author: author, Read: false, ID: newID}
books = append(books, newBook)
erro := writeJson(books)
if erro != nil {
return erro
}
return nil
}
func listBooks() error {
fmt.Println("list...")
books, err := readJson()
if err != nil {
return err
}
fmt.Println("Hier ist Ihre aktuelle Buchübersicht:\n")
for _, book := range books {
fmt.Println("Titel:", book.Title)
fmt.Println("Author:", book.Author)
fmt.Println("Gelesen:", book.Read)
fmt.Println("ID:", book.ID)
fmt.Println("============================================")
}
return nil
}
func markBook(id int) error {
books, err := readJson()
if err != nil {
return err
}
for i := 0; i < len(books); i++ {
if books[i].ID == id {
books[i].Read = true
erro := writeJson(books)
if erro != nil {
return erro
}
return nil
}
}
return fmt.Errorf("ID %d nicht gefunden!", id)
}
func readJson() ([]Book, error) {
fmt.Println("read json...")
data, err := os.ReadFile("books.json")
if err != nil {
return nil, err
}
var books []Book
err = json.Unmarshal(data, &books)
if err != nil {
fmt.Println(err)
return nil, err
}
return books, nil
}
func writeJson(books []Book) error {
data, err := json.MarshalIndent(books, "", " ")
if err != nil {
return err
}
return os.WriteFile("books.json", data, 0644)
}
func ensureFileExists() error {
_, err := os.Stat("books.json")
if os.IsNotExist(err) {
// Initialer Inhalt: leeres JSON-Array
initialData := []byte("[]")
return os.WriteFile("books.json", initialData, 0644)
}
return err
}