Skip to content

Commit d4151c3

Browse files
committed
feat: WIP modelefiliere add questionnaireMetadata and correct typo "persistance"
1 parent fdb3e3e commit d4151c3

23 files changed

+146
-109
lines changed

src/main/java/fr/insee/genesis/domain/model/metadata/QuestionnaireMetadataModel.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import fr.insee.bpm.metadata.model.MetadataModel;
44
import fr.insee.genesis.domain.model.surveyunit.Mode;
5+
import lombok.Builder;
56

7+
@Builder
68
public record QuestionnaireMetadataModel (
7-
String questionnaireId,
9+
String collectionInstrumentId,
810
Mode mode,
911
MetadataModel metadataModel
1012
){}

src/main/java/fr/insee/genesis/domain/ports/api/QuestionnaireMetadataApiPort.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
import java.util.List;
1010

1111
public interface QuestionnaireMetadataApiPort {
12-
MetadataModel find(String questionnaireId, Mode mode) throws GenesisException;
13-
MetadataModel loadAndSaveIfNotExists(String campaignName, String questionnaireId, Mode mode, FileUtils fileUtils,
12+
MetadataModel find(String collectionInstrumentId, Mode mode) throws GenesisException;
13+
MetadataModel loadAndSaveIfNotExists(String campaignName, String collectionInstrumentId, Mode mode, FileUtils fileUtils,
1414
List<GenesisError> errors) throws GenesisException;
15-
void remove(String questionnaireId, Mode mode);
15+
void remove(String collectionInstrumentId, Mode mode);
1616

17-
void save(String questionnaireId, Mode mode, MetadataModel metadataModel);
17+
void save(String collectionInstrumentId, Mode mode, MetadataModel metadataModel);
1818
}

src/main/java/fr/insee/genesis/domain/ports/spi/QuestionnaireMetadataPersistancePort.java renamed to src/main/java/fr/insee/genesis/domain/ports/spi/QuestionnaireMetadataPersistencePort.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
import java.util.List;
77

8-
public interface QuestionnaireMetadataPersistancePort {
9-
List<QuestionnaireMetadataModel> find(String questionnaireId, Mode mode);
8+
public interface QuestionnaireMetadataPersistencePort {
9+
List<QuestionnaireMetadataModel> find(String collectionInstrumentId, Mode mode);
1010
void save(QuestionnaireMetadataModel questionnaireMetadataModel);
1111

12-
void remove(String questionnaireId, Mode mode);
12+
void remove(String collectionInstrumentId, Mode mode);
1313
}

src/main/java/fr/insee/genesis/domain/service/metadata/QuestionnaireMetadataService.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import fr.insee.genesis.domain.model.metadata.QuestionnaireMetadataModel;
1111
import fr.insee.genesis.domain.model.surveyunit.Mode;
1212
import fr.insee.genesis.domain.ports.api.QuestionnaireMetadataApiPort;
13-
import fr.insee.genesis.domain.ports.spi.QuestionnaireMetadataPersistancePort;
13+
import fr.insee.genesis.domain.ports.spi.QuestionnaireMetadataPersistencePort;
1414
import fr.insee.genesis.exceptions.GenesisError;
1515
import fr.insee.genesis.exceptions.GenesisException;
1616
import fr.insee.genesis.infrastructure.utils.FileUtils;
@@ -30,36 +30,36 @@ public class QuestionnaireMetadataService implements QuestionnaireMetadataApiPor
3030
private static final String DDI_FILE_PATTERN = "ddi[\\w,\\s-]+\\.xml";
3131
private static final String LUNATIC_FILE_PATTERN = "lunatic[\\w,\\s-]+\\.json";
3232

33-
QuestionnaireMetadataPersistancePort questionnaireMetadataPersistancePort;
33+
QuestionnaireMetadataPersistencePort questionnaireMetadataPersistencePort;
3434

3535

3636
@Override
37-
public MetadataModel find(String questionnaireId, Mode mode) throws GenesisException {
37+
public MetadataModel find(String collectionInstrumentId, Mode mode) throws GenesisException {
3838
List<QuestionnaireMetadataModel> questionnaireMetadataModels =
39-
questionnaireMetadataPersistancePort.find(questionnaireId, mode);
39+
questionnaireMetadataPersistencePort.find(collectionInstrumentId, mode);
4040
if(questionnaireMetadataModels.isEmpty()){
41-
throw new GenesisException(404, "Questionnaire metadata not found");
41+
throw new GenesisException(404, "Collection instrument metadata not found");
4242
}
4343
return questionnaireMetadataModels.getFirst().metadataModel();
4444
}
4545

4646
@Override
47-
public MetadataModel loadAndSaveIfNotExists(String campaignName, String questionnaireId, Mode mode, FileUtils fileUtils,
47+
public MetadataModel loadAndSaveIfNotExists(String campaignName, String collectionInstrumentId, Mode mode, FileUtils fileUtils,
4848
List<GenesisError> errors) throws GenesisException {
4949
List<QuestionnaireMetadataModel> questionnaireMetadataModels =
50-
questionnaireMetadataPersistancePort.find(questionnaireId.toUpperCase(), mode);
50+
questionnaireMetadataPersistencePort.find(collectionInstrumentId.toUpperCase(), mode);
5151
if(questionnaireMetadataModels.isEmpty() || questionnaireMetadataModels.getFirst().metadataModel() == null){
5252
MetadataModel metadataModel = readMetadatas(campaignName, mode.getModeName(), fileUtils, errors);
53-
saveMetadata(questionnaireId.toUpperCase(), mode, metadataModel);
53+
saveMetadata(collectionInstrumentId.toUpperCase(), mode, metadataModel);
5454
return metadataModel;
5555
}
5656
return questionnaireMetadataModels.getFirst().metadataModel();
5757
}
5858

59-
private void saveMetadata(String questionnaireId, Mode mode, MetadataModel metadataModel) {
60-
questionnaireMetadataPersistancePort.save(
59+
private void saveMetadata(String collectionInstrumentId, Mode mode, MetadataModel metadataModel) {
60+
questionnaireMetadataPersistencePort.save(
6161
new QuestionnaireMetadataModel(
62-
questionnaireId,
62+
collectionInstrumentId,
6363
mode,
6464
metadataModel
6565
)
@@ -140,14 +140,14 @@ private MetadataModel parseMetadata(String metadataFilePath, boolean withDDI) {
140140
}
141141

142142
@Override
143-
public void remove(String questionnaireId, Mode mode) {
144-
questionnaireMetadataPersistancePort.remove(questionnaireId, mode);
143+
public void remove(String collectionInstrumentId, Mode mode) {
144+
questionnaireMetadataPersistencePort.remove(collectionInstrumentId, mode);
145145
}
146146

147147
@Override
148-
public void save(String questionnaireId, Mode mode, MetadataModel metadataModel) {
149-
questionnaireMetadataPersistancePort.save(new QuestionnaireMetadataModel(
150-
questionnaireId,
148+
public void save(String collectionInstrumentId, Mode mode, MetadataModel metadataModel) {
149+
questionnaireMetadataPersistencePort.save(new QuestionnaireMetadataModel(
150+
collectionInstrumentId,
151151
mode,
152152
metadataModel
153153
));

src/main/java/fr/insee/genesis/infrastructure/adapter/QuestionnaireMetadataMongoAdapter.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import fr.insee.genesis.domain.model.metadata.QuestionnaireMetadataModel;
44
import fr.insee.genesis.domain.model.surveyunit.Mode;
5-
import fr.insee.genesis.domain.ports.spi.QuestionnaireMetadataPersistancePort;
5+
import fr.insee.genesis.domain.ports.spi.QuestionnaireMetadataPersistencePort;
6+
import fr.insee.genesis.infrastructure.document.metadata.QuestionnaireMetadataDocument;
67
import fr.insee.genesis.infrastructure.mappers.QuestionnaireMetadataDocumentMapper;
78
import fr.insee.genesis.infrastructure.repository.QuestionnaireMetadataMongoDBRepository;
89
import lombok.AllArgsConstructor;
@@ -11,36 +12,37 @@
1112
import org.springframework.cache.annotation.Cacheable;
1213
import org.springframework.stereotype.Service;
1314

15+
import java.util.ArrayList;
1416
import java.util.List;
1517

1618
@Service
1719
@AllArgsConstructor
1820
@Qualifier("questionnaireMetadataMongoAdapter")
19-
public class QuestionnaireMetadataMongoAdapter implements QuestionnaireMetadataPersistancePort {
21+
public class QuestionnaireMetadataMongoAdapter implements QuestionnaireMetadataPersistencePort {
2022
private final QuestionnaireMetadataMongoDBRepository questionnaireMetadataMongoDBRepository;
2123

2224
@Override
23-
@Cacheable(value = "metadatas", key = "#questionnaireId + '-' + #mode")
24-
public List<QuestionnaireMetadataModel> find(String questionnaireId, Mode mode) {
25-
return QuestionnaireMetadataDocumentMapper.INSTANCE.listDocumentToListModel(
26-
questionnaireMetadataMongoDBRepository.findByQuestionnaireIdAndMode(
27-
questionnaireId, mode
28-
)
29-
);
25+
@Cacheable(value = "metadatas", key = "#collectionInstrumentId + '-' + #mode")
26+
public List<QuestionnaireMetadataModel> find(String collectionInstrumentId, Mode mode) {
27+
List<QuestionnaireMetadataDocument> results = new ArrayList<>();
28+
results.addAll(questionnaireMetadataMongoDBRepository.findByQuestionnaireIdAndMode(collectionInstrumentId, mode));
29+
results.addAll(questionnaireMetadataMongoDBRepository.findByCollectionInstrumentIdAndMode(collectionInstrumentId, mode));
30+
return QuestionnaireMetadataDocumentMapper.INSTANCE.listDocumentToListModel(results);
3031
}
3132

3233
@Override
33-
@CacheEvict(value = "metadatas", key = "#questionnaireMetadataModel.questionnaireId() + '-' + #questionnaireMetadataModel.mode()")
34+
@CacheEvict(value = "metadatas", key = "#questionnaireMetadataModel.collectionInstrumentId() + '-' + #questionnaireMetadataModel.mode()")
3435
public void save(QuestionnaireMetadataModel questionnaireMetadataModel) {
35-
remove(questionnaireMetadataModel.questionnaireId(), questionnaireMetadataModel.mode());
36+
remove(questionnaireMetadataModel.collectionInstrumentId(), questionnaireMetadataModel.mode());
3637
questionnaireMetadataMongoDBRepository.save(
3738
QuestionnaireMetadataDocumentMapper.INSTANCE.modelToDocument(questionnaireMetadataModel)
3839
);
3940
}
4041

4142
@Override
42-
@CacheEvict(value = "metadatas", key = "#questionnaireId + '-' + #mode")
43-
public void remove(String questionnaireId, Mode mode) {
44-
questionnaireMetadataMongoDBRepository.deleteByQuestionnaireIdAndMode(questionnaireId, mode);
43+
@CacheEvict(value = "metadatas", key = "#collectionInstrumentId + '-' + #mode")
44+
public void remove(String collectionInstrumentId, Mode mode) {
45+
questionnaireMetadataMongoDBRepository.deleteByQuestionnaireIdAndMode(collectionInstrumentId, mode);
46+
questionnaireMetadataMongoDBRepository.deleteByCollectionInstrumentIdIdAndMode(collectionInstrumentId, mode);
4547
}
4648
}

src/main/java/fr/insee/genesis/infrastructure/document/metadata/QuestionnaireMetadataDocument.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,18 @@
55
import org.springframework.data.mongodb.core.index.CompoundIndex;
66
import org.springframework.data.mongodb.core.mapping.Document;
77

8+
/* It is not possible to respect these rules in a record (compilation error).
9+
I choose to keep the record here (this choice can be challenged)*/
10+
@SuppressWarnings({
11+
"java:S1123", // deprecated annotation usage
12+
"java:S6355" // Add 'since' and/or 'forRemoval' arguments to the @Deprecated annotation
13+
})
814
@CompoundIndex(name = "questionnaireId_1_mode_1", def = "{'questionnaireId': 1, 'mode': 1}")
915
@Document(collection = "questionnaireMetadatas")
1016
public record QuestionnaireMetadataDocument(
17+
@Deprecated
1118
String questionnaireId,
19+
String collectionInstrumentId,
1220
Mode mode,
1321
MetadataModel metadataModel
1422
){}

src/main/java/fr/insee/genesis/infrastructure/mappers/QuestionnaireMetadataDocumentMapper.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import fr.insee.genesis.domain.model.metadata.QuestionnaireMetadataModel;
44
import fr.insee.genesis.infrastructure.document.metadata.QuestionnaireMetadataDocument;
5+
import org.mapstruct.AfterMapping;
56
import org.mapstruct.Mapper;
7+
import org.mapstruct.MappingTarget;
68
import org.mapstruct.factory.Mappers;
79

810
import java.util.List;
@@ -18,4 +20,15 @@ public interface QuestionnaireMetadataDocumentMapper {
1820
List<QuestionnaireMetadataModel> listDocumentToListModel(List<QuestionnaireMetadataDocument> documentList);
1921

2022
List<QuestionnaireMetadataDocument> listModelToListDocument(List<QuestionnaireMetadataModel> modelList);
23+
24+
@SuppressWarnings("removal")
25+
@AfterMapping
26+
default void fillModelAfterRead(
27+
QuestionnaireMetadataDocument doc,
28+
@MappingTarget QuestionnaireMetadataModel.QuestionnaireMetadataModelBuilder builder
29+
) {
30+
if (doc.collectionInstrumentId() == null && doc.questionnaireId()!=null) {
31+
builder.collectionInstrumentId(doc.questionnaireId());
32+
}
33+
}
2134
}

src/main/java/fr/insee/genesis/infrastructure/repository/QuestionnaireMetadataMongoDBRepository.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ public interface QuestionnaireMetadataMongoDBRepository extends CrudRepository<Q
1111
@Query("{'questionnaireId' : ?0, 'mode' : ?1}")
1212
List<QuestionnaireMetadataDocument> findByQuestionnaireIdAndMode(String questionnaireId, Mode mode);
1313

14+
@Query("{'collectionInstrumentId' : ?0, 'mode' : ?1}")
15+
List<QuestionnaireMetadataDocument> findByCollectionInstrumentIdAndMode(String collectionInstrumentId, Mode mode);
16+
1417
@Query(value = "{'questionnaireId' : ?0, 'mode' : ?1}", delete = true)
1518
void deleteByQuestionnaireIdAndMode(String questionnaireId, Mode mode);
19+
20+
@Query(value = "{'collectionInstrumentId' : ?0, 'mode' : ?1}", delete = true)
21+
void deleteByCollectionInstrumentIdIdAndMode(String collectionInstrumentId, Mode mode);
1622
}

src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import fr.insee.genesis.stubs.ConfigStub;
1818
import fr.insee.genesis.stubs.DataProcessingContextPersistancePortStub;
1919
import fr.insee.genesis.stubs.LunaticModelPersistanceStub;
20-
import fr.insee.genesis.stubs.QuestionnaireMetadataPersistancePortStub;
20+
import fr.insee.genesis.stubs.QuestionnaireMetadataPersistencePortStub;
2121
import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub;
2222
import io.cucumber.java.Before;
2323
import io.cucumber.java.en.Given;
@@ -49,11 +49,11 @@ public class LunaticModelDefinitions {
4949
LunaticModelController lunaticModelController = new LunaticModelController(new LunaticModelService(lunaticModelPersistanceStub));
5050

5151
SurveyUnitPersistencePortStub surveyUnitPersistencePortStub = new SurveyUnitPersistencePortStub();
52-
static QuestionnaireMetadataPersistancePortStub questionnaireMetadataPersistancePortStub = new QuestionnaireMetadataPersistancePortStub();
52+
static QuestionnaireMetadataPersistencePortStub questionnaireMetadataPersistencePortStub = new QuestionnaireMetadataPersistencePortStub();
5353
QuestionnaireController questionnaireController = new QuestionnaireController(
5454
new SurveyUnitService(
5555
surveyUnitPersistencePortStub,
56-
new QuestionnaireMetadataService(questionnaireMetadataPersistancePortStub),
56+
new QuestionnaireMetadataService(questionnaireMetadataPersistencePortStub),
5757
new FileUtils(new ConfigStub())
5858
),
5959
new DataProcessingContextService(

src/test/java/cucumber/functional_tests/MainDefinitions.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import fr.insee.genesis.infrastructure.utils.FileUtils;
3232
import fr.insee.genesis.stubs.ConfigStub;
3333
import fr.insee.genesis.stubs.DataProcessingContextPersistancePortStub;
34-
import fr.insee.genesis.stubs.QuestionnaireMetadataPersistancePortStub;
34+
import fr.insee.genesis.stubs.QuestionnaireMetadataPersistencePortStub;
3535
import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub;
3636
import io.cucumber.java.After;
3737
import io.cucumber.java.Before;
@@ -65,10 +65,10 @@ public class MainDefinitions {
6565

6666
SurveyUnitQualityService surveyUnitQualityService = new SurveyUnitQualityService();
6767
SurveyUnitPersistencePortStub surveyUnitPersistence = new SurveyUnitPersistencePortStub();
68-
static QuestionnaireMetadataPersistancePortStub questionnaireMetadataPersistancePortStub =
69-
new QuestionnaireMetadataPersistancePortStub();
68+
static QuestionnaireMetadataPersistencePortStub questionnaireMetadataPersistencePortStub =
69+
new QuestionnaireMetadataPersistencePortStub();
7070
static QuestionnaireMetadataService questionnaireMetadataService =
71-
new QuestionnaireMetadataService(questionnaireMetadataPersistancePortStub);
71+
new QuestionnaireMetadataService(questionnaireMetadataPersistencePortStub);
7272
DataProcessingContextPersistancePortStub dataProcessingContextPersistancePortStub =
7373
new DataProcessingContextPersistancePortStub();
7474
DataProcessingContextApiPort dataProcessingContextApiPort = new DataProcessingContextService(
@@ -81,7 +81,7 @@ public class MainDefinitions {
8181
ResponseEntity<Object> surveyUnitLatestStatesResponse;
8282

8383
ResponseController responseController = new ResponseController(
84-
new SurveyUnitService(surveyUnitPersistence, new QuestionnaireMetadataService(questionnaireMetadataPersistancePortStub), new FileUtils(config)),
84+
new SurveyUnitService(surveyUnitPersistence, new QuestionnaireMetadataService(questionnaireMetadataPersistencePortStub), new FileUtils(config)),
8585
surveyUnitQualityService,
8686
new FileUtils(config),
8787
new ControllerUtils(new FileUtils(config)),
@@ -163,18 +163,18 @@ public void get_models(String fileName, String ddiName) throws IOException, Pars
163163
LunaticXmlCampaign campaign;
164164
campaign = parser.parseDataFile(filePath);
165165
List<QuestionnaireMetadataModel> questionnaireMetadataModels =
166-
questionnaireMetadataPersistancePortStub.find(directory, Mode.WEB);
166+
questionnaireMetadataPersistencePortStub.find(directory, Mode.WEB);
167167
if(questionnaireMetadataModels.isEmpty()){
168168
MetadataModel metadataModel = DDIReader.getMetadataFromDDI(
169169
ddiFilePath.toFile().toURI().toURL().toString(),
170170
new FileInputStream(ddiFilePath.toFile())
171171
);
172-
questionnaireMetadataPersistancePortStub.save(new QuestionnaireMetadataModel(
172+
questionnaireMetadataPersistencePortStub.save(new QuestionnaireMetadataModel(
173173
directory,
174174
Mode.WEB,
175175
metadataModel
176176
));
177-
questionnaireMetadataModels = questionnaireMetadataPersistancePortStub.find(directory, Mode.WEB);
177+
questionnaireMetadataModels = questionnaireMetadataPersistencePortStub.find(directory, Mode.WEB);
178178
}
179179
List<SurveyUnitModel> surveyUnitModels1 = new ArrayList<>();
180180
for (LunaticXmlSurveyUnit su : campaign.getSurveyUnits()) {

0 commit comments

Comments
 (0)