v1.2.0:4 — make avg. watts a first-class SetLog field
Average watts (assault bike, rower, ski erg) was a free-text entry stuffed into the per-set customMetrics JSON blob. Promote it to a real nullable column, SetLog.watts, written through every set path (create / PATCH / add-sets / import-save / account-import) and shown everywhere as "Avg. watts" with a proper numeric input. The column is added by the boot-time guarded ALTER in docker_entrypoint.sh (additive, idempotent), so the version migration stays empty. Existing data is untouched: legacy watts values remain readable from customMetrics and migrate to the column the next time a set is saved.
This commit is contained in:
@@ -72,6 +72,11 @@ if command -v sqlite3 >/dev/null 2>&1 && [ -f "$DB_PATH" ]; then
|
||||
sqlite3 "$DB_PATH" "ALTER TABLE SetLog ADD COLUMN customMetrics TEXT;"
|
||||
fi
|
||||
|
||||
if ! sqlite3 "$DB_PATH" "PRAGMA table_info('SetLog');" 2>/dev/null | grep -q "|watts|"; then
|
||||
log "adding missing column SetLog.watts"
|
||||
sqlite3 "$DB_PATH" "ALTER TABLE SetLog ADD COLUMN watts INTEGER;"
|
||||
fi
|
||||
|
||||
if ! sqlite3 "$DB_PATH" "PRAGMA table_info('Workout');" 2>/dev/null | grep -q "|deletedAt|"; then
|
||||
log "adding missing column Workout.deletedAt"
|
||||
sqlite3 "$DB_PATH" "ALTER TABLE Workout ADD COLUMN deletedAt DATETIME;"
|
||||
|
||||
@@ -18,6 +18,7 @@ import { v_1_1_0_9 } from './v1.1.0.9'
|
||||
import { v_1_2_0_1 } from './v1.2.0.1'
|
||||
import { v_1_2_0_2 } from './v1.2.0.2'
|
||||
import { v_1_2_0_3 } from './v1.2.0.3'
|
||||
import { v_1_2_0_4 } from './v1.2.0.4'
|
||||
|
||||
/**
|
||||
* Version graph for the `proof-of-work` package.
|
||||
@@ -71,9 +72,13 @@ import { v_1_2_0_3 } from './v1.2.0.3'
|
||||
* bcrypt on unknown email) and enforce exerciseId ownership on
|
||||
* workout create/PATCH/add-sets + CSV-import-save (shared
|
||||
* lib/exerciseOwnership). No schema/data change.
|
||||
* v1.2.0:4 — Avg. watts promoted to a first-class set field (SetLog.watts
|
||||
* column, added by the boot-time additive ALTER). Written through
|
||||
* every set path; legacy watts in customMetrics stays readable and
|
||||
* migrates on next save.
|
||||
*/
|
||||
export const versionGraph = VersionGraph.of({
|
||||
current: v_1_2_0_3,
|
||||
current: v_1_2_0_4,
|
||||
other: [
|
||||
v_1_0_0_1,
|
||||
v_1_0_0_2,
|
||||
@@ -93,5 +98,6 @@ export const versionGraph = VersionGraph.of({
|
||||
v_1_1_0_9,
|
||||
v_1_2_0_1,
|
||||
v_1_2_0_2,
|
||||
v_1_2_0_3,
|
||||
],
|
||||
})
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk'
|
||||
|
||||
/**
|
||||
* v1.2.0:4 — Avg. watts as a first-class set field (2026-06-16).
|
||||
*
|
||||
* Average watts (assault bike, rower, ski erg) used to be a free-text entry
|
||||
* stuffed into the per-set customMetrics JSON blob. It's now a real nullable
|
||||
* column, SetLog.watts, written through every set path (create / PATCH /
|
||||
* add-sets / import-save / account-import) and shown everywhere as
|
||||
* "Avg. watts" with a proper numeric input.
|
||||
*
|
||||
* Additive schema change: the SetLog.watts column is added by the boot-time
|
||||
* guarded ALTER in docker_entrypoint.sh (so this migration stays empty, like
|
||||
* every other column add). Existing data is untouched — legacy watts values
|
||||
* remain readable from customMetrics and migrate to the column on next save.
|
||||
*/
|
||||
export const v_1_2_0_4 = VersionInfo.of({
|
||||
version: '1.2.0:4',
|
||||
releaseNotes: {
|
||||
en_US:
|
||||
'Average watts is now a first-class field for cardio machines (assault bike, rower, ski erg) — a proper numeric "Avg. watts" input instead of a free-text custom metric. Existing data is preserved.',
|
||||
},
|
||||
migrations: {
|
||||
up: async () => {},
|
||||
down: IMPOSSIBLE,
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user