Passed
Pull Request — master (#2516)
by Tolga
04:08
created

servers.*TenancyServer.Delete   A

Complexity

Conditions 2

Size

Total Lines 16
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 13
nop 2
dl 0
loc 16
rs 9.75
c 0
b 0
f 0
1
package servers
2
3
import (
4
	"context"
5
	"log/slog"
6
7
	otelCodes "go.opentelemetry.io/otel/codes"
8
	"google.golang.org/grpc/status"
9
10
	"github.com/Permify/permify/internal"
11
	"github.com/Permify/permify/internal/storage"
12
	"github.com/Permify/permify/pkg/database"
13
	v1 "github.com/Permify/permify/pkg/pb/base/v1"
14
)
15
16
// TenancyServer - Structure for Tenancy Server
17
type TenancyServer struct {
18
	v1.UnimplementedTenancyServer
19
20
	tr storage.TenantReader
21
	tw storage.TenantWriter
22
}
23
24
// NewTenancyServer - Creates new Tenancy Server
25
func NewTenancyServer(tr storage.TenantReader, tw storage.TenantWriter) *TenancyServer {
26
	return &TenancyServer{
27
		tr: tr,
28
		tw: tw,
29
	}
30
}
31
32
// Create - Create new Tenant
33
func (t *TenancyServer) Create(ctx context.Context, request *v1.TenantCreateRequest) (*v1.TenantCreateResponse, error) {
34
	ctx, span := internal.Tracer.Start(ctx, "tenant.create")
35
	defer span.End()
36
37
	tenant, err := t.tw.CreateTenant(ctx, request.GetId(), request.GetName())
38
	if err != nil {
39
		span.RecordError(err)
40
		span.SetStatus(otelCodes.Error, err.Error())
41
		slog.ErrorContext(ctx, err.Error())
42
		return nil, status.Error(GetStatus(err), err.Error())
43
	}
44
45
	return &v1.TenantCreateResponse{
46
		Tenant: tenant,
47
	}, nil
48
}
49
50
// Delete - Delete a Tenant
51
func (t *TenancyServer) Delete(ctx context.Context, request *v1.TenantDeleteRequest) (*v1.TenantDeleteResponse, error) {
52
	ctx, span := internal.Tracer.Start(ctx, "tenant.delete")
53
	defer span.End()
54
55
	id := request.GetId()
56
	err := t.tw.DeleteTenant(ctx, id)
57
	if err != nil {
58
		span.RecordError(err)
59
		span.SetStatus(otelCodes.Error, err.Error())
60
		slog.ErrorContext(ctx, err.Error())
61
		return nil, status.Error(GetStatus(err), err.Error())
62
	}
63
64
	return &v1.TenantDeleteResponse{
65
		TenantId: id,
66
	}, nil
67
}
68
69
// List - List Tenants
70
func (t *TenancyServer) List(ctx context.Context, request *v1.TenantListRequest) (*v1.TenantListResponse, error) {
71
	ctx, span := internal.Tracer.Start(ctx, "tenant.list")
72
	defer span.End()
73
74
	tenants, ct, err := t.tr.ListTenants(ctx, database.NewPagination(database.Size(request.GetPageSize()), database.Token(request.GetContinuousToken())))
75
	if err != nil {
76
		span.RecordError(err)
77
		span.SetStatus(otelCodes.Error, err.Error())
78
		slog.ErrorContext(ctx, err.Error())
79
		return nil, status.Error(GetStatus(err), err.Error())
80
	}
81
82
	return &v1.TenantListResponse{
83
		Tenants:         tenants,
84
		ContinuousToken: ct.String(),
85
	}, nil
86
}
87