Skip to content

Реализовать compositionProviderEngine (движок провайдера которы позволит делать композицию) #403

@bonkalol

Description

@bonkalol

Пример:

export class CompositionProviderTest extends Super {
	static override request: typeof Super.request = Super.request({
		engine: providerCompositionEngine([
			{
				request: (_, params) => new Banners().get(Object.get(params, 'opts.query.bannersQuery')),
				writeResultInto: 'banners'
			},
			{
				request: (_, params) => new Cards().get(Object.get(params, 'opts.query.contentQuery')),
				writeResultInto: 'content'
			}
		])
	});
}

Драфт интерфейса (обсуждаемо)

export interface CompositionProvider {
	/**
	 * Запрос который необходимо выполнить.
	 *
	 * @param options
	 * @param params
	 */
	request(options: RequestOptions, params: MiddlewareParams): Promise<RequestResponseObject>;

	/**
	 * В какие поля результирующего объекта будет записан ответ данного запроса.
	 */
	writeResultInto: string;

	/**
	 * Если функция вернула false, то запрос не будет создан.
	 *
	 * Если функция вернула promise, то будет выполнено ожидание разрешения этого промиса,
	 * и в случае если он разрешится с false, запрос не будет создан.
	 *
	 * @param options
	 * @param params
	 */
	requestFilter?(options: RequestOptions, params: MiddlewareParams): CanPromise<boolean>;

	/**
	 * Если true, то при ошибки данного запроса будет сбой всей композиции.
	 */
	failCompositionOnError?: boolean;
}

Зачем?

У extraProviders есть ряд недостатков, в том числе отсутствует необходимая гибкость при создании композиций. А такой простой функционал, как движок для композиции провайдеров, даёт хорошую гибкость и позволяет реализовать как сложные, так и простые сценарии.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions