fixed fetching of optional fields
This commit is contained in:
		| @@ -3,26 +3,46 @@ package backend | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"net/http" | ||||
| 	"os" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| const endpoint = "https://diyhrt.market/api/listings" | ||||
|  | ||||
| func GetListings() ([]Listing, error) { | ||||
| 	apiKey := os.Getenv("API_KEY") | ||||
|  | ||||
| 	// why put api key in url parameter | ||||
| 	resp, err := http.NewRequest("GET", endpoint+"?api_token="+apiKey, nil) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		fmt.Print(err.Error()) | ||||
| 		return []Listing{}, err | ||||
| 	if apiKey == "" { | ||||
| 		return nil, fmt.Errorf("API_KEY environment variable not set") | ||||
| 	} | ||||
|  | ||||
| 	// Create HTTP client | ||||
| 	client := &http.Client{Timeout: 10 * time.Second} | ||||
|  | ||||
| 	// Create request | ||||
| 	req, err := http.NewRequest("GET", endpoint+"?api_token="+apiKey, nil) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("creating request failed: %w", err) | ||||
| 	} | ||||
|  | ||||
| 	// Send request | ||||
| 	resp, err := client.Do(req) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("request failed: %w", err) | ||||
| 	} | ||||
| 	defer resp.Body.Close() | ||||
|  | ||||
| 	// Check status code | ||||
| 	if resp.StatusCode != http.StatusOK { | ||||
| 		body, _ := io.ReadAll(resp.Body) | ||||
| 		return nil, fmt.Errorf("unexpected status code %d: %s", resp.StatusCode, string(body)) | ||||
| 	} | ||||
|  | ||||
| 	// Decode response | ||||
| 	var listings []Listing | ||||
| 	if err := json.NewDecoder(resp.Body).Decode(&listings); err != nil { | ||||
| 		return []Listing{}, err | ||||
| 		return nil, fmt.Errorf("decoding failed: %w", err) | ||||
| 	} | ||||
|  | ||||
| 	return listings, nil | ||||
|   | ||||
| @@ -1,41 +1,41 @@ | ||||
| package backend | ||||
|  | ||||
| type ActiveIngredient struct { | ||||
| 	Name        string `json:"name"` | ||||
| 	Ester       string `json:"ester,omitempty"` | ||||
| 	DisplayName string `json:"display_name,omitempty"` | ||||
| 	Name        string  `json:"name"` | ||||
| 	Ester       *string `json:"ester,omitempty"` | ||||
| 	DisplayName *string `json:"display_name,omitempty"` | ||||
| } | ||||
|  | ||||
| type Product struct { | ||||
| 	Id               int              `json:"id,omitempty"` | ||||
| 	Id               *int             `json:"id,omitempty"` | ||||
| 	Name             string           `json:"name"` | ||||
| 	Image            string           `json:"image,omitempty"` | ||||
| 	Image            *string          `json:"image,omitempty"` | ||||
| 	ActiveIngredient ActiveIngredient `json:"active_ingredient"` | ||||
| } | ||||
|  | ||||
| type Store struct { | ||||
| 	Id                 int    `json:"id,omitempty"` | ||||
| 	Name               string `json:"name"` | ||||
| 	Url                string `json:"url"` | ||||
| 	Description        string `json:"description"` | ||||
| 	ShipsFromCountry   string `json:"ships_from_country,omitempty"` | ||||
| 	ShipsToCountry     string `json:"ships_to_country,omitempty"` | ||||
| 	ServiceStatus      string `json:"service_status"` | ||||
| 	ServiceStatusNotes string `json:"service_status_notes,omitempty"` | ||||
| 	PaymentMethods     string `json:"payment_methods,omitempty"` | ||||
| 	CategoryName       string `json:"category_name,omitempty"` | ||||
| 	Id                 *int     `json:"id,omitempty"` | ||||
| 	Name               string   `json:"name"` | ||||
| 	Url                string   `json:"url"` | ||||
| 	Description        string   `json:"description"` | ||||
| 	ShipsFromCountry   *string  `json:"ships_from_country,omitempty"` | ||||
| 	ShipsToCountry     *string  `json:"ships_to_country,omitempty"` | ||||
| 	ServiceStatus      string   `json:"service_status"` | ||||
| 	ServiceStatusNotes *string  `json:"service_status_notes,omitempty"` | ||||
| 	PaymentMethods     []string `json:"payment_methods,omitempty"` | ||||
| 	CategoryName       *string  `json:"category_name,omitempty"` | ||||
| } | ||||
|  | ||||
| type Listing struct { | ||||
| 	Id             int     `json:"id,omitempty"` | ||||
| 	ProductName    string  `json:"product_name,omitempty"` | ||||
| 	Id             *int    `json:"id,omitempty"` | ||||
| 	ProductName    *string `json:"product_name,omitempty"` | ||||
| 	StoreName      string  `json:"store_name"` | ||||
| 	Price          string  `json:"price,omitempty"` | ||||
| 	PriceCurrency  string  `json:"price_currency,omitempty"` | ||||
| 	State          string  `json:"state,omitempty"` | ||||
| 	Price          *string `json:"price,omitempty"` | ||||
| 	PriceCurrency  *string `json:"price_currency,omitempty"` | ||||
| 	State          *string `json:"state,omitempty"` | ||||
| 	InStock        bool    `json:"in_stock"` | ||||
| 	Url            string  `json:"url,omitempty"` | ||||
| 	PricingPerUnit string  `json:"pricing_per_unit,omitempty"` | ||||
| 	Url            *string `json:"url,omitempty"` | ||||
| 	PricingPerUnit *string `json:"pricing_per_unit,omitempty"` | ||||
| 	Product        Product `json:"product"` | ||||
| 	Store          Store   `json:"store"` | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user