forked from WEB-IB-SS26/development-ib
138 lines
2.0 KiB
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
|
|
}
|