Files
Gardomatic/lib/client/garden_members.go
T
kleiax 904d14b64c
CI / test (push) Canceled after 0s
Initial commit
2026-09-12 22:22:17 +02:00

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
}