-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathLunaticJsonRawDataMongoAdapter.java
More file actions
96 lines (82 loc) · 4.39 KB
/
Copy pathLunaticJsonRawDataMongoAdapter.java
File metadata and controls
96 lines (82 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package fr.insee.genesis.infrastructure.adapter;
import fr.insee.genesis.Constants;
import fr.insee.genesis.domain.model.surveyunit.GroupedInterrogation;
import fr.insee.genesis.domain.model.surveyunit.InterrogationId;
import fr.insee.genesis.domain.model.surveyunit.Mode;
import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel;
import fr.insee.genesis.domain.ports.spi.LunaticJsonRawDataPersistencePort;
import fr.insee.genesis.infrastructure.document.rawdata.LunaticJsonRawDataDocument;
import fr.insee.genesis.infrastructure.mappers.GroupedInterrogationDocumentMapper;
import fr.insee.genesis.infrastructure.mappers.LunaticJsonRawDataDocumentMapper;
import fr.insee.genesis.infrastructure.repository.LunaticJsonMongoDBRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Slf4j
@Service
@Qualifier("lunaticJsonMongoAdapter")
public class LunaticJsonRawDataMongoAdapter implements LunaticJsonRawDataPersistencePort {
private final LunaticJsonMongoDBRepository repository;
private final MongoTemplate mongoTemplate;
public LunaticJsonRawDataMongoAdapter(LunaticJsonMongoDBRepository repository, MongoTemplate mongoTemplate) {
this.repository = repository;
this.mongoTemplate = mongoTemplate;
}
@Override
public void save(LunaticJsonRawDataModel rawData) {
LunaticJsonRawDataDocument doc = LunaticJsonRawDataDocumentMapper.INSTANCE.modelToDocument(rawData);
repository.insert(doc);
}
@Override
public List<LunaticJsonRawDataModel> getAllUnprocessedData() {
return LunaticJsonRawDataDocumentMapper.INSTANCE.listDocumentToListModel(repository.findByNullProcessDate());
}
@Override
public List<LunaticJsonRawDataModel> findRawData(String campaignName, Mode mode, List<String> interrogationIdList) {
List<LunaticJsonRawDataDocument> rawDataDocs = repository.findModesByCampaignIdAndByModeAndinterrogationIdIninterrogationIdList(campaignName, mode, interrogationIdList);return LunaticJsonRawDataDocumentMapper.INSTANCE.listDocumentToListModel(rawDataDocs);
}
@Override
public void updateProcessDates(String campaignId, Set<String> interrogationIds) {
mongoTemplate.updateMulti(
Query.query(Criteria.where("campaignId").is(campaignId).and("interrogationId").in(interrogationIds))
, new Update().set("processDate", LocalDateTime.now())
, Constants.MONGODB_LUNATIC_RAWDATA_COLLECTION_NAME
);
}
@Override
public Set<String> findDistinctQuestionnaireIds() {
Set<String> questionnaireIds = new HashSet<>();
for(String questionnaireId : mongoTemplate.getCollection(Constants.MONGODB_RESPONSE_RAW_COLLECTION_NAME).distinct(
"questionnaireId",
String.class)){
questionnaireIds.add(questionnaireId);
}
return questionnaireIds;
}
@Override
public Page<LunaticJsonRawDataModel> findByCampaignIdAndDate(String campaignId, Instant startDt, Instant endDt, Pageable pageable) {
Page<LunaticJsonRawDataDocument> rawDataDocsPage = repository.findByCampaignIdAndRecordDateBetween(campaignId,startDt,endDt,pageable);
List<LunaticJsonRawDataModel> modelList = LunaticJsonRawDataDocumentMapper.INSTANCE.listDocumentToListModel(rawDataDocsPage.getContent());
return new PageImpl<>(modelList, rawDataDocsPage.getPageable(), rawDataDocsPage.getTotalElements());
}
@Override
public long countResponsesByQuestionnaireId(String questionnaireId) {
return repository.countByQuestionnaireId(questionnaireId);
}
@Override
public List<GroupedInterrogation> findProcessedIdsGroupedByQuestionnaireSince(LocalDateTime since){
return GroupedInterrogationDocumentMapper.INSTANCE.listDocumentToListModel(repository.aggregateRawGrouped(since));
}
}