go-itg/itglue/organizations.go

123 lines
3.8 KiB
Go
Raw Normal View History

2018-06-29 22:53:14 +00:00
package itglue
import (
"encoding/json"
"fmt"
"net/url"
2018-07-22 07:41:33 +00:00
"time"
)
2018-06-29 22:53:14 +00:00
2018-07-22 07:41:33 +00:00
type OrganizationTypeData struct {
ID string `json:"id"`
Type string `json:"type"`
Attributes struct {
Name string `json:"name"`
CreatedAt time.Time `json:"created-at"`
UpdatedAt time.Time `json:"updated-at"`
Synced bool `json:"synced"`
} `json:"attributes"`
Meta struct {
CurrentPage int `json:"current-page"`
NextPage interface{} `json:"next-page"`
PrevPage interface{} `json:"prev-page"`
TotalPages int `json:"total-pages"`
TotalCount int `json:"total-count"`
Filters struct {
} `json:"filters"`
} `json:"meta"`
Links struct {
} `json:"links"`
}
//OrganizationInternalData contains the schema of an Organization in IT Glue without the "data" wrapper.
//This allows us to reuse the schema when data is either a JSON object or an array, depending on what results are returned
type OrganizationInternalData struct {
ID string `json:"id"`
Type string `json:"type"`
Attributes struct {
Name string `json:"name"`
Description string `json:"description"`
OrganizationTypeID int `json:"organization-type-id"`
OrganizationTypeName string `json:"organization-type-name"`
OrganizationStatusID int `json:"organization-status-id"`
OrganizationStatusName string `json:"organization-status-name"`
Logo string `json:"logo"`
QuickNotes string `json:"quick-notes"`
ShortName string `json:"short-name"`
CreatedAt string `json:"created-at"`
UpdatedAt string `json:"updated-at"`
} `json:"attributes"`
}
//Organization contains a single Organization
2018-06-29 22:53:14 +00:00
type Organization struct {
Data struct{ OrganizationInternalData } `json:"data"`
}
//OrganizationList contains a slice of Organizations
type OrganizationList struct {
Data []struct{ OrganizationInternalData } `json:"data"`
2018-06-29 22:53:14 +00:00
}
2018-07-22 07:41:33 +00:00
///organization_types
func (itg *ITGAPI) GetOrganizationTypes() error {
itgurl, err := itg.BuildURL("/organization_types")
if err != nil {
return fmt.Errorf("could not build URL: %s", err)
}
body, err := itg.GetRequest(itgurl)
if err != nil {
return fmt.Errorf("request failed: %s", err)
}
fmt.Println(string(body))
/*organization := &Organization{}
err := json.Unmarshal(body, organization)
if err != nil {
return nil, fmt.Errorf("could not get organization: %s", err)
}
*/
return nil
}
2018-06-29 22:53:14 +00:00
//GetOrganizationByID expects an ITG organization ID
//Returns a pointer to an Organization struct
2018-07-22 07:22:22 +00:00
func (itg *ITGAPI) GetOrganizationByID(organizationID int) (*Organization, error) {
2018-07-22 07:41:33 +00:00
itgurl, err := itg.BuildURL(fmt.Sprintf("/organizations/%d", organizationID))
if err != nil {
return nil, fmt.Errorf("could not build URL: %s", err)
}
body, err := itg.GetRequest(itgurl)
if err != nil {
return nil, fmt.Errorf("request failed: %s", err)
}
organization := &Organization{}
2018-07-22 07:41:33 +00:00
err = json.Unmarshal(body, organization)
2018-07-22 07:22:22 +00:00
if err != nil {
return nil, fmt.Errorf("could not get organization: %s", err)
}
return organization, nil
}
2018-06-29 22:53:14 +00:00
//GetOrganizationByName expects an exact matching organization name and returns an OrganizationList
2018-07-22 07:22:22 +00:00
func (itg *ITGAPI) GetOrganizationByName(organizationName string) (*OrganizationList, error) {
2018-07-22 07:41:33 +00:00
itgurl, err := itg.BuildURL("/organizations")
if err != nil {
return nil, fmt.Errorf("could not build URL: %s", err)
}
params := url.Values{}
params.Add("filter[name]", organizationName)
itgurl.RawQuery = params.Encode()
2018-07-22 07:41:33 +00:00
body, err := itg.GetRequest(itgurl)
if err != nil {
return nil, fmt.Errorf("request failed: %s", err)
}
organization := &OrganizationList{}
2018-07-22 07:41:33 +00:00
err = json.Unmarshal(body, organization)
2018-07-22 07:22:22 +00:00
if err != nil {
return nil, fmt.Errorf("could not get organization: %s", err)
}
return organization, nil
2018-06-29 22:53:14 +00:00
}