@glue42/search-api
Version:
Glue42 Search API
41 lines (35 loc) • 2.04 kB
text/typescript
import { Glue42Core } from "@glue42/core";
import { Glue42Search } from "../../search";
import { ClientController } from "../controllers/client";
import { GlueController } from "../controllers/glue";
import { ProviderController } from "../controllers/provider";
import { ClientQuery } from "../models/client-query";
import { ProviderModel } from "../models/provider";
import { ProviderQueryModel } from "../models/provider-query";
import { QueryIdentification } from "../shared/types";
import { QueryResultsPublisher } from "./publisher";
import { AsyncSequelizer } from "./sequelizer";
export class ModelFactory {
constructor(
private readonly glueController: GlueController,
private readonly glue: Glue42Core.GlueCore,
private readonly flushSequelizer: AsyncSequelizer
) {}
public buildProviderModel(providerData: Glue42Search.ProviderData, controller: ProviderController): ProviderModel {
return new ProviderModel(providerData, controller, this.glue.logger.subLogger(`search.provider.model.${providerData.name}`));
}
public buildProviderQueryModel(queryConfig: Glue42Search.QueryConfig, identification: QueryIdentification, controller: ProviderController): ProviderQueryModel {
return new ProviderQueryModel(queryConfig, controller, this.glue.logger.subLogger(`search.provider.${identification.providerId}.query.${identification.queryId}`), identification);
}
public buildPublisher(clientInstanceId: string, queryId: string, isLegacy: boolean): QueryResultsPublisher {
return new QueryResultsPublisher(
this.flushSequelizer,
this.glueController,
this.glue.logger.subLogger(`search.results.publisher.${queryId}`),
clientInstanceId, queryId, isLegacy
);
}
public buildClientQueryModel(masterQueryId: string, controller: ClientController): ClientQuery {
return new ClientQuery(controller, this.glue.logger.subLogger(`search.provider.model.${masterQueryId}`), masterQueryId);
}
}