mercadona/internal/client/client.go
2025-03-02 14:10:17 +01:00

57 lines
1.2 KiB
Go

package client
import (
"context"
"encoding/json"
"fmt"
"io"
"net/http"
"git.espin.casa/albert/mercadona/pkg/types/mercadona"
)
const (
BaseURL string = "https://tienda.mercadona.es"
)
type IMercadona interface {
// Get Mercadona products based on barcode scanned id
GetMercadonaProduct(ctx context.Context, id string) (*mercadona.Product, error)
}
type client struct{ url string }
// GetMercadonaProduct implements IMercadona.
func (c client) GetMercadonaProduct(ctx context.Context, id string) (*mercadona.Product, error) {
// product holder
product := &mercadona.Product{}
// crate url endpoint
url := fmt.Sprintf("%s/api/products/%s/xselling/?lang=es&wh=bcn1&exclude=", BaseURL, id)
// create http Get Request
resp, err := http.Get(url)
// check if error
if err != nil {
return nil, err
}
// close body response
defer resp.Body.Close()
// read body response
body, err := io.ReadAll(resp.Body)
// check if error on read body
if err != nil {
return nil, err
}
// unmarshal json body response
if err := json.Unmarshal(body, product); err != nil {
return nil, err
}
return product, nil
}
func NewClient() IMercadona {
url := BaseURL
return client{
url: url,
}
}