flexmonster-mongo-connector
Version:
Custom data source API implementation for MongoDB
43 lines (37 loc) • 1.98 kB
text/typescript
import {IRequestArgument} from "../IRequestArgument";
import {QueryBuilder} from "../../../query/builder/QueryBuilder";
import {MongoResponseParser} from "../../../parsers/MongoResponseParser";
import { AbstractApiRequest } from "./AbstractApiRequest";
import { APISchema } from "../../../schema/APISchema";
export class MembersApiRequest extends AbstractApiRequest {
constructor(requestArgument: IRequestArgument) {
super(requestArgument);
this._loggingTemplate = "members";
}
protected buildMongoQuery(queryBuilder: QueryBuilder, schema: APISchema): any {
const mongoQuery: any = queryBuilder.buildMembersPipeline({
"field": this.requestArgument.clientQuery.members["field"],
"filter": this.requestArgument.clientQuery.members["filter"]
}, schema);
//queryBuilder.applyPaging(mongoQuery, {skipNumber: this._currentPageIndex, limitNumber: this.CHUNK_SIZE});
//this._currentPageIndex += this.CHUNK_SIZE;
return mongoQuery;
};
protected parseQueryResult = async (queryResult: Promise<any>, startDate: Date) => {
const parsedData = await MongoResponseParser.getInstance().parseMembersFromCursor(queryResult, <any>this.requestArgument.fieldObject, this.CHUNK_SIZE, startDate);
this.storeMembersNumber(parsedData.getNumberOfItems(), this._schema);
return parsedData;
}
private storeMembersNumber(numberOfMembers: number, schema: APISchema): void {
const uniqueName: string = this.requestArgument.fieldObject["uniqueName"];
schema.fields.get(uniqueName).fieldStats.distinctMembersNumber = numberOfMembers;
return;
}
public toJSON(response: any, nextPageToken: string): any {
const jsonResponse: any = {
"members": response
};
if (nextPageToken != null) jsonResponse["nextPageToken"] = nextPageToken;
return jsonResponse;
}
}