package api
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
|
|
"git.brettb.xyz/goinv/client/internal/types"
|
|
)
|
|
|
|
const userAgent = "goinv-cli"
|
|
|
|
type APIClient struct {
|
|
Host string
|
|
Token string
|
|
}
|
|
|
|
func NewAPIClient(host string) *APIClient {
|
|
return &APIClient{
|
|
Host: host,
|
|
}
|
|
}
|
|
|
|
func (c *APIClient) retrieveSingleAsset(r *http.Request) (*types.AssetResponse, error) {
|
|
r.Header.Set("User-Agent", userAgent)
|
|
//r.Header.Set("Authorization", "Bearer "+c.Token)
|
|
r.Header.Set("Accept", "application/json")
|
|
r.Header.Set("Content-Type", "application/json")
|
|
|
|
httpCli := http.Client{}
|
|
httpResp, err := httpCli.Do(r)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer httpResp.Body.Close()
|
|
body, err := io.ReadAll(httpResp.Body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := unmarshal[types.AssetResponse](body)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("%s", "An unexpected response was received")
|
|
}
|
|
return resp, nil
|
|
}
|
|
|
|
func (c *APIClient) retrieveMultipleAssets(r *http.Request) (*types.MultipleAssetsResponse, error) {
|
|
r.Header.Set("User-Agent", userAgent)
|
|
//r.Header.Set("Authorization", "Bearer "+c.Token)
|
|
r.Header.Set("Accept", "application/json")
|
|
r.Header.Set("Content-Type", "application/json")
|
|
|
|
httpCli := http.Client{}
|
|
httpResp, err := httpCli.Do(r)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer httpResp.Body.Close()
|
|
body, err := io.ReadAll(httpResp.Body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := unmarshal[types.MultipleAssetsResponse](body)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("%s", "An unexpected response was received")
|
|
}
|
|
return resp, nil
|
|
}
|
|
|
|
func (c *APIClient) retrieveMultipleShelves(r *http.Request) (*types.MultipleShelfResponse, error) {
|
|
r.Header.Set("User-Agent", userAgent)
|
|
//r.Header.Set("Authorization", "Bearer "+c.Token)
|
|
r.Header.Set("Accept", "application/json")
|
|
r.Header.Set("Content-Type", "application/json")
|
|
|
|
httpCli := http.Client{}
|
|
httpResp, err := httpCli.Do(r)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer httpResp.Body.Close()
|
|
body, err := io.ReadAll(httpResp.Body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := unmarshal[types.MultipleShelfResponse](body)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("%s", "An unexpected response was received")
|
|
}
|
|
return resp, nil
|
|
}
|
|
|
|
func (c *APIClient) RetrieveAssetByID(idNumber string) (*types.Asset, error) {
|
|
url := fmt.Sprintf("%s/assets/%s", c.Host, idNumber)
|
|
req, _ := http.NewRequest("GET", url, bytes.NewBuffer([]byte{}))
|
|
|
|
resp, err := c.retrieveSingleAsset(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return resp.Asset, nil
|
|
}
|
|
|
|
func (c *APIClient) RetrieveAllAssets() ([]*types.Asset, error) {
|
|
url := fmt.Sprintf("%s/assets", c.Host)
|
|
req, _ := http.NewRequest("GET", url, bytes.NewBuffer([]byte{}))
|
|
|
|
resp, err := c.retrieveMultipleAssets(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return resp.Assets, nil
|
|
}
|
|
|
|
func (c *APIClient) DeleteAssetByID(idNumber string) (*types.Asset, error) {
|
|
url := fmt.Sprintf("%s/assets/%s", c.Host, idNumber)
|
|
req, _ := http.NewRequest("DELETE", url, bytes.NewBuffer([]byte{}))
|
|
|
|
resp, err := c.retrieveSingleAsset(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return resp.Asset, nil
|
|
}
|
|
|
|
func (c *APIClient) RetrieveAllShelves() ([]*types.ShelfLocation, error) {
|
|
url := fmt.Sprintf("%s/shelves", c.Host)
|
|
req, _ := http.NewRequest("GET", url, bytes.NewBuffer([]byte{}))
|
|
|
|
resp, err := c.retrieveMultipleShelves(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return resp.ShelfLocations, nil
|
|
}
|