Skip to content

Commit

Permalink
feat: use saved objects client instead of internal repository
Browse files Browse the repository at this point in the history
Signed-off-by: SuZhou-Joe <suzhou@amazon.com>
  • Loading branch information
SuZhou-Joe committed Sep 20, 2023
1 parent 0039087 commit 52416b4
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
11 changes: 9 additions & 2 deletions src/plugins/workspace/server/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/
import { PluginInitializerContext, CoreSetup, Plugin, Logger } from '../../../core/server';
import {
PluginInitializerContext,
CoreSetup,
Plugin,
Logger,
CoreStart,
} from '../../../core/server';
import { IWorkspaceDBImpl } from './types';
import { WorkspaceClientWithSavedObject } from './workspace_client';
import { registerRoutes } from './routes';
Expand Down Expand Up @@ -33,8 +39,9 @@ export class WorkspacePlugin implements Plugin<{}, {}> {
};
}

public start() {
public start(core: CoreStart) {
this.logger.debug('Starting Workspace service');
this.client?.setSavedObjects(core.savedObjects);

return {
client: this.client as IWorkspaceDBImpl,
Expand Down
4 changes: 2 additions & 2 deletions src/plugins/workspace/server/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
SavedObjectsFindResponse,
CoreSetup,
WorkspaceAttribute,
ISavedObjectsRepository,
SavedObjectsServiceStart,
} from '../../../core/server';

export interface WorkspaceFindOptions {
Expand All @@ -29,7 +29,7 @@ export interface IRequestDetail {

export interface IWorkspaceDBImpl {
setup(dep: CoreSetup): Promise<IResponse<boolean>>;
setInternalRepository(repository: ISavedObjectsRepository): void;
setSavedObjects(savedObjects: SavedObjectsServiceStart): void;
create(
requestDetail: IRequestDetail,
payload: Omit<WorkspaceAttribute, 'id'>
Expand Down
20 changes: 12 additions & 8 deletions src/plugins/workspace/server/workspace_client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import type {
SavedObjectsClientContract,
CoreSetup,
WorkspaceAttribute,
ISavedObjectsRepository,
SavedObjectsServiceStart,
} from '../../../core/server';
import { WORKSPACE_TYPE } from '../../../core/server';
import { IWorkspaceDBImpl, WorkspaceFindOptions, IResponse, IRequestDetail } from './types';
Expand All @@ -23,15 +23,16 @@ const DUPLICATE_WORKSPACE_NAME_ERROR = i18n.translate('workspace.duplicate.name.

export class WorkspaceClientWithSavedObject implements IWorkspaceDBImpl {
private setupDep: CoreSetup;

private internalSavedObjectsRepository?: ISavedObjectsRepository;
setInternalRepository(repository: ISavedObjectsRepository) {
this.internalSavedObjectsRepository = repository;
}
private savedObjects?: SavedObjectsServiceStart;

constructor(core: CoreSetup) {
this.setupDep = core;
}

private getScopedClient(requestDetail: IRequestDetail): SavedObjectsClientContract | undefined {
return this.savedObjects?.getScopedClient(requestDetail.request);
}

private getSavedObjectClientsFromRequestDetail(
requestDetail: IRequestDetail
): SavedObjectsClientContract {
Expand Down Expand Up @@ -63,7 +64,7 @@ export class WorkspaceClientWithSavedObject implements IWorkspaceDBImpl {
const attributes = payload;
const id = generateRandomId(WORKSPACE_ID_SIZE);
const client = this.getSavedObjectClientsFromRequestDetail(requestDetail);
const existingWorkspaceRes = await this.internalSavedObjectsRepository?.find({
const existingWorkspaceRes = await this.getScopedClient(requestDetail)?.find({
type: WORKSPACE_TYPE,
search: attributes.name,
searchFields: ['name'],
Expand Down Expand Up @@ -148,7 +149,7 @@ export class WorkspaceClientWithSavedObject implements IWorkspaceDBImpl {
const client = this.getSavedObjectClientsFromRequestDetail(requestDetail);
const workspaceInDB: SavedObject<WorkspaceAttribute> = await client.get(WORKSPACE_TYPE, id);
if (workspaceInDB.attributes.name !== attributes.name) {
const existingWorkspaceRes = await this.internalSavedObjectsRepository?.find({
const existingWorkspaceRes = await this.getScopedClient(requestDetail)?.find({
type: WORKSPACE_TYPE,
search: attributes.name,
searchFields: ['name'],
Expand Down Expand Up @@ -184,6 +185,9 @@ export class WorkspaceClientWithSavedObject implements IWorkspaceDBImpl {
};
}
}
public setSavedObjects(savedObjects: SavedObjectsServiceStart) {
this.savedObjects = savedObjects;
}
public async destroy(): Promise<IResponse<boolean>> {
return {
success: true,
Expand Down

0 comments on commit 52416b4

Please sign in to comment.