112 lines
2.5 KiB
Go
112 lines
2.5 KiB
Go
package client
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
type Person struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
BirthDate string `json:"birthDate,omitempty"`
|
|
ThumbnailPath string `json:"thumbnailPath,omitempty"`
|
|
IsHidden bool `json:"isHidden"`
|
|
IsFavorite bool `json:"isFavorite"`
|
|
}
|
|
|
|
type UpdatePersonRequest struct {
|
|
Name string `json:"name,omitempty"`
|
|
BirthDate string `json:"birthDate,omitempty"`
|
|
IsHidden *bool `json:"isHidden,omitempty"`
|
|
IsFavorite *bool `json:"isFavorite,omitempty"`
|
|
}
|
|
|
|
func (c *Client) GetPeople(withHidden bool) ([]Person, error) {
|
|
url := fmt.Sprintf("%s/people?withHidden=%v", c.HostURL, withHidden)
|
|
req, err := http.NewRequest("GET", url, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
body, err := c.doRequest(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// The API might return a paginated response or a simple array.
|
|
// Based on docs, it returns an array of PersonResponseDto or a paginated response.
|
|
// Actually, the docs say GET /people returns PeopleResponseDto which has people: PersonResponseDto[]
|
|
// Let's check.
|
|
var response struct {
|
|
People []Person `json:"people"`
|
|
}
|
|
err = json.Unmarshal(body, &response)
|
|
if err != nil {
|
|
// Fallback to array if it's not wrapped
|
|
var people []Person
|
|
if err2 := json.Unmarshal(body, &people); err2 == nil {
|
|
return people, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
return response.People, nil
|
|
}
|
|
|
|
func (c *Client) GetPerson(id string) (*Person, error) {
|
|
req, err := http.NewRequest("GET", fmt.Sprintf("%s/people/%s", c.HostURL, id), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
body, err := c.doRequest(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var person Person
|
|
err = json.Unmarshal(body, &person)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &person, nil
|
|
}
|
|
|
|
func (c *Client) UpdatePerson(id string, person UpdatePersonRequest) (*Person, error) {
|
|
rb, err := json.Marshal(person)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
req, err := http.NewRequest("PATCH", fmt.Sprintf("%s/people/%s", c.HostURL, id), bytes.NewBuffer(rb))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
body, err := c.doRequest(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var updatedPerson Person
|
|
err = json.Unmarshal(body, &updatedPerson)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &updatedPerson, nil
|
|
}
|
|
|
|
func (c *Client) DeletePerson(id string) error {
|
|
req, err := http.NewRequest("DELETE", fmt.Sprintf("%s/people/%s", c.HostURL, id), nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = c.doRequest(req)
|
|
return err
|
|
}
|