Skip to content

Commit

Permalink
fix: paginated child count + sync save
Browse files Browse the repository at this point in the history
  • Loading branch information
9sneha-n committed Oct 22, 2024
1 parent 2525238 commit 0867fc4
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 25 deletions.
21 changes: 8 additions & 13 deletions src/data/repositories/SurveyFormD2Repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,30 +199,25 @@ export class SurveyD2Repository implements SurveyRepository {
: mapQuestionnaireToEvent(questionnaire, orgUnitId, programId, this.api, eventId);

return $payload.flatMap(payload => {
return apiToFuture(
this.api.tracker.postAsync({ importStrategy: action }, payload)
).flatMap(response => {
return apiToFuture(
// eslint-disable-next-line testing-library/await-async-utils
this.api.system.waitFor("TRACKER_IMPORT_JOB", response.response.id)
).flatMap(result => {
if (result && result.status !== "ERROR") {
return apiToFuture(this.api.tracker.post({ importStrategy: action }, payload)).flatMap(
response => {
if (response && response.status !== "ERROR") {
//return the saved survey id.

const surveyId = isTrackerProgram(programId)
? result.bundleReport?.typeReportMap?.TRACKED_ENTITY?.objectReports[0]
? response.bundleReport?.typeReportMap?.TRACKED_ENTITY?.objectReports[0]
?.uid
: result.bundleReport?.typeReportMap?.EVENT?.objectReports[0]?.uid;
: response.bundleReport?.typeReportMap?.EVENT?.objectReports[0]?.uid;
return Future.success(surveyId);
} else {
return this.getErrorMessageWithNames(
result?.validationReport?.errorReports?.at(0)?.message
response?.validationReport?.errorReports?.at(0)?.message
).flatMap(errorMessage => {
return Future.error(new Error(`Error: ${errorMessage} `));
});
}
});
});
}
);
});
}

Expand Down
58 changes: 46 additions & 12 deletions src/data/utils/surveyChildCountHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
} from "../entities/D2Survey";
import { D2Api } from "@eyeseetea/d2-api/2.36";
import { TrackedEntitiesGetResponse } from "@eyeseetea/d2-api/api/trackerTrackedEntities";
import { TrackerEventsResponse } from "@eyeseetea/d2-api/api/trackerEvents";

export type SurveyChildCountType =
| { type: "value"; value: FutureData<number> }
Expand Down Expand Up @@ -89,6 +90,37 @@ export const getSurveyChildCount = (
}
};

const asyncGetEventSurveyChildCount = async (
page: number,
programId: Id,
api: D2Api,
ouId: string,
ouMode: "SELECTED" | "CHILDREN" | "DESCENDANTS" | undefined,
filterStr: string
) => {
let response: TrackerEventsResponse;
let count = 0;
const pageSize = 250;

do {
response = await api.tracker.events
.get({
fields: { event: true },
pageSize: pageSize,
page: page,
totalPages: true,
program: programId,
orgUnit: ouId,
ouMode: ouMode,
filter: filterStr,
})
.getData();
count += response.instances.length;
page++;
} while (response.page < Math.ceil((response.total as number) / pageSize));

return count;
};
const getEventSurveyCount = (
programId: Id,
orgUnitId: Id,
Expand All @@ -105,17 +137,16 @@ const getEventSurveyCount = (
? `${filterParentDEId}:eq:${parentSurveyId}`
: `${filterParentDEId}:eq:${secondaryParentId} `;

return apiToFuture(
api.tracker.events.get({
fields: { event: true },
program: programId,
orgUnit: ouId,
ouMode: ouMode,
filter: filterStr,
})
).flatMap(response => {
return Future.success(response.instances.length);
});
const childEventCount = asyncGetEventSurveyChildCount(
1,
programId,
api,
ouId,
ouMode,
filterStr
);

return Future.fromPromise(childEventCount);
};

const getTrackerSurveyCount = (
Expand All @@ -134,12 +165,15 @@ const getTrackerSurveyCount = (
return apiToFuture(
api.tracker.trackedEntities.get({
fields: { trackedEntity: true },
pageSize: 250,
totalPages: true,
program: programId,
orgUnit: orgUnitId,
ouMode: ouMode,
filter: `${filterParentDEId}:eq:${parentSurveyId}`,
})
).flatMap((trackedEntities: TrackedEntitiesGetResponse) => {
return Future.success(trackedEntities.instances.length);
if (trackedEntities.total) return Future.success(trackedEntities.total);
else return Future.success(trackedEntities.instances.length);
});
};

0 comments on commit 0867fc4

Please sign in to comment.