Activities
This commit is contained in:
@@ -32,6 +32,9 @@ public abstract class AbstractActivity extends AbstractTimestampedEntity {
|
||||
@Column
|
||||
public String sportType;
|
||||
|
||||
@Column
|
||||
public ActivityTypeEnum activityType;
|
||||
|
||||
@Column
|
||||
public Instant startTime;
|
||||
|
||||
|
||||
@@ -29,6 +29,27 @@ public enum ActivityTypeEnum implements PersistableEnum<ActivityTypeEnum> {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public static ActivityTypeEnum fromSportType(final String sportType) {
|
||||
return switch (sportType) {
|
||||
case "Ride" -> RIDE;
|
||||
case "Run" -> RUN;
|
||||
case "Swim" -> SWIM;
|
||||
case "Workout" -> WORKOUT;
|
||||
case "VirtualSki" -> VIRTUAL_SKI;
|
||||
case "VirtualRide" -> VIRTUAL_RIDE;
|
||||
case "Hike" -> HIKE;
|
||||
case "Walk" -> WALK;
|
||||
case "WeightTraining" -> WEIGHT_TRAINING;
|
||||
case "Pilates" -> PILATES;
|
||||
case "NordicSki" -> NORDIC_SKI;
|
||||
case "VirtualRow" -> VIRTUAL_ROW;
|
||||
case "Rowing" -> ROWING;
|
||||
case "Yoga" -> YOGA;
|
||||
case "TrailRun" -> TRAIL_RUN;
|
||||
default -> OTHER;
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getKey() {
|
||||
return key;
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.peakup.connector.intervals.mapper;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.peakup.activity.model.ActivityAchievement;
|
||||
import com.peakup.activity.model.ActivityTypeEnum;
|
||||
import com.peakup.activity.model.ActivityAttachment;
|
||||
import com.peakup.activity.model.ActivityMapStreamPoint;
|
||||
import com.peakup.activity.model.ActivityStreamPoint;
|
||||
@@ -35,7 +36,7 @@ import java.util.stream.Collectors;
|
||||
componentModel = MappingConstants.ComponentModel.CDI,
|
||||
unmappedTargetPolicy = ReportingPolicy.ERROR,
|
||||
unmappedSourcePolicy = ReportingPolicy.IGNORE,
|
||||
imports = {NullableUtils.class, Instant.class}
|
||||
imports = {NullableUtils.class, Instant.class, ActivityTypeEnum.class}
|
||||
)
|
||||
public abstract class IntervalsActivityMapper {
|
||||
|
||||
@@ -59,6 +60,7 @@ public abstract class IntervalsActivityMapper {
|
||||
@Mapping(target = "name", expression = "java(NullableUtils.defaultValue(src.name))")
|
||||
@Mapping(target = "type", expression = "java(NullableUtils.defaultValue(src.type))")
|
||||
@Mapping(target = "sportType", expression = "java(NullableUtils.defaultValue(src.type))")
|
||||
@Mapping(target = "activityType", expression = "java(ActivityTypeEnum.fromSportType(src.type))")
|
||||
@Mapping(target = "timezone", expression = "java(NullableUtils.defaultValue(src.timezone))")
|
||||
@Mapping(target = "startTime", expression = "java(src.start_date != null ? Instant.parse(src.start_date) : null)")
|
||||
@Mapping(target = "distanceM", expression = "java(NullableUtils.defaultValue(src.distance))")
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.peakup.connector.strava.mapper;
|
||||
|
||||
import com.peakup.activity.model.ActivityTypeEnum;
|
||||
import com.peakup.activity.model.IntervalsImportStatusEnum;
|
||||
import com.peakup.activity.model.StravaActivity;
|
||||
import com.peakup.common.NullableUtils;
|
||||
@@ -18,7 +19,7 @@ import java.time.Instant;
|
||||
componentModel = MappingConstants.ComponentModel.CDI,
|
||||
unmappedTargetPolicy = ReportingPolicy.ERROR,
|
||||
unmappedSourcePolicy = ReportingPolicy.IGNORE,
|
||||
imports = {NullableUtils.class, Instant.class, IntervalsImportStatusEnum.class}
|
||||
imports = {NullableUtils.class, Instant.class, IntervalsImportStatusEnum.class, ActivityTypeEnum.class}
|
||||
)
|
||||
public interface StravaActivityMapper {
|
||||
|
||||
@@ -32,6 +33,7 @@ public interface StravaActivityMapper {
|
||||
@Mapping(target = "name", expression = "java(NullableUtils.defaultValue(src.name))")
|
||||
@Mapping(target = "type", expression = "java(NullableUtils.defaultValue(src.type))")
|
||||
@Mapping(target = "sportType", expression = "java(NullableUtils.defaultValue(src.sport_type))")
|
||||
@Mapping(target = "activityType", expression = "java(ActivityTypeEnum.fromSportType(src.sport_type))")
|
||||
@Mapping(target = "timezone", expression = "java(NullableUtils.defaultValue(src.timezone))")
|
||||
@Mapping(target = "startTime", expression = "java(src.start_date != null ? Instant.parse(src.start_date) : null)")
|
||||
@Mapping(target = "distanceM", expression = "java(NullableUtils.defaultValue(src.distance))")
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
ALTER TABLE strava_activity ADD COLUMN IF NOT EXISTS activity_type INTEGER NOT NULL DEFAULT 100;
|
||||
UPDATE strava_activity SET activity_type = CASE sport_type
|
||||
WHEN 'Ride' THEN 1
|
||||
WHEN 'Run' THEN 2
|
||||
WHEN 'Swim' THEN 3
|
||||
WHEN 'Workout' THEN 6
|
||||
WHEN 'VirtualSki' THEN 7
|
||||
WHEN 'VirtualRide' THEN 8
|
||||
WHEN 'Hike' THEN 9
|
||||
WHEN 'Walk' THEN 10
|
||||
WHEN 'WeightTraining' THEN 11
|
||||
WHEN 'Pilates' THEN 12
|
||||
WHEN 'NordicSki' THEN 13
|
||||
WHEN 'VirtualRow' THEN 14
|
||||
WHEN 'Rowing' THEN 15
|
||||
WHEN 'Yoga' THEN 16
|
||||
WHEN 'TrailRun' THEN 17
|
||||
ELSE 100
|
||||
END;
|
||||
|
||||
ALTER TABLE intervals_activity ADD COLUMN IF NOT EXISTS activity_type INTEGER NOT NULL DEFAULT 100;
|
||||
UPDATE intervals_activity SET activity_type = CASE type
|
||||
WHEN 'Ride' THEN 1
|
||||
WHEN 'Run' THEN 2
|
||||
WHEN 'Swim' THEN 3
|
||||
WHEN 'Workout' THEN 6
|
||||
WHEN 'VirtualSki' THEN 7
|
||||
WHEN 'VirtualRide' THEN 8
|
||||
WHEN 'Hike' THEN 9
|
||||
WHEN 'Walk' THEN 10
|
||||
WHEN 'WeightTraining' THEN 11
|
||||
WHEN 'Pilates' THEN 12
|
||||
WHEN 'NordicSki' THEN 13
|
||||
WHEN 'VirtualRow' THEN 14
|
||||
WHEN 'Rowing' THEN 15
|
||||
WHEN 'Yoga' THEN 16
|
||||
WHEN 'TrailRun' THEN 17
|
||||
ELSE 100
|
||||
END;
|
||||
@@ -2,6 +2,7 @@ package com.peakup.workout;
|
||||
|
||||
import com.peakup.AbstractPeakUpTest;
|
||||
import com.peakup.activity.dao.IntervalsActivityDAO;
|
||||
import com.peakup.activity.model.ActivityTypeEnum;
|
||||
import com.peakup.activity.model.IntervalsActivity;
|
||||
import com.peakup.activity.service.IntervalsActivityService;
|
||||
import com.peakup.workout.dao.WorkoutDAO;
|
||||
@@ -77,6 +78,7 @@ class WorkoutLinkTest extends AbstractPeakUpTest {
|
||||
a.setName("Morning Ride");
|
||||
a.setType("Ride");
|
||||
a.setSportType("Ride");
|
||||
a.setActivityType(ActivityTypeEnum.RIDE);
|
||||
a.setStartTime(Instant.parse("2026-03-26T08:00:00Z"));
|
||||
a.setDistanceM(40000.0);
|
||||
a.setMovingTimeS(3600L);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// GENERATED — do not edit manually.
|
||||
|
||||
import type { AbstractTimestampedEntityDo } from './AbstractTimestampedEntityDo';
|
||||
import type { ActivityTypeEnum } from './ActivityTypeEnum';
|
||||
|
||||
export interface AbstractActivityDo extends AbstractTimestampedEntityDo {
|
||||
athleteId: number;
|
||||
@@ -8,6 +9,7 @@ export interface AbstractActivityDo extends AbstractTimestampedEntityDo {
|
||||
name: string;
|
||||
type: string;
|
||||
sportType: string;
|
||||
activityType: ActivityTypeEnum;
|
||||
startTime: string;
|
||||
timezone: string;
|
||||
distanceM: number;
|
||||
|
||||
21
peakup-frontend/src/types/ActivityTypeEnum.ts
Normal file
21
peakup-frontend/src/types/ActivityTypeEnum.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
// GENERATED — do not edit manually.
|
||||
|
||||
export type ActivityTypeEnum =
|
||||
| 'RIDE'
|
||||
| 'RUN'
|
||||
| 'SWIM'
|
||||
| 'OPENWATER'
|
||||
| 'STRENGTH'
|
||||
| 'WORKOUT'
|
||||
| 'VIRTUAL_SKI'
|
||||
| 'VIRTUAL_RIDE'
|
||||
| 'HIKE'
|
||||
| 'WALK'
|
||||
| 'WEIGHT_TRAINING'
|
||||
| 'PILATES'
|
||||
| 'NORDIC_SKI'
|
||||
| 'VIRTUAL_ROW'
|
||||
| 'ROWING'
|
||||
| 'YOGA'
|
||||
| 'TRAIL_RUN'
|
||||
| 'OTHER';
|
||||
Reference in New Issue
Block a user