Garmin: extract and store metrics (#5708, #5709, #5710)

This extracts the following metrics and stores them in a new GenericMetricSample / GENERIC_METRIC_SAMPLE table:
- endurance score
- functional threshold power
- hill endurance
- hill score
- hill strength
- MET max VO2
- running lactate threshold power
- training readiness

Visualisation and charts aren't part of this PR.
This commit is contained in:
Thomas Kuehne
2026-04-12 17:13:10 +00:00
parent bec7846657
commit f9d9ecce09
6 changed files with 241 additions and 10 deletions
@@ -76,7 +76,7 @@ public class GBDaoGenerator {
outputDir.mkdirs();
}
final Schema schema = new Schema(129, MAIN_PACKAGE + ".entities");
final Schema schema = new Schema(130, MAIN_PACKAGE + ".entities");
final List<Entity> sampleProvidersToGenerate = new LinkedList<>();
@@ -248,6 +248,7 @@ public class GBDaoGenerator {
sampleProvidersToGenerate.add(addGenericTrainingLoadChronicSample(schema, user, device));
sampleProvidersToGenerate.add(addGenericWeightSample(schema, user, device));
sampleProvidersToGenerate.add(addGlucoseSample(schema, user, device));
sampleProvidersToGenerate.add(addGenericMetricsSample(schema, user, device));
deleteOldFiles();
@@ -2296,6 +2297,17 @@ public class GBDaoGenerator {
return bloodPressureSample;
}
private static Entity addGenericMetricsSample(Schema schema, Entity user, Entity device) {
Entity sample = addEntity(schema, "GenericMetricSample");
sample.implementsInterface(MAIN_PACKAGE + ".model.MetricSample");
addCommonTimeSampleProperties("AbstractTimeSample", sample, user, device);
sample.addIntProperty("metricType").notNull().primaryKey().codeBeforeGetterAndSetter(OVERRIDE);
sample.addDoubleProperty("metricScore").codeBeforeGetterAndSetter(OVERRIDE);
sample.addLongProperty("metricExtra").codeBeforeGetterAndSetter(OVERRIDE);
return sample;
}
private static final String SAMPLE_PROVIDER_TEMPLATE = """
/* Copyright (C) 2026 Freeyourgadget