package client import ( "context" "net/http" "strconv" ) // GardenMembers lists all members of a garden. func (c *Client) GardenMembers(ctx context.Context, gardenID int) ([]GardenMember, *Response, error) { var envelope struct { Members []GardenMember `json:"members"` } response, err := c.do(ctx, http.MethodGet, gardenPath(gardenID)+"/members", nil, &envelope) return envelope.Members, response, err } // UpdateGardenMember assigns a garden role to an existing member. func (c *Client) UpdateGardenMember(ctx context.Context, gardenID, userID int, role string) (GardenMember, *Response, error) { var envelope struct { Member GardenMember `json:"member"` } response, err := c.do(ctx, http.MethodPatch, gardenPath(gardenID)+"/members/"+strconv.Itoa(userID), map[string]string{"role": role}, &envelope) return envelope.Member, response, err } // DeleteGardenMember removes a user from a garden. func (c *Client) DeleteGardenMember(ctx context.Context, gardenID, userID int) (*Response, error) { return c.do(ctx, http.MethodDelete, gardenPath(gardenID)+"/members/"+strconv.Itoa(userID), nil, nil) } // TransferGardenOwnership makes userID the garden owner. func (c *Client) TransferGardenOwnership(ctx context.Context, gardenID, userID int) (*Response, error) { return c.do(ctx, http.MethodPost, gardenPath(gardenID)+"/members/"+strconv.Itoa(userID)+"/transfer-ownership", nil, nil) } // GardenInvites lists pending invitations for a garden. func (c *Client) GardenInvites(ctx context.Context, gardenID int) ([]GardenInvite, *Response, error) { var envelope struct { Invites []GardenInvite `json:"invites"` } response, err := c.do(ctx, http.MethodGet, gardenPath(gardenID)+"/invites", nil, &envelope) return envelope.Invites, response, err } // CreateGardenInvite creates or replaces an invitation for an email address. func (c *Client) CreateGardenInvite(ctx context.Context, gardenID int, input GardenInviteInput) (GardenInvite, *Response, error) { var envelope struct { Invite GardenInvite `json:"invite"` } response, err := c.do(ctx, http.MethodPost, gardenPath(gardenID)+"/invites", input, &envelope) return envelope.Invite, response, err } // DeleteGardenInvite revokes a pending invitation. func (c *Client) DeleteGardenInvite(ctx context.Context, gardenID, inviteID int) (*Response, error) { return c.do(ctx, http.MethodDelete, gardenPath(gardenID)+"/invites/"+strconv.Itoa(inviteID), nil, nil) } // AcceptGardenInvite joins the current user to the invited garden. func (c *Client) AcceptGardenInvite(ctx context.Context, token string) (GardenMember, *Response, error) { var envelope struct { Member GardenMember `json:"member"` } response, err := c.do(ctx, http.MethodPost, "v1/invites/"+token+"/accept", nil, &envelope) return envelope.Member, response, err }