initial commit
This commit is contained in:
146
internal/api/api.go
Normal file
146
internal/api/api.go
Normal file
@@ -0,0 +1,146 @@
|
||||
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
|
||||
}
|
||||
11
internal/api/utils.go
Normal file
11
internal/api/utils.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
func unmarshal[T any](data []byte) (*T, error) {
|
||||
var r T
|
||||
err := json.Unmarshal(data, &r)
|
||||
return &r, err
|
||||
}
|
||||
Reference in New Issue
Block a user