Skip to content

Commit 9a4e6ec

Browse files
committed
replace localDateTime with Instant to correct date reprocessing problems
1 parent 8adc0fc commit 9a4e6ec

16 files changed

Lines changed: 69 additions & 62 deletions

src/main/java/fr/insee/genesis/controller/rest/responses/InterrogationController.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.springframework.web.bind.annotation.RequestMapping;
1616
import org.springframework.web.bind.annotation.RequestParam;
1717

18+
import java.time.Instant;
1819
import java.time.LocalDateTime;
1920
import java.util.List;
2021

@@ -55,17 +56,17 @@ public ResponseEntity<List<InterrogationId>> getAllInterrogationIdsByCollectionI
5556
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
5657
@Parameter(
5758
description = "sinceDate",
58-
schema = @Schema(type = "string", format = "date-time", example = "2026-01-01T00:00:00")
59+
schema = @Schema(type = "string", format = "date-time", example = "2026-01-01T00:00:00Z")
5960
)
60-
LocalDateTime start,
61+
Instant start,
6162

6263
@RequestParam("end")
6364
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
6465
@Parameter(
6566
description = "untilDate",
66-
schema = @Schema(type = "string", format = "date-time", example = "2026-01-31T23:59:59")
67+
schema = @Schema(type = "string", format = "date-time", example = "2026-01-31T23:59:59Z")
6768
)
68-
LocalDateTime end) {
69+
Instant end) {
6970
List<InterrogationId> responses = surveyUnitService.findDistinctInterrogationIdsByCollectionInstrumentIdAndRecordDateBetween(collectionInstrumentId, start,end);
7071
return ResponseEntity.ok(responses);
7172
}

src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseReprocessController.java

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import org.springframework.web.bind.annotation.PostMapping;
1818
import org.springframework.web.bind.annotation.RequestParam;
1919

20-
import java.time.LocalDateTime;
20+
import java.time.Instant;
2121

2222
@Controller
2323
@RequiredArgsConstructor
@@ -36,17 +36,21 @@ public ResponseEntity<String> reProcessRawResponsesByCollectionInstrumentId(
3636
@PathVariable("collectionInstrumentId")
3737
String collectionInstrumentId,
3838

39-
@Parameter(description = "Extract since",
40-
schema = @Schema(type = "string", format = "date-time", example = "2026-01-01T00:00:00"))
39+
@Parameter(
40+
description = "Extract since",
41+
schema = @Schema(type = "string", format = "date-time", example = "2026-01-01T00:00:00Z")
42+
)
4143
@RequestParam(value = "sinceDate", required = false)
4244
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
43-
LocalDateTime sinceDate,
45+
Instant sinceDate,
4446

45-
@Parameter(description = "Extract until",
46-
schema = @Schema(type = "string", format = "date-time", example = "2026-02-02T00:00:00"))
47+
@Parameter(
48+
description = "Extract until",
49+
schema = @Schema(type = "string", format = "date-time", example = "2026-02-02T00:00:00Z")
50+
)
4751
@RequestParam(value = "endDate", required = false)
4852
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
49-
LocalDateTime endDate
53+
Instant endDate
5054
) throws GenesisException {
5155

5256
DataProcessResult result = reprocessRawResponseApiPort.reprocessRawResponses(
@@ -69,17 +73,21 @@ public ResponseEntity<String> reProcessJsonRawDataByQuestionnaireId(
6973
@PathVariable("questionnaireId")
7074
String collectionInstrumentId, // 'questionnaireId' is the legacy name for 'collectionInstrumentId'
7175

72-
@Parameter(description = "Extract since",
73-
schema = @Schema(type = "string", format = "date-time", example = "2026-01-01T00:00:00"))
76+
@Parameter(
77+
description = "Extract since",
78+
schema = @Schema(type = "string", format = "date-time", example = "2026-01-01T00:00:00Z")
79+
)
7480
@RequestParam(value = "sinceDate", required = false)
7581
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
76-
LocalDateTime sinceDate,
82+
Instant sinceDate,
7783

78-
@Parameter(description = "Extract until",
79-
schema = @Schema(type = "string", format = "date-time", example = "2026-02-02T00:00:00"))
84+
@Parameter(
85+
description = "Extract until",
86+
schema = @Schema(type = "string", format = "date-time", example = "2026-02-02T00:00:00Z")
87+
)
8088
@RequestParam(value = "endDate", required = false)
8189
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
82-
LocalDateTime endDate
90+
Instant endDate
8391
) throws GenesisException {
8492

8593
DataProcessResult result = reprocessRawResponseApiPort.reprocessRawResponses(

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import fr.insee.genesis.domain.model.surveyunit.rawdata.RawDataModelType;
55
import fr.insee.genesis.exceptions.GenesisException;
66

7-
import java.time.LocalDateTime;
7+
import java.time.Instant;
88

99
public interface ReprocessRawResponseApiPort {
1010

@@ -20,7 +20,7 @@ public interface ReprocessRawResponseApiPort {
2020
*/
2121
DataProcessResult reprocessRawResponses(
2222
RawDataModelType rawDataModelType,
23-
String collectionInstrumentId, LocalDateTime sinceDate, LocalDateTime endDate)
23+
String collectionInstrumentId, Instant sinceDate, Instant endDate)
2424
throws GenesisException;
2525

2626
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
88
import fr.insee.genesis.exceptions.GenesisException;
99

10+
import java.time.Instant;
1011
import java.time.LocalDateTime;
1112
import java.util.List;
1213
import java.util.Set;
@@ -48,7 +49,7 @@ List<SurveyUnitSimplifiedDto> findSimplifiedByCollectionInstrumentIdAndInterroga
4849

4950
List<InterrogationId> findDistinctInterrogationIdsByQuestionnaireIdAndDateAfter(String questionnaireId, LocalDateTime since);
5051

51-
List<InterrogationId> findDistinctInterrogationIdsByCollectionInstrumentIdAndRecordDateBetween(String collectionInstrumentId, LocalDateTime start, LocalDateTime end);
52+
List<InterrogationId> findDistinctInterrogationIdsByCollectionInstrumentIdAndRecordDateBetween(String collectionInstrumentId, Instant start, Instant end);
5253

5354
//========= OPTIMISATIONS PERFS (START) ==========
5455
long countResponsesByCollectionInstrumentId(String questionnaireId);

src/main/java/fr/insee/genesis/domain/ports/spi/RawResponseReprocessPersistencePort.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package fr.insee.genesis.domain.ports.spi;
22

3-
import java.time.LocalDateTime;
3+
import java.time.Instant;
44
import java.util.Set;
55

66
public interface RawResponseReprocessPersistencePort {
@@ -9,7 +9,7 @@ Set<String> findProcessedInterrogationIdsByCollectionInstrumentId(
99
String collectionInstrumentId);
1010

1111
Set<String> findProcessedInterrogationIdsByCollectionInstrumentIdAndRecordDateBetween(
12-
String collectionInstrumentId, LocalDateTime sinceDate, LocalDateTime endDate);
12+
String collectionInstrumentId, Instant sinceDate, Instant endDate);
1313

1414
void resetProcessDates(String collectionInstrumentId, Set<String> interrogationIds);
1515

src/main/java/fr/insee/genesis/domain/service/rawdata/ReprocessRawResponseService.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import org.springframework.lang.NonNull;
1616
import org.springframework.stereotype.Service;
1717

18-
import java.time.LocalDateTime;
18+
import java.time.Instant;
1919
import java.util.ArrayList;
2020
import java.util.Set;
2121

@@ -42,8 +42,8 @@ private enum InputFilterType {
4242
public DataProcessResult reprocessRawResponses(
4343
@NonNull RawDataModelType rawDataModelType,
4444
@NonNull String collectionInstrumentId,
45-
LocalDateTime sinceDate,
46-
LocalDateTime endDate) throws GenesisException {
45+
Instant sinceDate,
46+
Instant endDate) throws GenesisException {
4747

4848
log.info("Start reprocess {} data for collectionInstrumentId={}, sinceDate={}, endDate={}",
4949
rawDataModelType, collectionInstrumentId, sinceDate, endDate);
@@ -68,7 +68,7 @@ public DataProcessResult reprocessRawResponses(
6868
return reprocessInterrogations(rawDataModelType, collectionInstrumentId, interrogationIds);
6969
}
7070

71-
private static InputFilterType validateInputs(LocalDateTime sinceDate, LocalDateTime endDate) {
71+
private static InputFilterType validateInputs(Instant sinceDate, Instant endDate) {
7272
if (bothDatesAreNull(sinceDate, endDate)) {
7373
return InputFilterType.COLLECTION_ID;
7474
}
@@ -81,18 +81,18 @@ private static InputFilterType validateInputs(LocalDateTime sinceDate, LocalDate
8181
return InputFilterType.COLLECTION_ID_AND_DATE;
8282
}
8383

84-
private static boolean endIsBeforeSince(LocalDateTime sinceDate, LocalDateTime endDate) {
84+
private static boolean endIsBeforeSince(Instant sinceDate, Instant endDate) {
8585
return endDate != null && endDate.isBefore(sinceDate);
8686
}
8787

88-
private static boolean bothDatesAreNull(LocalDateTime sinceDate, LocalDateTime endDate) {
88+
private static boolean bothDatesAreNull(Instant sinceDate, Instant endDate) {
8989
return sinceDate == null && endDate == null;
9090
}
9191

92-
private static LocalDateTime effectiveEndDate(LocalDateTime endDate) {
92+
private static Instant effectiveEndDate(Instant endDate) {
9393
if (endDate != null)
9494
return endDate;
95-
var now = LocalDateTime.now();
95+
var now = Instant.now();
9696
log.info("Effective end date: {}", now);
9797
return now;
9898
}

src/main/java/fr/insee/genesis/domain/service/surveyunit/SurveyUnitService.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import java.time.Instant;
2121
import java.time.LocalDateTime;
22-
import java.time.ZoneId;
2322
import java.util.*;
2423
import java.util.stream.Collectors;
2524

@@ -383,19 +382,15 @@ public List<InterrogationId> findDistinctInterrogationIdsByQuestionnaireIdAndDat
383382
@Override
384383
public List<InterrogationId> findDistinctInterrogationIdsByCollectionInstrumentIdAndRecordDateBetween(
385384
String collectionInstrumentId,
386-
LocalDateTime start,
387-
LocalDateTime end
385+
Instant start,
386+
Instant end
388387
) {
389-
ZoneId zone = ZoneId.of("Europe/Paris");
390-
391-
Instant startInstant = start.atZone(zone).toInstant();
392-
Instant endInstant = end.atZone(zone).toInstant();
393388

394389
return surveyUnitPersistencePort
395390
.findInterrogationIdsByCollectionInstrumentIdAndRecordDateBetween(
396391
collectionInstrumentId,
397-
startInstant,
398-
endInstant
392+
start,
393+
end
399394
)
400395
.stream()
401396
.map(su -> new InterrogationId(su.getInterrogationId()))

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.springframework.data.mongodb.core.query.Update;
1212
import org.springframework.stereotype.Service;
1313

14-
import java.time.LocalDateTime;
14+
import java.time.Instant;
1515
import java.util.HashSet;
1616
import java.util.Set;
1717

@@ -36,7 +36,7 @@ public Set<String> findProcessedInterrogationIdsByCollectionInstrumentId(String
3636
*/
3737
@Override
3838
public Set<String> findProcessedInterrogationIdsByCollectionInstrumentIdAndRecordDateBetween(
39-
String questionnaireId, LocalDateTime sinceDate, LocalDateTime endDate) {
39+
String questionnaireId, Instant sinceDate, Instant endDate) {
4040
return new HashSet<>(
4141
repository.findProcessedInterrogationIdsByQuestionnaireIdAndRecordDateBetween(
4242
questionnaireId, sinceDate, endDate));

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.springframework.data.mongodb.core.query.Update;
1212
import org.springframework.stereotype.Service;
1313

14-
import java.time.LocalDateTime;
14+
import java.time.Instant;
1515
import java.util.HashSet;
1616
import java.util.Set;
1717

@@ -30,7 +30,7 @@ public Set<String> findProcessedInterrogationIdsByCollectionInstrumentId(String
3030

3131
@Override
3232
public Set<String> findProcessedInterrogationIdsByCollectionInstrumentIdAndRecordDateBetween(
33-
String collectionInstrumentId, LocalDateTime sinceDate, LocalDateTime endDate) {
33+
String collectionInstrumentId, Instant sinceDate, Instant endDate) {
3434
return new HashSet<>(
3535
repository.findProcessedInterrogationIdsByCollectionInstrumentIdAndRecordDateBetween(
3636
collectionInstrumentId, sinceDate, endDate));

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ public interface LunaticJsonMongoDBRepository extends MongoRepository<LunaticJso
120120
})
121121
List<String> findProcessedInterrogationIdsByQuestionnaireIdAndRecordDateBetween(
122122
String questionnaireId,
123-
LocalDateTime sinceDate,
124-
LocalDateTime endDate
123+
Instant sinceDate,
124+
Instant endDate
125125
);
126126

127127
@Aggregation(pipeline = {

0 commit comments

Comments
 (0)