140 lines
4.1 KiB
Go
140 lines
4.1 KiB
Go
package dnsimple
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// ContactsService handles communication with the contact related
|
|
// methods of the DNSimple API.
|
|
//
|
|
// See https://developer.dnsimple.com/v2/contacts/
|
|
type ContactsService struct {
|
|
client *Client
|
|
}
|
|
|
|
// Contact represents a Contact in DNSimple.
|
|
type Contact struct {
|
|
ID int `json:"id,omitempty"`
|
|
AccountID int `json:"account_id,omitempty"`
|
|
Label string `json:"label,omitempty"`
|
|
FirstName string `json:"first_name,omitempty"`
|
|
LastName string `json:"last_name,omitempty"`
|
|
JobTitle string `json:"job_title,omitempty"`
|
|
Organization string `json:"organization_name,omitempty"`
|
|
Address1 string `json:"address1,omitempty"`
|
|
Address2 string `json:"address2,omitempty"`
|
|
City string `json:"city,omitempty"`
|
|
StateProvince string `json:"state_province,omitempty"`
|
|
PostalCode string `json:"postal_code,omitempty"`
|
|
Country string `json:"country,omitempty"`
|
|
Phone string `json:"phone,omitempty"`
|
|
Fax string `json:"fax,omitempty"`
|
|
Email string `json:"email,omitempty"`
|
|
CreatedAt string `json:"created_at,omitempty"`
|
|
UpdatedAt string `json:"updated_at,omitempty"`
|
|
}
|
|
|
|
func contactPath(accountID string, contactID int) (path string) {
|
|
path = fmt.Sprintf("/%v/contacts", accountID)
|
|
if contactID != 0 {
|
|
path += fmt.Sprintf("/%v", contactID)
|
|
}
|
|
return
|
|
}
|
|
|
|
// contactResponse represents a response from an API method that returns a Contact struct.
|
|
type contactResponse struct {
|
|
Response
|
|
Data *Contact `json:"data"`
|
|
}
|
|
|
|
// contactsResponse represents a response from an API method that returns a collection of Contact struct.
|
|
type contactsResponse struct {
|
|
Response
|
|
Data []Contact `json:"data"`
|
|
}
|
|
|
|
// ListContacts list the contacts for an account.
|
|
//
|
|
// See https://developer.dnsimple.com/v2/contacts/#list
|
|
func (s *ContactsService) ListContacts(accountID string, options *ListOptions) (*contactsResponse, error) {
|
|
path := versioned(contactPath(accountID, 0))
|
|
contactsResponse := &contactsResponse{}
|
|
|
|
path, err := addURLQueryOptions(path, options)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := s.client.get(path, contactsResponse)
|
|
if err != nil {
|
|
return contactsResponse, err
|
|
}
|
|
|
|
contactsResponse.HttpResponse = resp
|
|
return contactsResponse, nil
|
|
}
|
|
|
|
// CreateContact creates a new contact.
|
|
//
|
|
// See https://developer.dnsimple.com/v2/contacts/#create
|
|
func (s *ContactsService) CreateContact(accountID string, contactAttributes Contact) (*contactResponse, error) {
|
|
path := versioned(contactPath(accountID, 0))
|
|
contactResponse := &contactResponse{}
|
|
|
|
resp, err := s.client.post(path, contactAttributes, contactResponse)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
contactResponse.HttpResponse = resp
|
|
return contactResponse, nil
|
|
}
|
|
|
|
// GetContact fetches a contact.
|
|
//
|
|
// See https://developer.dnsimple.com/v2/contacts/#get
|
|
func (s *ContactsService) GetContact(accountID string, contactID int) (*contactResponse, error) {
|
|
path := versioned(contactPath(accountID, contactID))
|
|
contactResponse := &contactResponse{}
|
|
|
|
resp, err := s.client.get(path, contactResponse)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
contactResponse.HttpResponse = resp
|
|
return contactResponse, nil
|
|
}
|
|
|
|
// UpdateContact updates a contact.
|
|
//
|
|
// See https://developer.dnsimple.com/v2/contacts/#update
|
|
func (s *ContactsService) UpdateContact(accountID string, contactID int, contactAttributes Contact) (*contactResponse, error) {
|
|
path := versioned(contactPath(accountID, contactID))
|
|
contactResponse := &contactResponse{}
|
|
|
|
resp, err := s.client.patch(path, contactAttributes, contactResponse)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
contactResponse.HttpResponse = resp
|
|
return contactResponse, nil
|
|
}
|
|
|
|
// DeleteContact PERMANENTLY deletes a contact from the account.
|
|
//
|
|
// See https://developer.dnsimple.com/v2/contacts/#delete
|
|
func (s *ContactsService) DeleteContact(accountID string, contactID int) (*contactResponse, error) {
|
|
path := versioned(contactPath(accountID, contactID))
|
|
contactResponse := &contactResponse{}
|
|
|
|
resp, err := s.client.delete(path, nil, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
contactResponse.HttpResponse = resp
|
|
return contactResponse, nil
|
|
}
|