package main import ( "bytes" "encoding/json" "errors" "fmt" "io" "net/http" ) type note struct { Id int64 `json:"id"` Title string `json:"title"` Content string `json:"content"` } const endpoint = "http://localhost:8080/api" func loadNotes() ([]note, error) { res, err := http.Get(endpoint + "/notes") if err != nil { return []note{}, nil } data, err := io.ReadAll(res.Body) if err != nil { return []note{}, nil } var loadedNotes []note json.Unmarshal(data, &loadedNotes) return loadedNotes, nil } func putNote(n note) error { json, err := json.Marshal(n) if err != nil { return err } req, err := http.NewRequest("PUT", endpoint+"/notes/"+fmt.Sprint(n.Id), bytes.NewReader(json)) if err != nil { return err } req.Header.Add("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { return err } if res.StatusCode != http.StatusOK { return errors.New("Request failed: " + res.Status) } return nil } func postNote(n note) (note, error) { jsonBytes, err := json.Marshal(n) if err != nil { return note{}, err } res, err := http.Post(endpoint+"/notes", "application/json", bytes.NewReader(jsonBytes)) if err != nil { return note{}, err } if res.StatusCode != http.StatusCreated { return note{}, errors.New("Request failed: " + res.Status) } resBytes, err := io.ReadAll(res.Body) if err != nil { return note{}, err } err = json.Unmarshal(resBytes, &n) if err != nil { return note{}, err } return n, nil } func deleteNote(n note) error { req, err := http.NewRequest("DELETE", endpoint+"/notes/"+fmt.Sprint(n.Id), bytes.NewReader([]byte{})) if err != nil { return err } res, err := http.DefaultClient.Do(req) if err != nil { return err } if res.StatusCode != http.StatusOK { return errors.New("Request failed: " + res.Status) } return nil }