Skip to content

Commit 6405148

Browse files
authored
feat : improve getClosableSurveyUnits to add new type (#211)
* feat : improve getClosableSurveyUnits to add new type
1 parent 654caf0 commit 6405148

3 files changed

Lines changed: 80 additions & 20 deletions

File tree

src/main/java/fr/insee/pearljam/api/repository/SurveyUnitRepository.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,39 @@ AND co.type NOT IN ('INA','NOA')
122122
)
123123
)
124124
""")
125-
List<SurveyUnit> findClosableIascoSurveyUnitId(@Param("ids") List<String> ids);
125+
List<SurveyUnit> findClosableHousef2fSurveyUnitId(@Param("ids") List<String> ids);
126126

127+
@Query(value = """
128+
SELECT su
129+
FROM SurveyUnit su
130+
LEFT JOIN FETCH su.identification ident
131+
WHERE su.id IN (:ids)
132+
""")
133+
List<SurveyUnit> findClosableIndf2fFSurveyUnitId(@Param("ids") List<String> ids);
134+
135+
@Query(value = """
136+
SELECT su
137+
FROM SurveyUnit su
138+
LEFT JOIN FETCH su.identification ident
139+
WHERE su.id IN (:ids)
140+
""")
141+
List<SurveyUnit> findClosableIndf2fnorFSurveyUnitId(@Param("ids") List<String> ids);
127142

143+
@Query(value = """
144+
SELECT su
145+
FROM SurveyUnit su
146+
LEFT JOIN FETCH su.identification ident
147+
WHERE su.id IN (:ids)
148+
""")
149+
List<SurveyUnit> findClosableIndtelFSurveyUnitId(@Param("ids") List<String> ids);
150+
151+
@Query(value = """
152+
SELECT su
153+
FROM SurveyUnit su
154+
LEFT JOIN FETCH su.identification ident
155+
WHERE su.id IN (:ids)
156+
""")
157+
List<SurveyUnit> findClosableIndtelnorFSurveyUnitId(@Param("ids") List<String> ids);
128158

129159
@Query(value="SELECT su FROM SurveyUnit su "
130160
+" LEFT JOIN fetch su.comments"

src/main/java/fr/insee/pearljam/api/service/impl/SurveyUnitServiceImpl.java

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import fr.insee.pearljam.api.repository.*;
1313
import fr.insee.pearljam.api.service.SurveyUnitService;
1414
import fr.insee.pearljam.api.service.SurveyUnitUpdateService;
15+
import java.util.function.Function;
1516
import fr.insee.pearljam.api.service.UserService;
1617
import fr.insee.pearljam.api.service.UtilsService;
1718
import fr.insee.pearljam.api.surveyunit.dto.ContactOutcomeDto;
@@ -36,7 +37,6 @@
3637

3738
import java.util.*;
3839
import java.util.stream.Collectors;
39-
import java.util.stream.Stream;
4040

4141
/**
4242
* @author scorcaud
@@ -56,7 +56,6 @@ public class SurveyUnitServiceImpl implements SurveyUnitService {
5656
private final SurveyUnitRepository surveyUnitRepository;
5757
private final SurveyUnitTempZoneRepository surveyUnitTempZoneRepository;
5858
private final AddressRepository addressRepository;
59-
private final ContactOutcomeRepository contactOutcomeRepository;
6059
private final StateRepository stateRepository;
6160
private final InterviewerRepository interviewerRepository;
6261
private final CampaignRepository campaignRepository;
@@ -310,22 +309,33 @@ public List<SurveyUnitCampaignDto> getClosableSurveyUnits(HttpServletRequest req
310309
List<String> lstOuId = userService.getUserOUs(userId, true).stream().map(OrganizationUnitDto::getId)
311310
.toList();
312311

313-
List<String> noIdentSurveyUnitIds = surveyUnitRepository
314-
.findSurveyUnitIdsOfOrganizationUnitsInProcessingPhaseByIdentificationConfiguration(
315-
System.currentTimeMillis(), lstOuId, IdentificationConfiguration.NOIDENT);
316-
List<String> iascoSurveyUnitIds = surveyUnitRepository
317-
.findSurveyUnitIdsOfOrganizationUnitsInProcessingPhaseByIdentificationConfiguration(
318-
System.currentTimeMillis(), lstOuId, IdentificationConfiguration.IASCO);
319-
320-
// apply different business rules to select SU
321-
List<SurveyUnit> noIdentSurveyUnitsToCheck = surveyUnitRepository
322-
.findClosableNoIdentSurveyUnitId(noIdentSurveyUnitIds);
323-
List<SurveyUnit> iascoSurveyUnitsToCheck = surveyUnitRepository
324-
.findClosableIascoSurveyUnitId(iascoSurveyUnitIds);
325-
326-
// merge lists
327-
List<SurveyUnit> suToCheck = Stream.concat(noIdentSurveyUnitsToCheck.stream(), iascoSurveyUnitsToCheck.stream())
328-
.toList();
312+
// Retrieve SurveyUnitIds for each configuration
313+
Map<IdentificationConfiguration, List<String>> surveyUnitIdsByConfig = Arrays.stream(IdentificationConfiguration.values())
314+
.collect(Collectors.toMap(
315+
config -> config,
316+
config -> surveyUnitRepository.findSurveyUnitIdsOfOrganizationUnitsInProcessingPhaseByIdentificationConfiguration(
317+
System.currentTimeMillis(), lstOuId, config)
318+
));
319+
320+
// Mapping between each configuration and the appropriate method to retrieve closable units
321+
Map<IdentificationConfiguration, Function<List<String>, List<SurveyUnit>>> closableSurveyUnitMethods = Map.of(
322+
IdentificationConfiguration.NOIDENT, surveyUnitRepository::findClosableNoIdentSurveyUnitId,
323+
IdentificationConfiguration.IASCO, surveyUnitRepository::findClosableHousef2fSurveyUnitId,
324+
IdentificationConfiguration.HOUSEF2F, surveyUnitRepository::findClosableHousef2fSurveyUnitId,
325+
IdentificationConfiguration.INDF2F, surveyUnitRepository::findClosableIndf2fFSurveyUnitId,
326+
IdentificationConfiguration.INDF2FNOR, surveyUnitRepository::findClosableIndf2fnorFSurveyUnitId,
327+
IdentificationConfiguration.INDTEL, surveyUnitRepository::findClosableIndtelFSurveyUnitId,
328+
IdentificationConfiguration.INDTELNOR, surveyUnitRepository::findClosableIndtelnorFSurveyUnitId
329+
);
330+
331+
332+
// Retrieving SurveyUnits to check
333+
List<SurveyUnit> suToCheck = surveyUnitIdsByConfig.entrySet().stream()
334+
.flatMap(entry -> {
335+
IdentificationConfiguration config = entry.getKey();
336+
List<String> surveyUnitIds = entry.getValue();
337+
return closableSurveyUnitMethods.getOrDefault(config, ids -> List.of()).apply(surveyUnitIds).stream();
338+
}).toList();
329339

330340
Map<String, String> mapQuestionnaireStateBySu = Collections.emptyMap();
331341

src/test/java/fr/insee/pearljam/domain/campaign/service/dummy/SurveyUnitFakeRepository.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,27 @@ public List<SurveyUnit> findClosableNoIdentSurveyUnitId(List<String> ids) {
4747
}
4848

4949
@Override
50-
public List<SurveyUnit> findClosableIascoSurveyUnitId(List<String> ids) {
50+
public List<SurveyUnit> findClosableHousef2fSurveyUnitId(List<String> ids) {
51+
return List.of();
52+
}
53+
54+
@Override
55+
public List<SurveyUnit> findClosableIndf2fFSurveyUnitId(List<String> ids) {
56+
return List.of();
57+
}
58+
59+
@Override
60+
public List<SurveyUnit> findClosableIndf2fnorFSurveyUnitId(List<String> ids) {
61+
return List.of();
62+
}
63+
64+
@Override
65+
public List<SurveyUnit> findClosableIndtelFSurveyUnitId(List<String> ids) {
66+
return List.of();
67+
}
68+
69+
@Override
70+
public List<SurveyUnit> findClosableIndtelnorFSurveyUnitId(List<String> ids) {
5171
return List.of();
5272
}
5373

0 commit comments

Comments
 (0)