report.go
author Mikael Berthe <mikael@lilotux.net>
Fri, 14 Apr 2017 00:10:34 +0200
changeset 116 d237ffdd75c0
parent 19 9f4ae6d2a995
child 120 579912e9d0ef
permissions -rw-r--r--
Add reports API calls
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8
6d89be3dd966 Placeholders.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
     1
package gondole
116
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
     2
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
     3
import (
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
     4
	"encoding/json"
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
     5
	"fmt"
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
     6
	"strconv"
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
     7
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
     8
	"github.com/sendgrid/rest"
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
     9
)
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    10
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    11
// GetReports returns the current user's reports
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    12
func (g *Client) GetReports() ([]Report, error) {
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    13
	req := g.prepareRequest("reports")
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    14
	r, err := rest.API(req)
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    15
	if err != nil {
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    16
		return nil, fmt.Errorf("reports: %s", err.Error())
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    17
	}
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    18
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    19
	// Check for error reply
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    20
	var errorResult Error
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    21
	if err := json.Unmarshal([]byte(r.Body), &errorResult); err == nil {
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    22
		// The empty object is not an error
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    23
		if errorResult.Text != "" {
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    24
			return nil, fmt.Errorf("%s", errorResult.Text)
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    25
		}
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    26
	}
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    27
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    28
	// Not an error reply; let's unmarshal the data
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    29
	var reports []Report
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    30
	err = json.Unmarshal([]byte(r.Body), &reports)
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    31
	if err != nil {
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    32
		return nil, fmt.Errorf("reports API: %s", err.Error())
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    33
	}
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    34
	return reports, nil
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    35
}
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    36
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    37
// ReportUser reports the user account
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    38
// NOTE: Currently only the first statusID is sent.
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    39
func (g *Client) ReportUser(accountID int, statusIDs []int, comment string) (*Report, error) {
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    40
	if accountID < 1 || comment == "" || len(statusIDs) < 1 {
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    41
		return nil, ErrInvalidParameter
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    42
	}
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    43
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    44
	req := g.prepareRequest("reports")
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    45
	req.Method = rest.Post
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    46
	req.QueryParams["account_id"] = strconv.Itoa(accountID)
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    47
	// XXX Sending only the first one since I'm not sure arrays work
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    48
	req.QueryParams["status_ids"] = strconv.Itoa(statusIDs[0])
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    49
	req.QueryParams["comment"] = comment
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    50
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    51
	r, err := rest.API(req)
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    52
	if err != nil {
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    53
		return nil, fmt.Errorf("reports: %s", err.Error())
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    54
	}
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    55
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    56
	// Check for error reply
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    57
	var errorResult Error
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    58
	if err := json.Unmarshal([]byte(r.Body), &errorResult); err == nil {
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    59
		// The empty object is not an error
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    60
		if errorResult.Text != "" {
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    61
			return nil, fmt.Errorf("%s", errorResult.Text)
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    62
		}
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    63
	}
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    64
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    65
	// Not an error reply; let's unmarshal the data
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    66
	var report Report
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    67
	err = json.Unmarshal([]byte(r.Body), &report)
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    68
	if err != nil {
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    69
		return nil, fmt.Errorf("reports API: %s", err.Error())
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    70
	}
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    71
	return &report, nil
d237ffdd75c0 Add reports API calls
Mikael Berthe <mikael@lilotux.net>
parents: 19
diff changeset
    72
}