forked from raystack/stencil
-
Notifications
You must be signed in to change notification settings - Fork 0
/
namespace.go
65 lines (56 loc) · 2.75 KB
/
namespace.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package api
import (
"context"
"github.com/goto/stencil/core/namespace"
stencilv1beta1 "github.com/goto/stencil/proto/v1beta1"
"google.golang.org/protobuf/types/known/timestamppb"
)
func createNamespaceRequestToNamespace(r *stencilv1beta1.CreateNamespaceRequest) namespace.Namespace {
return namespace.Namespace{
ID: r.GetId(),
Format: r.GetFormat().String(),
Compatibility: r.GetCompatibility().String(),
Description: r.GetDescription(),
}
}
func namespaceToProto(ns namespace.Namespace) *stencilv1beta1.Namespace {
return &stencilv1beta1.Namespace{
Id: ns.ID,
Format: stencilv1beta1.Schema_Format(stencilv1beta1.Schema_Format_value[ns.Format]),
Compatibility: stencilv1beta1.Schema_Compatibility(stencilv1beta1.Schema_Compatibility_value[ns.Compatibility]),
Description: ns.Description,
CreatedAt: timestamppb.New(ns.CreatedAt),
UpdatedAt: timestamppb.New(ns.UpdatedAt),
}
}
// CreateNamespace handler for creating namespace
func (a *API) CreateNamespace(ctx context.Context, in *stencilv1beta1.CreateNamespaceRequest) (*stencilv1beta1.CreateNamespaceResponse, error) {
ns := createNamespaceRequestToNamespace(in)
newNamespace, err := a.namespace.Create(ctx, ns)
return &stencilv1beta1.CreateNamespaceResponse{Namespace: namespaceToProto(newNamespace)}, err
}
func (a *API) UpdateNamespace(ctx context.Context, in *stencilv1beta1.UpdateNamespaceRequest) (*stencilv1beta1.UpdateNamespaceResponse, error) {
ns, err := a.namespace.Update(ctx, namespace.Namespace{ID: in.GetId(), Format: in.GetFormat().String(), Compatibility: in.GetCompatibility().String(), Description: in.GetDescription()})
return &stencilv1beta1.UpdateNamespaceResponse{Namespace: namespaceToProto(ns)}, err
}
func (a *API) GetNamespace(ctx context.Context, in *stencilv1beta1.GetNamespaceRequest) (*stencilv1beta1.GetNamespaceResponse, error) {
namespace, err := a.namespace.Get(ctx, in.GetId())
return &stencilv1beta1.GetNamespaceResponse{Namespace: namespaceToProto(namespace)}, err
}
// ListNamespaces handler for returning list of available namespaces
func (a *API) ListNamespaces(ctx context.Context, in *stencilv1beta1.ListNamespacesRequest) (*stencilv1beta1.ListNamespacesResponse, error) {
namespaces, err := a.namespace.List(ctx)
var nsp []*stencilv1beta1.Namespace
for _, n := range namespaces {
nsp = append(nsp, namespaceToProto(n))
}
return &stencilv1beta1.ListNamespacesResponse{Namespaces: nsp}, err
}
func (a *API) DeleteNamespace(ctx context.Context, in *stencilv1beta1.DeleteNamespaceRequest) (*stencilv1beta1.DeleteNamespaceResponse, error) {
err := a.namespace.Delete(ctx, in.GetId())
message := "success"
if err != nil {
message = "failed"
}
return &stencilv1beta1.DeleteNamespaceResponse{Message: message}, err
}