package main import ( "bytes" "context" "encoding/json" "fmt" "io" "log" "net/http" ) type APIError struct { Code int `json:"code"` Message string `json:"message"` Data APIErrorData `json:"data"` } type APIErrorData struct { Link APIErrorLink `json:"link"` } type APIErrorLink struct { Code string `json:"code"` Message string `json:"message"` } func SetDownloaded(item PBEvent) (err error) { req, err := http.NewRequestWithContext(context.Background(), "PATCH", FULL_URL+"/"+item.Record.Id, nil) if err != nil { log.Printf("Error creating PATCH request: %++v", err) return err } req.Header.Set("Content-Type", "application/json") partialItem := new(PBEvent) partialItem.Record = item.Record partialItem.Record.Downloaded = true body, err := json.Marshal(partialItem.Record) if err != nil { log.Printf("Error marshalling subscription body: %++v", err) return err } req.Body = io.NopCloser(bytes.NewReader(body)) client := http.Client{} res, err := client.Do(req) if err != nil { log.Printf("Error sending PATCH request: %++v", err) return err } defer res.Body.Close() if res.StatusCode != http.StatusOK { log.Printf("Non-OK HTTP status: %d", res.StatusCode) body, err = io.ReadAll(res.Body) if err != nil { log.Printf("Error reading response body: %++v", err) return err } var data APIError err = json.Unmarshal(body, &data) if err != nil { log.Printf("Error unmarshaling JSON: %++v", err) return err } log.Printf("API error: %++v", data) return fmt.Errorf("Non-OK HTTP status, err: %++v", data) } return nil }