-
Notifications
You must be signed in to change notification settings - Fork 1
/
users.go
159 lines (123 loc) · 3.71 KB
/
users.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package dev
import (
"context"
"fmt"
"github.com/google/go-querystring/query"
)
type User struct {
TypeOf string `json:"type_of"`
ID int32 `json:"id"`
Username string `json:"username"`
Name string `json:"name"`
Summary string `json:"summary,omitempty"`
TwitterUsername string `json:"twitter_username,omitempty"`
GithubUsername string `json:"github_username,omitempty"`
WebsiteURL string `json:"website_url,omitempty"`
Location string `json:"location,omitempty"`
JoinedAt string `json:"joined_at"`
ProfileImage string `json:"profile_image"`
}
type UserQueryParams struct {
Page int32 `url:"page,omitempty"`
PerPage int32 `url:"per_page,omitempty"`
URL string `url:"url"`
Sort string `url:"sort"`
}
type ReadingListStatus string
const (
Valid ReadingListStatus = "valid"
InvalidValid ReadingListStatus = "invalid"
Confirmed ReadingListStatus = "confirmed"
Archived ReadingListStatus = "archived"
)
type ReadingList struct {
TypeOf string `json:"type_of"`
ID int32 `json:"id"`
Status ReadingListStatus `json:"status"`
Article *Article `json:"article"`
}
type ReadingListQueryParams struct {
Page int32 `url:"page,omitempty"`
PerPage int32 `url:"per_page,omitempty"`
}
// GetUserByID allows the client to retrieve a single user
// with the given id
func (c *Client) GetUserByID(userID string) (*User, error) {
path := fmt.Sprintf("/users/%s", userID)
req, err := c.NewRequest(context.Background(), "GET", path, nil)
if err != nil {
return nil, err
}
user := new(User)
if err := c.SendHttpRequest(req, &user); err != nil {
return nil, err
}
return user, nil
}
// GetUserByUsername allows the client to retrieve a single user
// with the given username
func (c *Client) GetUserByUsername(q UserQueryParams) (*User, error) {
query, err := query.Values(q)
if err != nil {
return nil, err
}
path := fmt.Sprintf("/users/by_username?%s", query.Encode())
req, err := c.NewRequest(context.Background(), "GET", path, nil)
if err != nil {
return nil, err
}
user := new(User)
if err := c.SendHttpRequest(req, &user); err != nil {
return nil, err
}
return user, nil
}
// GetAuthenticatedUser allows the client to retrieve information
// about the authenticated user
func (c *Client) GetAuthenticatedUser() (*User, error) {
path := "/users/me"
req, err := c.NewRequest(context.Background(), "GET", path, nil)
if err != nil {
return nil, err
}
user := new(User)
if err := c.SendHttpRequest(req, &user); err != nil {
return nil, err
}
return user, nil
}
// GetUserReadingList allows the client to retrieve a list of readinglist reactions
// along with the related article for the authenticated user.
func (c *Client) GetUserReadingList(q ReadingListQueryParams) ([]ReadingList, error) {
var readinglist []ReadingList
query, err := query.Values(q)
if err != nil {
return nil, err
}
path := fmt.Sprintf("/readinglist?%s", query.Encode())
req, err := c.NewRequest(context.Background(), "GET", path, nil)
if err != nil {
return nil, err
}
if err := c.SendHttpRequest(req, &readinglist); err != nil {
return nil, err
}
return readinglist, nil
}
// GetUserFollowers allows the client to retrieve a list of the followers they have.
func (c *Client) GetUserFollowers(q UserQueryParams) ([]User, error) {
var followers []User
query, err := query.Values(q)
if err != nil {
return nil, err
}
path := fmt.Sprintf("/followers/users?%s", query.Encode())
req, err := c.NewRequest(context.Background(), "GET", path, nil)
if err != nil {
return nil, err
}
if err := c.SendHttpRequest(req, &followers); err != nil {
return nil, err
}
return followers, nil
}