Skip to content

Commit

Permalink
refactor: 💡 create index pattern service directly in each route
Browse files Browse the repository at this point in the history
  • Loading branch information
streamich committed Dec 4, 2020
1 parent 4816387 commit 2d9e321
Show file tree
Hide file tree
Showing 10 changed files with 163 additions and 85 deletions.
18 changes: 9 additions & 9 deletions src/plugins/data/server/index_patterns/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,19 +50,19 @@ export function registerRoutes(

// Index Patterns API
registerCreateIndexPatternRoute(router, indexPatternsProvider);
registerGetIndexPatternRoute(router);
registerDeleteIndexPatternRoute(router);
registerUpdateIndexPatternRoute(router);
registerGetIndexPatternRoute(router, indexPatternsProvider);
registerDeleteIndexPatternRoute(router, indexPatternsProvider);
registerUpdateIndexPatternRoute(router, indexPatternsProvider);

// Fields API
registerUpdateFieldsRoute(router);
registerUpdateFieldsRoute(router, indexPatternsProvider);

// Scripted Field API
registerCreateScriptedFieldRoute(router);
registerPutScriptedFieldRoute(router);
registerGetScriptedFieldRoute(router);
registerDeleteScriptedFieldRoute(router);
registerUpdateScriptedFieldRoute(router);
registerCreateScriptedFieldRoute(router, indexPatternsProvider);
registerPutScriptedFieldRoute(router, indexPatternsProvider);
registerGetScriptedFieldRoute(router, indexPatternsProvider);
registerDeleteScriptedFieldRoute(router, indexPatternsProvider);
registerUpdateScriptedFieldRoute(router, indexPatternsProvider);

router.get(
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,12 @@ import { schema } from '@kbn/config-schema';
import { IRouter } from '../../../../../core/server';
import { assertIndexPatternsContext } from './util/assert_index_patterns_context';
import { handleErrors } from './util/handle_errors';
import type { IndexPatternsServiceProvider } from '../index_patterns_service';

export const registerDeleteIndexPatternRoute = (router: IRouter) => {
export const registerDeleteIndexPatternRoute = (
router: IRouter,
indexPatternsProvider: IndexPatternsServiceProvider
) => {
router.delete(
{
path: '/api/index_patterns/index_pattern/{id}',
Expand All @@ -41,10 +45,15 @@ export const registerDeleteIndexPatternRoute = (router: IRouter) => {
router.handleLegacyErrors(
handleErrors(
assertIndexPatternsContext(async (ctx, req, res) => {
const ip = ctx.indexPatterns.indexPatterns!;
const savedObjectsClient = ctx.core.savedObjects.client;
const elasticsearchClient = ctx.core.elasticsearch.client.asCurrentUser;
const indexPatternsService = await indexPatternsProvider.createIndexPatternsService(
savedObjectsClient,
elasticsearchClient
);
const id = req.params.id;

await ip.delete(id);
await indexPatternsService.delete(id);

return res.ok({
headers: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@ import { IRouter } from '../../../../../../core/server';
import { assertIndexPatternsContext } from '../util/assert_index_patterns_context';
import { handleErrors } from '../util/handle_errors';
import { serializedFieldFormatSchema } from '../util/schemas';
import type { IndexPatternsServiceProvider } from '../../index_patterns_service';

export const registerUpdateFieldsRoute = (router: IRouter) => {
export const registerUpdateFieldsRoute = (
router: IRouter,
indexPatternsProvider: IndexPatternsServiceProvider
) => {
router.post(
{
path: '/api/index_patterns/index_pattern/{id}/fields',
Expand Down Expand Up @@ -63,7 +67,12 @@ export const registerUpdateFieldsRoute = (router: IRouter) => {
router.handleLegacyErrors(
handleErrors(
assertIndexPatternsContext(async (ctx, req, res) => {
const ip = ctx.indexPatterns.indexPatterns!;
const savedObjectsClient = ctx.core.savedObjects.client;
const elasticsearchClient = ctx.core.elasticsearch.client.asCurrentUser;
const indexPatternsService = await indexPatternsProvider.createIndexPatternsService(
savedObjectsClient,
elasticsearchClient
);
const id = req.params.id;
const {
// eslint-disable-next-line @typescript-eslint/naming-convention
Expand All @@ -76,7 +85,7 @@ export const registerUpdateFieldsRoute = (router: IRouter) => {
throw new Error('No fields provided.');
}

const indexPattern = await ip.get(id);
const indexPattern = await indexPatternsService.get(id);

let changeCount = 0;
for (const fieldName of fieldNames) {
Expand Down Expand Up @@ -106,10 +115,10 @@ export const registerUpdateFieldsRoute = (router: IRouter) => {
throw new Error('Change set is empty.');
}

await ip.updateSavedObject(indexPattern);
await indexPatternsService.updateSavedObject(indexPattern);

if (refresh_fields) {
await ip.refreshFields(indexPattern);
await indexPatternsService.refreshFields(indexPattern);
}

return res.ok({
Expand Down
15 changes: 12 additions & 3 deletions src/plugins/data/server/index_patterns/routes/get_index_pattern.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,12 @@ import { schema } from '@kbn/config-schema';
import { IRouter } from '../../../../../core/server';
import { assertIndexPatternsContext } from './util/assert_index_patterns_context';
import { handleErrors } from './util/handle_errors';
import type { IndexPatternsServiceProvider } from '../index_patterns_service';

export const registerGetIndexPatternRoute = (router: IRouter) => {
export const registerGetIndexPatternRoute = (
router: IRouter,
indexPatternsProvider: IndexPatternsServiceProvider
) => {
router.get(
{
path: '/api/index_patterns/index_pattern/{id}',
Expand All @@ -41,9 +45,14 @@ export const registerGetIndexPatternRoute = (router: IRouter) => {
router.handleLegacyErrors(
handleErrors(
assertIndexPatternsContext(async (ctx, req, res) => {
const ip = ctx.indexPatterns.indexPatterns!;
const savedObjectsClient = ctx.core.savedObjects.client;
const elasticsearchClient = ctx.core.elasticsearch.client.asCurrentUser;
const indexPatternsService = await indexPatternsProvider.createIndexPatternsService(
savedObjectsClient,
elasticsearchClient
);
const id = req.params.id;
const indexPattern = await ip.get(id);
const indexPattern = await indexPatternsService.get(id);

return res.ok({
headers: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@ import { IRouter } from '../../../../../../core/server';
import { assertIndexPatternsContext } from '../util/assert_index_patterns_context';
import { handleErrors } from '../util/handle_errors';
import { fieldSpecSchema } from '../util/schemas';
import type { IndexPatternsServiceProvider } from '../../index_patterns_service';

export const registerCreateScriptedFieldRoute = (router: IRouter) => {
export const registerCreateScriptedFieldRoute = (
router: IRouter,
indexPatternsProvider: IndexPatternsServiceProvider
) => {
router.post(
{
path: '/api/index_patterns/index_pattern/{id}/scripted_field',
Expand All @@ -46,7 +50,12 @@ export const registerCreateScriptedFieldRoute = (router: IRouter) => {
router.handleLegacyErrors(
handleErrors(
assertIndexPatternsContext(async (ctx, req, res) => {
const ip = ctx.indexPatterns.indexPatterns!;
const savedObjectsClient = ctx.core.savedObjects.client;
const elasticsearchClient = ctx.core.elasticsearch.client.asCurrentUser;
const indexPatternsService = await indexPatternsProvider.createIndexPatternsService(
savedObjectsClient,
elasticsearchClient
);
const id = req.params.id;
const {
// eslint-disable-next-line @typescript-eslint/naming-convention
Expand All @@ -58,7 +67,7 @@ export const registerCreateScriptedFieldRoute = (router: IRouter) => {
throw new Error('Only scripted fields can be created.');
}

const indexPattern = await ip.get(id);
const indexPattern = await indexPatternsService.get(id);

if (indexPattern.fields.getByName(field.name)) {
throw new Error(`Field [name = ${field.name}] already exists.`);
Expand All @@ -70,9 +79,9 @@ export const registerCreateScriptedFieldRoute = (router: IRouter) => {
searchable: true,
});

await ip.updateSavedObject(indexPattern);
await indexPatternsService.updateSavedObject(indexPattern);
if (refresh_fields) {
await ip.refreshFields(indexPattern);
await indexPatternsService.refreshFields(indexPattern);
}

const fieldObject = indexPattern.fields.getByName(field.name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@ import { IRouter } from '../../../../../../core/server';
import { ErrorIndexPatternFieldNotFound } from '../../error';
import { assertIndexPatternsContext } from '../util/assert_index_patterns_context';
import { handleErrors } from '../util/handle_errors';
import type { IndexPatternsServiceProvider } from '../../index_patterns_service';

export const registerDeleteScriptedFieldRoute = (router: IRouter) => {
export const registerDeleteScriptedFieldRoute = (
router: IRouter,
indexPatternsProvider: IndexPatternsServiceProvider
) => {
router.delete(
{
path: '/api/index_patterns/index_pattern/{id}/scripted_field/{name}',
Expand All @@ -46,11 +50,16 @@ export const registerDeleteScriptedFieldRoute = (router: IRouter) => {
router.handleLegacyErrors(
handleErrors(
assertIndexPatternsContext(async (ctx, req, res) => {
const ip = ctx.indexPatterns.indexPatterns!;
const savedObjectsClient = ctx.core.savedObjects.client;
const elasticsearchClient = ctx.core.elasticsearch.client.asCurrentUser;
const indexPatternsService = await indexPatternsProvider.createIndexPatternsService(
savedObjectsClient,
elasticsearchClient
);
const id = req.params.id;
const name = req.params.name;

const indexPattern = await ip.get(id);
const indexPattern = await indexPatternsService.get(id);
const field = indexPattern.fields.getByName(name);

if (!field) {
Expand All @@ -63,7 +72,7 @@ export const registerDeleteScriptedFieldRoute = (router: IRouter) => {

indexPattern.fields.remove(field);

await ip.updateSavedObject(indexPattern);
await indexPatternsService.updateSavedObject(indexPattern);

return res.ok({
headers: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@ import { IRouter } from '../../../../../../core/server';
import { ErrorIndexPatternFieldNotFound } from '../../error';
import { assertIndexPatternsContext } from '../util/assert_index_patterns_context';
import { handleErrors } from '../util/handle_errors';
import type { IndexPatternsServiceProvider } from '../../index_patterns_service';

export const registerGetScriptedFieldRoute = (router: IRouter) => {
export const registerGetScriptedFieldRoute = (
router: IRouter,
indexPatternsProvider: IndexPatternsServiceProvider
) => {
router.get(
{
path: '/api/index_patterns/index_pattern/{id}/scripted_field/{name}',
Expand All @@ -46,11 +50,16 @@ export const registerGetScriptedFieldRoute = (router: IRouter) => {
router.handleLegacyErrors(
handleErrors(
assertIndexPatternsContext(async (ctx, req, res) => {
const ip = ctx.indexPatterns.indexPatterns!;
const savedObjectsClient = ctx.core.savedObjects.client;
const elasticsearchClient = ctx.core.elasticsearch.client.asCurrentUser;
const indexPatternsService = await indexPatternsProvider.createIndexPatternsService(
savedObjectsClient,
elasticsearchClient
);
const id = req.params.id;
const name = req.params.name;

const indexPattern = await ip.get(id);
const indexPattern = await indexPatternsService.get(id);
const field = indexPattern.fields.getByName(name);

if (!field) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@ import { IRouter } from '../../../../../../core/server';
import { assertIndexPatternsContext } from '../util/assert_index_patterns_context';
import { handleErrors } from '../util/handle_errors';
import { fieldSpecSchema } from '../util/schemas';
import type { IndexPatternsServiceProvider } from '../../index_patterns_service';

export const registerPutScriptedFieldRoute = (router: IRouter) => {
export const registerPutScriptedFieldRoute = (
router: IRouter,
indexPatternsProvider: IndexPatternsServiceProvider
) => {
router.put(
{
path: '/api/index_patterns/index_pattern/{id}/scripted_field',
Expand All @@ -46,7 +50,12 @@ export const registerPutScriptedFieldRoute = (router: IRouter) => {
router.handleLegacyErrors(
handleErrors(
assertIndexPatternsContext(async (ctx, req, res) => {
const ip = ctx.indexPatterns.indexPatterns!;
const savedObjectsClient = ctx.core.savedObjects.client;
const elasticsearchClient = ctx.core.elasticsearch.client.asCurrentUser;
const indexPatternsService = await indexPatternsProvider.createIndexPatternsService(
savedObjectsClient,
elasticsearchClient
);
const id = req.params.id;
const {
// eslint-disable-next-line @typescript-eslint/naming-convention
Expand All @@ -58,7 +67,7 @@ export const registerPutScriptedFieldRoute = (router: IRouter) => {
throw new Error('Only scripted fields can be put.');
}

const indexPattern = await ip.get(id);
const indexPattern = await indexPatternsService.get(id);

const oldFieldObject = indexPattern.fields.getByName(field.name);
if (!!oldFieldObject) {
Expand All @@ -71,9 +80,9 @@ export const registerPutScriptedFieldRoute = (router: IRouter) => {
searchable: true,
});

await ip.updateSavedObject(indexPattern);
await indexPatternsService.updateSavedObject(indexPattern);
if (refresh_fields) {
await ip.refreshFields(indexPattern);
await indexPatternsService.refreshFields(indexPattern);
}

const fieldObject = indexPattern.fields.getByName(field.name);
Expand Down
Loading

0 comments on commit 2d9e321

Please sign in to comment.