From 9008bd0f6ffb34eeae91d650915a4fd1136ebe15 Mon Sep 17 00:00:00 2001 From: Francesco Ilario Date: Wed, 15 May 2024 09:09:20 +0200 Subject: [PATCH] add temporary core/workspaces/v2 Signed-off-by: Francesco Ilario --- server/core/workspace/v2/interfaces_read.go | 18 ++++++++++++++++ .../persistence/readclient/interface_test.go | 4 ++-- server/persistence/readclient/readclient.go | 21 ++++++++++++------- .../persistence/readclient/readclient_list.go | 4 ++-- .../persistence/readclient/readclient_read.go | 4 ++-- 5 files changed, 37 insertions(+), 14 deletions(-) create mode 100644 server/core/workspace/v2/interfaces_read.go diff --git a/server/core/workspace/v2/interfaces_read.go b/server/core/workspace/v2/interfaces_read.go new file mode 100644 index 00000000..25002c63 --- /dev/null +++ b/server/core/workspace/v2/interfaces_read.go @@ -0,0 +1,18 @@ +package workspace + +import ( + "context" + + restworkspacesv1alpha1 "github.com/konflux-workspaces/workspaces/server/api/v1alpha1" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// WorkspaceLister is the interface the data source needs to implement to allow the ListWorkspaceHandler to fetch data from it +type WorkspaceLister interface { + ListUserWorkspaces(ctx context.Context, user string, objs *restworkspacesv1alpha1.WorkspaceList, opts ...client.ListOption) error +} + +// WorkspaceReader is the interface the data source needs to implement to allow the ReadWorkspaceHandler to fetch data from it +type WorkspaceReader interface { + ReadUserWorkspace(ctx context.Context, user, owner, space string, obj *restworkspacesv1alpha1.Workspace, opts ...client.GetOption) error +} diff --git a/server/persistence/readclient/interface_test.go b/server/persistence/readclient/interface_test.go index 7b32599c..ed4464c2 100644 --- a/server/persistence/readclient/interface_test.go +++ b/server/persistence/readclient/interface_test.go @@ -4,10 +4,10 @@ import "github.com/konflux-workspaces/workspaces/server/persistence/readclient" //go:generate mockgen -source=interface_test.go -destination=mocks/readclient.go -package=mocks -exclude_interfaces=FakeIWMapper type FakeIWReadClient interface { - readclient.IWReadClient + readclient.InternalWorkspacesReadClient } //go:generate mockgen -source=interface_test.go -destination=mocks/mapper.go -package=mocks -exclude_interfaces=FakeIWReadClient type FakeIWMapper interface { - readclient.IWMapper + readclient.InternalWorkspacesMapper } diff --git a/server/persistence/readclient/readclient.go b/server/persistence/readclient/readclient.go index b7ba4d26..e5837431 100644 --- a/server/persistence/readclient/readclient.go +++ b/server/persistence/readclient/readclient.go @@ -14,14 +14,19 @@ import ( "github.com/konflux-workspaces/workspaces/server/persistence/mapper" ) -type IWReadClient interface { +var ( + _ InternalWorkspacesReadClient = &iwclient.Client{} + _ InternalWorkspacesMapper = mapper.Default +) + +// InternalWorkspacesReadClient is the definition for a InternalWorkspaces Read Client +type InternalWorkspacesReadClient interface { GetAsUser(context.Context, string, iwclient.SpaceKey, *workspacesv1alpha1.InternalWorkspace, ...client.GetOption) error ListAsUser(context.Context, string, *workspacesv1alpha1.InternalWorkspaceList) error } -var _ IWMapper = mapper.Default - -type IWMapper interface { +// InternalWorkspacesMapper is the definition for a InternalWorkspaces/Workspaces Mapper +type InternalWorkspacesMapper interface { InternalWorkspaceListToWorkspaceList(*workspacesv1alpha1.InternalWorkspaceList) (*restworkspacesv1alpha1.WorkspaceList, error) InternalWorkspaceToWorkspace(*workspacesv1alpha1.InternalWorkspace) (*restworkspacesv1alpha1.Workspace, error) WorkspaceToInternalWorkspace(*restworkspacesv1alpha1.Workspace) (*workspacesv1alpha1.InternalWorkspace, error) @@ -30,8 +35,8 @@ type IWMapper interface { // ReadClient implements the WorkspaceLister and WorkspaceReader interfaces // using a client.Reader as backend type ReadClient struct { - internalClient IWReadClient - mapper IWMapper + internalClient InternalWorkspacesReadClient + mapper InternalWorkspacesMapper } // NewDefaultWithCache creates a controller-runtime cache and use it as KubeReadClient's backend. @@ -46,11 +51,11 @@ func NewDefaultWithCache(ctx context.Context, cfg *rest.Config, workspacesNamesp } // NewDefaultWithInternalClient creates a new KubeReadClient with the provided backend -func NewDefaultWithInternalClient(internalClient IWReadClient) *ReadClient { +func NewDefaultWithInternalClient(internalClient InternalWorkspacesReadClient) *ReadClient { return New(internalClient, mapper.Default) } -func New(internalClient IWReadClient, mapper IWMapper) *ReadClient { +func New(internalClient InternalWorkspacesReadClient, mapper InternalWorkspacesMapper) *ReadClient { return &ReadClient{ internalClient: internalClient, mapper: mapper, diff --git a/server/persistence/readclient/readclient_list.go b/server/persistence/readclient/readclient_list.go index 20af4555..9068d977 100644 --- a/server/persistence/readclient/readclient_list.go +++ b/server/persistence/readclient/readclient_list.go @@ -11,10 +11,10 @@ import ( workspacesv1alpha1 "github.com/konflux-workspaces/workspaces/operator/api/v1alpha1" restworkspacesv1alpha1 "github.com/konflux-workspaces/workspaces/server/api/v1alpha1" + "github.com/konflux-workspaces/workspaces/server/core/workspace/v2" ) -// TODO(filariow): enable this after merging changes to `core/workspace` -// var _ workspace.WorkspaceLister = &ReadClient{} +var _ workspace.WorkspaceLister = &ReadClient{} // ListUserWorkspaces Returns all the workspaces the user has access to func (c *ReadClient) ListUserWorkspaces( diff --git a/server/persistence/readclient/readclient_read.go b/server/persistence/readclient/readclient_read.go index 5ee60939..afeebd30 100644 --- a/server/persistence/readclient/readclient_read.go +++ b/server/persistence/readclient/readclient_read.go @@ -8,12 +8,12 @@ import ( workspacesv1alpha1 "github.com/konflux-workspaces/workspaces/operator/api/v1alpha1" restworkspacesv1alpha1 "github.com/konflux-workspaces/workspaces/server/api/v1alpha1" + "github.com/konflux-workspaces/workspaces/server/core/workspace/v2" "github.com/konflux-workspaces/workspaces/server/log" "github.com/konflux-workspaces/workspaces/server/persistence/iwclient" ) -// TODO(filariow): enable this after merging changes to `core/workspace` -// var _ workspace.WorkspaceReader = &ReadClient{} +var _ workspace.WorkspaceReader = &ReadClient{} // ReadUserWorkspace returns the Workspace details only if the user has access to it func (c *ReadClient) ReadUserWorkspace(