68 lines
2.7 KiB
Go
68 lines
2.7 KiB
Go
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
|
|
}
|