Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import lombok.Builder;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.index.IndexDirection;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
Expand All @@ -12,6 +14,9 @@

@Builder
@Document(collection = "rawResponses")
@CompoundIndexes({
@CompoundIndex(name = "payload_campaignId_index", def = "{ 'payload.campaignId': 1 }")
})
public record RawResponseDocument (
@Id
ObjectId id,
Expand All @@ -22,7 +27,5 @@ public record RawResponseDocument (
Map<String,Object> payload,
LocalDateTime recordDate,
@Indexed(direction = IndexDirection.DESCENDING)
LocalDateTime processDate,
@Indexed
String campaignId
LocalDateTime processDate
){}
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ void getLunaticJsonRawDataModelFromJsonBody() {
@Test
void getRawResponsesFromJsonBody() {
//GIVEN
String campaignId = "getRawResponsesFromJsonBody";
String campaignId = "VPPI2024M05";
String questionnaireId = campaignId + "_quest";
String interrogationId = "getRawResponsesFromJsonBody_id1";
Instant recordDate = Instant.parse("2025-01-01T01:00:00.000Z");
Expand Down Expand Up @@ -423,12 +423,64 @@ private void addJsonRawDataDocumentToStub(String campaignId,

private void addJsonRawResponseDataDocumentToStub(String campaignId, String questionnaireId, String interrogationId) {
RawResponseDocument rawResponseDocument = RawResponseDocument.builder()
.campaignId(campaignId)
.collectionInstrumentId(questionnaireId)
.interrogationId(interrogationId)
.recordDate(LocalDateTime.now())
.payload(Map.of("campaignId", campaignId))
.build();

rawResponseDataPersistanceStub.getMongoStub().add(rawResponseDocument);
}

@Test
void getRawResponsesFromJsonBody_filterByCampaignId() {
// GIVEN
rawResponseDataPersistanceStub.getMongoStub().clear();

String campaignId = "CAMPAIGN_OK";
String questionnaireId = campaignId + "_QUEST";
String interrogationId1 = "INT_1";
String interrogationId2 = "INT_2";

// document with the wanted campaignId
RawResponseDocument rawResponseDocument = RawResponseDocument.builder()
.collectionInstrumentId(questionnaireId)
.interrogationId(interrogationId1)
.recordDate(LocalDateTime.now())
.payload(Map.of("campaignId", campaignId))
.build();

// document with another campaignId
RawResponseDocument rawResponseDocument1 = RawResponseDocument.builder()
.collectionInstrumentId("OTHER_QUEST")
.interrogationId(interrogationId2)
.recordDate(LocalDateTime.now())
.payload(Map.of("campaignId", "OTHER_CAMPAIGN"))
.build();

rawResponseDataPersistanceStub.getMongoStub().addAll(List.of(rawResponseDocument, rawResponseDocument1));

Instant startDate = Instant.now().minusSeconds(3600);
Instant endDate = Instant.now().plusSeconds(3600);

// WHEN
ResponseEntity<PagedModel<RawResponseModel>> response =
rawResponseController.getRawResponsesFromJsonBody(
campaignId,
startDate,
endDate,
0,
10
);

// THEN
Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue();
Assertions.assertThat(response.getBody()).isNotNull();
Assertions.assertThat(response.getBody().getContent()).hasSize(1);

RawResponseModel result = response.getBody().getContent().getFirst();
Assertions.assertThat(result.interrogationId()).isEqualTo(interrogationId1);
Assertions.assertThat(result.payload().get("campaignId")).isEqualTo(campaignId);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,24 @@ public List<ModeDto> findModesByCollectionInstrument(String collectionInstrument
}

@Override
public Page<RawResponseModel> findByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) {
public Page<RawResponseModel> findByCampaignIdAndDate(
String campaignId,
Instant startDate,
Instant endDate,
Pageable pageable
) {
List<RawResponseDocument> foundRaws = mongoStub.stream()
.filter(rawData -> rawData.campaignId().equals(campaignId))
.filter(rawData -> {
Object payloadCampaignId = rawData.payload().get("campaignId");
return campaignId.equals(payloadCampaignId);
})
.toList();
return new PageImpl<>(RawResponseDocumentMapper.INSTANCE.listDocumentToListModel(foundRaws),

return new PageImpl<>(
RawResponseDocumentMapper.INSTANCE.listDocumentToListModel(foundRaws),
pageable,
foundRaws.size());
foundRaws.size()
);
}

@Override
Expand Down
Loading