435c0d9fc8
This PR switches the Nomad repository from using govendor to Go modules for managing dependencies. Aspects of the Nomad workflow remain pretty much the same. The usual Makefile targets should continue to work as they always did. The API submodule simply defers to the parent Nomad version on the repository, keeping the semantics of API versioning that currently exists.
148 lines
4.7 KiB
Go
148 lines
4.7 KiB
Go
package packngo
|
|
|
|
import "fmt"
|
|
|
|
// API documentation https://www.packet.net/developers/api/organizations/
|
|
const organizationBasePath = "/organizations"
|
|
|
|
// OrganizationService interface defines available organization methods
|
|
type OrganizationService interface {
|
|
List() ([]Organization, *Response, error)
|
|
Get(string) (*Organization, *Response, error)
|
|
Create(*OrganizationCreateRequest) (*Organization, *Response, error)
|
|
Update(string, *OrganizationUpdateRequest) (*Organization, *Response, error)
|
|
Delete(string) (*Response, error)
|
|
ListPaymentMethods(string) ([]PaymentMethod, *Response, error)
|
|
}
|
|
|
|
type organizationsRoot struct {
|
|
Organizations []Organization `json:"organizations"`
|
|
}
|
|
|
|
// Organization represents a Packet organization
|
|
type Organization struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
Website string `json:"website,omitempty"`
|
|
Twitter string `json:"twitter,omitempty"`
|
|
Created string `json:"created_at,omitempty"`
|
|
Updated string `json:"updated_at,omitempty"`
|
|
Address Address `json:"address,omitempty"`
|
|
TaxID string `json:"tax_id,omitempty"`
|
|
MainPhone string `json:"main_phone,omitempty"`
|
|
BillingPhone string `json:"billing_phone,omitempty"`
|
|
CreditAmount float64 `json:"credit_amount,omitempty"`
|
|
Logo string `json:"logo,omitempty"`
|
|
LogoThumb string `json:"logo_thumb,omitempty"`
|
|
Projects []Project `json:"projects,omitempty"`
|
|
URL string `json:"href,omitempty"`
|
|
Users []User `json:"members,omitempty"`
|
|
Owners []User `json:"owners,omitempty"`
|
|
}
|
|
|
|
func (o Organization) String() string {
|
|
return Stringify(o)
|
|
}
|
|
|
|
// OrganizationCreateRequest type used to create a Packet organization
|
|
type OrganizationCreateRequest struct {
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
Website string `json:"website"`
|
|
Twitter string `json:"twitter"`
|
|
Logo string `json:"logo"`
|
|
}
|
|
|
|
func (o OrganizationCreateRequest) String() string {
|
|
return Stringify(o)
|
|
}
|
|
|
|
// OrganizationUpdateRequest type used to update a Packet organization
|
|
type OrganizationUpdateRequest struct {
|
|
Name *string `json:"name,omitempty"`
|
|
Description *string `json:"description,omitempty"`
|
|
Website *string `json:"website,omitempty"`
|
|
Twitter *string `json:"twitter,omitempty"`
|
|
Logo *string `json:"logo,omitempty"`
|
|
}
|
|
|
|
func (o OrganizationUpdateRequest) String() string {
|
|
return Stringify(o)
|
|
}
|
|
|
|
// OrganizationServiceOp implements OrganizationService
|
|
type OrganizationServiceOp struct {
|
|
client *Client
|
|
}
|
|
|
|
// List returns the user's organizations
|
|
func (s *OrganizationServiceOp) List() ([]Organization, *Response, error) {
|
|
root := new(organizationsRoot)
|
|
|
|
resp, err := s.client.DoRequest("GET", organizationBasePath, nil, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.Organizations, resp, err
|
|
}
|
|
|
|
// Get returns a organization by id
|
|
func (s *OrganizationServiceOp) Get(organizationID string) (*Organization, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s", organizationBasePath, organizationID)
|
|
organization := new(Organization)
|
|
|
|
resp, err := s.client.DoRequest("GET", path, nil, organization)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return organization, resp, err
|
|
}
|
|
|
|
// Create creates a new organization
|
|
func (s *OrganizationServiceOp) Create(createRequest *OrganizationCreateRequest) (*Organization, *Response, error) {
|
|
organization := new(Organization)
|
|
|
|
resp, err := s.client.DoRequest("POST", organizationBasePath, createRequest, organization)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return organization, resp, err
|
|
}
|
|
|
|
// Update updates an organization
|
|
func (s *OrganizationServiceOp) Update(id string, updateRequest *OrganizationUpdateRequest) (*Organization, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s", organizationBasePath, id)
|
|
organization := new(Organization)
|
|
|
|
resp, err := s.client.DoRequest("PATCH", path, updateRequest, organization)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return organization, resp, err
|
|
}
|
|
|
|
// Delete deletes an organizationID
|
|
func (s *OrganizationServiceOp) Delete(organizationID string) (*Response, error) {
|
|
path := fmt.Sprintf("%s/%s", organizationBasePath, organizationID)
|
|
|
|
return s.client.DoRequest("DELETE", path, nil, nil)
|
|
}
|
|
|
|
// ListPaymentMethods returns PaymentMethods for an organization
|
|
func (s *OrganizationServiceOp) ListPaymentMethods(organizationID string) ([]PaymentMethod, *Response, error) {
|
|
url := fmt.Sprintf("%s/%s%s", organizationBasePath, organizationID, paymentMethodBasePath)
|
|
root := new(paymentMethodsRoot)
|
|
|
|
resp, err := s.client.DoRequest("GET", url, nil, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.PaymentMethods, resp, err
|
|
}
|