Skip to content

Commit 0b1e616

Browse files
authored
784 when clicking on timeline shows a previous day 2 (#785)
1 parent 5d1cbd3 commit 0b1e616

File tree

58 files changed

+389
-1546
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+389
-1546
lines changed

.github/workflows/release.yml

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ on:
55
push:
66
tags:
77
- 'v[0-9]+.[0-9]+.[0-9]+'
8-
8+
- 'v[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+'
99
permissions:
1010
packages: write
1111
contents: write
@@ -65,10 +65,10 @@ jobs:
6565
dedicatedcode/reitti
6666
ghcr.io/${{ github.repository }}
6767
tags: |
68-
type=raw,value=latest,enable={{is_default_branch}}
68+
type=raw,value=latest,enable=${{ !contains(github.ref, '-beta') && github.ref_type == 'tag' }}
6969
type=semver,pattern={{version}}
70-
type=semver,pattern={{major}}.{{minor}}
71-
type=semver,pattern={{major}}
70+
type=semver,pattern={{major}}.{{minor}},enable=${{ !contains(github.ref, '-beta') }}
71+
type=semver,pattern={{major}},enable=${{ !contains(github.ref, '-beta') }}
7272
- name: Build and push reitti image
7373
uses: docker/build-push-action@v6
7474
with:
@@ -85,10 +85,10 @@ jobs:
8585
dedicatedcode/reitti-tile-cache
8686
ghcr.io/${{ github.repository }}-tile-cache
8787
tags: |
88-
type=raw,value=latest,enable={{is_default_branch}}
88+
type=raw,value=latest,enable=${{ !contains(github.ref, '-beta') && github.ref_type == 'tag' }}
8989
type=semver,pattern={{version}}
90-
type=semver,pattern={{major}}.{{minor}}
91-
type=semver,pattern={{major}}
90+
type=semver,pattern={{major}}.{{minor}},enable=${{ !contains(github.ref, '-beta') }}
91+
type=semver,pattern={{major}},enable=${{ !contains(github.ref, '-beta') }}
9292
- name: Build and push tile-cache image
9393
uses: docker/build-push-action@v6
9494
with:
@@ -101,7 +101,8 @@ jobs:
101101
uses: softprops/action-gh-release@v2
102102
if: github.ref_type == 'tag'
103103
with:
104-
make_latest: true
104+
prerelease: ${{ contains(github.ref, '-beta') }}
105+
make_latest: ${{ !contains(github.ref, '-beta') }}
105106
fail_on_unmatched_files: true
106107
files: |
107108
staging/*.jar

pom.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,14 @@
9191
<artifactId>rqueue-spring-boot-starter</artifactId>
9292
<version>3.4.0-RELEASE</version>
9393
</dependency>
94+
<dependency>
95+
<groupId>com.fasterxml.jackson.datatype</groupId>
96+
<artifactId>jackson-datatype-jsr310</artifactId>
97+
</dependency>
9498
<dependency>
9599
<groupId>net.iakovlev</groupId>
96100
<artifactId>timeshape</artifactId>
97-
<version>2025b.26</version>
101+
<version>2025b.28</version>
98102
</dependency>
99103
<dependency>
100104
<groupId>net.coobird</groupId>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.dedicatedcode.reitti.config;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
5+
import com.github.sonus21.rqueue.converter.GenericMessageConverter;
6+
import com.github.sonus21.rqueue.converter.MessageConverterProvider;
7+
import org.springframework.messaging.converter.MessageConverter;
8+
9+
public class RQueueCustomMessageConverter implements MessageConverterProvider {
10+
@Override
11+
public MessageConverter getConverter() {
12+
return new GenericMessageConverter(new ObjectMapper()
13+
.findAndRegisterModules()
14+
.registerModule(new JavaTimeModule()));
15+
}
16+
}

src/main/java/com/dedicatedcode/reitti/controller/api/LocationDataApiController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ public ResponseEntity<?> getLatestLocationForCurrentUser(@AuthenticationPrincipa
173173
point.setLatitude(latestPoint.getLatitude());
174174
point.setLongitude(latestPoint.getLongitude());
175175
point.setAccuracyMeters(latestPoint.getAccuracyMeters());
176-
point.setTimestamp(latestPoint.getTimestamp().toString());
176+
point.setTimestamp(latestPoint.getTimestamp());
177177

178178
return ResponseEntity.ok(Map.of(
179179
"hasLocation", true,
@@ -254,7 +254,7 @@ private LocationPoint toLocationPoint(RawLocationPoint point) {
254254
p.setLongitude(point.getLongitude());
255255
p.setAccuracyMeters(point.getAccuracyMeters());
256256
p.setElevationMeters(point.getElevationMeters());
257-
p.setTimestamp(point.getTimestamp().toString());
257+
p.setTimestamp(point.getTimestamp());
258258
return p;
259259
}
260260

src/main/java/com/dedicatedcode/reitti/controller/api/ingestion/gpslogger/GPSLoggerIngestionApiController.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.dedicatedcode.reitti.controller.api.ingestion.owntracks.OwntracksFriendResponse;
44
import com.dedicatedcode.reitti.dto.LocationPoint;
5-
import com.dedicatedcode.reitti.dto.LocationPoint2;
65
import com.dedicatedcode.reitti.dto.OwntracksLocationRequest;
76
import com.dedicatedcode.reitti.model.security.User;
87
import com.dedicatedcode.reitti.repository.UserJdbcService;
@@ -51,7 +50,7 @@ public ResponseEntity<?> receiveData(@RequestBody OwntracksLocationRequest reque
5150
}
5251

5352
// Convert an Owntracks format to our LocationPoint format
54-
LocationPoint2 locationPoint = request.toLocationPoint();
53+
LocationPoint locationPoint = request.toLocationPoint();
5554

5655
if (locationPoint.getTimestamp() == null) {
5756
logger.warn("Ignoring location point [{}] because timestamp is null", locationPoint);

src/main/java/com/dedicatedcode/reitti/controller/api/ingestion/overland/OverlandIngestionApiController.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.dedicatedcode.reitti.controller.api.ingestion.overland;
22

33
import com.dedicatedcode.reitti.dto.LocationPoint;
4-
import com.dedicatedcode.reitti.dto.LocationPoint2;
54
import com.dedicatedcode.reitti.dto.OverlandLocationRequest;
65
import com.dedicatedcode.reitti.model.security.User;
76
import com.dedicatedcode.reitti.repository.UserJdbcService;
@@ -54,7 +53,7 @@ public ResponseEntity<?> receiveOverlandData(@RequestBody OverlandLocationReques
5453
}
5554

5655
// Convert Overland locations to our LocationPoint format
57-
List<LocationPoint2> locationPoints = request.getLocations().stream()
56+
List<LocationPoint> locationPoints = request.getLocations().stream()
5857
.map(OverlandLocationRequest.OverlandLocation::toLocationPoint)
5958
.filter(point -> point != null && point.getTimestamp() != null && point.getAccuracyMeters() != null)
6059
.toList();
@@ -67,7 +66,7 @@ public ResponseEntity<?> receiveOverlandData(@RequestBody OverlandLocationReques
6766
}
6867

6968
// Add each location point to the batching service
70-
for (LocationPoint2 point : locationPoints) {
69+
for (LocationPoint point : locationPoints) {
7170
this.locationBatchingService.addLocationPoint(user, point);
7271
}
7372
logger.debug("Successfully received and queued {} Overland location points for user {}",

src/main/java/com/dedicatedcode/reitti/controller/api/ingestion/owntracks/OwntracksIngestionApiController.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.dedicatedcode.reitti.controller.api.ingestion.owntracks;
22

33
import com.dedicatedcode.reitti.dto.LocationPoint;
4-
import com.dedicatedcode.reitti.dto.LocationPoint2;
54
import com.dedicatedcode.reitti.dto.OwntracksLocationRequest;
65
import com.dedicatedcode.reitti.dto.ReittiRemoteInfo;
76
import com.dedicatedcode.reitti.model.geo.RawLocationPoint;
@@ -29,8 +28,6 @@
2928
import org.springframework.web.bind.annotation.RequestMapping;
3029
import org.springframework.web.bind.annotation.RestController;
3130

32-
import java.time.Instant;
33-
import java.time.ZonedDateTime;
3431
import java.util.ArrayList;
3532
import java.util.List;
3633
import java.util.Map;
@@ -74,7 +71,7 @@ public ResponseEntity<?> receiveOwntracksData(@RequestBody OwntracksLocationRequ
7471
}
7572

7673
// Convert an Owntracks format to our LocationPoint format
77-
LocationPoint2 locationPoint = request.toLocationPoint();
74+
LocationPoint locationPoint = request.toLocationPoint();
7875

7976
if (locationPoint.getTimestamp() == null) {
8077
logger.warn("Ignoring location point [{}] because timestamp is null", locationPoint);
@@ -145,7 +142,7 @@ private List<OwntracksFriendResponse> buildFriendsData(User user) {
145142

146143
friendsData.add(owntracksFriendResponse);
147144
Optional<LocationPoint> latestLocation = reittiIntegrationService.findLatest(user, integration.getId());
148-
latestLocation.ifPresent(location -> friendsData.add(new OwntracksFriendResponse(tid, info.userInfo().displayName(), location.getLatitude(), location.getLongitude(), Instant.parse(location.getTimestamp()).getEpochSecond())));
145+
latestLocation.ifPresent(location -> friendsData.add(new OwntracksFriendResponse(tid, info.userInfo().displayName(), location.getLatitude(), location.getLongitude(), location.getTimestamp().getEpochSecond())));
149146
} catch (RequestFailedException | RequestTemporaryFailedException e) {
150147
logger.warn("Couldn't fetch info for integration {}", integration.getId(), e);
151148
}

src/main/java/com/dedicatedcode/reitti/dto/ConfigurationForm.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public static ConfigurationForm fromConfiguration(DetectionParameter config, Zon
6161
form.setMaxMergeTimeBetweenSameStayPoints(config.getVisitDetection().getMaxMergeTimeBetweenSameStayPoints());
6262
form.setSearchDurationInHours(config.getVisitMerging().getSearchDurationInHours());
6363
form.setMaxMergeTimeBetweenSameVisits(config.getVisitMerging().getMaxMergeTimeBetweenSameVisits());
64-
form.setMinDistanceBetweenVisits(config.getVisitMerging().getMinDistanceBetweenVisits());
64+
form.setMinDistanceBetweenVisits(config.getVisitMerging().getPlaceRadiusMeters());
6565

6666
// Check if configuration matches any predefined sensitivity level
6767
Integer matchingSensitivityLevel = findMatchingSensitivityLevel(config);
@@ -104,7 +104,7 @@ private static boolean configurationMatches(DetectionParameter config,
104104
actualDetection.getMaxMergeTimeBetweenSameStayPoints() == expectedDetection.getMaxMergeTimeBetweenSameStayPoints() &&
105105
actualMerging.getSearchDurationInHours() == expectedMerging.getSearchDurationInHours() &&
106106
actualMerging.getMaxMergeTimeBetweenSameVisits() == expectedMerging.getMaxMergeTimeBetweenSameVisits() &&
107-
actualMerging.getMinDistanceBetweenVisits() == expectedMerging.getMinDistanceBetweenVisits();
107+
actualMerging.getPlaceRadiusMeters() == expectedMerging.getPlaceRadiusMeters();
108108
}
109109

110110
private static DetectionParameter.VisitDetection mapSensitivityToVisitDetection(int level) {
@@ -142,7 +142,7 @@ public void applySensitivityLevel(Integer level) {
142142
this.maxMergeTimeBetweenSameStayPoints = visitDetection.getMaxMergeTimeBetweenSameStayPoints();
143143
this.searchDurationInHours = visitMerging.getSearchDurationInHours();
144144
this.maxMergeTimeBetweenSameVisits = visitMerging.getMaxMergeTimeBetweenSameVisits();
145-
this.minDistanceBetweenVisits = visitMerging.getMinDistanceBetweenVisits();
145+
this.minDistanceBetweenVisits = visitMerging.getPlaceRadiusMeters();
146146
this.sensitivityLevel = level;
147147
}
148148

@@ -169,7 +169,7 @@ public boolean hasConfigurationChanged(DetectionParameter original) {
169169

170170
if (originalMerging.getSearchDurationInHours() != currentMerging.getSearchDurationInHours() ||
171171
originalMerging.getMaxMergeTimeBetweenSameVisits() != currentMerging.getMaxMergeTimeBetweenSameVisits() ||
172-
originalMerging.getMinDistanceBetweenVisits() != currentMerging.getMinDistanceBetweenVisits()) {
172+
originalMerging.getPlaceRadiusMeters() != currentMerging.getPlaceRadiusMeters()) {
173173
return true;
174174
}
175175

src/main/java/com/dedicatedcode/reitti/dto/LocationPoint.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import jakarta.validation.constraints.NotNull;
44

5+
import java.time.Instant;
6+
57
public class LocationPoint {
68
@NotNull
79
private Double latitude;
@@ -10,7 +12,7 @@ public class LocationPoint {
1012
private Double longitude;
1113

1214
@NotNull
13-
private String timestamp; // ISO8601 format
15+
private Instant timestamp;
1416

1517
@NotNull
1618
private Double accuracyMeters;
@@ -33,11 +35,11 @@ public void setLongitude(Double longitude) {
3335
this.longitude = longitude;
3436
}
3537

36-
public String getTimestamp() {
38+
public Instant getTimestamp() {
3739
return timestamp;
3840
}
3941

40-
public void setTimestamp(String timestamp) {
42+
public void setTimestamp(Instant timestamp) {
4143
this.timestamp = timestamp;
4244
}
4345

src/main/java/com/dedicatedcode/reitti/dto/LocationPoint2.java

Lines changed: 0 additions & 77 deletions
This file was deleted.

0 commit comments

Comments
 (0)