feat(train): strength plans and sessions (ADR 0035)
Strength plans of exercises from a catalogue or the person's own, in blocks of one exercise or several done in turn (supersets, circuits), each with its sets, reps or seconds, weights and rests; each a sealed `strength_plan` row. Plans are marked with what the place chosen lacks, and a session offers swaps moving the same way that the place allows. A session runs on every device, set by set with the rest counted down, each weight made up from the place's plates, bars and fixed weights with the plate changes between sets, kept in strength_session.json after each change so one cut off is carried on, and saved as a workout of the new activity Strength with its sets, listed on its page; strength training in Health Connect and FIT, no GPX. Migration 20261102113104496-strength-plans is purely additive: it creates the table strength_plan (id uuid v7, spaceId, keyId, the sealed payload and its nonce), its index on spaceId, and a foreign key to offline_sync_spaces with ON DELETE CASCADE, so deleting a person's sync spaces deletes their plans; then the modules' version rows. The gen_random_uuid_v7 function is created or replaced as in every migration. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
064b911aa2
commit
508994be3a
1 changed files with 27612 additions and 25 deletions
|
|
@ -20,6 +20,7 @@
|
|||
"activityWalking": "Gehen",
|
||||
"activityHiking": "Wandern",
|
||||
"activityCycling": "Radfahren",
|
||||
"activityStrength": "Krafttraining",
|
||||
"activityIndoorRowing": "Rudern drinnen",
|
||||
"activityOther": "Anderes Training",
|
||||
"recordAutoPause": "Von selbst pausieren",
|
||||
|
|
@ -60,7 +61,7 @@
|
|||
"recordingNotificationChannel": "Aufzeichnung",
|
||||
"recordingNotificationPaused": "{activity} · pausiert",
|
||||
|
||||
"workoutName": "{when, select, morning_running{Morgenlauf} morning_walking{Morgenspaziergang} morning_hiking{Morgenwanderung} morning_cycling{Morgenradfahrt} morning_indoorRowing{Rudern am Morgen} afternoon_running{Nachmittagslauf} afternoon_walking{Nachmittagsspaziergang} afternoon_hiking{Nachmittagswanderung} afternoon_cycling{Nachmittagsradfahrt} afternoon_indoorRowing{Rudern am Nachmittag} evening_running{Abendlauf} evening_walking{Abendspaziergang} evening_hiking{Abendwanderung} evening_cycling{Abendradfahrt} evening_indoorRowing{Rudern am Abend} night_running{Nachtlauf} night_walking{Nachtspaziergang} night_hiking{Nachtwanderung} night_cycling{Nachtradfahrt} night_indoorRowing{Rudern in der Nacht} other{Training}}",
|
||||
"workoutName": "{when, select, morning_strength{Krafttraining am Morgen} afternoon_strength{Krafttraining am Nachmittag} evening_strength{Krafttraining am Abend} night_strength{Krafttraining in der Nacht} morning_running{Morgenlauf} morning_walking{Morgenspaziergang} morning_hiking{Morgenwanderung} morning_cycling{Morgenradfahrt} morning_indoorRowing{Rudern am Morgen} afternoon_running{Nachmittagslauf} afternoon_walking{Nachmittagsspaziergang} afternoon_hiking{Nachmittagswanderung} afternoon_cycling{Nachmittagsradfahrt} afternoon_indoorRowing{Rudern am Nachmittag} evening_running{Abendlauf} evening_walking{Abendspaziergang} evening_hiking{Abendwanderung} evening_cycling{Abendradfahrt} evening_indoorRowing{Rudern am Abend} night_running{Nachtlauf} night_walking{Nachtspaziergang} night_hiking{Nachtwanderung} night_cycling{Nachtradfahrt} night_indoorRowing{Rudern in der Nacht} other{Training}}",
|
||||
"workoutLocked": "Gesperrtes Training",
|
||||
"workoutLockedHint": "Dieses Gerät hat den Schlüssel nicht, mit dem es versiegelt ist.",
|
||||
"workoutEdit": "Bearbeiten",
|
||||
|
|
@ -634,5 +635,77 @@
|
|||
"plateOn": "Leg auf: {plates}",
|
||||
"plateNoChange": "Nichts ändert sich",
|
||||
"plateMoves": "{count, plural, =0{Keine Scheibe bewegt sich} =1{1 Scheibe je Seite bewegt sich} other{{count} Scheiben je Seite bewegen sich}}",
|
||||
"plateSet": "Satz {number}"
|
||||
"plateSet": "Satz {number}",
|
||||
|
||||
"exerciseName": "{id, select, backSquat{Kniebeuge} frontSquat{Frontkniebeuge} gobletSquat{Goblet Squat} kettlebellGobletSquat{Goblet Squat mit Kettlebell} bodyweightSquat{Kniebeuge ohne Gewicht} lunge{Ausfallschritt} bulgarianSplitSquat{Bulgarische Kniebeuge} bodyweightLunge{Ausfallschritt ohne Gewicht} deadlift{Kreuzheben} romanianDeadlift{Rumänisches Kreuzheben} trapBarDeadlift{Kreuzheben mit Trap Bar} dumbbellRomanianDeadlift{Rumänisches Kreuzheben mit Kurzhanteln} kettlebellSwing{Kettlebell Swing} hipThrust{Hip Thrust} gluteBridge{Glute Bridge} benchPress{Bankdrücken} inclineBenchPress{Schrägbankdrücken} dumbbellBenchPress{Kurzhantel-Bankdrücken} pushUp{Liegestütz} dip{Dip} overheadPress{Schulterdrücken} dumbbellShoulderPress{Kurzhantel-Schulterdrücken} pikePushUp{Pike-Liegestütz} barbellRow{Langhantelrudern} dumbbellRow{Einarmiges Kurzhantelrudern} cableRow{Rudern am Kabelzug} invertedRow{Umgekehrtes Rudern} bandPullApart{Band Pull-Apart} facePull{Face Pull} pullUp{Klimmzug} chinUp{Klimmzug im Untergriff} latPulldown{Latzug} bandPulldown{Latzug mit Band} barbellCurl{Langhantel-Curl} ezBarCurl{SZ-Curl} dumbbellCurl{Kurzhantel-Curl} hammerCurl{Hammer-Curl} tricepsPushdown{Trizepsdrücken am Kabel} skullCrusher{French Press} overheadTricepsExtension{Trizepsstrecken über Kopf} benchDip{Dip an der Bank} lateralRaise{Seitheben} cableLateralRaise{Seitheben am Kabel} calfRaise{Wadenheben} plank{Unterarmstütz} sidePlank{Seitstütz} hangingLegRaise{Beinheben im Hang} crunch{Crunch} farmersCarry{Farmer’s Walk} other{Übung}}",
|
||||
"exerciseNeed": "{need, select, barbell{eine Langhantel} ezBar{eine SZ-Stange} trapBar{eine Trap Bar} dumbbells{Kurzhanteln} kettlebell{eine Kettlebell} bench{eine Bank} rack{ein Rack} pullUpBar{eine Klimmzugstange} dipBars{eine Dipstation} cableMachine{einen Kabelzug} bands{Widerstandsbänder} other{etwas}}",
|
||||
"exercisePattern": "{pattern, select, squat{Kniebeugen} lunge{Ausfallschritte} hinge{Hüftstreckung} horizontalPush{Drücken} verticalPush{Drücken über Kopf} horizontalPull{Rudern} verticalPull{Klimmzüge und Latzug} curl{Curls} extension{Trizeps} raise{Heben} calf{Waden} core{Rumpf} carry{Tragen} other{Andere}}",
|
||||
"exerciseLoad": "{load, select, barbell{Langhantel mit Scheiben} ezBar{SZ-Stange mit Scheiben} trapBar{Trap Bar mit Scheiben} dumbbellPair{Eine Kurzhantel in jeder Hand} dumbbell{Eine Kurzhantel} kettlebell{Kettlebell} cable{Kabelzug} band{Band} body{Körpergewicht} other{Anderes}}",
|
||||
"activityStrengthCard": "Kraft",
|
||||
"strengthPlansHeading": "Kraftpläne",
|
||||
"strengthPlansNew": "Neuer Kraftplan",
|
||||
"strengthPlansEmpty": "Kraftpläne listen Übungen mit Sätzen, Wiederholungen, Gewichten und Pausen auf, einzeln oder als Supersätze und Zirkel.",
|
||||
"strengthPlanLocked": "Lässt sich auf diesem Gerät nicht öffnen",
|
||||
"strengthPlanDeleted": "Kraftplan gelöscht",
|
||||
"strengthStart": "Start",
|
||||
"strengthChoosePlan": "Welcher Plan?",
|
||||
"strengthNoPlans": "Leg zuerst einen Kraftplan an: Die Liste unten hat „Neuer Kraftplan“.",
|
||||
"strengthPlanTitle": "Kraftplan",
|
||||
"strengthPlanName": "Name",
|
||||
"strengthPlanSave": "Speichern",
|
||||
"strengthPlanDelete": "Löschen",
|
||||
"strengthAddExercise": "Übung hinzufügen",
|
||||
"strengthAddToBlock": "Übung im Wechsel hinzufügen",
|
||||
"strengthOwnExercise": "Eigene Übung",
|
||||
"strengthOwnExercises": "Eigene",
|
||||
"strengthExerciseName": "Was es ist",
|
||||
"strengthExerciseNeeds": "Was es braucht",
|
||||
"strengthExerciseLoad": "Womit",
|
||||
"strengthExercisePattern": "Bewegung",
|
||||
"strengthExerciseTimed": "Wird gehalten",
|
||||
"strengthExerciseDone": "Fertig",
|
||||
"strengthAddSet": "Satz hinzufügen",
|
||||
"strengthReps": "Wdh.",
|
||||
"strengthSeconds": "Sekunden",
|
||||
"strengthKg": "kg",
|
||||
"strengthRemoveExercise": "Übung entfernen",
|
||||
"strengthRemoveSet": "Satz entfernen",
|
||||
"strengthMoveUp": "Nach oben",
|
||||
"strengthMoveDown": "Nach unten",
|
||||
"strengthRest": "Pause",
|
||||
"strengthRestBetween": "Pause zwischen den Übungen",
|
||||
"strengthDiscardTitle": "Änderungen verwerfen?",
|
||||
"strengthDiscard": "Verwerfen",
|
||||
"strengthDiscardMessage": "Was du an diesem Plan geändert hast, geht verloren.",
|
||||
"strengthAbandon": "Ohne Speichern beenden",
|
||||
"strengthAbandonMessage": "Die bisherigen Sätze werden von diesem Gerät gelöscht. Dies kann nicht rückgängig gemacht werden.",
|
||||
"strengthFinish": "Beenden und speichern",
|
||||
"strengthAllDone": "Alle Sätze sind durch.",
|
||||
"strengthSetDone": "Geschafft",
|
||||
"strengthSkip": "Satz überspringen",
|
||||
"strengthSwap": "Übung tauschen",
|
||||
"strengthSwapTitle": "Stattdessen",
|
||||
"strengthNoSwaps": "Nichts anderes hier bewegt sich so.",
|
||||
"strengthRestSkip": "Pause überspringen",
|
||||
"strengthResting": "Pause",
|
||||
"strengthCarryOn": "Ein Training läuft",
|
||||
"strengthCarryOnAction": "Weiter",
|
||||
"strengthWeightNotMadeUp": "Hier lässt sich dieses Gewicht nicht zusammenstellen.",
|
||||
"strengthFixed": "{weight} kg, das nächste darunter",
|
||||
"strengthNoPlace": "Kein Ort gewählt: Gewichte wie geplant.",
|
||||
"strengthTrainsAt": "In {place}",
|
||||
"strengthWorkoutVolume": "{weight} kg bewegt",
|
||||
"strengthWorkoutSets": "{count, plural, =1{1 Satz} other{{count} Sätze}}",
|
||||
"strengthMissing": "Fehlt hier: {needs}",
|
||||
"strengthPlanSummary": "{exercises, plural, =1{1 Übung} other{{exercises} Übungen}} · {sets, plural, =1{1 Satz} other{{sets} Sätze}}",
|
||||
"strengthBlockKind": "{kind, select, superset{Supersatz} circuit{Zirkel} other{Übung}}",
|
||||
"strengthSetOf": "Satz {set} von {sets}",
|
||||
"strengthRoundOf": "Runde {round} von {rounds}",
|
||||
"strengthTarget": "{reps} × {weight} kg",
|
||||
"strengthTargetReps": "{reps, plural, =1{1 Wdh.} other{{reps} Wdh.}}",
|
||||
"strengthTargetSeconds": "{seconds} s",
|
||||
"strengthNextUp": "Als Nächstes: {exercise}",
|
||||
"strengthBarAndPlates": "{bar}-kg-Stange, jede Seite: {plates}",
|
||||
"strengthHandlesAndPlates": "{bar}-kg-Griffe, jede Seite: {plates}",
|
||||
"strengthWeightShort": "{weight} kg unter dem Plan"
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue