Skip to content

Commit

Permalink
Add project access levels to transfer config
Browse files Browse the repository at this point in the history
  • Loading branch information
Mike Houston committed Aug 25, 2024
1 parent 05306b1 commit 95d6239
Showing 2 changed files with 71 additions and 35 deletions.
2 changes: 1 addition & 1 deletion cmd/asana/main.go
Original file line number Diff line number Diff line change
@@ -62,7 +62,7 @@ func main() {
client.DefaultOptions.Pretty = &True
}
client.Verbose = options.Verbose
client.DefaultOptions.Enable = []asana.Feature{asana.StringIDs, asana.NewSections, asana.NewTaskSubtypes}
client.DefaultOptions.Enable = []asana.Feature{asana.StringIDs, asana.NewSections, asana.NewTaskSubtypes, asana.ProjectPrivacySetting}

// Load a task object
if options.Task == nil {
104 changes: 70 additions & 34 deletions members.go
Original file line number Diff line number Diff line change
@@ -3,56 +3,92 @@ package asana
type AccessLevel string

const (
AccessLevelAdmin AccessLevel = "admin"
AccessLevelEditor AccessLevel = "editor"
AccessLevelCommenter AccessLevel = "commenter"
AccessLevelViewer AccessLevel = "viewer"
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. 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 base type of this resource
ResourceType string `json:"resource_type,omitempty"`

// Read-only. The name of the object.
Name string `json:"name,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. 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 base type of this resource
ResourceType string `json:"resource_type,omitempty"`

// The project associated with this membership
Parent *Project `json:"parent"`
// The project associated with this membership
Parent *Project `json:"parent"`

// Whether the member has admin, editor, commenter, or viewer access to the project.
AccessLevel AccessLevel `json:"access_level,omitempty"`
// A member object represents either a team or user.
Member *ProjectMember `json:"member"`

// Read-only. Type of the membership.
ResourceSubtype string `json:"resource_subtype,omitempty"`
// 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"`

// Globally unique identifier for team or user.
Member string `json:"member"`
// 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"`
}

func (p *Project) Memberships(client *Client, options ...*Options) ([]*ProjectMembership, *NextPage, error) {
client.trace("Listing memberships in project %s...\n", p.ID)
var result []*ProjectMembership
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{}

// Make the request
query := membershipsRequestParams{
Parent: p.ID,
}
nextPage, err := client.get("/memberships", query, &result, options...)
return result, nextPage, err
err := c.post("/memberships", data, result)
return result, err
}

0 comments on commit 95d6239

Please sign in to comment.