-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmembers.go
94 lines (70 loc) · 2.86 KB
/
members.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
package asana
type AccessLevel string
const (
AccessLevelAdmin AccessLevel = "admin"
AccessLevelEditor AccessLevel = "editor"
AccessLevelCommenter AccessLevel = "commenter"
AccessLevelViewer AccessLevel = "viewer"
)
type ProjectMember struct {
// Read-only. Globally unique ID of the object
ID string `json:"gid,omitempty"`
// Read-only. The base type of this resource
ResourceType string `json:"resource_type,omitempty"`
// Read-only. The name of the object.
Name string `json:"name,omitempty"`
}
type ProjectMembership struct {
// Read-only. Globally unique ID of the object
ID string `json:"gid,omitempty"`
// Read-only. The base type of this resource
ResourceType string `json:"resource_type,omitempty"`
// The project associated with this membership
Parent *Project `json:"parent"`
// A member object represents either a team or user.
Member *ProjectMember `json:"member"`
// Whether the member has admin, editor, commenter, or viewer access to the project.
AccessLevel AccessLevel `json:"access_level,omitempty"`
// Read-only. Type of the membership.
ResourceSubtype string `json:"resource_subtype,omitempty"`
}
type membershipsRequestParams struct {
// Globally unique identifier for goal, project, or portfolio
Parent string `json:"parent"`
// Optional - Globally unique identifier for team or user.
Member string `json:"member,omitempty"`
}
func (p *Project) Memberships(client *Client, options ...*Options) ([]*ProjectMembership, *NextPage, error) {
client.trace("Listing memberships in project %s...\n", p.ID)
var result []*ProjectMembership
// Make the request
query := membershipsRequestParams{
Parent: p.ID,
}
nextPage, err := client.get("/memberships", query, &result, options...)
return result, nextPage, err
}
type CreateMembershipRequest struct {
MemberID string
// Whether the member has admin, editor, commenter, or viewer access to the project.
AccessLevel *AccessLevel `json:"access_level,omitempty"`
}
type createMembershipRequest struct {
// The gid of the user or team
Member string `json:"member"`
// The gid of the goal or project to add the member to.
Parent string `json:"parent"`
// Whether the member has admin, editor, commenter, or viewer access to the project.
AccessLevel *AccessLevel `json:"access_level,omitempty"`
}
func (p *Project) CreateMembership(c *Client, req CreateMembershipRequest, options ...*Options) (*ProjectMembership, error) {
c.info("Creating Membership for entity %q in project %q\n", req.MemberID, p.ID)
data := &createMembershipRequest{
Member: req.MemberID,
Parent: p.ID,
AccessLevel: req.AccessLevel,
}
result := &ProjectMembership{}
err := c.post("/memberships", data, result)
return result, err
}