package itglue import ( "encoding/json" "fmt" "net/url" "time" ) 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 type Organization struct { Data struct{ OrganizationInternalData } `json:"data"` } //OrganizationList contains a slice of Organizations type OrganizationList struct { Data []struct{ OrganizationInternalData } `json:"data"` } ///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 } //GetOrganizationByID expects an ITG organization ID //Returns a pointer to an Organization struct func (itg *ITGAPI) GetOrganizationByID(organizationID int) (*Organization, error) { 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{} err = json.Unmarshal(body, organization) if err != nil { return nil, fmt.Errorf("could not get organization: %s", err) } return organization, nil } //GetOrganizationByName expects an exact matching organization name and returns an OrganizationList func (itg *ITGAPI) GetOrganizationByName(organizationName string) (*OrganizationList, error) { 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() body, err := itg.GetRequest(itgurl) if err != nil { return nil, fmt.Errorf("request failed: %s", err) } organization := &OrganizationList{} err = json.Unmarshal(body, organization) if err != nil { return nil, fmt.Errorf("could not get organization: %s", err) } return organization, nil }