Pular para o conteúdo principal
Workspaces são expostos pela interface Workspaces embutida em rest.Rest. Disponível nos planos Standard, Pro e Enterprise.
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)

Criando um workspace

workspace, err := api.CreateWorkspace("Acme")
if err != nil {
	panic(err)
}

fmt.Println(workspace.ID)
O nome deve ter de 1 a 32 caracteres, e criar um workspace exige um plano pago ativo.

Listando workspaces

api.GetWorkspaces() retorna todos os workspaces em que o usuário autenticado é dono ou membro.
workspaces, err := api.GetWorkspaces()
if err != nil {
	panic(err)
}

for _, ws := range workspaces {
	fmt.Println(ws.Name, ws.ID)
}

Buscando um workspace específico

IDs de workspace são valores UUID v4 sem hífens (32 caracteres hexadecimais).
workspace, err := api.GetWorkspace("1234567890abcdef1234567890abcdef")
if err != nil {
	panic(err)
}

fmt.Println(workspace.Name)
fmt.Println(workspace.Owner)
fmt.Println(workspace.Members)
fmt.Println(workspace.Applications)

Convidando membros

Convidar um membro é um handshake em duas etapas — o convidado prova o consentimento gerando um código de curta duração a partir do próprio cliente, e o dono consome esse código.
// 1. A partir do cliente SDK do convidado
otherClient := rest.NewClient(os.Getenv("OTHER_USER_API_KEY"))
defer otherClient.Close()
otherAPI := rest.New(otherClient)

code, err := otherAPI.GetWorkspaceInviteCode()
if err != nil {
	panic(err)
}

// 2. A partir do cliente do dono do workspace
err = api.AddWorkspaceMember("1234567890abcdef1234567890abcdef", code, "maintain")
if err != nil {
	panic(err)
}
O código de convite é gerado pelo usuário que vai entrar no workspace, não pelo dono. Ele é de uso único e expira após 5 minutos — gere-o, entregue ao dono/admin e consuma-o prontamente.

Papéis

PapelDescrição
owner / adminGerenciamento completo do workspace
maintainAcesso operacional às aplicações compartilhadas
managerMonitoramento mais ciclo de vida das aplicações (start, stop, restart)
viewSomente leitura

Alterando o papel de um membro

err := api.UpdateWorkspaceMember("1234567890abcdef1234567890abcdef", "abcdef0123456789abcdef01", "admin")
if err != nil {
	panic(err)
}

Removendo um membro

err := api.RemoveWorkspaceMember("1234567890abcdef1234567890abcdef", "abcdef0123456789abcdef01")
if err != nil {
	panic(err)
}

Compartilhando aplicações

err := api.AddWorkspaceApplication("1234567890abcdef1234567890abcdef", "abc123def456abc123def456")
if err != nil {
	panic(err)
}

err = api.RemoveWorkspaceApplication("1234567890abcdef1234567890abcdef", "abc123def456abc123def456")

Saindo ou deletando um workspace

Deletar um workspace é irreversível e está disponível apenas para o dono.
// Como membro
err := api.LeaveWorkspace("1234567890abcdef1234567890abcdef")

// Como dono (irreversível)
err = api.DeleteWorkspace("1234567890abcdef1234567890abcdef")