diff --git a/.ideai/tickets/24/carnet.md b/.ideai/tickets/24/carnet.md index 67a8dbf..b0884d7 100644 --- a/.ideai/tickets/24/carnet.md +++ b/.ideai/tickets/24/carnet.md @@ -1,8 +1,8 @@ --- issueRef: "#24" -version: 7 -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784359379007 +version: 8 +updatedBy: {"kind":"user"} +updatedAt: 1784482464083 --- Correctif : le SnackBar "Exercice ajouté" se ferme maintenant automatiquement après 3 secondes (Timer explicite, correctement annulé au dispose et avant chaque nouvel ajout pour éviter les fuites/conflits), ou immédiatement si l'utilisateur tape "Personnaliser". Vérifié : analyze propre, 43/43 tests verts, build APK réussi. diff --git a/.ideai/tickets/24/issue.md b/.ideai/tickets/24/issue.md index e2b56a3..c70d746 100644 --- a/.ideai/tickets/24/issue.md +++ b/.ideai/tickets/24/issue.md @@ -2,15 +2,15 @@ id: "3dbea39a-1466-47d9-b12a-95a601ec287d" number: 24 title: "[Bug] Popup \"Exercie ajouté\" qui ne s'enlève pas quand on ajoute un exercice" -status: "qa" +status: "closed" priority: "high" sprint: "abc4f969-b169-45f7-988c-daeeab762201" links: [] agentRefs: [{"agentId":"57695b92-24d0-4876-837c-76116e70a6ae","role":"assigned"}] createdBy: {"kind":"user"} -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} +updatedBy: {"kind":"user"} createdAt: 1784328185359 -updatedAt: 1784359379007 -version: 7 +updatedAt: 1784482464083 +version: 8 --- Quand j'ajoute un exercice, la popup "Exercie ajouté" s'affiche mais ne s'enleve pas. Il faudrait qu'elle s'enleve au bout que 3 sec par exemple ou si on appuie sur Personnlaiser \ No newline at end of file diff --git a/.ideai/tickets/29/carnet.md b/.ideai/tickets/29/carnet.md index cee9f62..76ab8db 100644 --- a/.ideai/tickets/29/carnet.md +++ b/.ideai/tickets/29/carnet.md @@ -1,8 +1,8 @@ --- issueRef: "#29" -version: 7 -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784358750450 +version: 8 +updatedBy: {"kind":"user"} +updatedAt: 1784482456784 --- Correctif appliqué : l'écran d'exécution ne lisait pas correctement `scoreInputModeSnapshot` depuis le snapshot de séance avant de transmettre le résultat à `recordCurrentSetResult`, ce qui empêchait l'enregistrement du score manuel quand Temps+Répétitions+Score étaient actifs simultanément — la série ne pouvait donc jamais être validée. Corrigé : lecture du mode depuis le snapshot, et ajout d'un SnackBar d'erreur explicite si l'enregistrement échoue malgré tout (pour éviter un "rien ne se passe" silencieux à l'avenir). diff --git a/.ideai/tickets/29/issue.md b/.ideai/tickets/29/issue.md index 5ae0888..89a634a 100644 --- a/.ideai/tickets/29/issue.md +++ b/.ideai/tickets/29/issue.md @@ -2,15 +2,15 @@ id: "89da284b-871c-4e5b-9bfa-ab16f386ba8f" number: 29 title: "[Bug] Serie qu'on ne peut pas terminer" -status: "qa" +status: "closed" priority: "critical" sprint: "abc4f969-b169-45f7-988c-daeeab762201" links: [] agentRefs: [] createdBy: {"kind":"user"} -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} +updatedBy: {"kind":"user"} createdAt: 1784328426827 -updatedAt: 1784358750450 -version: 7 +updatedAt: 1784482456784 +version: 8 --- Dans un programme j'ai un exercice qui se compose de 3 series, une mesure a suivre de temps, de répétition et un score. J'ai mis le temps cible à 30, le nombre de répétition à 5. Une fois dans ma séance, je suis sur la série 2/3, temps indiqué à 30 s, j'ai mis Répétitions sur 3 et score sur 5, mais quand je clique sur temriner la série, rien ne se passe \ No newline at end of file diff --git a/.ideai/tickets/32/carnet.md b/.ideai/tickets/32/carnet.md index ff86ae2..4a06972 100644 --- a/.ideai/tickets/32/carnet.md +++ b/.ideai/tickets/32/carnet.md @@ -1,8 +1,8 @@ --- issueRef: "#32" -version: 6 -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784361147125 +version: 7 +updatedBy: {"kind":"user"} +updatedAt: 1784482442930 --- Correctif : l'écran d'accueil recharge maintenant l'état de la séance active à chaque retour sur l'accueil (via RouteObserver/RouteAware.didPopNext), pas seulement au lancement de l'app. Fonctionne après "Quitter et sauvegarder" (bandeau apparaît) et après "Abandonner la séance" (bandeau reste absent). Vérifié : analyze propre, 45/45 tests verts, build APK réussi. diff --git a/.ideai/tickets/32/issue.md b/.ideai/tickets/32/issue.md index 9409e25..4bd8eb4 100644 --- a/.ideai/tickets/32/issue.md +++ b/.ideai/tickets/32/issue.md @@ -2,15 +2,15 @@ id: "a3fe5103-8b5c-4cce-80af-f1dd08b76794" number: 32 title: "[Bug] Reprendre séance en cours pas toujours affiché" -status: "qa" +status: "closed" priority: "medium" sprint: "abc4f969-b169-45f7-988c-daeeab762201" links: [] agentRefs: [{"agentId":"57695b92-24d0-4876-837c-76116e70a6ae","role":"assigned"}] createdBy: {"kind":"user"} -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} +updatedBy: {"kind":"user"} createdAt: 1784328903547 -updatedAt: 1784361147125 -version: 6 +updatedAt: 1784482442930 +version: 7 --- Si je quitte une seance en cours, pour voir le bandeau de reprise de seance s'afficher je dois quitter totalement l'application et la relancer. J'aimerais qu'il y soit automatiquement quand une séance et en cours et que je ne suis pas dans ma séance \ No newline at end of file diff --git a/.ideai/tickets/33/carnet.md b/.ideai/tickets/33/carnet.md index f46e954..340f8b2 100644 --- a/.ideai/tickets/33/carnet.md +++ b/.ideai/tickets/33/carnet.md @@ -1,8 +1,8 @@ --- issueRef: "#33" -version: 6 -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784361411170 +version: 7 +updatedBy: {"kind":"user"} +updatedAt: 1784482438271 --- Correctif : tenter de lancer une séance alors qu'une autre est déjà active affiche maintenant un SnackBar explicite ("Une séance est déjà en cours. Termine-la ou reprends-la avant d'en lancer une nouvelle."), au lieu de ne rien faire silencieusement. Vérifié : analyze propre, 46/46 tests verts, build APK réussi. diff --git a/.ideai/tickets/33/issue.md b/.ideai/tickets/33/issue.md index 3bd5934..84ef18e 100644 --- a/.ideai/tickets/33/issue.md +++ b/.ideai/tickets/33/issue.md @@ -2,15 +2,15 @@ id: "a588ff04-9e55-4492-ac76-5298ba94e5c7" number: 33 title: "[Bug] Impossible de lancer une seance" -status: "qa" +status: "closed" priority: "medium" sprint: "abc4f969-b169-45f7-988c-daeeab762201" links: [] agentRefs: [] createdBy: {"kind":"user"} -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} +updatedBy: {"kind":"user"} createdAt: 1784329082771 -updatedAt: 1784361411170 -version: 6 +updatedAt: 1784482438271 +version: 7 --- Si une seance est déjà en cours je ne peux poas en lancer une autre. Je trouve ça bien, j'aimerais juste qu'une petite popup me le dise car on a actuellement aucun retour pour ça \ No newline at end of file diff --git a/.ideai/tickets/41/carnet.md b/.ideai/tickets/41/carnet.md index 45a557d..fcbad60 100644 --- a/.ideai/tickets/41/carnet.md +++ b/.ideai/tickets/41/carnet.md @@ -1,6 +1,6 @@ --- issueRef: "#41" -version: 6 -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784406566969 +version: 7 +updatedBy: {"kind":"user"} +updatedAt: 1784482434770 --- diff --git a/.ideai/tickets/41/issue.md b/.ideai/tickets/41/issue.md index 74d7738..9ab7555 100644 --- a/.ideai/tickets/41/issue.md +++ b/.ideai/tickets/41/issue.md @@ -2,15 +2,15 @@ id: "d92c2af3-1981-4782-9aba-460a45b37d56" number: 41 title: "[bug] images non affichée dans le caroussel" -status: "qa" +status: "closed" priority: "medium" sprint: "abc4f969-b169-45f7-988c-daeeab762201" links: [] agentRefs: [{"agentId":"57695b92-24d0-4876-837c-76116e70a6ae","role":"assigned"}] createdBy: {"kind":"user"} -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} +updatedBy: {"kind":"user"} createdAt: 1784378925702 -updatedAt: 1784406566969 -version: 6 +updatedAt: 1784482434770 +version: 7 --- Dans le carroussel des exercices dans les séances, les images ne s'affichent pas vraiment, je n'ai qu'une icone avec le titre image 1, image 2 etc... \ No newline at end of file diff --git a/.ideai/tickets/42/carnet.md b/.ideai/tickets/42/carnet.md index eb62c53..51a45eb 100644 --- a/.ideai/tickets/42/carnet.md +++ b/.ideai/tickets/42/carnet.md @@ -1,6 +1,6 @@ --- issueRef: "#42" -version: 6 -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784406567477 +version: 7 +updatedBy: {"kind":"user"} +updatedAt: 1784482429394 --- diff --git a/.ideai/tickets/42/issue.md b/.ideai/tickets/42/issue.md index 9756d9d..7f6be2b 100644 --- a/.ideai/tickets/42/issue.md +++ b/.ideai/tickets/42/issue.md @@ -2,15 +2,15 @@ id: "a788671c-fbc4-4c3d-855e-bb44c120ab54" number: 42 title: "[bug] vidéo non affichée dans le caroussel" -status: "qa" +status: "closed" priority: "medium" sprint: "abc4f969-b169-45f7-988c-daeeab762201" links: [] agentRefs: [{"agentId":"57695b92-24d0-4876-837c-76116e70a6ae","role":"assigned"}] createdBy: {"kind":"user"} -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} +updatedBy: {"kind":"user"} createdAt: 1784378998844 -updatedAt: 1784406567477 -version: 6 +updatedAt: 1784482429394 +version: 7 --- Dans les exerccies des séances, je ne peux pas lancer la vidéo. Je n'ai qu'un icone Play avec marqué Vidéo mais rien ne se passe si je selectionne \ No newline at end of file diff --git a/.ideai/tickets/43/carnet.md b/.ideai/tickets/43/carnet.md index cd97185..ee9d5dc 100644 --- a/.ideai/tickets/43/carnet.md +++ b/.ideai/tickets/43/carnet.md @@ -1,6 +1,6 @@ --- issueRef: "#43" -version: 6 -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784406567925 +version: 7 +updatedBy: {"kind":"user"} +updatedAt: 1784482421672 --- diff --git a/.ideai/tickets/43/issue.md b/.ideai/tickets/43/issue.md index a9d6499..a06f9ee 100644 --- a/.ideai/tickets/43/issue.md +++ b/.ideai/tickets/43/issue.md @@ -2,15 +2,15 @@ id: "33546028-43ab-467c-90af-f2ff3aeb920f" number: 43 title: "[Bug] chrono qui n'affiche que les secondes" -status: "qa" +status: "closed" priority: "medium" sprint: "abc4f969-b169-45f7-988c-daeeab762201" links: [] agentRefs: [{"agentId":"57695b92-24d0-4876-837c-76116e70a6ae","role":"assigned"}] createdBy: {"kind":"user"} -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} +updatedBy: {"kind":"user"} createdAt: 1784379078126 -updatedAt: 1784406567925 -version: 6 +updatedAt: 1784482421672 +version: 7 --- Pour le chrono score, quand je le lance j'ai d'abord 0.9 sec qui s'affiche, puis uniquement les secondes qui s'incrémentent \ No newline at end of file diff --git a/.ideai/tickets/44/carnet.md b/.ideai/tickets/44/carnet.md index 5e4b072..e14002c 100644 --- a/.ideai/tickets/44/carnet.md +++ b/.ideai/tickets/44/carnet.md @@ -1,6 +1,6 @@ --- issueRef: "#44" -version: 5 -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784406980453 +version: 6 +updatedBy: {"kind":"user"} +updatedAt: 1784482417515 --- diff --git a/.ideai/tickets/44/issue.md b/.ideai/tickets/44/issue.md index ce401aa..32eb55d 100644 --- a/.ideai/tickets/44/issue.md +++ b/.ideai/tickets/44/issue.md @@ -2,15 +2,15 @@ id: "c63e88a9-5868-4bd0-a71b-ebc4e7e6552a" number: 44 title: "[Bug] Je veux pouvoir mettre un score par défaut à 0." -status: "qa" +status: "closed" priority: "medium" sprint: "abc4f969-b169-45f7-988c-daeeab762201" links: [] agentRefs: [{"agentId":"57695b92-24d0-4876-837c-76116e70a6ae","role":"assigned"}] createdBy: {"kind":"user"} -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} +updatedBy: {"kind":"user"} createdAt: 1784379259225 -updatedAt: 1784406980453 -version: 5 +updatedAt: 1784482417515 +version: 6 --- Je veux pouvoir renseigner un score par défaut à 0 (je ne parle pas du nombre de répétition qui doit lui rester comme actuellement). \ No newline at end of file diff --git a/.ideai/tickets/45/carnet.md b/.ideai/tickets/45/carnet.md index a5ebb2a..fdcf2b2 100644 --- a/.ideai/tickets/45/carnet.md +++ b/.ideai/tickets/45/carnet.md @@ -1,6 +1,6 @@ --- issueRef: "#45" -version: 5 -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784406980638 +version: 6 +updatedBy: {"kind":"user"} +updatedAt: 1784482408550 --- diff --git a/.ideai/tickets/45/issue.md b/.ideai/tickets/45/issue.md index aa61b1b..afe524b 100644 --- a/.ideai/tickets/45/issue.md +++ b/.ideai/tickets/45/issue.md @@ -2,15 +2,15 @@ id: "2f075be4-bcb8-4fdd-89fc-2f897e97bde4" number: 45 title: "[Bug] Affichage de répétition en séance à 0" -status: "qa" +status: "closed" priority: "medium" sprint: "abc4f969-b169-45f7-988c-daeeab762201" links: [] agentRefs: [{"agentId":"57695b92-24d0-4876-837c-76116e70a6ae","role":"assigned"}] createdBy: {"kind":"user"} -updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} +updatedBy: {"kind":"user"} createdAt: 1784379414910 -updatedAt: 1784406980638 -version: 5 +updatedAt: 1784482408550 +version: 6 --- Quand je suis en séance sur un exercice qui demande un nombre de répétition, l'affichage m'affiche 0 alors que le nombre de répétition est set à une valeur > 0 dans l'exercice. Il devrait être à la même valeur \ No newline at end of file diff --git a/.ideai/tickets/56/carnet.md b/.ideai/tickets/56/carnet.md index b97fdad..9913a53 100644 --- a/.ideai/tickets/56/carnet.md +++ b/.ideai/tickets/56/carnet.md @@ -1,6 +1,6 @@ --- issueRef: "#56" -version: 1 -updatedBy: {"kind":"agent","agent_id":"f8f40941-ecf7-4830-b9de-8818a099f448"} -updatedAt: 1784481516635 +version: 2 +updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} +updatedAt: 1784482387469 --- diff --git a/.ideai/tickets/56/issue.md b/.ideai/tickets/56/issue.md index a043bb9..0bbaa07 100644 --- a/.ideai/tickets/56/issue.md +++ b/.ideai/tickets/56/issue.md @@ -2,15 +2,15 @@ id: "c902b71c-8033-42dc-a52a-eb6822a1e863" number: 56 title: "[DevBackend] Modèle domain + Drift pour exercices à étapes" -status: "open" +status: "qa" priority: "medium" sprint: null links: [{"target":"#54","kind":"relatesTo"}] agentRefs: [{"agentId":"10ee045b-1c41-479e-ba03-dceed9edd495","role":"assigned"}] createdBy: {"kind":"agent","agent_id":"f8f40941-ecf7-4830-b9de-8818a099f448"} -updatedBy: {"kind":"agent","agent_id":"f8f40941-ecf7-4830-b9de-8818a099f448"} +updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} createdAt: 1784481516635 -updatedAt: 1784481516635 -version: 1 +updatedAt: 1784482387469 +version: 2 --- Implémenter le socle domain et Drift pour les exercices à étapes. Ajouter `ExerciseStep`, enum `ExerciseStepType time|reps`, liste `steps` sur `Exercise`, validation max 8 étapes, positions uniques, cible par défaut > 0, score d'étape optionnel avec `ScoreInputMode manual|stopwatch`, label/unité/valeurs par défaut. Ajouter snapshots d'étapes dans `ProgramExercise.toSnapshotJson` et dans les snapshots WorkoutTemplate/History. Migration Drift depuis schemaVersion 7 vers 8 : tables/colonnes nécessaires, contraintes et mappers repository. \ No newline at end of file diff --git a/.ideai/tickets/63/carnet.md b/.ideai/tickets/63/carnet.md index 2033c21..6601037 100644 --- a/.ideai/tickets/63/carnet.md +++ b/.ideai/tickets/63/carnet.md @@ -1,6 +1,6 @@ --- issueRef: "#63" -version: 6 +version: 8 updatedBy: {"kind":"user"} -updatedAt: 1784482343900 +updatedAt: 1784482673684 --- diff --git a/.ideai/tickets/63/issue.md b/.ideai/tickets/63/issue.md index 49ba802..973e455 100644 --- a/.ideai/tickets/63/issue.md +++ b/.ideai/tickets/63/issue.md @@ -10,7 +10,7 @@ agentRefs: [{"agentId":"57695b92-24d0-4876-837c-76116e70a6ae","role":"assigned"} createdBy: {"kind":"user"} updatedBy: {"kind":"user"} createdAt: 1784482089895 -updatedAt: 1784482343900 -version: 6 +updatedAt: 1784482673684 +version: 8 --- -Une première version du serveur est disponible. J'aimerais que les features serveur soient ajouté à l'application. Le bon fonctionnement de l'applciation reste prioritaire sur le serveur, à savoir que le serveur sert l'applciation et pas l'inverse, c'est a dire que si une structure de donnée est actuellement différente entre le serveur et l'applciation, alors il faut modifier le serveur pour qu'il accepte la donnée du client. Je pense par exemple aux exercices, entre la création serveur et la réalisation du ticket, je pense que la forme des exercice a été modifiée (ajout entre autre des étapes dans une serie d'un exercice), il faudra alors adapter le serveur à ça. \ No newline at end of file +Une première version du serveur est disponible. J'aimerais que les features serveur soient ajouté à l'application (j'entends ici l'ajout de la totalité de la stack de la logique méier comme la sync des historiques etc, à la connexion). Pour la connexion, comme indiqué dans le ticket #57, la connexion n'est pas obligatoire pour l'acces à l'applicaiton, elle ne doit être que optionnelle, je pense entre autre à un menu "Profile" à créer. Le bon fonctionnement de l'application reste prioritaire sur le serveur, à savoir que le serveur sert l'applciation et pas l'inverse, c'est a dire que si une structure de donnée est actuellement différente entre le serveur et l'applciation, alors il faut modifier le serveur pour qu'il accepte la donnée du client. Je pense par exemple aux exercices, entre la création serveur et la réalisation du ticket, je pense que la forme des exercice a été modifiée (ajout entre autre des étapes dans une serie d'un exercice), il faudra alors adapter le serveur à ça. \ No newline at end of file diff --git a/.ideai/tickets/index.json b/.ideai/tickets/index.json index 7082eef..9abea20 100644 --- a/.ideai/tickets/index.json +++ b/.ideai/tickets/index.json @@ -267,13 +267,13 @@ "issueRef": "#24", "path": "24", "title": "[Bug] Popup \"Exercie ajouté\" qui ne s'enlève pas quand on ajoute un exercice", - "status": "qa", + "status": "closed", "priority": "high", "sprint": "abc4f969-b169-45f7-988c-daeeab762201", "assignedAgentIds": [ "57695b92-24d0-4876-837c-76116e70a6ae" ], - "updatedAt": 1784359379007 + "updatedAt": 1784482464083 }, { "issueRef": "#25", @@ -327,11 +327,11 @@ "issueRef": "#29", "path": "29", "title": "[Bug] Serie qu'on ne peut pas terminer", - "status": "qa", + "status": "closed", "priority": "critical", "sprint": "abc4f969-b169-45f7-988c-daeeab762201", "assignedAgentIds": [], - "updatedAt": 1784358750450 + "updatedAt": 1784482456784 }, { "issueRef": "#30", @@ -359,23 +359,23 @@ "issueRef": "#32", "path": "32", "title": "[Bug] Reprendre séance en cours pas toujours affiché", - "status": "qa", + "status": "closed", "priority": "medium", "sprint": "abc4f969-b169-45f7-988c-daeeab762201", "assignedAgentIds": [ "57695b92-24d0-4876-837c-76116e70a6ae" ], - "updatedAt": 1784361147125 + "updatedAt": 1784482442930 }, { "issueRef": "#33", "path": "33", "title": "[Bug] Impossible de lancer une seance", - "status": "qa", + "status": "closed", "priority": "medium", "sprint": "abc4f969-b169-45f7-988c-daeeab762201", "assignedAgentIds": [], - "updatedAt": 1784361411170 + "updatedAt": 1784482438271 }, { "issueRef": "#34", @@ -465,61 +465,61 @@ "issueRef": "#41", "path": "41", "title": "[bug] images non affichée dans le caroussel", - "status": "qa", + "status": "closed", "priority": "medium", "sprint": "abc4f969-b169-45f7-988c-daeeab762201", "assignedAgentIds": [ "57695b92-24d0-4876-837c-76116e70a6ae" ], - "updatedAt": 1784406566969 + "updatedAt": 1784482434770 }, { "issueRef": "#42", "path": "42", "title": "[bug] vidéo non affichée dans le caroussel", - "status": "qa", + "status": "closed", "priority": "medium", "sprint": "abc4f969-b169-45f7-988c-daeeab762201", "assignedAgentIds": [ "57695b92-24d0-4876-837c-76116e70a6ae" ], - "updatedAt": 1784406567477 + "updatedAt": 1784482429394 }, { "issueRef": "#43", "path": "43", "title": "[Bug] chrono qui n'affiche que les secondes", - "status": "qa", + "status": "closed", "priority": "medium", "sprint": "abc4f969-b169-45f7-988c-daeeab762201", "assignedAgentIds": [ "57695b92-24d0-4876-837c-76116e70a6ae" ], - "updatedAt": 1784406567925 + "updatedAt": 1784482421672 }, { "issueRef": "#44", "path": "44", "title": "[Bug] Je veux pouvoir mettre un score par défaut à 0.", - "status": "qa", + "status": "closed", "priority": "medium", "sprint": "abc4f969-b169-45f7-988c-daeeab762201", "assignedAgentIds": [ "57695b92-24d0-4876-837c-76116e70a6ae" ], - "updatedAt": 1784406980453 + "updatedAt": 1784482417515 }, { "issueRef": "#45", "path": "45", "title": "[Bug] Affichage de répétition en séance à 0", - "status": "qa", + "status": "closed", "priority": "medium", "sprint": "abc4f969-b169-45f7-988c-daeeab762201", "assignedAgentIds": [ "57695b92-24d0-4876-837c-76116e70a6ae" ], - "updatedAt": 1784406980638 + "updatedAt": 1784482408550 }, { "issueRef": "#46", @@ -619,13 +619,13 @@ "issueRef": "#56", "path": "56", "title": "[DevBackend] Modèle domain + Drift pour exercices à étapes", - "status": "open", + "status": "qa", "priority": "medium", "sprint": null, "assignedAgentIds": [ "10ee045b-1c41-479e-ba03-dceed9edd495" ], - "updatedAt": 1784481516635 + "updatedAt": 1784482387469 }, { "issueRef": "#57", @@ -709,7 +709,7 @@ "assignedAgentIds": [ "57695b92-24d0-4876-837c-76116e70a6ae" ], - "updatedAt": 1784482343900 + "updatedAt": 1784482673684 } ] } \ No newline at end of file diff --git a/lib/application/ports.dart b/lib/application/ports.dart index dd9be66..dd798b6 100644 --- a/lib/application/ports.dart +++ b/lib/application/ports.dart @@ -81,6 +81,10 @@ abstract interface class ActiveSessionRepository { Future saveSetResult(ActiveSetResult result); Future saveRestState(ActiveRestState restState); Future saveScoreStopwatchState(ActiveScoreStopwatchState state); + Future saveExerciseStepProgressState( + ActiveExerciseStepProgressState state, + ); + Future saveExerciseStepResult(ActiveExerciseStepResult result); Future deleteScoreStopwatchState({ required String sessionId, required int programIndex, @@ -95,7 +99,19 @@ abstract interface class ActiveSessionRepository { required int exerciseIndex, required int setIndex, }); + Future findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }); Future> listSetResults(String sessionId); + Future> listExerciseStepProgressStates( + String sessionId, + ); + Future> listExerciseStepResults( + String sessionId, + ); Future> listRestStates(String sessionId); Future> listScoreStopwatchStates( String sessionId, @@ -107,6 +123,7 @@ abstract interface class WorkoutHistoryRepository { Future> listActive(); Future save(WorkoutHistory history); Future saveSetResult(WorkoutHistorySetResult result); + Future saveStepResult(WorkoutHistoryStepResult result); Future delete(String id, DateTime deletedAt); } diff --git a/lib/application/use_cases.dart b/lib/application/use_cases.dart index f612def..756fbab 100644 --- a/lib/application/use_cases.dart +++ b/lib/application/use_cases.dart @@ -68,6 +68,7 @@ final class ExerciseUseCases { defaultTargetReps: defaultTargetReps, defaultTargetScore: defaultTargetScore, defaultTargetScoreTimeMs: defaultTargetScoreTimeMs, + steps: steps, ); await repository.save(exercise); return exercise; @@ -962,6 +963,23 @@ final class ActiveWorkoutSessionUseCases { ); await sessionRepository.saveScoreStopwatchState(stopped); } + final runningStepTimers = + (await sessionRepository.listExerciseStepProgressStates(sessionId)) + .where( + (state) => + state.status == + ActiveExerciseStepProgressStatus.runningTimer, + ); + for (final state in runningStepTimers) { + final pausedStep = state.copyWith( + metadata: state.metadata.touch(now), + status: ActiveExerciseStepProgressStatus.pausedTimer, + accumulatedMs: state.elapsedMillisecondsAt(now), + startedAt: null, + lastTransitionAt: now, + ); + await sessionRepository.saveExerciseStepProgressState(pausedStep); + } final paused = session.pause(now); await sessionRepository.save(paused); return paused; @@ -1441,6 +1459,555 @@ final class ActiveWorkoutSessionUseCases { } } +final class ActiveExerciseStepProgressView { + const ActiveExerciseStepProgressView({ + required this.state, + required this.steps, + required this.expectedPassages, + required this.results, + }); + + final ActiveExerciseStepProgressState state; + final List steps; + final int expectedPassages; + final List results; + + ExerciseStep? get currentStep => + state.status == ActiveExerciseStepProgressStatus.sequenceComplete + ? null + : steps[state.currentStepIndex]; +} + +final class ActiveExerciseStepUseCases { + const ActiveExerciseStepUseCases({ + required this.sessionRepository, + required this.clock, + required this.ids, + required this.originDeviceId, + }); + + final ActiveSessionRepository sessionRepository; + final Clock clock; + final IdGenerator ids; + final String originDeviceId; + + Future startOrResumeProgress({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final context = await _stepContext( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final now = clock.now(); + final existing = await sessionRepository.findExerciseStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final state = existing ?? + _initialStepProgressState( + sessionId: sessionId, + context: context, + now: now, + ); + if (existing == null) { + await sessionRepository.saveExerciseStepProgressState(state); + } + final advanced = await _autoAdvanceElapsedTimers(context, state, now); + return ActiveExerciseStepProgressView( + state: advanced, + steps: context.steps, + expectedPassages: context.expectedPassages, + results: await _stepResultsForPosition(context), + ); + } + + Future readProgress({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) => startOrResumeProgress( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + + Future startTimer({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final view = await startOrResumeProgress( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final step = view.currentStep; + if (step == null || step.type != ExerciseStepType.time) { + throw const DomainException('Current exercise step is not timed.'); + } + if (view.state.status == ActiveExerciseStepProgressStatus.runningTimer) { + return view.state; + } + final now = clock.now(); + final running = view.state.copyWith( + metadata: view.state.metadata.touch(now), + status: ActiveExerciseStepProgressStatus.runningTimer, + startedAt: now, + lastTransitionAt: now, + ); + await sessionRepository.saveExerciseStepProgressState(running); + return running; + } + + Future pauseTimer({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final state = await _requiredStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + if (state.status != ActiveExerciseStepProgressStatus.runningTimer) { + throw const DomainException('Exercise step timer is not running.'); + } + final now = clock.now(); + final paused = state.copyWith( + metadata: state.metadata.touch(now), + status: ActiveExerciseStepProgressStatus.pausedTimer, + startedAt: null, + accumulatedMs: state.elapsedMillisecondsAt(now), + lastTransitionAt: now, + ); + await sessionRepository.saveExerciseStepProgressState(paused); + return paused; + } + + Future resumeTimer({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) { + return startTimer( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + } + + int elapsedMilliseconds(ActiveExerciseStepProgressState state) { + return state.elapsedMillisecondsAt(clock.now()); + } + + int remainingMilliseconds({ + required ActiveExerciseStepProgressState state, + required ExerciseStep step, + }) { + final targetMs = step.defaultTargetValue * 1000; + final remaining = targetMs - elapsedMilliseconds(state); + return remaining < 0 ? 0 : remaining; + } + + Future completeCurrentStep({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + int? actualReps, + double? actualScore, + int? actualScoreTimeMs, + String? note, + }) async { + final context = await _stepContext( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final now = clock.now(); + final state = await _autoAdvanceElapsedTimers( + context, + await _requiredStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ), + now, + ); + final step = _currentStep(context, state); + if (state.status == ActiveExerciseStepProgressStatus.sequenceComplete) { + throw const DomainException('Exercise step sequence is complete.'); + } + final completed = _stepResult( + context: context, + state: state, + step: step, + status: SetResultStatus.completed, + now: now, + actualTimeMs: step.type == ExerciseStepType.time + ? state.elapsedMillisecondsAt(now) + : null, + actualReps: step.type == ExerciseStepType.reps + ? actualReps ?? step.defaultTargetValue + : null, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + note: note, + ); + await sessionRepository.saveExerciseStepResult(completed); + await sessionRepository.saveExerciseStepProgressState( + _advanceState(context, state, now), + ); + return completed; + } + + Future skipCurrentStep({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final context = await _stepContext( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final state = await _requiredStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final now = clock.now(); + final step = _currentStep(context, state); + final skipped = _stepResult( + context: context, + state: state, + step: step, + status: SetResultStatus.skipped, + now: now, + ); + await sessionRepository.saveExerciseStepResult(skipped); + await sessionRepository.saveExerciseStepProgressState( + _advanceState(context, state, now), + ); + return skipped; + } + + Future> skipCurrentPassage({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final context = await _stepContext( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + var state = await _requiredStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final now = clock.now(); + final skipped = []; + final passage = state.currentPassageIndex; + while (state.status != ActiveExerciseStepProgressStatus.sequenceComplete && + state.currentPassageIndex == passage) { + final step = _currentStep(context, state); + final result = _stepResult( + context: context, + state: state, + step: step, + status: SetResultStatus.skipped, + now: now, + ); + skipped.add(result); + await sessionRepository.saveExerciseStepResult(result); + state = _advanceState(context, state, now); + } + await sessionRepository.saveExerciseStepProgressState(state); + return skipped; + } + + Future> skipSequence({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final context = await _stepContext( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + var state = await _requiredStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final now = clock.now(); + final skipped = []; + while (state.status != ActiveExerciseStepProgressStatus.sequenceComplete) { + final step = _currentStep(context, state); + final result = _stepResult( + context: context, + state: state, + step: step, + status: SetResultStatus.skipped, + now: now, + ); + skipped.add(result); + await sessionRepository.saveExerciseStepResult(result); + state = _advanceState(context, state, now); + } + await sessionRepository.saveExerciseStepProgressState(state); + return skipped; + } + + Future _requiredStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final state = await sessionRepository.findExerciseStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + if (state == null) { + throw const DomainException('Exercise step progress state not found.'); + } + return state; + } + + Future<_StepSequenceContext> _stepContext({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final session = await sessionRepository.findById(sessionId); + if (session == null) { + throw const DomainException('Active workout session not found.'); + } + final snapshot = _findExerciseSnapshot( + resolvedTemplateSnapshotJson: session.resolvedTemplateSnapshotJson, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + ); + if (snapshot == null || snapshot.steps.isEmpty) { + throw const DomainException('Exercise step sequence not found.'); + } + return _StepSequenceContext( + sessionId: sessionId, + programSnapshotId: snapshot.programSnapshotId, + exerciseSnapshotId: snapshot.exerciseSnapshotId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + steps: snapshot.steps, + expectedPassages: snapshot.repsEnabled + ? (snapshot.targetReps ?? 1).clamp(1, 1 << 31) + : 1, + ); + } + + ActiveExerciseStepProgressState _initialStepProgressState({ + required String sessionId, + required _StepSequenceContext context, + required DateTime now, + }) { + final firstStep = context.steps.first; + return ActiveExerciseStepProgressState( + metadata: _newMetadata(ids, originDeviceId, now), + activeWorkoutSessionId: sessionId, + programIndex: context.programIndex, + exerciseIndex: context.exerciseIndex, + setIndex: context.setIndex, + currentPassageIndex: 0, + currentStepIndex: 0, + currentStepSnapshotId: firstStep.id, + status: firstStep.type == ExerciseStepType.time + ? ActiveExerciseStepProgressStatus.stoppedTimer + : ActiveExerciseStepProgressStatus.waitingManual, + accumulatedMs: 0, + lastTransitionAt: now, + ); + } + + Future _autoAdvanceElapsedTimers( + _StepSequenceContext context, + ActiveExerciseStepProgressState state, + DateTime now, + ) async { + var current = state; + while (current.status == ActiveExerciseStepProgressStatus.runningTimer) { + final step = _currentStep(context, current); + if (step.type != ExerciseStepType.time) { + break; + } + final targetMs = step.defaultTargetValue * 1000; + final elapsed = current.elapsedMillisecondsAt(now); + if (elapsed < targetMs) { + break; + } + final result = _stepResult( + context: context, + state: current, + step: step, + status: SetResultStatus.completed, + now: now, + actualTimeMs: targetMs, + ); + await sessionRepository.saveExerciseStepResult(result); + final overflowMs = elapsed - targetMs; + current = _advanceState( + context, + current, + now, + runningTimerOverflowMs: overflowMs, + ); + await sessionRepository.saveExerciseStepProgressState(current); + } + return current; + } + + ActiveExerciseStepProgressState _advanceState( + _StepSequenceContext context, + ActiveExerciseStepProgressState state, + DateTime now, { + int runningTimerOverflowMs = 0, + }) { + var nextPassage = state.currentPassageIndex; + var nextStep = state.currentStepIndex + 1; + if (nextStep >= context.steps.length) { + nextStep = 0; + nextPassage++; + } + if (nextPassage >= context.expectedPassages) { + return state.copyWith( + metadata: state.metadata.touch(now), + status: ActiveExerciseStepProgressStatus.sequenceComplete, + startedAt: null, + accumulatedMs: 0, + lastTransitionAt: now, + ); + } + final step = context.steps[nextStep]; + final status = step.type == ExerciseStepType.time + ? runningTimerOverflowMs > 0 + ? ActiveExerciseStepProgressStatus.runningTimer + : ActiveExerciseStepProgressStatus.stoppedTimer + : ActiveExerciseStepProgressStatus.waitingManual; + return state.copyWith( + metadata: state.metadata.touch(now), + currentPassageIndex: nextPassage, + currentStepIndex: nextStep, + currentStepSnapshotId: step.id, + status: status, + startedAt: status == ActiveExerciseStepProgressStatus.runningTimer + ? now.subtract(Duration(milliseconds: runningTimerOverflowMs)) + : null, + accumulatedMs: 0, + lastTransitionAt: now, + ); + } + + ExerciseStep _currentStep( + _StepSequenceContext context, + ActiveExerciseStepProgressState state, + ) { + if (state.status == ActiveExerciseStepProgressStatus.sequenceComplete) { + throw const DomainException('Exercise step sequence is complete.'); + } + return context.steps[state.currentStepIndex]; + } + + Future> _stepResultsForPosition( + _StepSequenceContext context, + ) async { + return (await sessionRepository.listExerciseStepResults(context.sessionId)) + .where( + (result) => + result.programIndex == context.programIndex && + result.exerciseIndex == context.exerciseIndex && + result.setIndex == context.setIndex, + ) + .toList(); + } + + ActiveExerciseStepResult _stepResult({ + required _StepSequenceContext context, + required ActiveExerciseStepProgressState state, + required ExerciseStep step, + required SetResultStatus status, + required DateTime now, + int? actualTimeMs, + int? actualReps, + double? actualScore, + int? actualScoreTimeMs, + String? note, + }) { + return ActiveExerciseStepResult( + metadata: _newMetadata(ids, originDeviceId, now), + activeWorkoutSessionId: context.sessionId, + programSnapshotId: context.programSnapshotId, + exerciseSnapshotId: context.exerciseSnapshotId, + programIndex: context.programIndex, + exerciseIndex: context.exerciseIndex, + setIndex: context.setIndex, + passageIndex: state.currentPassageIndex, + stepIndex: state.currentStepIndex, + stepSnapshotId: step.id, + stepNameSnapshot: step.name, + stepTypeSnapshot: step.type, + targetValueSnapshot: step.defaultTargetValue, + hasScoreSnapshot: step.hasScore, + scoreInputModeSnapshot: step.hasScore ? step.scoreInputMode : null, + scoreLabelSnapshot: step.scoreLabel, + scoreUnitSnapshot: step.scoreUnit, + targetScoreSnapshot: step.defaultTargetScore, + targetScoreTimeMsSnapshot: step.defaultTargetScoreTimeMs, + status: status, + startedAt: state.startedAt, + completedAt: status == SetResultStatus.completed ? now : null, + actualTimeMs: status == SetResultStatus.completed ? actualTimeMs : null, + actualReps: status == SetResultStatus.completed ? actualReps : null, + actualScore: status == SetResultStatus.completed ? actualScore : null, + actualScoreTimeMs: status == SetResultStatus.completed + ? actualScoreTimeMs + : null, + note: note, + ); + } +} + final class CloseWorkoutSessionUseCase { const CloseWorkoutSessionUseCase({ required this.sessionRepository, @@ -1467,6 +2034,9 @@ final class CloseWorkoutSessionUseCase { } final now = clock.now(); final results = await sessionRepository.listSetResults(sessionId); + final stepResults = await sessionRepository.listExerciseStepResults( + sessionId, + ); final historyId = ids.newId(); final historyResults = _historyResultsFromActiveResults( historyId: historyId, @@ -1476,6 +2046,13 @@ final class CloseWorkoutSessionUseCase { ids: ids, originDeviceId: originDeviceId, ); + final historyStepResults = _historyStepResultsFromActiveResults( + historyId: historyId, + results: stepResults, + now: now, + ids: ids, + originDeviceId: originDeviceId, + ); final history = WorkoutHistory( metadata: EntityMetadata( id: historyId, @@ -1512,8 +2089,38 @@ final class CloseWorkoutSessionUseCase { }, ) .toList(), + 'stepResults': stepResults + .map( + (result) => { + 'programSnapshotId': result.programSnapshotId, + 'exerciseSnapshotId': result.exerciseSnapshotId, + 'programIndex': result.programIndex, + 'exerciseIndex': result.exerciseIndex, + 'setIndex': result.setIndex, + 'passageIndex': result.passageIndex, + 'stepIndex': result.stepIndex, + 'stepSnapshotId': result.stepSnapshotId, + 'stepNameSnapshot': result.stepNameSnapshot, + 'stepTypeSnapshot': result.stepTypeSnapshot.name, + 'targetValueSnapshot': result.targetValueSnapshot, + 'hasScoreSnapshot': result.hasScoreSnapshot, + 'scoreInputModeSnapshot': result.scoreInputModeSnapshot?.name, + 'scoreLabelSnapshot': result.scoreLabelSnapshot, + 'scoreUnitSnapshot': result.scoreUnitSnapshot, + 'targetScoreSnapshot': result.targetScoreSnapshot, + 'targetScoreTimeMsSnapshot': result.targetScoreTimeMsSnapshot, + 'status': result.status.name, + 'actualTimeMs': result.actualTimeMs, + 'actualReps': result.actualReps, + 'actualScore': result.actualScore, + 'actualScoreTimeMs': result.actualScoreTimeMs, + 'note': result.note, + }, + ) + .toList(), }), results: historyResults, + stepResults: historyStepResults, ); await historyRepository.save(history); return history; @@ -1867,6 +2474,53 @@ _SetPositionSnapshot? _findSetSnapshot({ return null; } +_ResolvedExerciseSnapshot? _findExerciseSnapshot({ + required String resolvedTemplateSnapshotJson, + required int programIndex, + required int exerciseIndex, +}) { + final decoded = + jsonDecode(resolvedTemplateSnapshotJson) as Map; + final programs = (decoded['programs'] as List? ?? const []); + if (programIndex < 0 || programIndex >= programs.length) { + return null; + } + final program = programs[programIndex] as Map; + final programSnapshotId = program['id'] as String? ?? 'program-$programIndex'; + final programName = program['programNameSnapshot'] as String? ?? ''; + final programSnapshotJson = program['programSnapshotJson'] as String?; + if (programSnapshotJson == null) { + return null; + } + final programSnapshot = + jsonDecode(programSnapshotJson) as Map; + final exercises = (programSnapshot['exercises'] as List? ?? const []); + if (exerciseIndex < 0 || exerciseIndex >= exercises.length) { + return null; + } + final exercise = exercises[exerciseIndex] as Map; + final id = exercise['id'] as String? ?? 'exercise-$exerciseIndex'; + return _ResolvedExerciseSnapshot( + programSnapshotId: programSnapshotId, + exerciseSnapshotId: id, + programNameSnapshot: programName, + exerciseNameSnapshot: exercise['exerciseNameSnapshot'] as String? ?? id, + timeEnabled: exercise['timeEnabled'] == true, + repsEnabled: exercise['repsEnabled'] == true, + scoreEnabled: exercise['scoreEnabled'] == true, + targetTimeSeconds: exercise['targetTimeSeconds'] as int?, + targetReps: exercise['targetReps'] as int?, + targetScore: (exercise['targetScore'] as num?)?.toDouble(), + targetScoreTimeMs: exercise['targetScoreTimeMs'] as int?, + scoreInputModeSnapshot: _scoreInputModeFromSnapshot( + exercise['scoreInputModeSnapshot'], + ), + scoreLabelSnapshot: exercise['scoreLabelSnapshot'] as String?, + scoreUnitSnapshot: exercise['scoreUnitSnapshot'] as String?, + steps: _exerciseStepsFromSnapshot(exercise['exerciseStepsSnapshot']), + ); +} + List<_SetPositionSnapshot> _listSetSnapshots( String resolvedTemplateSnapshotJson, ) { @@ -1938,6 +2592,28 @@ final class _SetPositionSnapshot { final ScoreInputMode scoreInputModeSnapshot; } +final class _StepSequenceContext { + const _StepSequenceContext({ + required this.sessionId, + required this.programSnapshotId, + required this.exerciseSnapshotId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.steps, + required this.expectedPassages, + }); + + final String sessionId; + final String programSnapshotId; + final String exerciseSnapshotId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final List steps; + final int expectedPassages; +} + List _historyResultsFromActiveResults({ required String historyId, required List results, @@ -2010,6 +2686,8 @@ Map _exerciseSnapshotsById( continue; } snapshots[id] = _ResolvedExerciseSnapshot( + programSnapshotId: program['id'] as String? ?? id, + exerciseSnapshotId: id, programNameSnapshot: programName, exerciseNameSnapshot: exercise['exerciseNameSnapshot'] as String? ?? id, timeEnabled: exercise['timeEnabled'] == true, @@ -2024,6 +2702,7 @@ Map _exerciseSnapshotsById( ), scoreLabelSnapshot: exercise['scoreLabelSnapshot'] as String?, scoreUnitSnapshot: exercise['scoreUnitSnapshot'] as String?, + steps: _exerciseStepsFromSnapshot(exercise['exerciseStepsSnapshot']), ); } } @@ -2032,6 +2711,8 @@ Map _exerciseSnapshotsById( final class _ResolvedExerciseSnapshot { const _ResolvedExerciseSnapshot({ + required this.programSnapshotId, + required this.exerciseSnapshotId, required this.programNameSnapshot, required this.exerciseNameSnapshot, required this.timeEnabled, @@ -2044,8 +2725,11 @@ final class _ResolvedExerciseSnapshot { required this.scoreInputModeSnapshot, this.scoreLabelSnapshot, this.scoreUnitSnapshot, + this.steps = const [], }); + final String programSnapshotId; + final String exerciseSnapshotId; final String programNameSnapshot; final String exerciseNameSnapshot; final bool timeEnabled; @@ -2058,6 +2742,73 @@ final class _ResolvedExerciseSnapshot { final ScoreInputMode scoreInputModeSnapshot; final String? scoreLabelSnapshot; final String? scoreUnitSnapshot; + final List steps; +} + +List _exerciseStepsFromSnapshot(Object? value) { + if (value is! List) { + return const []; + } + return value.map((item) { + final json = Map.from(item as Map); + return ExerciseStep( + id: json['id'] as String, + position: json['position'] as int, + name: json['name'] as String, + type: switch (json['type']) { + 'time' => ExerciseStepType.time, + 'reps' => ExerciseStepType.reps, + _ => throw const DomainException('Unknown exercise step type.'), + }, + defaultTargetValue: json['defaultTargetValue'] as int, + hasScore: json['hasScore'] == true, + scoreInputMode: _scoreInputModeFromSnapshot(json['scoreInputMode']), + scoreLabel: json['scoreLabel'] as String?, + scoreUnit: json['scoreUnit'] as String?, + defaultTargetScore: (json['defaultTargetScore'] as num?)?.toDouble(), + defaultTargetScoreTimeMs: json['defaultTargetScoreTimeMs'] as int?, + ); + }).toList(growable: false); +} + +List _historyStepResultsFromActiveResults({ + required String historyId, + required List results, + required DateTime now, + required IdGenerator ids, + required String originDeviceId, +}) { + return results.map((result) { + return WorkoutHistoryStepResult( + metadata: _newMetadata(ids, originDeviceId, now), + workoutHistoryId: historyId, + programSnapshotId: result.programSnapshotId, + exerciseSnapshotId: result.exerciseSnapshotId, + programIndex: result.programIndex, + exerciseIndex: result.exerciseIndex, + setIndex: result.setIndex, + passageIndex: result.passageIndex, + stepIndex: result.stepIndex, + stepSnapshotId: result.stepSnapshotId, + stepNameSnapshot: result.stepNameSnapshot, + stepTypeSnapshot: result.stepTypeSnapshot, + targetValueSnapshot: result.targetValueSnapshot, + hasScoreSnapshot: result.hasScoreSnapshot, + scoreInputModeSnapshot: result.scoreInputModeSnapshot, + scoreLabelSnapshot: result.scoreLabelSnapshot, + scoreUnitSnapshot: result.scoreUnitSnapshot, + targetScoreSnapshot: result.targetScoreSnapshot, + targetScoreTimeMsSnapshot: result.targetScoreTimeMsSnapshot, + status: result.status, + startedAt: result.startedAt, + completedAt: result.completedAt, + actualTimeMs: result.actualTimeMs, + actualReps: result.actualReps, + actualScore: result.actualScore, + actualScoreTimeMs: result.actualScoreTimeMs, + note: result.note, + ); + }).toList(); } EntityMetadata _newMetadata( diff --git a/lib/domain/entities.dart b/lib/domain/entities.dart index a8e8501..b60b8a4 100644 --- a/lib/domain/entities.dart +++ b/lib/domain/entities.dart @@ -16,6 +16,15 @@ enum SetResultStatus { completed, skipped } enum ActiveScoreStopwatchStatus { running, stopped } +enum ActiveExerciseStepProgressStatus { + notStarted, + waitingManual, + runningTimer, + pausedTimer, + stoppedTimer, + sequenceComplete, +} + final class DomainException implements Exception { const DomainException(this.message); @@ -916,6 +925,166 @@ final class ActiveRestState { } } +final class ActiveExerciseStepProgressState { + ActiveExerciseStepProgressState({ + required this.metadata, + required this.activeWorkoutSessionId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.currentPassageIndex, + required this.currentStepIndex, + required this.currentStepSnapshotId, + required this.status, + this.startedAt, + required this.accumulatedMs, + required this.lastTransitionAt, + }) { + _requireNonNegative(programIndex, 'Program index'); + _requireNonNegative(exerciseIndex, 'Exercise index'); + _requireNonNegative(setIndex, 'Set index'); + _requireNonNegative(currentPassageIndex, 'Current passage index'); + _requireNonNegative(currentStepIndex, 'Current step index'); + _nonBlank(currentStepSnapshotId, 'Current step snapshot id'); + _requireNonNegative(accumulatedMs, 'Accumulated milliseconds'); + if (status == ActiveExerciseStepProgressStatus.runningTimer && + startedAt == null) { + throw const DomainException( + 'Running exercise step timer requires a start timestamp.', + ); + } + } + + final EntityMetadata metadata; + final String activeWorkoutSessionId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final int currentPassageIndex; + final int currentStepIndex; + final String currentStepSnapshotId; + final ActiveExerciseStepProgressStatus status; + final DateTime? startedAt; + final int accumulatedMs; + final DateTime lastTransitionAt; + + int elapsedMillisecondsAt(DateTime now) { + if (status != ActiveExerciseStepProgressStatus.runningTimer || + startedAt == null) { + return accumulatedMs; + } + return accumulatedMs + now.difference(startedAt!).inMilliseconds; + } + + ActiveExerciseStepProgressState copyWith({ + EntityMetadata? metadata, + int? currentPassageIndex, + int? currentStepIndex, + String? currentStepSnapshotId, + ActiveExerciseStepProgressStatus? status, + Object? startedAt = _unchanged, + int? accumulatedMs, + DateTime? lastTransitionAt, + }) { + return ActiveExerciseStepProgressState( + metadata: metadata ?? this.metadata, + activeWorkoutSessionId: activeWorkoutSessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + currentPassageIndex: currentPassageIndex ?? this.currentPassageIndex, + currentStepIndex: currentStepIndex ?? this.currentStepIndex, + currentStepSnapshotId: + currentStepSnapshotId ?? this.currentStepSnapshotId, + status: status ?? this.status, + startedAt: startedAt == _unchanged ? this.startedAt : startedAt as DateTime?, + accumulatedMs: accumulatedMs ?? this.accumulatedMs, + lastTransitionAt: lastTransitionAt ?? this.lastTransitionAt, + ); + } +} + +final class ActiveExerciseStepResult { + ActiveExerciseStepResult({ + required this.metadata, + required this.activeWorkoutSessionId, + required this.programSnapshotId, + required this.exerciseSnapshotId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.passageIndex, + required this.stepIndex, + required this.stepSnapshotId, + required this.stepNameSnapshot, + required this.stepTypeSnapshot, + required this.targetValueSnapshot, + required this.hasScoreSnapshot, + this.scoreInputModeSnapshot, + this.scoreLabelSnapshot, + this.scoreUnitSnapshot, + this.targetScoreSnapshot, + this.targetScoreTimeMsSnapshot, + required this.status, + this.startedAt, + this.completedAt, + this.actualTimeMs, + this.actualReps, + this.actualScore, + this.actualScoreTimeMs, + this.note, + }) { + _validateExerciseStepResult( + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + passageIndex: passageIndex, + stepIndex: stepIndex, + stepTypeSnapshot: stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, + status: status, + actualTimeMs: actualTimeMs, + actualReps: actualReps, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + ); + } + + final EntityMetadata metadata; + final String activeWorkoutSessionId; + final String programSnapshotId; + final String exerciseSnapshotId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final int passageIndex; + final int stepIndex; + final String stepSnapshotId; + final String stepNameSnapshot; + final ExerciseStepType stepTypeSnapshot; + final int targetValueSnapshot; + final bool hasScoreSnapshot; + final ScoreInputMode? scoreInputModeSnapshot; + final String? scoreLabelSnapshot; + final String? scoreUnitSnapshot; + final double? targetScoreSnapshot; + final int? targetScoreTimeMsSnapshot; + final SetResultStatus status; + final DateTime? startedAt; + final DateTime? completedAt; + final int? actualTimeMs; + final int? actualReps; + final double? actualScore; + final int? actualScoreTimeMs; + final String? note; +} + final class WorkoutHistory { const WorkoutHistory({ required this.metadata, @@ -928,6 +1097,7 @@ final class WorkoutHistory { required this.completed, required this.historySnapshotJson, this.results = const [], + this.stepResults = const [], }); final EntityMetadata metadata; @@ -940,6 +1110,7 @@ final class WorkoutHistory { final bool completed; final String historySnapshotJson; final List results; + final List stepResults; } final class WorkoutHistorySetResult { @@ -1021,6 +1192,87 @@ final class WorkoutHistorySetResult { final SetResultStatus status; } +final class WorkoutHistoryStepResult { + WorkoutHistoryStepResult({ + required this.metadata, + required this.workoutHistoryId, + required this.programSnapshotId, + required this.exerciseSnapshotId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.passageIndex, + required this.stepIndex, + required this.stepSnapshotId, + required this.stepNameSnapshot, + required this.stepTypeSnapshot, + required this.targetValueSnapshot, + required this.hasScoreSnapshot, + this.scoreInputModeSnapshot, + this.scoreLabelSnapshot, + this.scoreUnitSnapshot, + this.targetScoreSnapshot, + this.targetScoreTimeMsSnapshot, + required this.status, + this.startedAt, + this.completedAt, + this.actualTimeMs, + this.actualReps, + this.actualScore, + this.actualScoreTimeMs, + this.note, + }) { + _validateExerciseStepResult( + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + passageIndex: passageIndex, + stepIndex: stepIndex, + stepTypeSnapshot: stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, + status: status, + actualTimeMs: actualTimeMs, + actualReps: actualReps, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + ); + } + + final EntityMetadata metadata; + final String workoutHistoryId; + final String programSnapshotId; + final String exerciseSnapshotId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final int passageIndex; + final int stepIndex; + final String stepSnapshotId; + final String stepNameSnapshot; + final ExerciseStepType stepTypeSnapshot; + final int targetValueSnapshot; + final bool hasScoreSnapshot; + final ScoreInputMode? scoreInputModeSnapshot; + final String? scoreLabelSnapshot; + final String? scoreUnitSnapshot; + final double? targetScoreSnapshot; + final int? targetScoreTimeMsSnapshot; + final SetResultStatus status; + final DateTime? startedAt; + final DateTime? completedAt; + final int? actualTimeMs; + final int? actualReps; + final double? actualScore; + final int? actualScoreTimeMs; + final String? note; +} + String _nonBlank(String? value, String label) { final trimmed = value?.trim(); if (trimmed == null || trimmed.isEmpty) { @@ -1222,3 +1474,67 @@ void _requireScoreResultShape({ ); } } + +void _validateExerciseStepResult({ + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required ExerciseStepType stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + required ScoreInputMode? scoreInputModeSnapshot, + required String? scoreLabelSnapshot, + required String? scoreUnitSnapshot, + required double? targetScoreSnapshot, + required int? targetScoreTimeMsSnapshot, + required SetResultStatus status, + required int? actualTimeMs, + required int? actualReps, + required double? actualScore, + required int? actualScoreTimeMs, +}) { + _requireNonNegative(programIndex, 'Program index'); + _requireNonNegative(exerciseIndex, 'Exercise index'); + _requireNonNegative(setIndex, 'Set index'); + _requireNonNegative(passageIndex, 'Passage index'); + _requireNonNegative(stepIndex, 'Step index'); + _requirePositive(targetValueSnapshot, 'Step target value snapshot'); + _requireNullableNonNegative(actualTimeMs, 'Actual time milliseconds'); + _requireNullableNonNegative(actualReps, 'Actual reps'); + _requireNullableNonNegativeDouble(actualScore, 'Actual score'); + _requireNullableNonNegative(actualScoreTimeMs, 'Actual score time ms'); + if (status == SetResultStatus.skipped && + (actualTimeMs != null || + actualReps != null || + actualScore != null || + actualScoreTimeMs != null)) { + throw const DomainException('Skipped step results cannot have values.'); + } + if (actualTimeMs != null && stepTypeSnapshot != ExerciseStepType.time) { + throw const DomainException('Actual time requires a time step.'); + } + if (actualReps != null && stepTypeSnapshot != ExerciseStepType.reps) { + throw const DomainException('Actual reps requires a reps step.'); + } + final mode = scoreInputModeSnapshot ?? ScoreInputMode.manual; + _requireScoreTargetShape( + scoreEnabled: hasScoreSnapshot, + scoreInputMode: mode, + targetScore: targetScoreSnapshot, + targetScoreTimeMs: targetScoreTimeMsSnapshot, + ); + _requireScoreResultShape( + scoreInputMode: mode, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + ); + if (!hasScoreSnapshot && (actualScore != null || actualScoreTimeMs != null)) { + throw const DomainException('Step score result requires active score.'); + } + if (actualScore != null) { + _nonBlank(scoreLabelSnapshot, 'Step score label snapshot'); + _nonBlank(scoreUnitSnapshot, 'Step score unit snapshot'); + } +} diff --git a/lib/infrastructure/local/app_database.dart b/lib/infrastructure/local/app_database.dart index 65328d8..aa60471 100644 --- a/lib/infrastructure/local/app_database.dart +++ b/lib/infrastructure/local/app_database.dart @@ -7,6 +7,8 @@ part 'app_database.g.dart'; @DriftDatabase( tables: [ + ActiveExerciseStepProgressStates, + ActiveExerciseStepResults, ActiveRestStates, ActiveScoreStopwatchStates, ActiveSetResults, @@ -20,6 +22,7 @@ part 'app_database.g.dart'; Programs, WorkoutHistories, WorkoutHistorySetResults, + WorkoutHistoryStepResults, WorkoutTemplateExerciseOverrides, WorkoutTemplatePrograms, WorkoutTemplates, @@ -38,7 +41,7 @@ final class AppDatabase extends _$AppDatabase { } @override - int get schemaVersion => 8; + int get schemaVersion => 9; @override MigrationStrategy get migration { @@ -77,6 +80,9 @@ final class AppDatabase extends _$AppDatabase { if (from < 8) { await _migrateToSchema8(migrator); } + if (from < 9) { + await _migrateToSchema9(migrator); + } await _createIndexes(); }, beforeOpen: (details) async { @@ -133,6 +139,15 @@ final class AppDatabase extends _$AppDatabase { 'CREATE INDEX IF NOT EXISTS idx_active_rest_states_session_id ' 'ON active_rest_states (active_workout_session_id)', ); + await customStatement( + 'CREATE INDEX IF NOT EXISTS ' + 'idx_active_exercise_step_progress_states_session_id ' + 'ON active_exercise_step_progress_states (active_workout_session_id)', + ); + await customStatement( + 'CREATE INDEX IF NOT EXISTS idx_active_exercise_step_results_session_id ' + 'ON active_exercise_step_results (active_workout_session_id)', + ); await customStatement( 'CREATE UNIQUE INDEX IF NOT EXISTS ' 'idx_active_workout_sessions_single_open ' @@ -148,6 +163,10 @@ final class AppDatabase extends _$AppDatabase { 'CREATE INDEX IF NOT EXISTS idx_workout_history_set_results_history_id ' 'ON workout_history_set_results (workout_history_id)', ); + await customStatement( + 'CREATE INDEX IF NOT EXISTS idx_workout_history_step_results_history_id ' + 'ON workout_history_step_results (workout_history_id)', + ); await customStatement( 'CREATE INDEX IF NOT EXISTS idx_change_log_entity ' 'ON change_log (entity_type, entity_id)', @@ -164,6 +183,8 @@ final class AppDatabase extends _$AppDatabase { } const _syncableTableNames = [ + 'active_exercise_step_progress_states', + 'active_exercise_step_results', 'active_rest_states', 'active_score_stopwatch_states', 'active_set_results', @@ -176,6 +197,7 @@ const _syncableTableNames = [ 'programs', 'workout_history', 'workout_history_set_results', + 'workout_history_step_results', 'workout_template_exercise_overrides', 'workout_template_programs', 'workout_templates', @@ -287,4 +309,10 @@ extension on AppDatabase { 'exercise_steps_snapshot_json TEXT', ); } + + Future _migrateToSchema9(Migrator migrator) async { + await migrator.createTable(activeExerciseStepProgressStates); + await migrator.createTable(activeExerciseStepResults); + await migrator.createTable(workoutHistoryStepResults); + } } diff --git a/lib/infrastructure/local/app_database.g.dart b/lib/infrastructure/local/app_database.g.dart index 5bf1c04..cae6f0d 100644 --- a/lib/infrastructure/local/app_database.g.dart +++ b/lib/infrastructure/local/app_database.g.dart @@ -2110,6 +2110,3441 @@ class ActiveWorkoutSessionsCompanion } } +class $ActiveExerciseStepProgressStatesTable + extends ActiveExerciseStepProgressStates + with + TableInfo< + $ActiveExerciseStepProgressStatesTable, + ActiveExerciseStepProgressState + > { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ActiveExerciseStepProgressStatesTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _createdAtMeta = const VerificationMeta( + 'createdAt', + ); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _updatedAtMeta = const VerificationMeta( + 'updatedAt', + ); + @override + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _deletedAtMeta = const VerificationMeta( + 'deletedAt', + ); + @override + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _schemaVersionMeta = const VerificationMeta( + 'schemaVersion', + ); + @override + late final GeneratedColumn schemaVersion = GeneratedColumn( + 'schema_version', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(1), + ); + static const VerificationMeta _syncStateMeta = const VerificationMeta( + 'syncState', + ); + @override + late final GeneratedColumn syncState = GeneratedColumn( + 'sync_state', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: + 'NOT NULL CHECK (sync_state IN (\'localOnly\', \'dirty\', \'synced\', \'deleted\'))', + ); + static const VerificationMeta _localRevisionMeta = const VerificationMeta( + 'localRevision', + ); + @override + late final GeneratedColumn localRevision = GeneratedColumn( + 'local_revision', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL CHECK (local_revision >= 0)', + ); + static const VerificationMeta _originDeviceIdMeta = const VerificationMeta( + 'originDeviceId', + ); + @override + late final GeneratedColumn originDeviceId = GeneratedColumn( + 'origin_device_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _futureOwnerProfileIdMeta = + const VerificationMeta('futureOwnerProfileId'); + @override + late final GeneratedColumn futureOwnerProfileId = + GeneratedColumn( + 'future_owner_profile_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _lastSyncedAtMeta = const VerificationMeta( + 'lastSyncedAt', + ); + @override + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _remoteRevisionMeta = const VerificationMeta( + 'remoteRevision', + ); + @override + late final GeneratedColumn remoteRevision = GeneratedColumn( + 'remote_revision', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _activeWorkoutSessionIdMeta = + const VerificationMeta('activeWorkoutSessionId'); + @override + late final GeneratedColumn activeWorkoutSessionId = + GeneratedColumn( + 'active_workout_session_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES active_workout_sessions (id)', + ), + ); + static const VerificationMeta _programIndexMeta = const VerificationMeta( + 'programIndex', + ); + @override + late final GeneratedColumn programIndex = GeneratedColumn( + 'program_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _exerciseIndexMeta = const VerificationMeta( + 'exerciseIndex', + ); + @override + late final GeneratedColumn exerciseIndex = GeneratedColumn( + 'exercise_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _setIndexMeta = const VerificationMeta( + 'setIndex', + ); + @override + late final GeneratedColumn setIndex = GeneratedColumn( + 'set_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _currentPassageIndexMeta = + const VerificationMeta('currentPassageIndex'); + @override + late final GeneratedColumn currentPassageIndex = GeneratedColumn( + 'current_passage_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _currentStepIndexMeta = const VerificationMeta( + 'currentStepIndex', + ); + @override + late final GeneratedColumn currentStepIndex = GeneratedColumn( + 'current_step_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _currentStepSnapshotIdMeta = + const VerificationMeta('currentStepSnapshotId'); + @override + late final GeneratedColumn currentStepSnapshotId = + GeneratedColumn( + 'current_step_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _statusMeta = const VerificationMeta('status'); + @override + late final GeneratedColumn status = GeneratedColumn( + 'status', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _startedAtMeta = const VerificationMeta( + 'startedAt', + ); + @override + late final GeneratedColumn startedAt = GeneratedColumn( + 'started_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _accumulatedMsMeta = const VerificationMeta( + 'accumulatedMs', + ); + @override + late final GeneratedColumn accumulatedMs = GeneratedColumn( + 'accumulated_ms', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _lastTransitionAtMeta = const VerificationMeta( + 'lastTransitionAt', + ); + @override + late final GeneratedColumn lastTransitionAt = + GeneratedColumn( + 'last_transition_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + @override + List get $columns => [ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + activeWorkoutSessionId, + programIndex, + exerciseIndex, + setIndex, + currentPassageIndex, + currentStepIndex, + currentStepSnapshotId, + status, + startedAt, + accumulatedMs, + lastTransitionAt, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'active_exercise_step_progress_states'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } else if (isInserting) { + context.missing(_idMeta); + } + if (data.containsKey('created_at')) { + context.handle( + _createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta), + ); + } else if (isInserting) { + context.missing(_createdAtMeta); + } + if (data.containsKey('updated_at')) { + context.handle( + _updatedAtMeta, + updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta), + ); + } else if (isInserting) { + context.missing(_updatedAtMeta); + } + if (data.containsKey('deleted_at')) { + context.handle( + _deletedAtMeta, + deletedAt.isAcceptableOrUnknown(data['deleted_at']!, _deletedAtMeta), + ); + } + if (data.containsKey('schema_version')) { + context.handle( + _schemaVersionMeta, + schemaVersion.isAcceptableOrUnknown( + data['schema_version']!, + _schemaVersionMeta, + ), + ); + } + if (data.containsKey('sync_state')) { + context.handle( + _syncStateMeta, + syncState.isAcceptableOrUnknown(data['sync_state']!, _syncStateMeta), + ); + } else if (isInserting) { + context.missing(_syncStateMeta); + } + if (data.containsKey('local_revision')) { + context.handle( + _localRevisionMeta, + localRevision.isAcceptableOrUnknown( + data['local_revision']!, + _localRevisionMeta, + ), + ); + } else if (isInserting) { + context.missing(_localRevisionMeta); + } + if (data.containsKey('origin_device_id')) { + context.handle( + _originDeviceIdMeta, + originDeviceId.isAcceptableOrUnknown( + data['origin_device_id']!, + _originDeviceIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_originDeviceIdMeta); + } + if (data.containsKey('future_owner_profile_id')) { + context.handle( + _futureOwnerProfileIdMeta, + futureOwnerProfileId.isAcceptableOrUnknown( + data['future_owner_profile_id']!, + _futureOwnerProfileIdMeta, + ), + ); + } + if (data.containsKey('last_synced_at')) { + context.handle( + _lastSyncedAtMeta, + lastSyncedAt.isAcceptableOrUnknown( + data['last_synced_at']!, + _lastSyncedAtMeta, + ), + ); + } + if (data.containsKey('remote_revision')) { + context.handle( + _remoteRevisionMeta, + remoteRevision.isAcceptableOrUnknown( + data['remote_revision']!, + _remoteRevisionMeta, + ), + ); + } + if (data.containsKey('active_workout_session_id')) { + context.handle( + _activeWorkoutSessionIdMeta, + activeWorkoutSessionId.isAcceptableOrUnknown( + data['active_workout_session_id']!, + _activeWorkoutSessionIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_activeWorkoutSessionIdMeta); + } + if (data.containsKey('program_index')) { + context.handle( + _programIndexMeta, + programIndex.isAcceptableOrUnknown( + data['program_index']!, + _programIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_programIndexMeta); + } + if (data.containsKey('exercise_index')) { + context.handle( + _exerciseIndexMeta, + exerciseIndex.isAcceptableOrUnknown( + data['exercise_index']!, + _exerciseIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_exerciseIndexMeta); + } + if (data.containsKey('set_index')) { + context.handle( + _setIndexMeta, + setIndex.isAcceptableOrUnknown(data['set_index']!, _setIndexMeta), + ); + } else if (isInserting) { + context.missing(_setIndexMeta); + } + if (data.containsKey('current_passage_index')) { + context.handle( + _currentPassageIndexMeta, + currentPassageIndex.isAcceptableOrUnknown( + data['current_passage_index']!, + _currentPassageIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_currentPassageIndexMeta); + } + if (data.containsKey('current_step_index')) { + context.handle( + _currentStepIndexMeta, + currentStepIndex.isAcceptableOrUnknown( + data['current_step_index']!, + _currentStepIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_currentStepIndexMeta); + } + if (data.containsKey('current_step_snapshot_id')) { + context.handle( + _currentStepSnapshotIdMeta, + currentStepSnapshotId.isAcceptableOrUnknown( + data['current_step_snapshot_id']!, + _currentStepSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_currentStepSnapshotIdMeta); + } + if (data.containsKey('status')) { + context.handle( + _statusMeta, + status.isAcceptableOrUnknown(data['status']!, _statusMeta), + ); + } else if (isInserting) { + context.missing(_statusMeta); + } + if (data.containsKey('started_at')) { + context.handle( + _startedAtMeta, + startedAt.isAcceptableOrUnknown(data['started_at']!, _startedAtMeta), + ); + } + if (data.containsKey('accumulated_ms')) { + context.handle( + _accumulatedMsMeta, + accumulatedMs.isAcceptableOrUnknown( + data['accumulated_ms']!, + _accumulatedMsMeta, + ), + ); + } else if (isInserting) { + context.missing(_accumulatedMsMeta); + } + if (data.containsKey('last_transition_at')) { + context.handle( + _lastTransitionAtMeta, + lastTransitionAt.isAcceptableOrUnknown( + data['last_transition_at']!, + _lastTransitionAtMeta, + ), + ); + } else if (isInserting) { + context.missing(_lastTransitionAtMeta); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + ActiveExerciseStepProgressState map( + Map data, { + String? tablePrefix, + }) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ActiveExerciseStepProgressState( + id: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + createdAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}created_at'], + )!, + updatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}updated_at'], + )!, + deletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}deleted_at'], + ), + schemaVersion: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}schema_version'], + )!, + syncState: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}sync_state'], + )!, + localRevision: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}local_revision'], + )!, + originDeviceId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}origin_device_id'], + )!, + futureOwnerProfileId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}future_owner_profile_id'], + ), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_synced_at'], + ), + remoteRevision: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}remote_revision'], + ), + activeWorkoutSessionId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}active_workout_session_id'], + )!, + programIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}program_index'], + )!, + exerciseIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}exercise_index'], + )!, + setIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}set_index'], + )!, + currentPassageIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}current_passage_index'], + )!, + currentStepIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}current_step_index'], + )!, + currentStepSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}current_step_snapshot_id'], + )!, + status: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}status'], + )!, + startedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}started_at'], + ), + accumulatedMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}accumulated_ms'], + )!, + lastTransitionAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_transition_at'], + )!, + ); + } + + @override + $ActiveExerciseStepProgressStatesTable createAlias(String alias) { + return $ActiveExerciseStepProgressStatesTable(attachedDatabase, alias); + } +} + +class ActiveExerciseStepProgressState extends DataClass + implements Insertable { + final String id; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final int schemaVersion; + final String syncState; + final int localRevision; + final String originDeviceId; + final String? futureOwnerProfileId; + final DateTime? lastSyncedAt; + final String? remoteRevision; + final String activeWorkoutSessionId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final int currentPassageIndex; + final int currentStepIndex; + final String currentStepSnapshotId; + final String status; + final DateTime? startedAt; + final int accumulatedMs; + final DateTime lastTransitionAt; + const ActiveExerciseStepProgressState({ + required this.id, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + required this.schemaVersion, + required this.syncState, + required this.localRevision, + required this.originDeviceId, + this.futureOwnerProfileId, + this.lastSyncedAt, + this.remoteRevision, + required this.activeWorkoutSessionId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.currentPassageIndex, + required this.currentStepIndex, + required this.currentStepSnapshotId, + required this.status, + this.startedAt, + required this.accumulatedMs, + required this.lastTransitionAt, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + map['schema_version'] = Variable(schemaVersion); + map['sync_state'] = Variable(syncState); + map['local_revision'] = Variable(localRevision); + map['origin_device_id'] = Variable(originDeviceId); + if (!nullToAbsent || futureOwnerProfileId != null) { + map['future_owner_profile_id'] = Variable(futureOwnerProfileId); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + if (!nullToAbsent || remoteRevision != null) { + map['remote_revision'] = Variable(remoteRevision); + } + map['active_workout_session_id'] = Variable(activeWorkoutSessionId); + map['program_index'] = Variable(programIndex); + map['exercise_index'] = Variable(exerciseIndex); + map['set_index'] = Variable(setIndex); + map['current_passage_index'] = Variable(currentPassageIndex); + map['current_step_index'] = Variable(currentStepIndex); + map['current_step_snapshot_id'] = Variable(currentStepSnapshotId); + map['status'] = Variable(status); + if (!nullToAbsent || startedAt != null) { + map['started_at'] = Variable(startedAt); + } + map['accumulated_ms'] = Variable(accumulatedMs); + map['last_transition_at'] = Variable(lastTransitionAt); + return map; + } + + ActiveExerciseStepProgressStatesCompanion toCompanion(bool nullToAbsent) { + return ActiveExerciseStepProgressStatesCompanion( + id: Value(id), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + schemaVersion: Value(schemaVersion), + syncState: Value(syncState), + localRevision: Value(localRevision), + originDeviceId: Value(originDeviceId), + futureOwnerProfileId: futureOwnerProfileId == null && nullToAbsent + ? const Value.absent() + : Value(futureOwnerProfileId), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + remoteRevision: remoteRevision == null && nullToAbsent + ? const Value.absent() + : Value(remoteRevision), + activeWorkoutSessionId: Value(activeWorkoutSessionId), + programIndex: Value(programIndex), + exerciseIndex: Value(exerciseIndex), + setIndex: Value(setIndex), + currentPassageIndex: Value(currentPassageIndex), + currentStepIndex: Value(currentStepIndex), + currentStepSnapshotId: Value(currentStepSnapshotId), + status: Value(status), + startedAt: startedAt == null && nullToAbsent + ? const Value.absent() + : Value(startedAt), + accumulatedMs: Value(accumulatedMs), + lastTransitionAt: Value(lastTransitionAt), + ); + } + + factory ActiveExerciseStepProgressState.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ActiveExerciseStepProgressState( + id: serializer.fromJson(json['id']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + schemaVersion: serializer.fromJson(json['schemaVersion']), + syncState: serializer.fromJson(json['syncState']), + localRevision: serializer.fromJson(json['localRevision']), + originDeviceId: serializer.fromJson(json['originDeviceId']), + futureOwnerProfileId: serializer.fromJson( + json['futureOwnerProfileId'], + ), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + remoteRevision: serializer.fromJson(json['remoteRevision']), + activeWorkoutSessionId: serializer.fromJson( + json['activeWorkoutSessionId'], + ), + programIndex: serializer.fromJson(json['programIndex']), + exerciseIndex: serializer.fromJson(json['exerciseIndex']), + setIndex: serializer.fromJson(json['setIndex']), + currentPassageIndex: serializer.fromJson( + json['currentPassageIndex'], + ), + currentStepIndex: serializer.fromJson(json['currentStepIndex']), + currentStepSnapshotId: serializer.fromJson( + json['currentStepSnapshotId'], + ), + status: serializer.fromJson(json['status']), + startedAt: serializer.fromJson(json['startedAt']), + accumulatedMs: serializer.fromJson(json['accumulatedMs']), + lastTransitionAt: serializer.fromJson(json['lastTransitionAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'schemaVersion': serializer.toJson(schemaVersion), + 'syncState': serializer.toJson(syncState), + 'localRevision': serializer.toJson(localRevision), + 'originDeviceId': serializer.toJson(originDeviceId), + 'futureOwnerProfileId': serializer.toJson(futureOwnerProfileId), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'remoteRevision': serializer.toJson(remoteRevision), + 'activeWorkoutSessionId': serializer.toJson( + activeWorkoutSessionId, + ), + 'programIndex': serializer.toJson(programIndex), + 'exerciseIndex': serializer.toJson(exerciseIndex), + 'setIndex': serializer.toJson(setIndex), + 'currentPassageIndex': serializer.toJson(currentPassageIndex), + 'currentStepIndex': serializer.toJson(currentStepIndex), + 'currentStepSnapshotId': serializer.toJson(currentStepSnapshotId), + 'status': serializer.toJson(status), + 'startedAt': serializer.toJson(startedAt), + 'accumulatedMs': serializer.toJson(accumulatedMs), + 'lastTransitionAt': serializer.toJson(lastTransitionAt), + }; + } + + ActiveExerciseStepProgressState copyWith({ + String? id, + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + int? schemaVersion, + String? syncState, + int? localRevision, + String? originDeviceId, + Value futureOwnerProfileId = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value remoteRevision = const Value.absent(), + String? activeWorkoutSessionId, + int? programIndex, + int? exerciseIndex, + int? setIndex, + int? currentPassageIndex, + int? currentStepIndex, + String? currentStepSnapshotId, + String? status, + Value startedAt = const Value.absent(), + int? accumulatedMs, + DateTime? lastTransitionAt, + }) => ActiveExerciseStepProgressState( + id: id ?? this.id, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + schemaVersion: schemaVersion ?? this.schemaVersion, + syncState: syncState ?? this.syncState, + localRevision: localRevision ?? this.localRevision, + originDeviceId: originDeviceId ?? this.originDeviceId, + futureOwnerProfileId: futureOwnerProfileId.present + ? futureOwnerProfileId.value + : this.futureOwnerProfileId, + lastSyncedAt: lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + remoteRevision: remoteRevision.present + ? remoteRevision.value + : this.remoteRevision, + activeWorkoutSessionId: + activeWorkoutSessionId ?? this.activeWorkoutSessionId, + programIndex: programIndex ?? this.programIndex, + exerciseIndex: exerciseIndex ?? this.exerciseIndex, + setIndex: setIndex ?? this.setIndex, + currentPassageIndex: currentPassageIndex ?? this.currentPassageIndex, + currentStepIndex: currentStepIndex ?? this.currentStepIndex, + currentStepSnapshotId: currentStepSnapshotId ?? this.currentStepSnapshotId, + status: status ?? this.status, + startedAt: startedAt.present ? startedAt.value : this.startedAt, + accumulatedMs: accumulatedMs ?? this.accumulatedMs, + lastTransitionAt: lastTransitionAt ?? this.lastTransitionAt, + ); + ActiveExerciseStepProgressState copyWithCompanion( + ActiveExerciseStepProgressStatesCompanion data, + ) { + return ActiveExerciseStepProgressState( + id: data.id.present ? data.id.value : this.id, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + schemaVersion: data.schemaVersion.present + ? data.schemaVersion.value + : this.schemaVersion, + syncState: data.syncState.present ? data.syncState.value : this.syncState, + localRevision: data.localRevision.present + ? data.localRevision.value + : this.localRevision, + originDeviceId: data.originDeviceId.present + ? data.originDeviceId.value + : this.originDeviceId, + futureOwnerProfileId: data.futureOwnerProfileId.present + ? data.futureOwnerProfileId.value + : this.futureOwnerProfileId, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + remoteRevision: data.remoteRevision.present + ? data.remoteRevision.value + : this.remoteRevision, + activeWorkoutSessionId: data.activeWorkoutSessionId.present + ? data.activeWorkoutSessionId.value + : this.activeWorkoutSessionId, + programIndex: data.programIndex.present + ? data.programIndex.value + : this.programIndex, + exerciseIndex: data.exerciseIndex.present + ? data.exerciseIndex.value + : this.exerciseIndex, + setIndex: data.setIndex.present ? data.setIndex.value : this.setIndex, + currentPassageIndex: data.currentPassageIndex.present + ? data.currentPassageIndex.value + : this.currentPassageIndex, + currentStepIndex: data.currentStepIndex.present + ? data.currentStepIndex.value + : this.currentStepIndex, + currentStepSnapshotId: data.currentStepSnapshotId.present + ? data.currentStepSnapshotId.value + : this.currentStepSnapshotId, + status: data.status.present ? data.status.value : this.status, + startedAt: data.startedAt.present ? data.startedAt.value : this.startedAt, + accumulatedMs: data.accumulatedMs.present + ? data.accumulatedMs.value + : this.accumulatedMs, + lastTransitionAt: data.lastTransitionAt.present + ? data.lastTransitionAt.value + : this.lastTransitionAt, + ); + } + + @override + String toString() { + return (StringBuffer('ActiveExerciseStepProgressState(') + ..write('id: $id, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('schemaVersion: $schemaVersion, ') + ..write('syncState: $syncState, ') + ..write('localRevision: $localRevision, ') + ..write('originDeviceId: $originDeviceId, ') + ..write('futureOwnerProfileId: $futureOwnerProfileId, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('remoteRevision: $remoteRevision, ') + ..write('activeWorkoutSessionId: $activeWorkoutSessionId, ') + ..write('programIndex: $programIndex, ') + ..write('exerciseIndex: $exerciseIndex, ') + ..write('setIndex: $setIndex, ') + ..write('currentPassageIndex: $currentPassageIndex, ') + ..write('currentStepIndex: $currentStepIndex, ') + ..write('currentStepSnapshotId: $currentStepSnapshotId, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('accumulatedMs: $accumulatedMs, ') + ..write('lastTransitionAt: $lastTransitionAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hashAll([ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + activeWorkoutSessionId, + programIndex, + exerciseIndex, + setIndex, + currentPassageIndex, + currentStepIndex, + currentStepSnapshotId, + status, + startedAt, + accumulatedMs, + lastTransitionAt, + ]); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ActiveExerciseStepProgressState && + other.id == this.id && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.schemaVersion == this.schemaVersion && + other.syncState == this.syncState && + other.localRevision == this.localRevision && + other.originDeviceId == this.originDeviceId && + other.futureOwnerProfileId == this.futureOwnerProfileId && + other.lastSyncedAt == this.lastSyncedAt && + other.remoteRevision == this.remoteRevision && + other.activeWorkoutSessionId == this.activeWorkoutSessionId && + other.programIndex == this.programIndex && + other.exerciseIndex == this.exerciseIndex && + other.setIndex == this.setIndex && + other.currentPassageIndex == this.currentPassageIndex && + other.currentStepIndex == this.currentStepIndex && + other.currentStepSnapshotId == this.currentStepSnapshotId && + other.status == this.status && + other.startedAt == this.startedAt && + other.accumulatedMs == this.accumulatedMs && + other.lastTransitionAt == this.lastTransitionAt); +} + +class ActiveExerciseStepProgressStatesCompanion + extends UpdateCompanion { + final Value id; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value schemaVersion; + final Value syncState; + final Value localRevision; + final Value originDeviceId; + final Value futureOwnerProfileId; + final Value lastSyncedAt; + final Value remoteRevision; + final Value activeWorkoutSessionId; + final Value programIndex; + final Value exerciseIndex; + final Value setIndex; + final Value currentPassageIndex; + final Value currentStepIndex; + final Value currentStepSnapshotId; + final Value status; + final Value startedAt; + final Value accumulatedMs; + final Value lastTransitionAt; + final Value rowid; + const ActiveExerciseStepProgressStatesCompanion({ + this.id = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.schemaVersion = const Value.absent(), + this.syncState = const Value.absent(), + this.localRevision = const Value.absent(), + this.originDeviceId = const Value.absent(), + this.futureOwnerProfileId = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.remoteRevision = const Value.absent(), + this.activeWorkoutSessionId = const Value.absent(), + this.programIndex = const Value.absent(), + this.exerciseIndex = const Value.absent(), + this.setIndex = const Value.absent(), + this.currentPassageIndex = const Value.absent(), + this.currentStepIndex = const Value.absent(), + this.currentStepSnapshotId = const Value.absent(), + this.status = const Value.absent(), + this.startedAt = const Value.absent(), + this.accumulatedMs = const Value.absent(), + this.lastTransitionAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + ActiveExerciseStepProgressStatesCompanion.insert({ + required String id, + required DateTime createdAt, + required DateTime updatedAt, + this.deletedAt = const Value.absent(), + this.schemaVersion = const Value.absent(), + required String syncState, + required int localRevision, + required String originDeviceId, + this.futureOwnerProfileId = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.remoteRevision = const Value.absent(), + required String activeWorkoutSessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int currentPassageIndex, + required int currentStepIndex, + required String currentStepSnapshotId, + required String status, + this.startedAt = const Value.absent(), + required int accumulatedMs, + required DateTime lastTransitionAt, + this.rowid = const Value.absent(), + }) : id = Value(id), + createdAt = Value(createdAt), + updatedAt = Value(updatedAt), + syncState = Value(syncState), + localRevision = Value(localRevision), + originDeviceId = Value(originDeviceId), + activeWorkoutSessionId = Value(activeWorkoutSessionId), + programIndex = Value(programIndex), + exerciseIndex = Value(exerciseIndex), + setIndex = Value(setIndex), + currentPassageIndex = Value(currentPassageIndex), + currentStepIndex = Value(currentStepIndex), + currentStepSnapshotId = Value(currentStepSnapshotId), + status = Value(status), + accumulatedMs = Value(accumulatedMs), + lastTransitionAt = Value(lastTransitionAt); + static Insertable custom({ + Expression? id, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? schemaVersion, + Expression? syncState, + Expression? localRevision, + Expression? originDeviceId, + Expression? futureOwnerProfileId, + Expression? lastSyncedAt, + Expression? remoteRevision, + Expression? activeWorkoutSessionId, + Expression? programIndex, + Expression? exerciseIndex, + Expression? setIndex, + Expression? currentPassageIndex, + Expression? currentStepIndex, + Expression? currentStepSnapshotId, + Expression? status, + Expression? startedAt, + Expression? accumulatedMs, + Expression? lastTransitionAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (schemaVersion != null) 'schema_version': schemaVersion, + if (syncState != null) 'sync_state': syncState, + if (localRevision != null) 'local_revision': localRevision, + if (originDeviceId != null) 'origin_device_id': originDeviceId, + if (futureOwnerProfileId != null) + 'future_owner_profile_id': futureOwnerProfileId, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (remoteRevision != null) 'remote_revision': remoteRevision, + if (activeWorkoutSessionId != null) + 'active_workout_session_id': activeWorkoutSessionId, + if (programIndex != null) 'program_index': programIndex, + if (exerciseIndex != null) 'exercise_index': exerciseIndex, + if (setIndex != null) 'set_index': setIndex, + if (currentPassageIndex != null) + 'current_passage_index': currentPassageIndex, + if (currentStepIndex != null) 'current_step_index': currentStepIndex, + if (currentStepSnapshotId != null) + 'current_step_snapshot_id': currentStepSnapshotId, + if (status != null) 'status': status, + if (startedAt != null) 'started_at': startedAt, + if (accumulatedMs != null) 'accumulated_ms': accumulatedMs, + if (lastTransitionAt != null) 'last_transition_at': lastTransitionAt, + if (rowid != null) 'rowid': rowid, + }); + } + + ActiveExerciseStepProgressStatesCompanion copyWith({ + Value? id, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? schemaVersion, + Value? syncState, + Value? localRevision, + Value? originDeviceId, + Value? futureOwnerProfileId, + Value? lastSyncedAt, + Value? remoteRevision, + Value? activeWorkoutSessionId, + Value? programIndex, + Value? exerciseIndex, + Value? setIndex, + Value? currentPassageIndex, + Value? currentStepIndex, + Value? currentStepSnapshotId, + Value? status, + Value? startedAt, + Value? accumulatedMs, + Value? lastTransitionAt, + Value? rowid, + }) { + return ActiveExerciseStepProgressStatesCompanion( + id: id ?? this.id, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + schemaVersion: schemaVersion ?? this.schemaVersion, + syncState: syncState ?? this.syncState, + localRevision: localRevision ?? this.localRevision, + originDeviceId: originDeviceId ?? this.originDeviceId, + futureOwnerProfileId: futureOwnerProfileId ?? this.futureOwnerProfileId, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + remoteRevision: remoteRevision ?? this.remoteRevision, + activeWorkoutSessionId: + activeWorkoutSessionId ?? this.activeWorkoutSessionId, + programIndex: programIndex ?? this.programIndex, + exerciseIndex: exerciseIndex ?? this.exerciseIndex, + setIndex: setIndex ?? this.setIndex, + currentPassageIndex: currentPassageIndex ?? this.currentPassageIndex, + currentStepIndex: currentStepIndex ?? this.currentStepIndex, + currentStepSnapshotId: + currentStepSnapshotId ?? this.currentStepSnapshotId, + status: status ?? this.status, + startedAt: startedAt ?? this.startedAt, + accumulatedMs: accumulatedMs ?? this.accumulatedMs, + lastTransitionAt: lastTransitionAt ?? this.lastTransitionAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (schemaVersion.present) { + map['schema_version'] = Variable(schemaVersion.value); + } + if (syncState.present) { + map['sync_state'] = Variable(syncState.value); + } + if (localRevision.present) { + map['local_revision'] = Variable(localRevision.value); + } + if (originDeviceId.present) { + map['origin_device_id'] = Variable(originDeviceId.value); + } + if (futureOwnerProfileId.present) { + map['future_owner_profile_id'] = Variable( + futureOwnerProfileId.value, + ); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (remoteRevision.present) { + map['remote_revision'] = Variable(remoteRevision.value); + } + if (activeWorkoutSessionId.present) { + map['active_workout_session_id'] = Variable( + activeWorkoutSessionId.value, + ); + } + if (programIndex.present) { + map['program_index'] = Variable(programIndex.value); + } + if (exerciseIndex.present) { + map['exercise_index'] = Variable(exerciseIndex.value); + } + if (setIndex.present) { + map['set_index'] = Variable(setIndex.value); + } + if (currentPassageIndex.present) { + map['current_passage_index'] = Variable(currentPassageIndex.value); + } + if (currentStepIndex.present) { + map['current_step_index'] = Variable(currentStepIndex.value); + } + if (currentStepSnapshotId.present) { + map['current_step_snapshot_id'] = Variable( + currentStepSnapshotId.value, + ); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (startedAt.present) { + map['started_at'] = Variable(startedAt.value); + } + if (accumulatedMs.present) { + map['accumulated_ms'] = Variable(accumulatedMs.value); + } + if (lastTransitionAt.present) { + map['last_transition_at'] = Variable(lastTransitionAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ActiveExerciseStepProgressStatesCompanion(') + ..write('id: $id, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('schemaVersion: $schemaVersion, ') + ..write('syncState: $syncState, ') + ..write('localRevision: $localRevision, ') + ..write('originDeviceId: $originDeviceId, ') + ..write('futureOwnerProfileId: $futureOwnerProfileId, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('remoteRevision: $remoteRevision, ') + ..write('activeWorkoutSessionId: $activeWorkoutSessionId, ') + ..write('programIndex: $programIndex, ') + ..write('exerciseIndex: $exerciseIndex, ') + ..write('setIndex: $setIndex, ') + ..write('currentPassageIndex: $currentPassageIndex, ') + ..write('currentStepIndex: $currentStepIndex, ') + ..write('currentStepSnapshotId: $currentStepSnapshotId, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('accumulatedMs: $accumulatedMs, ') + ..write('lastTransitionAt: $lastTransitionAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $ActiveExerciseStepResultsTable extends ActiveExerciseStepResults + with TableInfo<$ActiveExerciseStepResultsTable, ActiveExerciseStepResult> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ActiveExerciseStepResultsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _createdAtMeta = const VerificationMeta( + 'createdAt', + ); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _updatedAtMeta = const VerificationMeta( + 'updatedAt', + ); + @override + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _deletedAtMeta = const VerificationMeta( + 'deletedAt', + ); + @override + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _schemaVersionMeta = const VerificationMeta( + 'schemaVersion', + ); + @override + late final GeneratedColumn schemaVersion = GeneratedColumn( + 'schema_version', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(1), + ); + static const VerificationMeta _syncStateMeta = const VerificationMeta( + 'syncState', + ); + @override + late final GeneratedColumn syncState = GeneratedColumn( + 'sync_state', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: + 'NOT NULL CHECK (sync_state IN (\'localOnly\', \'dirty\', \'synced\', \'deleted\'))', + ); + static const VerificationMeta _localRevisionMeta = const VerificationMeta( + 'localRevision', + ); + @override + late final GeneratedColumn localRevision = GeneratedColumn( + 'local_revision', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL CHECK (local_revision >= 0)', + ); + static const VerificationMeta _originDeviceIdMeta = const VerificationMeta( + 'originDeviceId', + ); + @override + late final GeneratedColumn originDeviceId = GeneratedColumn( + 'origin_device_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _futureOwnerProfileIdMeta = + const VerificationMeta('futureOwnerProfileId'); + @override + late final GeneratedColumn futureOwnerProfileId = + GeneratedColumn( + 'future_owner_profile_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _lastSyncedAtMeta = const VerificationMeta( + 'lastSyncedAt', + ); + @override + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _remoteRevisionMeta = const VerificationMeta( + 'remoteRevision', + ); + @override + late final GeneratedColumn remoteRevision = GeneratedColumn( + 'remote_revision', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _activeWorkoutSessionIdMeta = + const VerificationMeta('activeWorkoutSessionId'); + @override + late final GeneratedColumn activeWorkoutSessionId = + GeneratedColumn( + 'active_workout_session_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES active_workout_sessions (id)', + ), + ); + static const VerificationMeta _programSnapshotIdMeta = const VerificationMeta( + 'programSnapshotId', + ); + @override + late final GeneratedColumn programSnapshotId = + GeneratedColumn( + 'program_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _exerciseSnapshotIdMeta = + const VerificationMeta('exerciseSnapshotId'); + @override + late final GeneratedColumn exerciseSnapshotId = + GeneratedColumn( + 'exercise_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _programIndexMeta = const VerificationMeta( + 'programIndex', + ); + @override + late final GeneratedColumn programIndex = GeneratedColumn( + 'program_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _exerciseIndexMeta = const VerificationMeta( + 'exerciseIndex', + ); + @override + late final GeneratedColumn exerciseIndex = GeneratedColumn( + 'exercise_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _setIndexMeta = const VerificationMeta( + 'setIndex', + ); + @override + late final GeneratedColumn setIndex = GeneratedColumn( + 'set_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _passageIndexMeta = const VerificationMeta( + 'passageIndex', + ); + @override + late final GeneratedColumn passageIndex = GeneratedColumn( + 'passage_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepIndexMeta = const VerificationMeta( + 'stepIndex', + ); + @override + late final GeneratedColumn stepIndex = GeneratedColumn( + 'step_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepSnapshotIdMeta = const VerificationMeta( + 'stepSnapshotId', + ); + @override + late final GeneratedColumn stepSnapshotId = GeneratedColumn( + 'step_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepNameSnapshotMeta = const VerificationMeta( + 'stepNameSnapshot', + ); + @override + late final GeneratedColumn stepNameSnapshot = GeneratedColumn( + 'step_name_snapshot', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepTypeSnapshotMeta = const VerificationMeta( + 'stepTypeSnapshot', + ); + @override + late final GeneratedColumn stepTypeSnapshot = GeneratedColumn( + 'step_type_snapshot', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _targetValueSnapshotMeta = + const VerificationMeta('targetValueSnapshot'); + @override + late final GeneratedColumn targetValueSnapshot = GeneratedColumn( + 'target_value_snapshot', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _hasScoreSnapshotMeta = const VerificationMeta( + 'hasScoreSnapshot', + ); + @override + late final GeneratedColumn hasScoreSnapshot = GeneratedColumn( + 'has_score_snapshot', + aliasedName, + false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("has_score_snapshot" IN (0, 1))', + ), + ); + static const VerificationMeta _scoreInputModeSnapshotMeta = + const VerificationMeta('scoreInputModeSnapshot'); + @override + late final GeneratedColumn scoreInputModeSnapshot = + GeneratedColumn( + 'score_input_mode_snapshot', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _scoreLabelSnapshotMeta = + const VerificationMeta('scoreLabelSnapshot'); + @override + late final GeneratedColumn scoreLabelSnapshot = + GeneratedColumn( + 'score_label_snapshot', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _scoreUnitSnapshotMeta = const VerificationMeta( + 'scoreUnitSnapshot', + ); + @override + late final GeneratedColumn scoreUnitSnapshot = + GeneratedColumn( + 'score_unit_snapshot', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _targetScoreSnapshotMeta = + const VerificationMeta('targetScoreSnapshot'); + @override + late final GeneratedColumn targetScoreSnapshot = + GeneratedColumn( + 'target_score_snapshot', + aliasedName, + true, + type: DriftSqlType.double, + requiredDuringInsert: false, + ); + static const VerificationMeta _targetScoreTimeMsSnapshotMeta = + const VerificationMeta('targetScoreTimeMsSnapshot'); + @override + late final GeneratedColumn targetScoreTimeMsSnapshot = + GeneratedColumn( + 'target_score_time_ms_snapshot', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _statusMeta = const VerificationMeta('status'); + @override + late final GeneratedColumn status = GeneratedColumn( + 'status', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _startedAtMeta = const VerificationMeta( + 'startedAt', + ); + @override + late final GeneratedColumn startedAt = GeneratedColumn( + 'started_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _completedAtMeta = const VerificationMeta( + 'completedAt', + ); + @override + late final GeneratedColumn completedAt = GeneratedColumn( + 'completed_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualTimeMsMeta = const VerificationMeta( + 'actualTimeMs', + ); + @override + late final GeneratedColumn actualTimeMs = GeneratedColumn( + 'actual_time_ms', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualRepsMeta = const VerificationMeta( + 'actualReps', + ); + @override + late final GeneratedColumn actualReps = GeneratedColumn( + 'actual_reps', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualScoreMeta = const VerificationMeta( + 'actualScore', + ); + @override + late final GeneratedColumn actualScore = GeneratedColumn( + 'actual_score', + aliasedName, + true, + type: DriftSqlType.double, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualScoreTimeMsMeta = const VerificationMeta( + 'actualScoreTimeMs', + ); + @override + late final GeneratedColumn actualScoreTimeMs = GeneratedColumn( + 'actual_score_time_ms', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _noteMeta = const VerificationMeta('note'); + @override + late final GeneratedColumn note = GeneratedColumn( + 'note', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + activeWorkoutSessionId, + programSnapshotId, + exerciseSnapshotId, + programIndex, + exerciseIndex, + setIndex, + passageIndex, + stepIndex, + stepSnapshotId, + stepNameSnapshot, + stepTypeSnapshot, + targetValueSnapshot, + hasScoreSnapshot, + scoreInputModeSnapshot, + scoreLabelSnapshot, + scoreUnitSnapshot, + targetScoreSnapshot, + targetScoreTimeMsSnapshot, + status, + startedAt, + completedAt, + actualTimeMs, + actualReps, + actualScore, + actualScoreTimeMs, + note, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'active_exercise_step_results'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } else if (isInserting) { + context.missing(_idMeta); + } + if (data.containsKey('created_at')) { + context.handle( + _createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta), + ); + } else if (isInserting) { + context.missing(_createdAtMeta); + } + if (data.containsKey('updated_at')) { + context.handle( + _updatedAtMeta, + updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta), + ); + } else if (isInserting) { + context.missing(_updatedAtMeta); + } + if (data.containsKey('deleted_at')) { + context.handle( + _deletedAtMeta, + deletedAt.isAcceptableOrUnknown(data['deleted_at']!, _deletedAtMeta), + ); + } + if (data.containsKey('schema_version')) { + context.handle( + _schemaVersionMeta, + schemaVersion.isAcceptableOrUnknown( + data['schema_version']!, + _schemaVersionMeta, + ), + ); + } + if (data.containsKey('sync_state')) { + context.handle( + _syncStateMeta, + syncState.isAcceptableOrUnknown(data['sync_state']!, _syncStateMeta), + ); + } else if (isInserting) { + context.missing(_syncStateMeta); + } + if (data.containsKey('local_revision')) { + context.handle( + _localRevisionMeta, + localRevision.isAcceptableOrUnknown( + data['local_revision']!, + _localRevisionMeta, + ), + ); + } else if (isInserting) { + context.missing(_localRevisionMeta); + } + if (data.containsKey('origin_device_id')) { + context.handle( + _originDeviceIdMeta, + originDeviceId.isAcceptableOrUnknown( + data['origin_device_id']!, + _originDeviceIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_originDeviceIdMeta); + } + if (data.containsKey('future_owner_profile_id')) { + context.handle( + _futureOwnerProfileIdMeta, + futureOwnerProfileId.isAcceptableOrUnknown( + data['future_owner_profile_id']!, + _futureOwnerProfileIdMeta, + ), + ); + } + if (data.containsKey('last_synced_at')) { + context.handle( + _lastSyncedAtMeta, + lastSyncedAt.isAcceptableOrUnknown( + data['last_synced_at']!, + _lastSyncedAtMeta, + ), + ); + } + if (data.containsKey('remote_revision')) { + context.handle( + _remoteRevisionMeta, + remoteRevision.isAcceptableOrUnknown( + data['remote_revision']!, + _remoteRevisionMeta, + ), + ); + } + if (data.containsKey('active_workout_session_id')) { + context.handle( + _activeWorkoutSessionIdMeta, + activeWorkoutSessionId.isAcceptableOrUnknown( + data['active_workout_session_id']!, + _activeWorkoutSessionIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_activeWorkoutSessionIdMeta); + } + if (data.containsKey('program_snapshot_id')) { + context.handle( + _programSnapshotIdMeta, + programSnapshotId.isAcceptableOrUnknown( + data['program_snapshot_id']!, + _programSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_programSnapshotIdMeta); + } + if (data.containsKey('exercise_snapshot_id')) { + context.handle( + _exerciseSnapshotIdMeta, + exerciseSnapshotId.isAcceptableOrUnknown( + data['exercise_snapshot_id']!, + _exerciseSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_exerciseSnapshotIdMeta); + } + if (data.containsKey('program_index')) { + context.handle( + _programIndexMeta, + programIndex.isAcceptableOrUnknown( + data['program_index']!, + _programIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_programIndexMeta); + } + if (data.containsKey('exercise_index')) { + context.handle( + _exerciseIndexMeta, + exerciseIndex.isAcceptableOrUnknown( + data['exercise_index']!, + _exerciseIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_exerciseIndexMeta); + } + if (data.containsKey('set_index')) { + context.handle( + _setIndexMeta, + setIndex.isAcceptableOrUnknown(data['set_index']!, _setIndexMeta), + ); + } else if (isInserting) { + context.missing(_setIndexMeta); + } + if (data.containsKey('passage_index')) { + context.handle( + _passageIndexMeta, + passageIndex.isAcceptableOrUnknown( + data['passage_index']!, + _passageIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_passageIndexMeta); + } + if (data.containsKey('step_index')) { + context.handle( + _stepIndexMeta, + stepIndex.isAcceptableOrUnknown(data['step_index']!, _stepIndexMeta), + ); + } else if (isInserting) { + context.missing(_stepIndexMeta); + } + if (data.containsKey('step_snapshot_id')) { + context.handle( + _stepSnapshotIdMeta, + stepSnapshotId.isAcceptableOrUnknown( + data['step_snapshot_id']!, + _stepSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_stepSnapshotIdMeta); + } + if (data.containsKey('step_name_snapshot')) { + context.handle( + _stepNameSnapshotMeta, + stepNameSnapshot.isAcceptableOrUnknown( + data['step_name_snapshot']!, + _stepNameSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_stepNameSnapshotMeta); + } + if (data.containsKey('step_type_snapshot')) { + context.handle( + _stepTypeSnapshotMeta, + stepTypeSnapshot.isAcceptableOrUnknown( + data['step_type_snapshot']!, + _stepTypeSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_stepTypeSnapshotMeta); + } + if (data.containsKey('target_value_snapshot')) { + context.handle( + _targetValueSnapshotMeta, + targetValueSnapshot.isAcceptableOrUnknown( + data['target_value_snapshot']!, + _targetValueSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_targetValueSnapshotMeta); + } + if (data.containsKey('has_score_snapshot')) { + context.handle( + _hasScoreSnapshotMeta, + hasScoreSnapshot.isAcceptableOrUnknown( + data['has_score_snapshot']!, + _hasScoreSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_hasScoreSnapshotMeta); + } + if (data.containsKey('score_input_mode_snapshot')) { + context.handle( + _scoreInputModeSnapshotMeta, + scoreInputModeSnapshot.isAcceptableOrUnknown( + data['score_input_mode_snapshot']!, + _scoreInputModeSnapshotMeta, + ), + ); + } + if (data.containsKey('score_label_snapshot')) { + context.handle( + _scoreLabelSnapshotMeta, + scoreLabelSnapshot.isAcceptableOrUnknown( + data['score_label_snapshot']!, + _scoreLabelSnapshotMeta, + ), + ); + } + if (data.containsKey('score_unit_snapshot')) { + context.handle( + _scoreUnitSnapshotMeta, + scoreUnitSnapshot.isAcceptableOrUnknown( + data['score_unit_snapshot']!, + _scoreUnitSnapshotMeta, + ), + ); + } + if (data.containsKey('target_score_snapshot')) { + context.handle( + _targetScoreSnapshotMeta, + targetScoreSnapshot.isAcceptableOrUnknown( + data['target_score_snapshot']!, + _targetScoreSnapshotMeta, + ), + ); + } + if (data.containsKey('target_score_time_ms_snapshot')) { + context.handle( + _targetScoreTimeMsSnapshotMeta, + targetScoreTimeMsSnapshot.isAcceptableOrUnknown( + data['target_score_time_ms_snapshot']!, + _targetScoreTimeMsSnapshotMeta, + ), + ); + } + if (data.containsKey('status')) { + context.handle( + _statusMeta, + status.isAcceptableOrUnknown(data['status']!, _statusMeta), + ); + } else if (isInserting) { + context.missing(_statusMeta); + } + if (data.containsKey('started_at')) { + context.handle( + _startedAtMeta, + startedAt.isAcceptableOrUnknown(data['started_at']!, _startedAtMeta), + ); + } + if (data.containsKey('completed_at')) { + context.handle( + _completedAtMeta, + completedAt.isAcceptableOrUnknown( + data['completed_at']!, + _completedAtMeta, + ), + ); + } + if (data.containsKey('actual_time_ms')) { + context.handle( + _actualTimeMsMeta, + actualTimeMs.isAcceptableOrUnknown( + data['actual_time_ms']!, + _actualTimeMsMeta, + ), + ); + } + if (data.containsKey('actual_reps')) { + context.handle( + _actualRepsMeta, + actualReps.isAcceptableOrUnknown(data['actual_reps']!, _actualRepsMeta), + ); + } + if (data.containsKey('actual_score')) { + context.handle( + _actualScoreMeta, + actualScore.isAcceptableOrUnknown( + data['actual_score']!, + _actualScoreMeta, + ), + ); + } + if (data.containsKey('actual_score_time_ms')) { + context.handle( + _actualScoreTimeMsMeta, + actualScoreTimeMs.isAcceptableOrUnknown( + data['actual_score_time_ms']!, + _actualScoreTimeMsMeta, + ), + ); + } + if (data.containsKey('note')) { + context.handle( + _noteMeta, + note.isAcceptableOrUnknown(data['note']!, _noteMeta), + ); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + ActiveExerciseStepResult map( + Map data, { + String? tablePrefix, + }) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ActiveExerciseStepResult( + id: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + createdAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}created_at'], + )!, + updatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}updated_at'], + )!, + deletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}deleted_at'], + ), + schemaVersion: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}schema_version'], + )!, + syncState: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}sync_state'], + )!, + localRevision: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}local_revision'], + )!, + originDeviceId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}origin_device_id'], + )!, + futureOwnerProfileId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}future_owner_profile_id'], + ), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_synced_at'], + ), + remoteRevision: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}remote_revision'], + ), + activeWorkoutSessionId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}active_workout_session_id'], + )!, + programSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}program_snapshot_id'], + )!, + exerciseSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}exercise_snapshot_id'], + )!, + programIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}program_index'], + )!, + exerciseIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}exercise_index'], + )!, + setIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}set_index'], + )!, + passageIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}passage_index'], + )!, + stepIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}step_index'], + )!, + stepSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}step_snapshot_id'], + )!, + stepNameSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}step_name_snapshot'], + )!, + stepTypeSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}step_type_snapshot'], + )!, + targetValueSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}target_value_snapshot'], + )!, + hasScoreSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}has_score_snapshot'], + )!, + scoreInputModeSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}score_input_mode_snapshot'], + ), + scoreLabelSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}score_label_snapshot'], + ), + scoreUnitSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}score_unit_snapshot'], + ), + targetScoreSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}target_score_snapshot'], + ), + targetScoreTimeMsSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}target_score_time_ms_snapshot'], + ), + status: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}status'], + )!, + startedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}started_at'], + ), + completedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}completed_at'], + ), + actualTimeMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_time_ms'], + ), + actualReps: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_reps'], + ), + actualScore: attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}actual_score'], + ), + actualScoreTimeMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_score_time_ms'], + ), + note: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}note'], + ), + ); + } + + @override + $ActiveExerciseStepResultsTable createAlias(String alias) { + return $ActiveExerciseStepResultsTable(attachedDatabase, alias); + } +} + +class ActiveExerciseStepResult extends DataClass + implements Insertable { + final String id; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final int schemaVersion; + final String syncState; + final int localRevision; + final String originDeviceId; + final String? futureOwnerProfileId; + final DateTime? lastSyncedAt; + final String? remoteRevision; + final String activeWorkoutSessionId; + final String programSnapshotId; + final String exerciseSnapshotId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final int passageIndex; + final int stepIndex; + final String stepSnapshotId; + final String stepNameSnapshot; + final String stepTypeSnapshot; + final int targetValueSnapshot; + final bool hasScoreSnapshot; + final String? scoreInputModeSnapshot; + final String? scoreLabelSnapshot; + final String? scoreUnitSnapshot; + final double? targetScoreSnapshot; + final int? targetScoreTimeMsSnapshot; + final String status; + final DateTime? startedAt; + final DateTime? completedAt; + final int? actualTimeMs; + final int? actualReps; + final double? actualScore; + final int? actualScoreTimeMs; + final String? note; + const ActiveExerciseStepResult({ + required this.id, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + required this.schemaVersion, + required this.syncState, + required this.localRevision, + required this.originDeviceId, + this.futureOwnerProfileId, + this.lastSyncedAt, + this.remoteRevision, + required this.activeWorkoutSessionId, + required this.programSnapshotId, + required this.exerciseSnapshotId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.passageIndex, + required this.stepIndex, + required this.stepSnapshotId, + required this.stepNameSnapshot, + required this.stepTypeSnapshot, + required this.targetValueSnapshot, + required this.hasScoreSnapshot, + this.scoreInputModeSnapshot, + this.scoreLabelSnapshot, + this.scoreUnitSnapshot, + this.targetScoreSnapshot, + this.targetScoreTimeMsSnapshot, + required this.status, + this.startedAt, + this.completedAt, + this.actualTimeMs, + this.actualReps, + this.actualScore, + this.actualScoreTimeMs, + this.note, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + map['schema_version'] = Variable(schemaVersion); + map['sync_state'] = Variable(syncState); + map['local_revision'] = Variable(localRevision); + map['origin_device_id'] = Variable(originDeviceId); + if (!nullToAbsent || futureOwnerProfileId != null) { + map['future_owner_profile_id'] = Variable(futureOwnerProfileId); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + if (!nullToAbsent || remoteRevision != null) { + map['remote_revision'] = Variable(remoteRevision); + } + map['active_workout_session_id'] = Variable(activeWorkoutSessionId); + map['program_snapshot_id'] = Variable(programSnapshotId); + map['exercise_snapshot_id'] = Variable(exerciseSnapshotId); + map['program_index'] = Variable(programIndex); + map['exercise_index'] = Variable(exerciseIndex); + map['set_index'] = Variable(setIndex); + map['passage_index'] = Variable(passageIndex); + map['step_index'] = Variable(stepIndex); + map['step_snapshot_id'] = Variable(stepSnapshotId); + map['step_name_snapshot'] = Variable(stepNameSnapshot); + map['step_type_snapshot'] = Variable(stepTypeSnapshot); + map['target_value_snapshot'] = Variable(targetValueSnapshot); + map['has_score_snapshot'] = Variable(hasScoreSnapshot); + if (!nullToAbsent || scoreInputModeSnapshot != null) { + map['score_input_mode_snapshot'] = Variable( + scoreInputModeSnapshot, + ); + } + if (!nullToAbsent || scoreLabelSnapshot != null) { + map['score_label_snapshot'] = Variable(scoreLabelSnapshot); + } + if (!nullToAbsent || scoreUnitSnapshot != null) { + map['score_unit_snapshot'] = Variable(scoreUnitSnapshot); + } + if (!nullToAbsent || targetScoreSnapshot != null) { + map['target_score_snapshot'] = Variable(targetScoreSnapshot); + } + if (!nullToAbsent || targetScoreTimeMsSnapshot != null) { + map['target_score_time_ms_snapshot'] = Variable( + targetScoreTimeMsSnapshot, + ); + } + map['status'] = Variable(status); + if (!nullToAbsent || startedAt != null) { + map['started_at'] = Variable(startedAt); + } + if (!nullToAbsent || completedAt != null) { + map['completed_at'] = Variable(completedAt); + } + if (!nullToAbsent || actualTimeMs != null) { + map['actual_time_ms'] = Variable(actualTimeMs); + } + if (!nullToAbsent || actualReps != null) { + map['actual_reps'] = Variable(actualReps); + } + if (!nullToAbsent || actualScore != null) { + map['actual_score'] = Variable(actualScore); + } + if (!nullToAbsent || actualScoreTimeMs != null) { + map['actual_score_time_ms'] = Variable(actualScoreTimeMs); + } + if (!nullToAbsent || note != null) { + map['note'] = Variable(note); + } + return map; + } + + ActiveExerciseStepResultsCompanion toCompanion(bool nullToAbsent) { + return ActiveExerciseStepResultsCompanion( + id: Value(id), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + schemaVersion: Value(schemaVersion), + syncState: Value(syncState), + localRevision: Value(localRevision), + originDeviceId: Value(originDeviceId), + futureOwnerProfileId: futureOwnerProfileId == null && nullToAbsent + ? const Value.absent() + : Value(futureOwnerProfileId), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + remoteRevision: remoteRevision == null && nullToAbsent + ? const Value.absent() + : Value(remoteRevision), + activeWorkoutSessionId: Value(activeWorkoutSessionId), + programSnapshotId: Value(programSnapshotId), + exerciseSnapshotId: Value(exerciseSnapshotId), + programIndex: Value(programIndex), + exerciseIndex: Value(exerciseIndex), + setIndex: Value(setIndex), + passageIndex: Value(passageIndex), + stepIndex: Value(stepIndex), + stepSnapshotId: Value(stepSnapshotId), + stepNameSnapshot: Value(stepNameSnapshot), + stepTypeSnapshot: Value(stepTypeSnapshot), + targetValueSnapshot: Value(targetValueSnapshot), + hasScoreSnapshot: Value(hasScoreSnapshot), + scoreInputModeSnapshot: scoreInputModeSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(scoreInputModeSnapshot), + scoreLabelSnapshot: scoreLabelSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(scoreLabelSnapshot), + scoreUnitSnapshot: scoreUnitSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(scoreUnitSnapshot), + targetScoreSnapshot: targetScoreSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(targetScoreSnapshot), + targetScoreTimeMsSnapshot: + targetScoreTimeMsSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(targetScoreTimeMsSnapshot), + status: Value(status), + startedAt: startedAt == null && nullToAbsent + ? const Value.absent() + : Value(startedAt), + completedAt: completedAt == null && nullToAbsent + ? const Value.absent() + : Value(completedAt), + actualTimeMs: actualTimeMs == null && nullToAbsent + ? const Value.absent() + : Value(actualTimeMs), + actualReps: actualReps == null && nullToAbsent + ? const Value.absent() + : Value(actualReps), + actualScore: actualScore == null && nullToAbsent + ? const Value.absent() + : Value(actualScore), + actualScoreTimeMs: actualScoreTimeMs == null && nullToAbsent + ? const Value.absent() + : Value(actualScoreTimeMs), + note: note == null && nullToAbsent ? const Value.absent() : Value(note), + ); + } + + factory ActiveExerciseStepResult.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ActiveExerciseStepResult( + id: serializer.fromJson(json['id']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + schemaVersion: serializer.fromJson(json['schemaVersion']), + syncState: serializer.fromJson(json['syncState']), + localRevision: serializer.fromJson(json['localRevision']), + originDeviceId: serializer.fromJson(json['originDeviceId']), + futureOwnerProfileId: serializer.fromJson( + json['futureOwnerProfileId'], + ), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + remoteRevision: serializer.fromJson(json['remoteRevision']), + activeWorkoutSessionId: serializer.fromJson( + json['activeWorkoutSessionId'], + ), + programSnapshotId: serializer.fromJson(json['programSnapshotId']), + exerciseSnapshotId: serializer.fromJson( + json['exerciseSnapshotId'], + ), + programIndex: serializer.fromJson(json['programIndex']), + exerciseIndex: serializer.fromJson(json['exerciseIndex']), + setIndex: serializer.fromJson(json['setIndex']), + passageIndex: serializer.fromJson(json['passageIndex']), + stepIndex: serializer.fromJson(json['stepIndex']), + stepSnapshotId: serializer.fromJson(json['stepSnapshotId']), + stepNameSnapshot: serializer.fromJson(json['stepNameSnapshot']), + stepTypeSnapshot: serializer.fromJson(json['stepTypeSnapshot']), + targetValueSnapshot: serializer.fromJson( + json['targetValueSnapshot'], + ), + hasScoreSnapshot: serializer.fromJson(json['hasScoreSnapshot']), + scoreInputModeSnapshot: serializer.fromJson( + json['scoreInputModeSnapshot'], + ), + scoreLabelSnapshot: serializer.fromJson( + json['scoreLabelSnapshot'], + ), + scoreUnitSnapshot: serializer.fromJson( + json['scoreUnitSnapshot'], + ), + targetScoreSnapshot: serializer.fromJson( + json['targetScoreSnapshot'], + ), + targetScoreTimeMsSnapshot: serializer.fromJson( + json['targetScoreTimeMsSnapshot'], + ), + status: serializer.fromJson(json['status']), + startedAt: serializer.fromJson(json['startedAt']), + completedAt: serializer.fromJson(json['completedAt']), + actualTimeMs: serializer.fromJson(json['actualTimeMs']), + actualReps: serializer.fromJson(json['actualReps']), + actualScore: serializer.fromJson(json['actualScore']), + actualScoreTimeMs: serializer.fromJson(json['actualScoreTimeMs']), + note: serializer.fromJson(json['note']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'schemaVersion': serializer.toJson(schemaVersion), + 'syncState': serializer.toJson(syncState), + 'localRevision': serializer.toJson(localRevision), + 'originDeviceId': serializer.toJson(originDeviceId), + 'futureOwnerProfileId': serializer.toJson(futureOwnerProfileId), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'remoteRevision': serializer.toJson(remoteRevision), + 'activeWorkoutSessionId': serializer.toJson( + activeWorkoutSessionId, + ), + 'programSnapshotId': serializer.toJson(programSnapshotId), + 'exerciseSnapshotId': serializer.toJson(exerciseSnapshotId), + 'programIndex': serializer.toJson(programIndex), + 'exerciseIndex': serializer.toJson(exerciseIndex), + 'setIndex': serializer.toJson(setIndex), + 'passageIndex': serializer.toJson(passageIndex), + 'stepIndex': serializer.toJson(stepIndex), + 'stepSnapshotId': serializer.toJson(stepSnapshotId), + 'stepNameSnapshot': serializer.toJson(stepNameSnapshot), + 'stepTypeSnapshot': serializer.toJson(stepTypeSnapshot), + 'targetValueSnapshot': serializer.toJson(targetValueSnapshot), + 'hasScoreSnapshot': serializer.toJson(hasScoreSnapshot), + 'scoreInputModeSnapshot': serializer.toJson( + scoreInputModeSnapshot, + ), + 'scoreLabelSnapshot': serializer.toJson(scoreLabelSnapshot), + 'scoreUnitSnapshot': serializer.toJson(scoreUnitSnapshot), + 'targetScoreSnapshot': serializer.toJson(targetScoreSnapshot), + 'targetScoreTimeMsSnapshot': serializer.toJson( + targetScoreTimeMsSnapshot, + ), + 'status': serializer.toJson(status), + 'startedAt': serializer.toJson(startedAt), + 'completedAt': serializer.toJson(completedAt), + 'actualTimeMs': serializer.toJson(actualTimeMs), + 'actualReps': serializer.toJson(actualReps), + 'actualScore': serializer.toJson(actualScore), + 'actualScoreTimeMs': serializer.toJson(actualScoreTimeMs), + 'note': serializer.toJson(note), + }; + } + + ActiveExerciseStepResult copyWith({ + String? id, + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + int? schemaVersion, + String? syncState, + int? localRevision, + String? originDeviceId, + Value futureOwnerProfileId = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value remoteRevision = const Value.absent(), + String? activeWorkoutSessionId, + String? programSnapshotId, + String? exerciseSnapshotId, + int? programIndex, + int? exerciseIndex, + int? setIndex, + int? passageIndex, + int? stepIndex, + String? stepSnapshotId, + String? stepNameSnapshot, + String? stepTypeSnapshot, + int? targetValueSnapshot, + bool? hasScoreSnapshot, + Value scoreInputModeSnapshot = const Value.absent(), + Value scoreLabelSnapshot = const Value.absent(), + Value scoreUnitSnapshot = const Value.absent(), + Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), + String? status, + Value startedAt = const Value.absent(), + Value completedAt = const Value.absent(), + Value actualTimeMs = const Value.absent(), + Value actualReps = const Value.absent(), + Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value note = const Value.absent(), + }) => ActiveExerciseStepResult( + id: id ?? this.id, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + schemaVersion: schemaVersion ?? this.schemaVersion, + syncState: syncState ?? this.syncState, + localRevision: localRevision ?? this.localRevision, + originDeviceId: originDeviceId ?? this.originDeviceId, + futureOwnerProfileId: futureOwnerProfileId.present + ? futureOwnerProfileId.value + : this.futureOwnerProfileId, + lastSyncedAt: lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + remoteRevision: remoteRevision.present + ? remoteRevision.value + : this.remoteRevision, + activeWorkoutSessionId: + activeWorkoutSessionId ?? this.activeWorkoutSessionId, + programSnapshotId: programSnapshotId ?? this.programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId ?? this.exerciseSnapshotId, + programIndex: programIndex ?? this.programIndex, + exerciseIndex: exerciseIndex ?? this.exerciseIndex, + setIndex: setIndex ?? this.setIndex, + passageIndex: passageIndex ?? this.passageIndex, + stepIndex: stepIndex ?? this.stepIndex, + stepSnapshotId: stepSnapshotId ?? this.stepSnapshotId, + stepNameSnapshot: stepNameSnapshot ?? this.stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot ?? this.stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot ?? this.targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot ?? this.hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot.present + ? scoreInputModeSnapshot.value + : this.scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot.present + ? scoreLabelSnapshot.value + : this.scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot.present + ? scoreUnitSnapshot.value + : this.scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot.present + ? targetScoreSnapshot.value + : this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot.present + ? targetScoreTimeMsSnapshot.value + : this.targetScoreTimeMsSnapshot, + status: status ?? this.status, + startedAt: startedAt.present ? startedAt.value : this.startedAt, + completedAt: completedAt.present ? completedAt.value : this.completedAt, + actualTimeMs: actualTimeMs.present ? actualTimeMs.value : this.actualTimeMs, + actualReps: actualReps.present ? actualReps.value : this.actualReps, + actualScore: actualScore.present ? actualScore.value : this.actualScore, + actualScoreTimeMs: actualScoreTimeMs.present + ? actualScoreTimeMs.value + : this.actualScoreTimeMs, + note: note.present ? note.value : this.note, + ); + ActiveExerciseStepResult copyWithCompanion( + ActiveExerciseStepResultsCompanion data, + ) { + return ActiveExerciseStepResult( + id: data.id.present ? data.id.value : this.id, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + schemaVersion: data.schemaVersion.present + ? data.schemaVersion.value + : this.schemaVersion, + syncState: data.syncState.present ? data.syncState.value : this.syncState, + localRevision: data.localRevision.present + ? data.localRevision.value + : this.localRevision, + originDeviceId: data.originDeviceId.present + ? data.originDeviceId.value + : this.originDeviceId, + futureOwnerProfileId: data.futureOwnerProfileId.present + ? data.futureOwnerProfileId.value + : this.futureOwnerProfileId, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + remoteRevision: data.remoteRevision.present + ? data.remoteRevision.value + : this.remoteRevision, + activeWorkoutSessionId: data.activeWorkoutSessionId.present + ? data.activeWorkoutSessionId.value + : this.activeWorkoutSessionId, + programSnapshotId: data.programSnapshotId.present + ? data.programSnapshotId.value + : this.programSnapshotId, + exerciseSnapshotId: data.exerciseSnapshotId.present + ? data.exerciseSnapshotId.value + : this.exerciseSnapshotId, + programIndex: data.programIndex.present + ? data.programIndex.value + : this.programIndex, + exerciseIndex: data.exerciseIndex.present + ? data.exerciseIndex.value + : this.exerciseIndex, + setIndex: data.setIndex.present ? data.setIndex.value : this.setIndex, + passageIndex: data.passageIndex.present + ? data.passageIndex.value + : this.passageIndex, + stepIndex: data.stepIndex.present ? data.stepIndex.value : this.stepIndex, + stepSnapshotId: data.stepSnapshotId.present + ? data.stepSnapshotId.value + : this.stepSnapshotId, + stepNameSnapshot: data.stepNameSnapshot.present + ? data.stepNameSnapshot.value + : this.stepNameSnapshot, + stepTypeSnapshot: data.stepTypeSnapshot.present + ? data.stepTypeSnapshot.value + : this.stepTypeSnapshot, + targetValueSnapshot: data.targetValueSnapshot.present + ? data.targetValueSnapshot.value + : this.targetValueSnapshot, + hasScoreSnapshot: data.hasScoreSnapshot.present + ? data.hasScoreSnapshot.value + : this.hasScoreSnapshot, + scoreInputModeSnapshot: data.scoreInputModeSnapshot.present + ? data.scoreInputModeSnapshot.value + : this.scoreInputModeSnapshot, + scoreLabelSnapshot: data.scoreLabelSnapshot.present + ? data.scoreLabelSnapshot.value + : this.scoreLabelSnapshot, + scoreUnitSnapshot: data.scoreUnitSnapshot.present + ? data.scoreUnitSnapshot.value + : this.scoreUnitSnapshot, + targetScoreSnapshot: data.targetScoreSnapshot.present + ? data.targetScoreSnapshot.value + : this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: data.targetScoreTimeMsSnapshot.present + ? data.targetScoreTimeMsSnapshot.value + : this.targetScoreTimeMsSnapshot, + status: data.status.present ? data.status.value : this.status, + startedAt: data.startedAt.present ? data.startedAt.value : this.startedAt, + completedAt: data.completedAt.present + ? data.completedAt.value + : this.completedAt, + actualTimeMs: data.actualTimeMs.present + ? data.actualTimeMs.value + : this.actualTimeMs, + actualReps: data.actualReps.present + ? data.actualReps.value + : this.actualReps, + actualScore: data.actualScore.present + ? data.actualScore.value + : this.actualScore, + actualScoreTimeMs: data.actualScoreTimeMs.present + ? data.actualScoreTimeMs.value + : this.actualScoreTimeMs, + note: data.note.present ? data.note.value : this.note, + ); + } + + @override + String toString() { + return (StringBuffer('ActiveExerciseStepResult(') + ..write('id: $id, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('schemaVersion: $schemaVersion, ') + ..write('syncState: $syncState, ') + ..write('localRevision: $localRevision, ') + ..write('originDeviceId: $originDeviceId, ') + ..write('futureOwnerProfileId: $futureOwnerProfileId, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('remoteRevision: $remoteRevision, ') + ..write('activeWorkoutSessionId: $activeWorkoutSessionId, ') + ..write('programSnapshotId: $programSnapshotId, ') + ..write('exerciseSnapshotId: $exerciseSnapshotId, ') + ..write('programIndex: $programIndex, ') + ..write('exerciseIndex: $exerciseIndex, ') + ..write('setIndex: $setIndex, ') + ..write('passageIndex: $passageIndex, ') + ..write('stepIndex: $stepIndex, ') + ..write('stepSnapshotId: $stepSnapshotId, ') + ..write('stepNameSnapshot: $stepNameSnapshot, ') + ..write('stepTypeSnapshot: $stepTypeSnapshot, ') + ..write('targetValueSnapshot: $targetValueSnapshot, ') + ..write('hasScoreSnapshot: $hasScoreSnapshot, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') + ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') + ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') + ..write('targetScoreSnapshot: $targetScoreSnapshot, ') + ..write('targetScoreTimeMsSnapshot: $targetScoreTimeMsSnapshot, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('completedAt: $completedAt, ') + ..write('actualTimeMs: $actualTimeMs, ') + ..write('actualReps: $actualReps, ') + ..write('actualScore: $actualScore, ') + ..write('actualScoreTimeMs: $actualScoreTimeMs, ') + ..write('note: $note') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hashAll([ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + activeWorkoutSessionId, + programSnapshotId, + exerciseSnapshotId, + programIndex, + exerciseIndex, + setIndex, + passageIndex, + stepIndex, + stepSnapshotId, + stepNameSnapshot, + stepTypeSnapshot, + targetValueSnapshot, + hasScoreSnapshot, + scoreInputModeSnapshot, + scoreLabelSnapshot, + scoreUnitSnapshot, + targetScoreSnapshot, + targetScoreTimeMsSnapshot, + status, + startedAt, + completedAt, + actualTimeMs, + actualReps, + actualScore, + actualScoreTimeMs, + note, + ]); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ActiveExerciseStepResult && + other.id == this.id && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.schemaVersion == this.schemaVersion && + other.syncState == this.syncState && + other.localRevision == this.localRevision && + other.originDeviceId == this.originDeviceId && + other.futureOwnerProfileId == this.futureOwnerProfileId && + other.lastSyncedAt == this.lastSyncedAt && + other.remoteRevision == this.remoteRevision && + other.activeWorkoutSessionId == this.activeWorkoutSessionId && + other.programSnapshotId == this.programSnapshotId && + other.exerciseSnapshotId == this.exerciseSnapshotId && + other.programIndex == this.programIndex && + other.exerciseIndex == this.exerciseIndex && + other.setIndex == this.setIndex && + other.passageIndex == this.passageIndex && + other.stepIndex == this.stepIndex && + other.stepSnapshotId == this.stepSnapshotId && + other.stepNameSnapshot == this.stepNameSnapshot && + other.stepTypeSnapshot == this.stepTypeSnapshot && + other.targetValueSnapshot == this.targetValueSnapshot && + other.hasScoreSnapshot == this.hasScoreSnapshot && + other.scoreInputModeSnapshot == this.scoreInputModeSnapshot && + other.scoreLabelSnapshot == this.scoreLabelSnapshot && + other.scoreUnitSnapshot == this.scoreUnitSnapshot && + other.targetScoreSnapshot == this.targetScoreSnapshot && + other.targetScoreTimeMsSnapshot == this.targetScoreTimeMsSnapshot && + other.status == this.status && + other.startedAt == this.startedAt && + other.completedAt == this.completedAt && + other.actualTimeMs == this.actualTimeMs && + other.actualReps == this.actualReps && + other.actualScore == this.actualScore && + other.actualScoreTimeMs == this.actualScoreTimeMs && + other.note == this.note); +} + +class ActiveExerciseStepResultsCompanion + extends UpdateCompanion { + final Value id; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value schemaVersion; + final Value syncState; + final Value localRevision; + final Value originDeviceId; + final Value futureOwnerProfileId; + final Value lastSyncedAt; + final Value remoteRevision; + final Value activeWorkoutSessionId; + final Value programSnapshotId; + final Value exerciseSnapshotId; + final Value programIndex; + final Value exerciseIndex; + final Value setIndex; + final Value passageIndex; + final Value stepIndex; + final Value stepSnapshotId; + final Value stepNameSnapshot; + final Value stepTypeSnapshot; + final Value targetValueSnapshot; + final Value hasScoreSnapshot; + final Value scoreInputModeSnapshot; + final Value scoreLabelSnapshot; + final Value scoreUnitSnapshot; + final Value targetScoreSnapshot; + final Value targetScoreTimeMsSnapshot; + final Value status; + final Value startedAt; + final Value completedAt; + final Value actualTimeMs; + final Value actualReps; + final Value actualScore; + final Value actualScoreTimeMs; + final Value note; + final Value rowid; + const ActiveExerciseStepResultsCompanion({ + this.id = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.schemaVersion = const Value.absent(), + this.syncState = const Value.absent(), + this.localRevision = const Value.absent(), + this.originDeviceId = const Value.absent(), + this.futureOwnerProfileId = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.remoteRevision = const Value.absent(), + this.activeWorkoutSessionId = const Value.absent(), + this.programSnapshotId = const Value.absent(), + this.exerciseSnapshotId = const Value.absent(), + this.programIndex = const Value.absent(), + this.exerciseIndex = const Value.absent(), + this.setIndex = const Value.absent(), + this.passageIndex = const Value.absent(), + this.stepIndex = const Value.absent(), + this.stepSnapshotId = const Value.absent(), + this.stepNameSnapshot = const Value.absent(), + this.stepTypeSnapshot = const Value.absent(), + this.targetValueSnapshot = const Value.absent(), + this.hasScoreSnapshot = const Value.absent(), + this.scoreInputModeSnapshot = const Value.absent(), + this.scoreLabelSnapshot = const Value.absent(), + this.scoreUnitSnapshot = const Value.absent(), + this.targetScoreSnapshot = const Value.absent(), + this.targetScoreTimeMsSnapshot = const Value.absent(), + this.status = const Value.absent(), + this.startedAt = const Value.absent(), + this.completedAt = const Value.absent(), + this.actualTimeMs = const Value.absent(), + this.actualReps = const Value.absent(), + this.actualScore = const Value.absent(), + this.actualScoreTimeMs = const Value.absent(), + this.note = const Value.absent(), + this.rowid = const Value.absent(), + }); + ActiveExerciseStepResultsCompanion.insert({ + required String id, + required DateTime createdAt, + required DateTime updatedAt, + this.deletedAt = const Value.absent(), + this.schemaVersion = const Value.absent(), + required String syncState, + required int localRevision, + required String originDeviceId, + this.futureOwnerProfileId = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.remoteRevision = const Value.absent(), + required String activeWorkoutSessionId, + required String programSnapshotId, + required String exerciseSnapshotId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required String stepSnapshotId, + required String stepNameSnapshot, + required String stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + this.scoreInputModeSnapshot = const Value.absent(), + this.scoreLabelSnapshot = const Value.absent(), + this.scoreUnitSnapshot = const Value.absent(), + this.targetScoreSnapshot = const Value.absent(), + this.targetScoreTimeMsSnapshot = const Value.absent(), + required String status, + this.startedAt = const Value.absent(), + this.completedAt = const Value.absent(), + this.actualTimeMs = const Value.absent(), + this.actualReps = const Value.absent(), + this.actualScore = const Value.absent(), + this.actualScoreTimeMs = const Value.absent(), + this.note = const Value.absent(), + this.rowid = const Value.absent(), + }) : id = Value(id), + createdAt = Value(createdAt), + updatedAt = Value(updatedAt), + syncState = Value(syncState), + localRevision = Value(localRevision), + originDeviceId = Value(originDeviceId), + activeWorkoutSessionId = Value(activeWorkoutSessionId), + programSnapshotId = Value(programSnapshotId), + exerciseSnapshotId = Value(exerciseSnapshotId), + programIndex = Value(programIndex), + exerciseIndex = Value(exerciseIndex), + setIndex = Value(setIndex), + passageIndex = Value(passageIndex), + stepIndex = Value(stepIndex), + stepSnapshotId = Value(stepSnapshotId), + stepNameSnapshot = Value(stepNameSnapshot), + stepTypeSnapshot = Value(stepTypeSnapshot), + targetValueSnapshot = Value(targetValueSnapshot), + hasScoreSnapshot = Value(hasScoreSnapshot), + status = Value(status); + static Insertable custom({ + Expression? id, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? schemaVersion, + Expression? syncState, + Expression? localRevision, + Expression? originDeviceId, + Expression? futureOwnerProfileId, + Expression? lastSyncedAt, + Expression? remoteRevision, + Expression? activeWorkoutSessionId, + Expression? programSnapshotId, + Expression? exerciseSnapshotId, + Expression? programIndex, + Expression? exerciseIndex, + Expression? setIndex, + Expression? passageIndex, + Expression? stepIndex, + Expression? stepSnapshotId, + Expression? stepNameSnapshot, + Expression? stepTypeSnapshot, + Expression? targetValueSnapshot, + Expression? hasScoreSnapshot, + Expression? scoreInputModeSnapshot, + Expression? scoreLabelSnapshot, + Expression? scoreUnitSnapshot, + Expression? targetScoreSnapshot, + Expression? targetScoreTimeMsSnapshot, + Expression? status, + Expression? startedAt, + Expression? completedAt, + Expression? actualTimeMs, + Expression? actualReps, + Expression? actualScore, + Expression? actualScoreTimeMs, + Expression? note, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (schemaVersion != null) 'schema_version': schemaVersion, + if (syncState != null) 'sync_state': syncState, + if (localRevision != null) 'local_revision': localRevision, + if (originDeviceId != null) 'origin_device_id': originDeviceId, + if (futureOwnerProfileId != null) + 'future_owner_profile_id': futureOwnerProfileId, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (remoteRevision != null) 'remote_revision': remoteRevision, + if (activeWorkoutSessionId != null) + 'active_workout_session_id': activeWorkoutSessionId, + if (programSnapshotId != null) 'program_snapshot_id': programSnapshotId, + if (exerciseSnapshotId != null) + 'exercise_snapshot_id': exerciseSnapshotId, + if (programIndex != null) 'program_index': programIndex, + if (exerciseIndex != null) 'exercise_index': exerciseIndex, + if (setIndex != null) 'set_index': setIndex, + if (passageIndex != null) 'passage_index': passageIndex, + if (stepIndex != null) 'step_index': stepIndex, + if (stepSnapshotId != null) 'step_snapshot_id': stepSnapshotId, + if (stepNameSnapshot != null) 'step_name_snapshot': stepNameSnapshot, + if (stepTypeSnapshot != null) 'step_type_snapshot': stepTypeSnapshot, + if (targetValueSnapshot != null) + 'target_value_snapshot': targetValueSnapshot, + if (hasScoreSnapshot != null) 'has_score_snapshot': hasScoreSnapshot, + if (scoreInputModeSnapshot != null) + 'score_input_mode_snapshot': scoreInputModeSnapshot, + if (scoreLabelSnapshot != null) + 'score_label_snapshot': scoreLabelSnapshot, + if (scoreUnitSnapshot != null) 'score_unit_snapshot': scoreUnitSnapshot, + if (targetScoreSnapshot != null) + 'target_score_snapshot': targetScoreSnapshot, + if (targetScoreTimeMsSnapshot != null) + 'target_score_time_ms_snapshot': targetScoreTimeMsSnapshot, + if (status != null) 'status': status, + if (startedAt != null) 'started_at': startedAt, + if (completedAt != null) 'completed_at': completedAt, + if (actualTimeMs != null) 'actual_time_ms': actualTimeMs, + if (actualReps != null) 'actual_reps': actualReps, + if (actualScore != null) 'actual_score': actualScore, + if (actualScoreTimeMs != null) 'actual_score_time_ms': actualScoreTimeMs, + if (note != null) 'note': note, + if (rowid != null) 'rowid': rowid, + }); + } + + ActiveExerciseStepResultsCompanion copyWith({ + Value? id, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? schemaVersion, + Value? syncState, + Value? localRevision, + Value? originDeviceId, + Value? futureOwnerProfileId, + Value? lastSyncedAt, + Value? remoteRevision, + Value? activeWorkoutSessionId, + Value? programSnapshotId, + Value? exerciseSnapshotId, + Value? programIndex, + Value? exerciseIndex, + Value? setIndex, + Value? passageIndex, + Value? stepIndex, + Value? stepSnapshotId, + Value? stepNameSnapshot, + Value? stepTypeSnapshot, + Value? targetValueSnapshot, + Value? hasScoreSnapshot, + Value? scoreInputModeSnapshot, + Value? scoreLabelSnapshot, + Value? scoreUnitSnapshot, + Value? targetScoreSnapshot, + Value? targetScoreTimeMsSnapshot, + Value? status, + Value? startedAt, + Value? completedAt, + Value? actualTimeMs, + Value? actualReps, + Value? actualScore, + Value? actualScoreTimeMs, + Value? note, + Value? rowid, + }) { + return ActiveExerciseStepResultsCompanion( + id: id ?? this.id, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + schemaVersion: schemaVersion ?? this.schemaVersion, + syncState: syncState ?? this.syncState, + localRevision: localRevision ?? this.localRevision, + originDeviceId: originDeviceId ?? this.originDeviceId, + futureOwnerProfileId: futureOwnerProfileId ?? this.futureOwnerProfileId, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + remoteRevision: remoteRevision ?? this.remoteRevision, + activeWorkoutSessionId: + activeWorkoutSessionId ?? this.activeWorkoutSessionId, + programSnapshotId: programSnapshotId ?? this.programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId ?? this.exerciseSnapshotId, + programIndex: programIndex ?? this.programIndex, + exerciseIndex: exerciseIndex ?? this.exerciseIndex, + setIndex: setIndex ?? this.setIndex, + passageIndex: passageIndex ?? this.passageIndex, + stepIndex: stepIndex ?? this.stepIndex, + stepSnapshotId: stepSnapshotId ?? this.stepSnapshotId, + stepNameSnapshot: stepNameSnapshot ?? this.stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot ?? this.stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot ?? this.targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot ?? this.hasScoreSnapshot, + scoreInputModeSnapshot: + scoreInputModeSnapshot ?? this.scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot ?? this.scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot ?? this.scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot ?? this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: + targetScoreTimeMsSnapshot ?? this.targetScoreTimeMsSnapshot, + status: status ?? this.status, + startedAt: startedAt ?? this.startedAt, + completedAt: completedAt ?? this.completedAt, + actualTimeMs: actualTimeMs ?? this.actualTimeMs, + actualReps: actualReps ?? this.actualReps, + actualScore: actualScore ?? this.actualScore, + actualScoreTimeMs: actualScoreTimeMs ?? this.actualScoreTimeMs, + note: note ?? this.note, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (schemaVersion.present) { + map['schema_version'] = Variable(schemaVersion.value); + } + if (syncState.present) { + map['sync_state'] = Variable(syncState.value); + } + if (localRevision.present) { + map['local_revision'] = Variable(localRevision.value); + } + if (originDeviceId.present) { + map['origin_device_id'] = Variable(originDeviceId.value); + } + if (futureOwnerProfileId.present) { + map['future_owner_profile_id'] = Variable( + futureOwnerProfileId.value, + ); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (remoteRevision.present) { + map['remote_revision'] = Variable(remoteRevision.value); + } + if (activeWorkoutSessionId.present) { + map['active_workout_session_id'] = Variable( + activeWorkoutSessionId.value, + ); + } + if (programSnapshotId.present) { + map['program_snapshot_id'] = Variable(programSnapshotId.value); + } + if (exerciseSnapshotId.present) { + map['exercise_snapshot_id'] = Variable(exerciseSnapshotId.value); + } + if (programIndex.present) { + map['program_index'] = Variable(programIndex.value); + } + if (exerciseIndex.present) { + map['exercise_index'] = Variable(exerciseIndex.value); + } + if (setIndex.present) { + map['set_index'] = Variable(setIndex.value); + } + if (passageIndex.present) { + map['passage_index'] = Variable(passageIndex.value); + } + if (stepIndex.present) { + map['step_index'] = Variable(stepIndex.value); + } + if (stepSnapshotId.present) { + map['step_snapshot_id'] = Variable(stepSnapshotId.value); + } + if (stepNameSnapshot.present) { + map['step_name_snapshot'] = Variable(stepNameSnapshot.value); + } + if (stepTypeSnapshot.present) { + map['step_type_snapshot'] = Variable(stepTypeSnapshot.value); + } + if (targetValueSnapshot.present) { + map['target_value_snapshot'] = Variable(targetValueSnapshot.value); + } + if (hasScoreSnapshot.present) { + map['has_score_snapshot'] = Variable(hasScoreSnapshot.value); + } + if (scoreInputModeSnapshot.present) { + map['score_input_mode_snapshot'] = Variable( + scoreInputModeSnapshot.value, + ); + } + if (scoreLabelSnapshot.present) { + map['score_label_snapshot'] = Variable(scoreLabelSnapshot.value); + } + if (scoreUnitSnapshot.present) { + map['score_unit_snapshot'] = Variable(scoreUnitSnapshot.value); + } + if (targetScoreSnapshot.present) { + map['target_score_snapshot'] = Variable( + targetScoreSnapshot.value, + ); + } + if (targetScoreTimeMsSnapshot.present) { + map['target_score_time_ms_snapshot'] = Variable( + targetScoreTimeMsSnapshot.value, + ); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (startedAt.present) { + map['started_at'] = Variable(startedAt.value); + } + if (completedAt.present) { + map['completed_at'] = Variable(completedAt.value); + } + if (actualTimeMs.present) { + map['actual_time_ms'] = Variable(actualTimeMs.value); + } + if (actualReps.present) { + map['actual_reps'] = Variable(actualReps.value); + } + if (actualScore.present) { + map['actual_score'] = Variable(actualScore.value); + } + if (actualScoreTimeMs.present) { + map['actual_score_time_ms'] = Variable(actualScoreTimeMs.value); + } + if (note.present) { + map['note'] = Variable(note.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ActiveExerciseStepResultsCompanion(') + ..write('id: $id, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('schemaVersion: $schemaVersion, ') + ..write('syncState: $syncState, ') + ..write('localRevision: $localRevision, ') + ..write('originDeviceId: $originDeviceId, ') + ..write('futureOwnerProfileId: $futureOwnerProfileId, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('remoteRevision: $remoteRevision, ') + ..write('activeWorkoutSessionId: $activeWorkoutSessionId, ') + ..write('programSnapshotId: $programSnapshotId, ') + ..write('exerciseSnapshotId: $exerciseSnapshotId, ') + ..write('programIndex: $programIndex, ') + ..write('exerciseIndex: $exerciseIndex, ') + ..write('setIndex: $setIndex, ') + ..write('passageIndex: $passageIndex, ') + ..write('stepIndex: $stepIndex, ') + ..write('stepSnapshotId: $stepSnapshotId, ') + ..write('stepNameSnapshot: $stepNameSnapshot, ') + ..write('stepTypeSnapshot: $stepTypeSnapshot, ') + ..write('targetValueSnapshot: $targetValueSnapshot, ') + ..write('hasScoreSnapshot: $hasScoreSnapshot, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') + ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') + ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') + ..write('targetScoreSnapshot: $targetScoreSnapshot, ') + ..write('targetScoreTimeMsSnapshot: $targetScoreTimeMsSnapshot, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('completedAt: $completedAt, ') + ..write('actualTimeMs: $actualTimeMs, ') + ..write('actualReps: $actualReps, ') + ..write('actualScore: $actualScore, ') + ..write('actualScoreTimeMs: $actualScoreTimeMs, ') + ..write('note: $note, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + class $ActiveRestStatesTable extends ActiveRestStates with TableInfo<$ActiveRestStatesTable, ActiveRestState> { @override @@ -17751,6 +21186,2130 @@ class WorkoutHistorySetResultsCompanion } } +class $WorkoutHistoryStepResultsTable extends WorkoutHistoryStepResults + with TableInfo<$WorkoutHistoryStepResultsTable, WorkoutHistoryStepResult> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $WorkoutHistoryStepResultsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _createdAtMeta = const VerificationMeta( + 'createdAt', + ); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _updatedAtMeta = const VerificationMeta( + 'updatedAt', + ); + @override + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _deletedAtMeta = const VerificationMeta( + 'deletedAt', + ); + @override + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _schemaVersionMeta = const VerificationMeta( + 'schemaVersion', + ); + @override + late final GeneratedColumn schemaVersion = GeneratedColumn( + 'schema_version', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(1), + ); + static const VerificationMeta _syncStateMeta = const VerificationMeta( + 'syncState', + ); + @override + late final GeneratedColumn syncState = GeneratedColumn( + 'sync_state', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: + 'NOT NULL CHECK (sync_state IN (\'localOnly\', \'dirty\', \'synced\', \'deleted\'))', + ); + static const VerificationMeta _localRevisionMeta = const VerificationMeta( + 'localRevision', + ); + @override + late final GeneratedColumn localRevision = GeneratedColumn( + 'local_revision', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL CHECK (local_revision >= 0)', + ); + static const VerificationMeta _originDeviceIdMeta = const VerificationMeta( + 'originDeviceId', + ); + @override + late final GeneratedColumn originDeviceId = GeneratedColumn( + 'origin_device_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _futureOwnerProfileIdMeta = + const VerificationMeta('futureOwnerProfileId'); + @override + late final GeneratedColumn futureOwnerProfileId = + GeneratedColumn( + 'future_owner_profile_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _lastSyncedAtMeta = const VerificationMeta( + 'lastSyncedAt', + ); + @override + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _remoteRevisionMeta = const VerificationMeta( + 'remoteRevision', + ); + @override + late final GeneratedColumn remoteRevision = GeneratedColumn( + 'remote_revision', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _workoutHistoryIdMeta = const VerificationMeta( + 'workoutHistoryId', + ); + @override + late final GeneratedColumn workoutHistoryId = GeneratedColumn( + 'workout_history_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES workout_history (id)', + ), + ); + static const VerificationMeta _programSnapshotIdMeta = const VerificationMeta( + 'programSnapshotId', + ); + @override + late final GeneratedColumn programSnapshotId = + GeneratedColumn( + 'program_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _exerciseSnapshotIdMeta = + const VerificationMeta('exerciseSnapshotId'); + @override + late final GeneratedColumn exerciseSnapshotId = + GeneratedColumn( + 'exercise_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _programIndexMeta = const VerificationMeta( + 'programIndex', + ); + @override + late final GeneratedColumn programIndex = GeneratedColumn( + 'program_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _exerciseIndexMeta = const VerificationMeta( + 'exerciseIndex', + ); + @override + late final GeneratedColumn exerciseIndex = GeneratedColumn( + 'exercise_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _setIndexMeta = const VerificationMeta( + 'setIndex', + ); + @override + late final GeneratedColumn setIndex = GeneratedColumn( + 'set_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _passageIndexMeta = const VerificationMeta( + 'passageIndex', + ); + @override + late final GeneratedColumn passageIndex = GeneratedColumn( + 'passage_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepIndexMeta = const VerificationMeta( + 'stepIndex', + ); + @override + late final GeneratedColumn stepIndex = GeneratedColumn( + 'step_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepSnapshotIdMeta = const VerificationMeta( + 'stepSnapshotId', + ); + @override + late final GeneratedColumn stepSnapshotId = GeneratedColumn( + 'step_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepNameSnapshotMeta = const VerificationMeta( + 'stepNameSnapshot', + ); + @override + late final GeneratedColumn stepNameSnapshot = GeneratedColumn( + 'step_name_snapshot', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepTypeSnapshotMeta = const VerificationMeta( + 'stepTypeSnapshot', + ); + @override + late final GeneratedColumn stepTypeSnapshot = GeneratedColumn( + 'step_type_snapshot', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _targetValueSnapshotMeta = + const VerificationMeta('targetValueSnapshot'); + @override + late final GeneratedColumn targetValueSnapshot = GeneratedColumn( + 'target_value_snapshot', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _hasScoreSnapshotMeta = const VerificationMeta( + 'hasScoreSnapshot', + ); + @override + late final GeneratedColumn hasScoreSnapshot = GeneratedColumn( + 'has_score_snapshot', + aliasedName, + false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("has_score_snapshot" IN (0, 1))', + ), + ); + static const VerificationMeta _scoreInputModeSnapshotMeta = + const VerificationMeta('scoreInputModeSnapshot'); + @override + late final GeneratedColumn scoreInputModeSnapshot = + GeneratedColumn( + 'score_input_mode_snapshot', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _scoreLabelSnapshotMeta = + const VerificationMeta('scoreLabelSnapshot'); + @override + late final GeneratedColumn scoreLabelSnapshot = + GeneratedColumn( + 'score_label_snapshot', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _scoreUnitSnapshotMeta = const VerificationMeta( + 'scoreUnitSnapshot', + ); + @override + late final GeneratedColumn scoreUnitSnapshot = + GeneratedColumn( + 'score_unit_snapshot', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _targetScoreSnapshotMeta = + const VerificationMeta('targetScoreSnapshot'); + @override + late final GeneratedColumn targetScoreSnapshot = + GeneratedColumn( + 'target_score_snapshot', + aliasedName, + true, + type: DriftSqlType.double, + requiredDuringInsert: false, + ); + static const VerificationMeta _targetScoreTimeMsSnapshotMeta = + const VerificationMeta('targetScoreTimeMsSnapshot'); + @override + late final GeneratedColumn targetScoreTimeMsSnapshot = + GeneratedColumn( + 'target_score_time_ms_snapshot', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _statusMeta = const VerificationMeta('status'); + @override + late final GeneratedColumn status = GeneratedColumn( + 'status', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _startedAtMeta = const VerificationMeta( + 'startedAt', + ); + @override + late final GeneratedColumn startedAt = GeneratedColumn( + 'started_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _completedAtMeta = const VerificationMeta( + 'completedAt', + ); + @override + late final GeneratedColumn completedAt = GeneratedColumn( + 'completed_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualTimeMsMeta = const VerificationMeta( + 'actualTimeMs', + ); + @override + late final GeneratedColumn actualTimeMs = GeneratedColumn( + 'actual_time_ms', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualRepsMeta = const VerificationMeta( + 'actualReps', + ); + @override + late final GeneratedColumn actualReps = GeneratedColumn( + 'actual_reps', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualScoreMeta = const VerificationMeta( + 'actualScore', + ); + @override + late final GeneratedColumn actualScore = GeneratedColumn( + 'actual_score', + aliasedName, + true, + type: DriftSqlType.double, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualScoreTimeMsMeta = const VerificationMeta( + 'actualScoreTimeMs', + ); + @override + late final GeneratedColumn actualScoreTimeMs = GeneratedColumn( + 'actual_score_time_ms', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _noteMeta = const VerificationMeta('note'); + @override + late final GeneratedColumn note = GeneratedColumn( + 'note', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + workoutHistoryId, + programSnapshotId, + exerciseSnapshotId, + programIndex, + exerciseIndex, + setIndex, + passageIndex, + stepIndex, + stepSnapshotId, + stepNameSnapshot, + stepTypeSnapshot, + targetValueSnapshot, + hasScoreSnapshot, + scoreInputModeSnapshot, + scoreLabelSnapshot, + scoreUnitSnapshot, + targetScoreSnapshot, + targetScoreTimeMsSnapshot, + status, + startedAt, + completedAt, + actualTimeMs, + actualReps, + actualScore, + actualScoreTimeMs, + note, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'workout_history_step_results'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } else if (isInserting) { + context.missing(_idMeta); + } + if (data.containsKey('created_at')) { + context.handle( + _createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta), + ); + } else if (isInserting) { + context.missing(_createdAtMeta); + } + if (data.containsKey('updated_at')) { + context.handle( + _updatedAtMeta, + updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta), + ); + } else if (isInserting) { + context.missing(_updatedAtMeta); + } + if (data.containsKey('deleted_at')) { + context.handle( + _deletedAtMeta, + deletedAt.isAcceptableOrUnknown(data['deleted_at']!, _deletedAtMeta), + ); + } + if (data.containsKey('schema_version')) { + context.handle( + _schemaVersionMeta, + schemaVersion.isAcceptableOrUnknown( + data['schema_version']!, + _schemaVersionMeta, + ), + ); + } + if (data.containsKey('sync_state')) { + context.handle( + _syncStateMeta, + syncState.isAcceptableOrUnknown(data['sync_state']!, _syncStateMeta), + ); + } else if (isInserting) { + context.missing(_syncStateMeta); + } + if (data.containsKey('local_revision')) { + context.handle( + _localRevisionMeta, + localRevision.isAcceptableOrUnknown( + data['local_revision']!, + _localRevisionMeta, + ), + ); + } else if (isInserting) { + context.missing(_localRevisionMeta); + } + if (data.containsKey('origin_device_id')) { + context.handle( + _originDeviceIdMeta, + originDeviceId.isAcceptableOrUnknown( + data['origin_device_id']!, + _originDeviceIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_originDeviceIdMeta); + } + if (data.containsKey('future_owner_profile_id')) { + context.handle( + _futureOwnerProfileIdMeta, + futureOwnerProfileId.isAcceptableOrUnknown( + data['future_owner_profile_id']!, + _futureOwnerProfileIdMeta, + ), + ); + } + if (data.containsKey('last_synced_at')) { + context.handle( + _lastSyncedAtMeta, + lastSyncedAt.isAcceptableOrUnknown( + data['last_synced_at']!, + _lastSyncedAtMeta, + ), + ); + } + if (data.containsKey('remote_revision')) { + context.handle( + _remoteRevisionMeta, + remoteRevision.isAcceptableOrUnknown( + data['remote_revision']!, + _remoteRevisionMeta, + ), + ); + } + if (data.containsKey('workout_history_id')) { + context.handle( + _workoutHistoryIdMeta, + workoutHistoryId.isAcceptableOrUnknown( + data['workout_history_id']!, + _workoutHistoryIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_workoutHistoryIdMeta); + } + if (data.containsKey('program_snapshot_id')) { + context.handle( + _programSnapshotIdMeta, + programSnapshotId.isAcceptableOrUnknown( + data['program_snapshot_id']!, + _programSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_programSnapshotIdMeta); + } + if (data.containsKey('exercise_snapshot_id')) { + context.handle( + _exerciseSnapshotIdMeta, + exerciseSnapshotId.isAcceptableOrUnknown( + data['exercise_snapshot_id']!, + _exerciseSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_exerciseSnapshotIdMeta); + } + if (data.containsKey('program_index')) { + context.handle( + _programIndexMeta, + programIndex.isAcceptableOrUnknown( + data['program_index']!, + _programIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_programIndexMeta); + } + if (data.containsKey('exercise_index')) { + context.handle( + _exerciseIndexMeta, + exerciseIndex.isAcceptableOrUnknown( + data['exercise_index']!, + _exerciseIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_exerciseIndexMeta); + } + if (data.containsKey('set_index')) { + context.handle( + _setIndexMeta, + setIndex.isAcceptableOrUnknown(data['set_index']!, _setIndexMeta), + ); + } else if (isInserting) { + context.missing(_setIndexMeta); + } + if (data.containsKey('passage_index')) { + context.handle( + _passageIndexMeta, + passageIndex.isAcceptableOrUnknown( + data['passage_index']!, + _passageIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_passageIndexMeta); + } + if (data.containsKey('step_index')) { + context.handle( + _stepIndexMeta, + stepIndex.isAcceptableOrUnknown(data['step_index']!, _stepIndexMeta), + ); + } else if (isInserting) { + context.missing(_stepIndexMeta); + } + if (data.containsKey('step_snapshot_id')) { + context.handle( + _stepSnapshotIdMeta, + stepSnapshotId.isAcceptableOrUnknown( + data['step_snapshot_id']!, + _stepSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_stepSnapshotIdMeta); + } + if (data.containsKey('step_name_snapshot')) { + context.handle( + _stepNameSnapshotMeta, + stepNameSnapshot.isAcceptableOrUnknown( + data['step_name_snapshot']!, + _stepNameSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_stepNameSnapshotMeta); + } + if (data.containsKey('step_type_snapshot')) { + context.handle( + _stepTypeSnapshotMeta, + stepTypeSnapshot.isAcceptableOrUnknown( + data['step_type_snapshot']!, + _stepTypeSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_stepTypeSnapshotMeta); + } + if (data.containsKey('target_value_snapshot')) { + context.handle( + _targetValueSnapshotMeta, + targetValueSnapshot.isAcceptableOrUnknown( + data['target_value_snapshot']!, + _targetValueSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_targetValueSnapshotMeta); + } + if (data.containsKey('has_score_snapshot')) { + context.handle( + _hasScoreSnapshotMeta, + hasScoreSnapshot.isAcceptableOrUnknown( + data['has_score_snapshot']!, + _hasScoreSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_hasScoreSnapshotMeta); + } + if (data.containsKey('score_input_mode_snapshot')) { + context.handle( + _scoreInputModeSnapshotMeta, + scoreInputModeSnapshot.isAcceptableOrUnknown( + data['score_input_mode_snapshot']!, + _scoreInputModeSnapshotMeta, + ), + ); + } + if (data.containsKey('score_label_snapshot')) { + context.handle( + _scoreLabelSnapshotMeta, + scoreLabelSnapshot.isAcceptableOrUnknown( + data['score_label_snapshot']!, + _scoreLabelSnapshotMeta, + ), + ); + } + if (data.containsKey('score_unit_snapshot')) { + context.handle( + _scoreUnitSnapshotMeta, + scoreUnitSnapshot.isAcceptableOrUnknown( + data['score_unit_snapshot']!, + _scoreUnitSnapshotMeta, + ), + ); + } + if (data.containsKey('target_score_snapshot')) { + context.handle( + _targetScoreSnapshotMeta, + targetScoreSnapshot.isAcceptableOrUnknown( + data['target_score_snapshot']!, + _targetScoreSnapshotMeta, + ), + ); + } + if (data.containsKey('target_score_time_ms_snapshot')) { + context.handle( + _targetScoreTimeMsSnapshotMeta, + targetScoreTimeMsSnapshot.isAcceptableOrUnknown( + data['target_score_time_ms_snapshot']!, + _targetScoreTimeMsSnapshotMeta, + ), + ); + } + if (data.containsKey('status')) { + context.handle( + _statusMeta, + status.isAcceptableOrUnknown(data['status']!, _statusMeta), + ); + } else if (isInserting) { + context.missing(_statusMeta); + } + if (data.containsKey('started_at')) { + context.handle( + _startedAtMeta, + startedAt.isAcceptableOrUnknown(data['started_at']!, _startedAtMeta), + ); + } + if (data.containsKey('completed_at')) { + context.handle( + _completedAtMeta, + completedAt.isAcceptableOrUnknown( + data['completed_at']!, + _completedAtMeta, + ), + ); + } + if (data.containsKey('actual_time_ms')) { + context.handle( + _actualTimeMsMeta, + actualTimeMs.isAcceptableOrUnknown( + data['actual_time_ms']!, + _actualTimeMsMeta, + ), + ); + } + if (data.containsKey('actual_reps')) { + context.handle( + _actualRepsMeta, + actualReps.isAcceptableOrUnknown(data['actual_reps']!, _actualRepsMeta), + ); + } + if (data.containsKey('actual_score')) { + context.handle( + _actualScoreMeta, + actualScore.isAcceptableOrUnknown( + data['actual_score']!, + _actualScoreMeta, + ), + ); + } + if (data.containsKey('actual_score_time_ms')) { + context.handle( + _actualScoreTimeMsMeta, + actualScoreTimeMs.isAcceptableOrUnknown( + data['actual_score_time_ms']!, + _actualScoreTimeMsMeta, + ), + ); + } + if (data.containsKey('note')) { + context.handle( + _noteMeta, + note.isAcceptableOrUnknown(data['note']!, _noteMeta), + ); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + WorkoutHistoryStepResult map( + Map data, { + String? tablePrefix, + }) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return WorkoutHistoryStepResult( + id: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + createdAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}created_at'], + )!, + updatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}updated_at'], + )!, + deletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}deleted_at'], + ), + schemaVersion: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}schema_version'], + )!, + syncState: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}sync_state'], + )!, + localRevision: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}local_revision'], + )!, + originDeviceId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}origin_device_id'], + )!, + futureOwnerProfileId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}future_owner_profile_id'], + ), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_synced_at'], + ), + remoteRevision: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}remote_revision'], + ), + workoutHistoryId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}workout_history_id'], + )!, + programSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}program_snapshot_id'], + )!, + exerciseSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}exercise_snapshot_id'], + )!, + programIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}program_index'], + )!, + exerciseIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}exercise_index'], + )!, + setIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}set_index'], + )!, + passageIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}passage_index'], + )!, + stepIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}step_index'], + )!, + stepSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}step_snapshot_id'], + )!, + stepNameSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}step_name_snapshot'], + )!, + stepTypeSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}step_type_snapshot'], + )!, + targetValueSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}target_value_snapshot'], + )!, + hasScoreSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}has_score_snapshot'], + )!, + scoreInputModeSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}score_input_mode_snapshot'], + ), + scoreLabelSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}score_label_snapshot'], + ), + scoreUnitSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}score_unit_snapshot'], + ), + targetScoreSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}target_score_snapshot'], + ), + targetScoreTimeMsSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}target_score_time_ms_snapshot'], + ), + status: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}status'], + )!, + startedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}started_at'], + ), + completedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}completed_at'], + ), + actualTimeMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_time_ms'], + ), + actualReps: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_reps'], + ), + actualScore: attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}actual_score'], + ), + actualScoreTimeMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_score_time_ms'], + ), + note: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}note'], + ), + ); + } + + @override + $WorkoutHistoryStepResultsTable createAlias(String alias) { + return $WorkoutHistoryStepResultsTable(attachedDatabase, alias); + } +} + +class WorkoutHistoryStepResult extends DataClass + implements Insertable { + final String id; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final int schemaVersion; + final String syncState; + final int localRevision; + final String originDeviceId; + final String? futureOwnerProfileId; + final DateTime? lastSyncedAt; + final String? remoteRevision; + final String workoutHistoryId; + final String programSnapshotId; + final String exerciseSnapshotId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final int passageIndex; + final int stepIndex; + final String stepSnapshotId; + final String stepNameSnapshot; + final String stepTypeSnapshot; + final int targetValueSnapshot; + final bool hasScoreSnapshot; + final String? scoreInputModeSnapshot; + final String? scoreLabelSnapshot; + final String? scoreUnitSnapshot; + final double? targetScoreSnapshot; + final int? targetScoreTimeMsSnapshot; + final String status; + final DateTime? startedAt; + final DateTime? completedAt; + final int? actualTimeMs; + final int? actualReps; + final double? actualScore; + final int? actualScoreTimeMs; + final String? note; + const WorkoutHistoryStepResult({ + required this.id, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + required this.schemaVersion, + required this.syncState, + required this.localRevision, + required this.originDeviceId, + this.futureOwnerProfileId, + this.lastSyncedAt, + this.remoteRevision, + required this.workoutHistoryId, + required this.programSnapshotId, + required this.exerciseSnapshotId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.passageIndex, + required this.stepIndex, + required this.stepSnapshotId, + required this.stepNameSnapshot, + required this.stepTypeSnapshot, + required this.targetValueSnapshot, + required this.hasScoreSnapshot, + this.scoreInputModeSnapshot, + this.scoreLabelSnapshot, + this.scoreUnitSnapshot, + this.targetScoreSnapshot, + this.targetScoreTimeMsSnapshot, + required this.status, + this.startedAt, + this.completedAt, + this.actualTimeMs, + this.actualReps, + this.actualScore, + this.actualScoreTimeMs, + this.note, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + map['schema_version'] = Variable(schemaVersion); + map['sync_state'] = Variable(syncState); + map['local_revision'] = Variable(localRevision); + map['origin_device_id'] = Variable(originDeviceId); + if (!nullToAbsent || futureOwnerProfileId != null) { + map['future_owner_profile_id'] = Variable(futureOwnerProfileId); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + if (!nullToAbsent || remoteRevision != null) { + map['remote_revision'] = Variable(remoteRevision); + } + map['workout_history_id'] = Variable(workoutHistoryId); + map['program_snapshot_id'] = Variable(programSnapshotId); + map['exercise_snapshot_id'] = Variable(exerciseSnapshotId); + map['program_index'] = Variable(programIndex); + map['exercise_index'] = Variable(exerciseIndex); + map['set_index'] = Variable(setIndex); + map['passage_index'] = Variable(passageIndex); + map['step_index'] = Variable(stepIndex); + map['step_snapshot_id'] = Variable(stepSnapshotId); + map['step_name_snapshot'] = Variable(stepNameSnapshot); + map['step_type_snapshot'] = Variable(stepTypeSnapshot); + map['target_value_snapshot'] = Variable(targetValueSnapshot); + map['has_score_snapshot'] = Variable(hasScoreSnapshot); + if (!nullToAbsent || scoreInputModeSnapshot != null) { + map['score_input_mode_snapshot'] = Variable( + scoreInputModeSnapshot, + ); + } + if (!nullToAbsent || scoreLabelSnapshot != null) { + map['score_label_snapshot'] = Variable(scoreLabelSnapshot); + } + if (!nullToAbsent || scoreUnitSnapshot != null) { + map['score_unit_snapshot'] = Variable(scoreUnitSnapshot); + } + if (!nullToAbsent || targetScoreSnapshot != null) { + map['target_score_snapshot'] = Variable(targetScoreSnapshot); + } + if (!nullToAbsent || targetScoreTimeMsSnapshot != null) { + map['target_score_time_ms_snapshot'] = Variable( + targetScoreTimeMsSnapshot, + ); + } + map['status'] = Variable(status); + if (!nullToAbsent || startedAt != null) { + map['started_at'] = Variable(startedAt); + } + if (!nullToAbsent || completedAt != null) { + map['completed_at'] = Variable(completedAt); + } + if (!nullToAbsent || actualTimeMs != null) { + map['actual_time_ms'] = Variable(actualTimeMs); + } + if (!nullToAbsent || actualReps != null) { + map['actual_reps'] = Variable(actualReps); + } + if (!nullToAbsent || actualScore != null) { + map['actual_score'] = Variable(actualScore); + } + if (!nullToAbsent || actualScoreTimeMs != null) { + map['actual_score_time_ms'] = Variable(actualScoreTimeMs); + } + if (!nullToAbsent || note != null) { + map['note'] = Variable(note); + } + return map; + } + + WorkoutHistoryStepResultsCompanion toCompanion(bool nullToAbsent) { + return WorkoutHistoryStepResultsCompanion( + id: Value(id), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + schemaVersion: Value(schemaVersion), + syncState: Value(syncState), + localRevision: Value(localRevision), + originDeviceId: Value(originDeviceId), + futureOwnerProfileId: futureOwnerProfileId == null && nullToAbsent + ? const Value.absent() + : Value(futureOwnerProfileId), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + remoteRevision: remoteRevision == null && nullToAbsent + ? const Value.absent() + : Value(remoteRevision), + workoutHistoryId: Value(workoutHistoryId), + programSnapshotId: Value(programSnapshotId), + exerciseSnapshotId: Value(exerciseSnapshotId), + programIndex: Value(programIndex), + exerciseIndex: Value(exerciseIndex), + setIndex: Value(setIndex), + passageIndex: Value(passageIndex), + stepIndex: Value(stepIndex), + stepSnapshotId: Value(stepSnapshotId), + stepNameSnapshot: Value(stepNameSnapshot), + stepTypeSnapshot: Value(stepTypeSnapshot), + targetValueSnapshot: Value(targetValueSnapshot), + hasScoreSnapshot: Value(hasScoreSnapshot), + scoreInputModeSnapshot: scoreInputModeSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(scoreInputModeSnapshot), + scoreLabelSnapshot: scoreLabelSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(scoreLabelSnapshot), + scoreUnitSnapshot: scoreUnitSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(scoreUnitSnapshot), + targetScoreSnapshot: targetScoreSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(targetScoreSnapshot), + targetScoreTimeMsSnapshot: + targetScoreTimeMsSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(targetScoreTimeMsSnapshot), + status: Value(status), + startedAt: startedAt == null && nullToAbsent + ? const Value.absent() + : Value(startedAt), + completedAt: completedAt == null && nullToAbsent + ? const Value.absent() + : Value(completedAt), + actualTimeMs: actualTimeMs == null && nullToAbsent + ? const Value.absent() + : Value(actualTimeMs), + actualReps: actualReps == null && nullToAbsent + ? const Value.absent() + : Value(actualReps), + actualScore: actualScore == null && nullToAbsent + ? const Value.absent() + : Value(actualScore), + actualScoreTimeMs: actualScoreTimeMs == null && nullToAbsent + ? const Value.absent() + : Value(actualScoreTimeMs), + note: note == null && nullToAbsent ? const Value.absent() : Value(note), + ); + } + + factory WorkoutHistoryStepResult.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return WorkoutHistoryStepResult( + id: serializer.fromJson(json['id']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + schemaVersion: serializer.fromJson(json['schemaVersion']), + syncState: serializer.fromJson(json['syncState']), + localRevision: serializer.fromJson(json['localRevision']), + originDeviceId: serializer.fromJson(json['originDeviceId']), + futureOwnerProfileId: serializer.fromJson( + json['futureOwnerProfileId'], + ), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + remoteRevision: serializer.fromJson(json['remoteRevision']), + workoutHistoryId: serializer.fromJson(json['workoutHistoryId']), + programSnapshotId: serializer.fromJson(json['programSnapshotId']), + exerciseSnapshotId: serializer.fromJson( + json['exerciseSnapshotId'], + ), + programIndex: serializer.fromJson(json['programIndex']), + exerciseIndex: serializer.fromJson(json['exerciseIndex']), + setIndex: serializer.fromJson(json['setIndex']), + passageIndex: serializer.fromJson(json['passageIndex']), + stepIndex: serializer.fromJson(json['stepIndex']), + stepSnapshotId: serializer.fromJson(json['stepSnapshotId']), + stepNameSnapshot: serializer.fromJson(json['stepNameSnapshot']), + stepTypeSnapshot: serializer.fromJson(json['stepTypeSnapshot']), + targetValueSnapshot: serializer.fromJson( + json['targetValueSnapshot'], + ), + hasScoreSnapshot: serializer.fromJson(json['hasScoreSnapshot']), + scoreInputModeSnapshot: serializer.fromJson( + json['scoreInputModeSnapshot'], + ), + scoreLabelSnapshot: serializer.fromJson( + json['scoreLabelSnapshot'], + ), + scoreUnitSnapshot: serializer.fromJson( + json['scoreUnitSnapshot'], + ), + targetScoreSnapshot: serializer.fromJson( + json['targetScoreSnapshot'], + ), + targetScoreTimeMsSnapshot: serializer.fromJson( + json['targetScoreTimeMsSnapshot'], + ), + status: serializer.fromJson(json['status']), + startedAt: serializer.fromJson(json['startedAt']), + completedAt: serializer.fromJson(json['completedAt']), + actualTimeMs: serializer.fromJson(json['actualTimeMs']), + actualReps: serializer.fromJson(json['actualReps']), + actualScore: serializer.fromJson(json['actualScore']), + actualScoreTimeMs: serializer.fromJson(json['actualScoreTimeMs']), + note: serializer.fromJson(json['note']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'schemaVersion': serializer.toJson(schemaVersion), + 'syncState': serializer.toJson(syncState), + 'localRevision': serializer.toJson(localRevision), + 'originDeviceId': serializer.toJson(originDeviceId), + 'futureOwnerProfileId': serializer.toJson(futureOwnerProfileId), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'remoteRevision': serializer.toJson(remoteRevision), + 'workoutHistoryId': serializer.toJson(workoutHistoryId), + 'programSnapshotId': serializer.toJson(programSnapshotId), + 'exerciseSnapshotId': serializer.toJson(exerciseSnapshotId), + 'programIndex': serializer.toJson(programIndex), + 'exerciseIndex': serializer.toJson(exerciseIndex), + 'setIndex': serializer.toJson(setIndex), + 'passageIndex': serializer.toJson(passageIndex), + 'stepIndex': serializer.toJson(stepIndex), + 'stepSnapshotId': serializer.toJson(stepSnapshotId), + 'stepNameSnapshot': serializer.toJson(stepNameSnapshot), + 'stepTypeSnapshot': serializer.toJson(stepTypeSnapshot), + 'targetValueSnapshot': serializer.toJson(targetValueSnapshot), + 'hasScoreSnapshot': serializer.toJson(hasScoreSnapshot), + 'scoreInputModeSnapshot': serializer.toJson( + scoreInputModeSnapshot, + ), + 'scoreLabelSnapshot': serializer.toJson(scoreLabelSnapshot), + 'scoreUnitSnapshot': serializer.toJson(scoreUnitSnapshot), + 'targetScoreSnapshot': serializer.toJson(targetScoreSnapshot), + 'targetScoreTimeMsSnapshot': serializer.toJson( + targetScoreTimeMsSnapshot, + ), + 'status': serializer.toJson(status), + 'startedAt': serializer.toJson(startedAt), + 'completedAt': serializer.toJson(completedAt), + 'actualTimeMs': serializer.toJson(actualTimeMs), + 'actualReps': serializer.toJson(actualReps), + 'actualScore': serializer.toJson(actualScore), + 'actualScoreTimeMs': serializer.toJson(actualScoreTimeMs), + 'note': serializer.toJson(note), + }; + } + + WorkoutHistoryStepResult copyWith({ + String? id, + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + int? schemaVersion, + String? syncState, + int? localRevision, + String? originDeviceId, + Value futureOwnerProfileId = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value remoteRevision = const Value.absent(), + String? workoutHistoryId, + String? programSnapshotId, + String? exerciseSnapshotId, + int? programIndex, + int? exerciseIndex, + int? setIndex, + int? passageIndex, + int? stepIndex, + String? stepSnapshotId, + String? stepNameSnapshot, + String? stepTypeSnapshot, + int? targetValueSnapshot, + bool? hasScoreSnapshot, + Value scoreInputModeSnapshot = const Value.absent(), + Value scoreLabelSnapshot = const Value.absent(), + Value scoreUnitSnapshot = const Value.absent(), + Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), + String? status, + Value startedAt = const Value.absent(), + Value completedAt = const Value.absent(), + Value actualTimeMs = const Value.absent(), + Value actualReps = const Value.absent(), + Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value note = const Value.absent(), + }) => WorkoutHistoryStepResult( + id: id ?? this.id, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + schemaVersion: schemaVersion ?? this.schemaVersion, + syncState: syncState ?? this.syncState, + localRevision: localRevision ?? this.localRevision, + originDeviceId: originDeviceId ?? this.originDeviceId, + futureOwnerProfileId: futureOwnerProfileId.present + ? futureOwnerProfileId.value + : this.futureOwnerProfileId, + lastSyncedAt: lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + remoteRevision: remoteRevision.present + ? remoteRevision.value + : this.remoteRevision, + workoutHistoryId: workoutHistoryId ?? this.workoutHistoryId, + programSnapshotId: programSnapshotId ?? this.programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId ?? this.exerciseSnapshotId, + programIndex: programIndex ?? this.programIndex, + exerciseIndex: exerciseIndex ?? this.exerciseIndex, + setIndex: setIndex ?? this.setIndex, + passageIndex: passageIndex ?? this.passageIndex, + stepIndex: stepIndex ?? this.stepIndex, + stepSnapshotId: stepSnapshotId ?? this.stepSnapshotId, + stepNameSnapshot: stepNameSnapshot ?? this.stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot ?? this.stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot ?? this.targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot ?? this.hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot.present + ? scoreInputModeSnapshot.value + : this.scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot.present + ? scoreLabelSnapshot.value + : this.scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot.present + ? scoreUnitSnapshot.value + : this.scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot.present + ? targetScoreSnapshot.value + : this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot.present + ? targetScoreTimeMsSnapshot.value + : this.targetScoreTimeMsSnapshot, + status: status ?? this.status, + startedAt: startedAt.present ? startedAt.value : this.startedAt, + completedAt: completedAt.present ? completedAt.value : this.completedAt, + actualTimeMs: actualTimeMs.present ? actualTimeMs.value : this.actualTimeMs, + actualReps: actualReps.present ? actualReps.value : this.actualReps, + actualScore: actualScore.present ? actualScore.value : this.actualScore, + actualScoreTimeMs: actualScoreTimeMs.present + ? actualScoreTimeMs.value + : this.actualScoreTimeMs, + note: note.present ? note.value : this.note, + ); + WorkoutHistoryStepResult copyWithCompanion( + WorkoutHistoryStepResultsCompanion data, + ) { + return WorkoutHistoryStepResult( + id: data.id.present ? data.id.value : this.id, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + schemaVersion: data.schemaVersion.present + ? data.schemaVersion.value + : this.schemaVersion, + syncState: data.syncState.present ? data.syncState.value : this.syncState, + localRevision: data.localRevision.present + ? data.localRevision.value + : this.localRevision, + originDeviceId: data.originDeviceId.present + ? data.originDeviceId.value + : this.originDeviceId, + futureOwnerProfileId: data.futureOwnerProfileId.present + ? data.futureOwnerProfileId.value + : this.futureOwnerProfileId, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + remoteRevision: data.remoteRevision.present + ? data.remoteRevision.value + : this.remoteRevision, + workoutHistoryId: data.workoutHistoryId.present + ? data.workoutHistoryId.value + : this.workoutHistoryId, + programSnapshotId: data.programSnapshotId.present + ? data.programSnapshotId.value + : this.programSnapshotId, + exerciseSnapshotId: data.exerciseSnapshotId.present + ? data.exerciseSnapshotId.value + : this.exerciseSnapshotId, + programIndex: data.programIndex.present + ? data.programIndex.value + : this.programIndex, + exerciseIndex: data.exerciseIndex.present + ? data.exerciseIndex.value + : this.exerciseIndex, + setIndex: data.setIndex.present ? data.setIndex.value : this.setIndex, + passageIndex: data.passageIndex.present + ? data.passageIndex.value + : this.passageIndex, + stepIndex: data.stepIndex.present ? data.stepIndex.value : this.stepIndex, + stepSnapshotId: data.stepSnapshotId.present + ? data.stepSnapshotId.value + : this.stepSnapshotId, + stepNameSnapshot: data.stepNameSnapshot.present + ? data.stepNameSnapshot.value + : this.stepNameSnapshot, + stepTypeSnapshot: data.stepTypeSnapshot.present + ? data.stepTypeSnapshot.value + : this.stepTypeSnapshot, + targetValueSnapshot: data.targetValueSnapshot.present + ? data.targetValueSnapshot.value + : this.targetValueSnapshot, + hasScoreSnapshot: data.hasScoreSnapshot.present + ? data.hasScoreSnapshot.value + : this.hasScoreSnapshot, + scoreInputModeSnapshot: data.scoreInputModeSnapshot.present + ? data.scoreInputModeSnapshot.value + : this.scoreInputModeSnapshot, + scoreLabelSnapshot: data.scoreLabelSnapshot.present + ? data.scoreLabelSnapshot.value + : this.scoreLabelSnapshot, + scoreUnitSnapshot: data.scoreUnitSnapshot.present + ? data.scoreUnitSnapshot.value + : this.scoreUnitSnapshot, + targetScoreSnapshot: data.targetScoreSnapshot.present + ? data.targetScoreSnapshot.value + : this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: data.targetScoreTimeMsSnapshot.present + ? data.targetScoreTimeMsSnapshot.value + : this.targetScoreTimeMsSnapshot, + status: data.status.present ? data.status.value : this.status, + startedAt: data.startedAt.present ? data.startedAt.value : this.startedAt, + completedAt: data.completedAt.present + ? data.completedAt.value + : this.completedAt, + actualTimeMs: data.actualTimeMs.present + ? data.actualTimeMs.value + : this.actualTimeMs, + actualReps: data.actualReps.present + ? data.actualReps.value + : this.actualReps, + actualScore: data.actualScore.present + ? data.actualScore.value + : this.actualScore, + actualScoreTimeMs: data.actualScoreTimeMs.present + ? data.actualScoreTimeMs.value + : this.actualScoreTimeMs, + note: data.note.present ? data.note.value : this.note, + ); + } + + @override + String toString() { + return (StringBuffer('WorkoutHistoryStepResult(') + ..write('id: $id, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('schemaVersion: $schemaVersion, ') + ..write('syncState: $syncState, ') + ..write('localRevision: $localRevision, ') + ..write('originDeviceId: $originDeviceId, ') + ..write('futureOwnerProfileId: $futureOwnerProfileId, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('remoteRevision: $remoteRevision, ') + ..write('workoutHistoryId: $workoutHistoryId, ') + ..write('programSnapshotId: $programSnapshotId, ') + ..write('exerciseSnapshotId: $exerciseSnapshotId, ') + ..write('programIndex: $programIndex, ') + ..write('exerciseIndex: $exerciseIndex, ') + ..write('setIndex: $setIndex, ') + ..write('passageIndex: $passageIndex, ') + ..write('stepIndex: $stepIndex, ') + ..write('stepSnapshotId: $stepSnapshotId, ') + ..write('stepNameSnapshot: $stepNameSnapshot, ') + ..write('stepTypeSnapshot: $stepTypeSnapshot, ') + ..write('targetValueSnapshot: $targetValueSnapshot, ') + ..write('hasScoreSnapshot: $hasScoreSnapshot, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') + ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') + ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') + ..write('targetScoreSnapshot: $targetScoreSnapshot, ') + ..write('targetScoreTimeMsSnapshot: $targetScoreTimeMsSnapshot, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('completedAt: $completedAt, ') + ..write('actualTimeMs: $actualTimeMs, ') + ..write('actualReps: $actualReps, ') + ..write('actualScore: $actualScore, ') + ..write('actualScoreTimeMs: $actualScoreTimeMs, ') + ..write('note: $note') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hashAll([ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + workoutHistoryId, + programSnapshotId, + exerciseSnapshotId, + programIndex, + exerciseIndex, + setIndex, + passageIndex, + stepIndex, + stepSnapshotId, + stepNameSnapshot, + stepTypeSnapshot, + targetValueSnapshot, + hasScoreSnapshot, + scoreInputModeSnapshot, + scoreLabelSnapshot, + scoreUnitSnapshot, + targetScoreSnapshot, + targetScoreTimeMsSnapshot, + status, + startedAt, + completedAt, + actualTimeMs, + actualReps, + actualScore, + actualScoreTimeMs, + note, + ]); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is WorkoutHistoryStepResult && + other.id == this.id && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.schemaVersion == this.schemaVersion && + other.syncState == this.syncState && + other.localRevision == this.localRevision && + other.originDeviceId == this.originDeviceId && + other.futureOwnerProfileId == this.futureOwnerProfileId && + other.lastSyncedAt == this.lastSyncedAt && + other.remoteRevision == this.remoteRevision && + other.workoutHistoryId == this.workoutHistoryId && + other.programSnapshotId == this.programSnapshotId && + other.exerciseSnapshotId == this.exerciseSnapshotId && + other.programIndex == this.programIndex && + other.exerciseIndex == this.exerciseIndex && + other.setIndex == this.setIndex && + other.passageIndex == this.passageIndex && + other.stepIndex == this.stepIndex && + other.stepSnapshotId == this.stepSnapshotId && + other.stepNameSnapshot == this.stepNameSnapshot && + other.stepTypeSnapshot == this.stepTypeSnapshot && + other.targetValueSnapshot == this.targetValueSnapshot && + other.hasScoreSnapshot == this.hasScoreSnapshot && + other.scoreInputModeSnapshot == this.scoreInputModeSnapshot && + other.scoreLabelSnapshot == this.scoreLabelSnapshot && + other.scoreUnitSnapshot == this.scoreUnitSnapshot && + other.targetScoreSnapshot == this.targetScoreSnapshot && + other.targetScoreTimeMsSnapshot == this.targetScoreTimeMsSnapshot && + other.status == this.status && + other.startedAt == this.startedAt && + other.completedAt == this.completedAt && + other.actualTimeMs == this.actualTimeMs && + other.actualReps == this.actualReps && + other.actualScore == this.actualScore && + other.actualScoreTimeMs == this.actualScoreTimeMs && + other.note == this.note); +} + +class WorkoutHistoryStepResultsCompanion + extends UpdateCompanion { + final Value id; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value schemaVersion; + final Value syncState; + final Value localRevision; + final Value originDeviceId; + final Value futureOwnerProfileId; + final Value lastSyncedAt; + final Value remoteRevision; + final Value workoutHistoryId; + final Value programSnapshotId; + final Value exerciseSnapshotId; + final Value programIndex; + final Value exerciseIndex; + final Value setIndex; + final Value passageIndex; + final Value stepIndex; + final Value stepSnapshotId; + final Value stepNameSnapshot; + final Value stepTypeSnapshot; + final Value targetValueSnapshot; + final Value hasScoreSnapshot; + final Value scoreInputModeSnapshot; + final Value scoreLabelSnapshot; + final Value scoreUnitSnapshot; + final Value targetScoreSnapshot; + final Value targetScoreTimeMsSnapshot; + final Value status; + final Value startedAt; + final Value completedAt; + final Value actualTimeMs; + final Value actualReps; + final Value actualScore; + final Value actualScoreTimeMs; + final Value note; + final Value rowid; + const WorkoutHistoryStepResultsCompanion({ + this.id = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.schemaVersion = const Value.absent(), + this.syncState = const Value.absent(), + this.localRevision = const Value.absent(), + this.originDeviceId = const Value.absent(), + this.futureOwnerProfileId = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.remoteRevision = const Value.absent(), + this.workoutHistoryId = const Value.absent(), + this.programSnapshotId = const Value.absent(), + this.exerciseSnapshotId = const Value.absent(), + this.programIndex = const Value.absent(), + this.exerciseIndex = const Value.absent(), + this.setIndex = const Value.absent(), + this.passageIndex = const Value.absent(), + this.stepIndex = const Value.absent(), + this.stepSnapshotId = const Value.absent(), + this.stepNameSnapshot = const Value.absent(), + this.stepTypeSnapshot = const Value.absent(), + this.targetValueSnapshot = const Value.absent(), + this.hasScoreSnapshot = const Value.absent(), + this.scoreInputModeSnapshot = const Value.absent(), + this.scoreLabelSnapshot = const Value.absent(), + this.scoreUnitSnapshot = const Value.absent(), + this.targetScoreSnapshot = const Value.absent(), + this.targetScoreTimeMsSnapshot = const Value.absent(), + this.status = const Value.absent(), + this.startedAt = const Value.absent(), + this.completedAt = const Value.absent(), + this.actualTimeMs = const Value.absent(), + this.actualReps = const Value.absent(), + this.actualScore = const Value.absent(), + this.actualScoreTimeMs = const Value.absent(), + this.note = const Value.absent(), + this.rowid = const Value.absent(), + }); + WorkoutHistoryStepResultsCompanion.insert({ + required String id, + required DateTime createdAt, + required DateTime updatedAt, + this.deletedAt = const Value.absent(), + this.schemaVersion = const Value.absent(), + required String syncState, + required int localRevision, + required String originDeviceId, + this.futureOwnerProfileId = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.remoteRevision = const Value.absent(), + required String workoutHistoryId, + required String programSnapshotId, + required String exerciseSnapshotId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required String stepSnapshotId, + required String stepNameSnapshot, + required String stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + this.scoreInputModeSnapshot = const Value.absent(), + this.scoreLabelSnapshot = const Value.absent(), + this.scoreUnitSnapshot = const Value.absent(), + this.targetScoreSnapshot = const Value.absent(), + this.targetScoreTimeMsSnapshot = const Value.absent(), + required String status, + this.startedAt = const Value.absent(), + this.completedAt = const Value.absent(), + this.actualTimeMs = const Value.absent(), + this.actualReps = const Value.absent(), + this.actualScore = const Value.absent(), + this.actualScoreTimeMs = const Value.absent(), + this.note = const Value.absent(), + this.rowid = const Value.absent(), + }) : id = Value(id), + createdAt = Value(createdAt), + updatedAt = Value(updatedAt), + syncState = Value(syncState), + localRevision = Value(localRevision), + originDeviceId = Value(originDeviceId), + workoutHistoryId = Value(workoutHistoryId), + programSnapshotId = Value(programSnapshotId), + exerciseSnapshotId = Value(exerciseSnapshotId), + programIndex = Value(programIndex), + exerciseIndex = Value(exerciseIndex), + setIndex = Value(setIndex), + passageIndex = Value(passageIndex), + stepIndex = Value(stepIndex), + stepSnapshotId = Value(stepSnapshotId), + stepNameSnapshot = Value(stepNameSnapshot), + stepTypeSnapshot = Value(stepTypeSnapshot), + targetValueSnapshot = Value(targetValueSnapshot), + hasScoreSnapshot = Value(hasScoreSnapshot), + status = Value(status); + static Insertable custom({ + Expression? id, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? schemaVersion, + Expression? syncState, + Expression? localRevision, + Expression? originDeviceId, + Expression? futureOwnerProfileId, + Expression? lastSyncedAt, + Expression? remoteRevision, + Expression? workoutHistoryId, + Expression? programSnapshotId, + Expression? exerciseSnapshotId, + Expression? programIndex, + Expression? exerciseIndex, + Expression? setIndex, + Expression? passageIndex, + Expression? stepIndex, + Expression? stepSnapshotId, + Expression? stepNameSnapshot, + Expression? stepTypeSnapshot, + Expression? targetValueSnapshot, + Expression? hasScoreSnapshot, + Expression? scoreInputModeSnapshot, + Expression? scoreLabelSnapshot, + Expression? scoreUnitSnapshot, + Expression? targetScoreSnapshot, + Expression? targetScoreTimeMsSnapshot, + Expression? status, + Expression? startedAt, + Expression? completedAt, + Expression? actualTimeMs, + Expression? actualReps, + Expression? actualScore, + Expression? actualScoreTimeMs, + Expression? note, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (schemaVersion != null) 'schema_version': schemaVersion, + if (syncState != null) 'sync_state': syncState, + if (localRevision != null) 'local_revision': localRevision, + if (originDeviceId != null) 'origin_device_id': originDeviceId, + if (futureOwnerProfileId != null) + 'future_owner_profile_id': futureOwnerProfileId, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (remoteRevision != null) 'remote_revision': remoteRevision, + if (workoutHistoryId != null) 'workout_history_id': workoutHistoryId, + if (programSnapshotId != null) 'program_snapshot_id': programSnapshotId, + if (exerciseSnapshotId != null) + 'exercise_snapshot_id': exerciseSnapshotId, + if (programIndex != null) 'program_index': programIndex, + if (exerciseIndex != null) 'exercise_index': exerciseIndex, + if (setIndex != null) 'set_index': setIndex, + if (passageIndex != null) 'passage_index': passageIndex, + if (stepIndex != null) 'step_index': stepIndex, + if (stepSnapshotId != null) 'step_snapshot_id': stepSnapshotId, + if (stepNameSnapshot != null) 'step_name_snapshot': stepNameSnapshot, + if (stepTypeSnapshot != null) 'step_type_snapshot': stepTypeSnapshot, + if (targetValueSnapshot != null) + 'target_value_snapshot': targetValueSnapshot, + if (hasScoreSnapshot != null) 'has_score_snapshot': hasScoreSnapshot, + if (scoreInputModeSnapshot != null) + 'score_input_mode_snapshot': scoreInputModeSnapshot, + if (scoreLabelSnapshot != null) + 'score_label_snapshot': scoreLabelSnapshot, + if (scoreUnitSnapshot != null) 'score_unit_snapshot': scoreUnitSnapshot, + if (targetScoreSnapshot != null) + 'target_score_snapshot': targetScoreSnapshot, + if (targetScoreTimeMsSnapshot != null) + 'target_score_time_ms_snapshot': targetScoreTimeMsSnapshot, + if (status != null) 'status': status, + if (startedAt != null) 'started_at': startedAt, + if (completedAt != null) 'completed_at': completedAt, + if (actualTimeMs != null) 'actual_time_ms': actualTimeMs, + if (actualReps != null) 'actual_reps': actualReps, + if (actualScore != null) 'actual_score': actualScore, + if (actualScoreTimeMs != null) 'actual_score_time_ms': actualScoreTimeMs, + if (note != null) 'note': note, + if (rowid != null) 'rowid': rowid, + }); + } + + WorkoutHistoryStepResultsCompanion copyWith({ + Value? id, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? schemaVersion, + Value? syncState, + Value? localRevision, + Value? originDeviceId, + Value? futureOwnerProfileId, + Value? lastSyncedAt, + Value? remoteRevision, + Value? workoutHistoryId, + Value? programSnapshotId, + Value? exerciseSnapshotId, + Value? programIndex, + Value? exerciseIndex, + Value? setIndex, + Value? passageIndex, + Value? stepIndex, + Value? stepSnapshotId, + Value? stepNameSnapshot, + Value? stepTypeSnapshot, + Value? targetValueSnapshot, + Value? hasScoreSnapshot, + Value? scoreInputModeSnapshot, + Value? scoreLabelSnapshot, + Value? scoreUnitSnapshot, + Value? targetScoreSnapshot, + Value? targetScoreTimeMsSnapshot, + Value? status, + Value? startedAt, + Value? completedAt, + Value? actualTimeMs, + Value? actualReps, + Value? actualScore, + Value? actualScoreTimeMs, + Value? note, + Value? rowid, + }) { + return WorkoutHistoryStepResultsCompanion( + id: id ?? this.id, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + schemaVersion: schemaVersion ?? this.schemaVersion, + syncState: syncState ?? this.syncState, + localRevision: localRevision ?? this.localRevision, + originDeviceId: originDeviceId ?? this.originDeviceId, + futureOwnerProfileId: futureOwnerProfileId ?? this.futureOwnerProfileId, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + remoteRevision: remoteRevision ?? this.remoteRevision, + workoutHistoryId: workoutHistoryId ?? this.workoutHistoryId, + programSnapshotId: programSnapshotId ?? this.programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId ?? this.exerciseSnapshotId, + programIndex: programIndex ?? this.programIndex, + exerciseIndex: exerciseIndex ?? this.exerciseIndex, + setIndex: setIndex ?? this.setIndex, + passageIndex: passageIndex ?? this.passageIndex, + stepIndex: stepIndex ?? this.stepIndex, + stepSnapshotId: stepSnapshotId ?? this.stepSnapshotId, + stepNameSnapshot: stepNameSnapshot ?? this.stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot ?? this.stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot ?? this.targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot ?? this.hasScoreSnapshot, + scoreInputModeSnapshot: + scoreInputModeSnapshot ?? this.scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot ?? this.scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot ?? this.scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot ?? this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: + targetScoreTimeMsSnapshot ?? this.targetScoreTimeMsSnapshot, + status: status ?? this.status, + startedAt: startedAt ?? this.startedAt, + completedAt: completedAt ?? this.completedAt, + actualTimeMs: actualTimeMs ?? this.actualTimeMs, + actualReps: actualReps ?? this.actualReps, + actualScore: actualScore ?? this.actualScore, + actualScoreTimeMs: actualScoreTimeMs ?? this.actualScoreTimeMs, + note: note ?? this.note, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (schemaVersion.present) { + map['schema_version'] = Variable(schemaVersion.value); + } + if (syncState.present) { + map['sync_state'] = Variable(syncState.value); + } + if (localRevision.present) { + map['local_revision'] = Variable(localRevision.value); + } + if (originDeviceId.present) { + map['origin_device_id'] = Variable(originDeviceId.value); + } + if (futureOwnerProfileId.present) { + map['future_owner_profile_id'] = Variable( + futureOwnerProfileId.value, + ); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (remoteRevision.present) { + map['remote_revision'] = Variable(remoteRevision.value); + } + if (workoutHistoryId.present) { + map['workout_history_id'] = Variable(workoutHistoryId.value); + } + if (programSnapshotId.present) { + map['program_snapshot_id'] = Variable(programSnapshotId.value); + } + if (exerciseSnapshotId.present) { + map['exercise_snapshot_id'] = Variable(exerciseSnapshotId.value); + } + if (programIndex.present) { + map['program_index'] = Variable(programIndex.value); + } + if (exerciseIndex.present) { + map['exercise_index'] = Variable(exerciseIndex.value); + } + if (setIndex.present) { + map['set_index'] = Variable(setIndex.value); + } + if (passageIndex.present) { + map['passage_index'] = Variable(passageIndex.value); + } + if (stepIndex.present) { + map['step_index'] = Variable(stepIndex.value); + } + if (stepSnapshotId.present) { + map['step_snapshot_id'] = Variable(stepSnapshotId.value); + } + if (stepNameSnapshot.present) { + map['step_name_snapshot'] = Variable(stepNameSnapshot.value); + } + if (stepTypeSnapshot.present) { + map['step_type_snapshot'] = Variable(stepTypeSnapshot.value); + } + if (targetValueSnapshot.present) { + map['target_value_snapshot'] = Variable(targetValueSnapshot.value); + } + if (hasScoreSnapshot.present) { + map['has_score_snapshot'] = Variable(hasScoreSnapshot.value); + } + if (scoreInputModeSnapshot.present) { + map['score_input_mode_snapshot'] = Variable( + scoreInputModeSnapshot.value, + ); + } + if (scoreLabelSnapshot.present) { + map['score_label_snapshot'] = Variable(scoreLabelSnapshot.value); + } + if (scoreUnitSnapshot.present) { + map['score_unit_snapshot'] = Variable(scoreUnitSnapshot.value); + } + if (targetScoreSnapshot.present) { + map['target_score_snapshot'] = Variable( + targetScoreSnapshot.value, + ); + } + if (targetScoreTimeMsSnapshot.present) { + map['target_score_time_ms_snapshot'] = Variable( + targetScoreTimeMsSnapshot.value, + ); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (startedAt.present) { + map['started_at'] = Variable(startedAt.value); + } + if (completedAt.present) { + map['completed_at'] = Variable(completedAt.value); + } + if (actualTimeMs.present) { + map['actual_time_ms'] = Variable(actualTimeMs.value); + } + if (actualReps.present) { + map['actual_reps'] = Variable(actualReps.value); + } + if (actualScore.present) { + map['actual_score'] = Variable(actualScore.value); + } + if (actualScoreTimeMs.present) { + map['actual_score_time_ms'] = Variable(actualScoreTimeMs.value); + } + if (note.present) { + map['note'] = Variable(note.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('WorkoutHistoryStepResultsCompanion(') + ..write('id: $id, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('schemaVersion: $schemaVersion, ') + ..write('syncState: $syncState, ') + ..write('localRevision: $localRevision, ') + ..write('originDeviceId: $originDeviceId, ') + ..write('futureOwnerProfileId: $futureOwnerProfileId, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('remoteRevision: $remoteRevision, ') + ..write('workoutHistoryId: $workoutHistoryId, ') + ..write('programSnapshotId: $programSnapshotId, ') + ..write('exerciseSnapshotId: $exerciseSnapshotId, ') + ..write('programIndex: $programIndex, ') + ..write('exerciseIndex: $exerciseIndex, ') + ..write('setIndex: $setIndex, ') + ..write('passageIndex: $passageIndex, ') + ..write('stepIndex: $stepIndex, ') + ..write('stepSnapshotId: $stepSnapshotId, ') + ..write('stepNameSnapshot: $stepNameSnapshot, ') + ..write('stepTypeSnapshot: $stepTypeSnapshot, ') + ..write('targetValueSnapshot: $targetValueSnapshot, ') + ..write('hasScoreSnapshot: $hasScoreSnapshot, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') + ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') + ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') + ..write('targetScoreSnapshot: $targetScoreSnapshot, ') + ..write('targetScoreTimeMsSnapshot: $targetScoreTimeMsSnapshot, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('completedAt: $completedAt, ') + ..write('actualTimeMs: $actualTimeMs, ') + ..write('actualReps: $actualReps, ') + ..write('actualScore: $actualScore, ') + ..write('actualScoreTimeMs: $actualScoreTimeMs, ') + ..write('note: $note, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + class $WorkoutTemplateProgramsTable extends WorkoutTemplatePrograms with TableInfo<$WorkoutTemplateProgramsTable, WorkoutTemplateProgram> { @override @@ -19962,6 +25521,12 @@ abstract class _$AppDatabase extends GeneratedDatabase { ); late final $ActiveWorkoutSessionsTable activeWorkoutSessions = $ActiveWorkoutSessionsTable(this); + late final $ActiveExerciseStepProgressStatesTable + activeExerciseStepProgressStates = $ActiveExerciseStepProgressStatesTable( + this, + ); + late final $ActiveExerciseStepResultsTable activeExerciseStepResults = + $ActiveExerciseStepResultsTable(this); late final $ActiveRestStatesTable activeRestStates = $ActiveRestStatesTable( this, ); @@ -19986,6 +25551,8 @@ abstract class _$AppDatabase extends GeneratedDatabase { ); late final $WorkoutHistorySetResultsTable workoutHistorySetResults = $WorkoutHistorySetResultsTable(this); + late final $WorkoutHistoryStepResultsTable workoutHistoryStepResults = + $WorkoutHistoryStepResultsTable(this); late final $WorkoutTemplateProgramsTable workoutTemplatePrograms = $WorkoutTemplateProgramsTable(this); late final $WorkoutTemplateExerciseOverridesTable @@ -19999,6 +25566,8 @@ abstract class _$AppDatabase extends GeneratedDatabase { List get allSchemaEntities => [ workoutTemplates, activeWorkoutSessions, + activeExerciseStepProgressStates, + activeExerciseStepResults, activeRestStates, activeScoreStopwatchStates, activeSetResults, @@ -20011,6 +25580,7 @@ abstract class _$AppDatabase extends GeneratedDatabase { programExercises, workoutHistories, workoutHistorySetResults, + workoutHistoryStepResults, workoutTemplatePrograms, workoutTemplateExerciseOverrides, ]; @@ -20811,6 +26381,70 @@ final class $$ActiveWorkoutSessionsTableReferences ); } + static MultiTypedResultKey< + $ActiveExerciseStepProgressStatesTable, + List + > + _activeExerciseStepProgressStatesRefsTable( + _$AppDatabase db, + ) => MultiTypedResultKey.fromTable( + db.activeExerciseStepProgressStates, + aliasName: + 'active_workout_sessions__id__active_exercise_step_progress_states__active_workout_session_id', + ); + + $$ActiveExerciseStepProgressStatesTableProcessedTableManager + get activeExerciseStepProgressStatesRefs { + final manager = + $$ActiveExerciseStepProgressStatesTableTableManager( + $_db, + $_db.activeExerciseStepProgressStates, + ).filter( + (f) => f.activeWorkoutSessionId.id.sqlEquals( + $_itemColumn('id')!, + ), + ); + + final cache = $_typedResult.readTableOrNull( + _activeExerciseStepProgressStatesRefsTable($_db), + ); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + + static MultiTypedResultKey< + $ActiveExerciseStepResultsTable, + List + > + _activeExerciseStepResultsRefsTable( + _$AppDatabase db, + ) => MultiTypedResultKey.fromTable( + db.activeExerciseStepResults, + aliasName: + 'active_workout_sessions__id__active_exercise_step_results__active_workout_session_id', + ); + + $$ActiveExerciseStepResultsTableProcessedTableManager + get activeExerciseStepResultsRefs { + final manager = + $$ActiveExerciseStepResultsTableTableManager( + $_db, + $_db.activeExerciseStepResults, + ).filter( + (f) => f.activeWorkoutSessionId.id.sqlEquals( + $_itemColumn('id')!, + ), + ); + + final cache = $_typedResult.readTableOrNull( + _activeExerciseStepResultsRefsTable($_db), + ); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + static MultiTypedResultKey<$ActiveRestStatesTable, List> _activeRestStatesRefsTable(_$AppDatabase db) => MultiTypedResultKey.fromTable( db.activeRestStates, @@ -21050,6 +26684,62 @@ class $$ActiveWorkoutSessionsTableFilterComposer return composer; } + Expression activeExerciseStepProgressStatesRefs( + Expression Function( + $$ActiveExerciseStepProgressStatesTableFilterComposer f, + ) + f, + ) { + final $$ActiveExerciseStepProgressStatesTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.activeExerciseStepProgressStates, + getReferencedColumn: (t) => t.activeWorkoutSessionId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveExerciseStepProgressStatesTableFilterComposer( + $db: $db, + $table: $db.activeExerciseStepProgressStates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression activeExerciseStepResultsRefs( + Expression Function($$ActiveExerciseStepResultsTableFilterComposer f) + f, + ) { + final $$ActiveExerciseStepResultsTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.activeExerciseStepResults, + getReferencedColumn: (t) => t.activeWorkoutSessionId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveExerciseStepResultsTableFilterComposer( + $db: $db, + $table: $db.activeExerciseStepResults, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + Expression activeRestStatesRefs( Expression Function($$ActiveRestStatesTableFilterComposer f) f, ) { @@ -21412,6 +27102,62 @@ class $$ActiveWorkoutSessionsTableAnnotationComposer return composer; } + Expression activeExerciseStepProgressStatesRefs( + Expression Function( + $$ActiveExerciseStepProgressStatesTableAnnotationComposer a, + ) + f, + ) { + final $$ActiveExerciseStepProgressStatesTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.activeExerciseStepProgressStates, + getReferencedColumn: (t) => t.activeWorkoutSessionId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveExerciseStepProgressStatesTableAnnotationComposer( + $db: $db, + $table: $db.activeExerciseStepProgressStates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression activeExerciseStepResultsRefs( + Expression Function($$ActiveExerciseStepResultsTableAnnotationComposer a) + f, + ) { + final $$ActiveExerciseStepResultsTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.activeExerciseStepResults, + getReferencedColumn: (t) => t.activeWorkoutSessionId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveExerciseStepResultsTableAnnotationComposer( + $db: $db, + $table: $db.activeExerciseStepResults, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + Expression activeRestStatesRefs( Expression Function($$ActiveRestStatesTableAnnotationComposer a) f, ) { @@ -21532,6 +27278,8 @@ class $$ActiveWorkoutSessionsTableTableManager ActiveWorkoutSession, PrefetchHooks Function({ bool sourceWorkoutTemplateId, + bool activeExerciseStepProgressStatesRefs, + bool activeExerciseStepResultsRefs, bool activeRestStatesRefs, bool activeScoreStopwatchStatesRefs, bool activeSetResultsRefs, @@ -21672,6 +27420,8 @@ class $$ActiveWorkoutSessionsTableTableManager prefetchHooksCallback: ({ sourceWorkoutTemplateId = false, + activeExerciseStepProgressStatesRefs = false, + activeExerciseStepResultsRefs = false, activeRestStatesRefs = false, activeScoreStopwatchStatesRefs = false, activeSetResultsRefs = false, @@ -21680,6 +27430,10 @@ class $$ActiveWorkoutSessionsTableTableManager return PrefetchHooks( db: db, explicitlyWatchedTables: [ + if (activeExerciseStepProgressStatesRefs) + db.activeExerciseStepProgressStates, + if (activeExerciseStepResultsRefs) + db.activeExerciseStepResults, if (activeRestStatesRefs) db.activeRestStates, if (activeScoreStopwatchStatesRefs) db.activeScoreStopwatchStates, @@ -21723,6 +27477,52 @@ class $$ActiveWorkoutSessionsTableTableManager }, getPrefetchedDataCallback: (items) async { return [ + if (activeExerciseStepProgressStatesRefs) + await $_getPrefetchedData< + ActiveWorkoutSession, + $ActiveWorkoutSessionsTable, + ActiveExerciseStepProgressState + >( + currentTable: table, + referencedTable: + $$ActiveWorkoutSessionsTableReferences + ._activeExerciseStepProgressStatesRefsTable( + db, + ), + managerFromTypedResult: (p0) => + $$ActiveWorkoutSessionsTableReferences( + db, + table, + p0, + ).activeExerciseStepProgressStatesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.activeWorkoutSessionId == item.id, + ), + typedResults: items, + ), + if (activeExerciseStepResultsRefs) + await $_getPrefetchedData< + ActiveWorkoutSession, + $ActiveWorkoutSessionsTable, + ActiveExerciseStepResult + >( + currentTable: table, + referencedTable: + $$ActiveWorkoutSessionsTableReferences + ._activeExerciseStepResultsRefsTable(db), + managerFromTypedResult: (p0) => + $$ActiveWorkoutSessionsTableReferences( + db, + table, + p0, + ).activeExerciseStepResultsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.activeWorkoutSessionId == item.id, + ), + typedResults: items, + ), if (activeRestStatesRefs) await $_getPrefetchedData< ActiveWorkoutSession, @@ -21834,12 +27634,1730 @@ typedef $$ActiveWorkoutSessionsTableProcessedTableManager = ActiveWorkoutSession, PrefetchHooks Function({ bool sourceWorkoutTemplateId, + bool activeExerciseStepProgressStatesRefs, + bool activeExerciseStepResultsRefs, bool activeRestStatesRefs, bool activeScoreStopwatchStatesRefs, bool activeSetResultsRefs, bool workoutHistoriesRefs, }) >; +typedef $$ActiveExerciseStepProgressStatesTableCreateCompanionBuilder = + ActiveExerciseStepProgressStatesCompanion Function({ + required String id, + required DateTime createdAt, + required DateTime updatedAt, + Value deletedAt, + Value schemaVersion, + required String syncState, + required int localRevision, + required String originDeviceId, + Value futureOwnerProfileId, + Value lastSyncedAt, + Value remoteRevision, + required String activeWorkoutSessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int currentPassageIndex, + required int currentStepIndex, + required String currentStepSnapshotId, + required String status, + Value startedAt, + required int accumulatedMs, + required DateTime lastTransitionAt, + Value rowid, + }); +typedef $$ActiveExerciseStepProgressStatesTableUpdateCompanionBuilder = + ActiveExerciseStepProgressStatesCompanion Function({ + Value id, + Value createdAt, + Value updatedAt, + Value deletedAt, + Value schemaVersion, + Value syncState, + Value localRevision, + Value originDeviceId, + Value futureOwnerProfileId, + Value lastSyncedAt, + Value remoteRevision, + Value activeWorkoutSessionId, + Value programIndex, + Value exerciseIndex, + Value setIndex, + Value currentPassageIndex, + Value currentStepIndex, + Value currentStepSnapshotId, + Value status, + Value startedAt, + Value accumulatedMs, + Value lastTransitionAt, + Value rowid, + }); + +final class $$ActiveExerciseStepProgressStatesTableReferences + extends + BaseReferences< + _$AppDatabase, + $ActiveExerciseStepProgressStatesTable, + ActiveExerciseStepProgressState + > { + $$ActiveExerciseStepProgressStatesTableReferences( + super.$_db, + super.$_table, + super.$_typedResult, + ); + + static $ActiveWorkoutSessionsTable _activeWorkoutSessionIdTable( + _$AppDatabase db, + ) => db.activeWorkoutSessions.createAlias( + 'active_exercise_step_progress_states__active_workout_session_id__active_workout_sessions__id', + ); + + $$ActiveWorkoutSessionsTableProcessedTableManager get activeWorkoutSessionId { + final $_column = $_itemColumn('active_workout_session_id')!; + + final manager = $$ActiveWorkoutSessionsTableTableManager( + $_db, + $_db.activeWorkoutSessions, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull( + _activeWorkoutSessionIdTable($_db), + ); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } +} + +class $$ActiveExerciseStepProgressStatesTableFilterComposer + extends Composer<_$AppDatabase, $ActiveExerciseStepProgressStatesTable> { + $$ActiveExerciseStepProgressStatesTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get deletedAt => $composableBuilder( + column: $table.deletedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get schemaVersion => $composableBuilder( + column: $table.schemaVersion, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get syncState => $composableBuilder( + column: $table.syncState, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get localRevision => $composableBuilder( + column: $table.localRevision, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get originDeviceId => $composableBuilder( + column: $table.originDeviceId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get futureOwnerProfileId => $composableBuilder( + column: $table.futureOwnerProfileId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get remoteRevision => $composableBuilder( + column: $table.remoteRevision, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get programIndex => $composableBuilder( + column: $table.programIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get exerciseIndex => $composableBuilder( + column: $table.exerciseIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get setIndex => $composableBuilder( + column: $table.setIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get currentPassageIndex => $composableBuilder( + column: $table.currentPassageIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get currentStepIndex => $composableBuilder( + column: $table.currentStepIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get currentStepSnapshotId => $composableBuilder( + column: $table.currentStepSnapshotId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get status => $composableBuilder( + column: $table.status, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get startedAt => $composableBuilder( + column: $table.startedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get accumulatedMs => $composableBuilder( + column: $table.accumulatedMs, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get lastTransitionAt => $composableBuilder( + column: $table.lastTransitionAt, + builder: (column) => ColumnFilters(column), + ); + + $$ActiveWorkoutSessionsTableFilterComposer get activeWorkoutSessionId { + final $$ActiveWorkoutSessionsTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.activeWorkoutSessionId, + referencedTable: $db.activeWorkoutSessions, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveWorkoutSessionsTableFilterComposer( + $db: $db, + $table: $db.activeWorkoutSessions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$ActiveExerciseStepProgressStatesTableOrderingComposer + extends Composer<_$AppDatabase, $ActiveExerciseStepProgressStatesTable> { + $$ActiveExerciseStepProgressStatesTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get deletedAt => $composableBuilder( + column: $table.deletedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get schemaVersion => $composableBuilder( + column: $table.schemaVersion, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get syncState => $composableBuilder( + column: $table.syncState, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get localRevision => $composableBuilder( + column: $table.localRevision, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get originDeviceId => $composableBuilder( + column: $table.originDeviceId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get futureOwnerProfileId => $composableBuilder( + column: $table.futureOwnerProfileId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get remoteRevision => $composableBuilder( + column: $table.remoteRevision, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get programIndex => $composableBuilder( + column: $table.programIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get exerciseIndex => $composableBuilder( + column: $table.exerciseIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get setIndex => $composableBuilder( + column: $table.setIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get currentPassageIndex => $composableBuilder( + column: $table.currentPassageIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get currentStepIndex => $composableBuilder( + column: $table.currentStepIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get currentStepSnapshotId => $composableBuilder( + column: $table.currentStepSnapshotId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get status => $composableBuilder( + column: $table.status, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get startedAt => $composableBuilder( + column: $table.startedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get accumulatedMs => $composableBuilder( + column: $table.accumulatedMs, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get lastTransitionAt => $composableBuilder( + column: $table.lastTransitionAt, + builder: (column) => ColumnOrderings(column), + ); + + $$ActiveWorkoutSessionsTableOrderingComposer get activeWorkoutSessionId { + final $$ActiveWorkoutSessionsTableOrderingComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.activeWorkoutSessionId, + referencedTable: $db.activeWorkoutSessions, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveWorkoutSessionsTableOrderingComposer( + $db: $db, + $table: $db.activeWorkoutSessions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$ActiveExerciseStepProgressStatesTableAnnotationComposer + extends Composer<_$AppDatabase, $ActiveExerciseStepProgressStatesTable> { + $$ActiveExerciseStepProgressStatesTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + GeneratedColumn get updatedAt => + $composableBuilder(column: $table.updatedAt, builder: (column) => column); + + GeneratedColumn get deletedAt => + $composableBuilder(column: $table.deletedAt, builder: (column) => column); + + GeneratedColumn get schemaVersion => $composableBuilder( + column: $table.schemaVersion, + builder: (column) => column, + ); + + GeneratedColumn get syncState => + $composableBuilder(column: $table.syncState, builder: (column) => column); + + GeneratedColumn get localRevision => $composableBuilder( + column: $table.localRevision, + builder: (column) => column, + ); + + GeneratedColumn get originDeviceId => $composableBuilder( + column: $table.originDeviceId, + builder: (column) => column, + ); + + GeneratedColumn get futureOwnerProfileId => $composableBuilder( + column: $table.futureOwnerProfileId, + builder: (column) => column, + ); + + GeneratedColumn get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => column, + ); + + GeneratedColumn get remoteRevision => $composableBuilder( + column: $table.remoteRevision, + builder: (column) => column, + ); + + GeneratedColumn get programIndex => $composableBuilder( + column: $table.programIndex, + builder: (column) => column, + ); + + GeneratedColumn get exerciseIndex => $composableBuilder( + column: $table.exerciseIndex, + builder: (column) => column, + ); + + GeneratedColumn get setIndex => + $composableBuilder(column: $table.setIndex, builder: (column) => column); + + GeneratedColumn get currentPassageIndex => $composableBuilder( + column: $table.currentPassageIndex, + builder: (column) => column, + ); + + GeneratedColumn get currentStepIndex => $composableBuilder( + column: $table.currentStepIndex, + builder: (column) => column, + ); + + GeneratedColumn get currentStepSnapshotId => $composableBuilder( + column: $table.currentStepSnapshotId, + builder: (column) => column, + ); + + GeneratedColumn get status => + $composableBuilder(column: $table.status, builder: (column) => column); + + GeneratedColumn get startedAt => + $composableBuilder(column: $table.startedAt, builder: (column) => column); + + GeneratedColumn get accumulatedMs => $composableBuilder( + column: $table.accumulatedMs, + builder: (column) => column, + ); + + GeneratedColumn get lastTransitionAt => $composableBuilder( + column: $table.lastTransitionAt, + builder: (column) => column, + ); + + $$ActiveWorkoutSessionsTableAnnotationComposer get activeWorkoutSessionId { + final $$ActiveWorkoutSessionsTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.activeWorkoutSessionId, + referencedTable: $db.activeWorkoutSessions, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveWorkoutSessionsTableAnnotationComposer( + $db: $db, + $table: $db.activeWorkoutSessions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$ActiveExerciseStepProgressStatesTableTableManager + extends + RootTableManager< + _$AppDatabase, + $ActiveExerciseStepProgressStatesTable, + ActiveExerciseStepProgressState, + $$ActiveExerciseStepProgressStatesTableFilterComposer, + $$ActiveExerciseStepProgressStatesTableOrderingComposer, + $$ActiveExerciseStepProgressStatesTableAnnotationComposer, + $$ActiveExerciseStepProgressStatesTableCreateCompanionBuilder, + $$ActiveExerciseStepProgressStatesTableUpdateCompanionBuilder, + ( + ActiveExerciseStepProgressState, + $$ActiveExerciseStepProgressStatesTableReferences, + ), + ActiveExerciseStepProgressState, + PrefetchHooks Function({bool activeWorkoutSessionId}) + > { + $$ActiveExerciseStepProgressStatesTableTableManager( + _$AppDatabase db, + $ActiveExerciseStepProgressStatesTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$ActiveExerciseStepProgressStatesTableFilterComposer( + $db: db, + $table: table, + ), + createOrderingComposer: () => + $$ActiveExerciseStepProgressStatesTableOrderingComposer( + $db: db, + $table: table, + ), + createComputedFieldComposer: () => + $$ActiveExerciseStepProgressStatesTableAnnotationComposer( + $db: db, + $table: table, + ), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value createdAt = const Value.absent(), + Value updatedAt = const Value.absent(), + Value deletedAt = const Value.absent(), + Value schemaVersion = const Value.absent(), + Value syncState = const Value.absent(), + Value localRevision = const Value.absent(), + Value originDeviceId = const Value.absent(), + Value futureOwnerProfileId = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value remoteRevision = const Value.absent(), + Value activeWorkoutSessionId = const Value.absent(), + Value programIndex = const Value.absent(), + Value exerciseIndex = const Value.absent(), + Value setIndex = const Value.absent(), + Value currentPassageIndex = const Value.absent(), + Value currentStepIndex = const Value.absent(), + Value currentStepSnapshotId = const Value.absent(), + Value status = const Value.absent(), + Value startedAt = const Value.absent(), + Value accumulatedMs = const Value.absent(), + Value lastTransitionAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => ActiveExerciseStepProgressStatesCompanion( + id: id, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + schemaVersion: schemaVersion, + syncState: syncState, + localRevision: localRevision, + originDeviceId: originDeviceId, + futureOwnerProfileId: futureOwnerProfileId, + lastSyncedAt: lastSyncedAt, + remoteRevision: remoteRevision, + activeWorkoutSessionId: activeWorkoutSessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + currentPassageIndex: currentPassageIndex, + currentStepIndex: currentStepIndex, + currentStepSnapshotId: currentStepSnapshotId, + status: status, + startedAt: startedAt, + accumulatedMs: accumulatedMs, + lastTransitionAt: lastTransitionAt, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String id, + required DateTime createdAt, + required DateTime updatedAt, + Value deletedAt = const Value.absent(), + Value schemaVersion = const Value.absent(), + required String syncState, + required int localRevision, + required String originDeviceId, + Value futureOwnerProfileId = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value remoteRevision = const Value.absent(), + required String activeWorkoutSessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int currentPassageIndex, + required int currentStepIndex, + required String currentStepSnapshotId, + required String status, + Value startedAt = const Value.absent(), + required int accumulatedMs, + required DateTime lastTransitionAt, + Value rowid = const Value.absent(), + }) => ActiveExerciseStepProgressStatesCompanion.insert( + id: id, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + schemaVersion: schemaVersion, + syncState: syncState, + localRevision: localRevision, + originDeviceId: originDeviceId, + futureOwnerProfileId: futureOwnerProfileId, + lastSyncedAt: lastSyncedAt, + remoteRevision: remoteRevision, + activeWorkoutSessionId: activeWorkoutSessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + currentPassageIndex: currentPassageIndex, + currentStepIndex: currentStepIndex, + currentStepSnapshotId: currentStepSnapshotId, + status: status, + startedAt: startedAt, + accumulatedMs: accumulatedMs, + lastTransitionAt: lastTransitionAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map( + (e) => ( + e.readTable(table), + $$ActiveExerciseStepProgressStatesTableReferences( + db, + table, + e, + ), + ), + ) + .toList(), + prefetchHooksCallback: ({activeWorkoutSessionId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: + < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (activeWorkoutSessionId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.activeWorkoutSessionId, + referencedTable: + $$ActiveExerciseStepProgressStatesTableReferences + ._activeWorkoutSessionIdTable(db), + referencedColumn: + $$ActiveExerciseStepProgressStatesTableReferences + ._activeWorkoutSessionIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + ), + ); +} + +typedef $$ActiveExerciseStepProgressStatesTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $ActiveExerciseStepProgressStatesTable, + ActiveExerciseStepProgressState, + $$ActiveExerciseStepProgressStatesTableFilterComposer, + $$ActiveExerciseStepProgressStatesTableOrderingComposer, + $$ActiveExerciseStepProgressStatesTableAnnotationComposer, + $$ActiveExerciseStepProgressStatesTableCreateCompanionBuilder, + $$ActiveExerciseStepProgressStatesTableUpdateCompanionBuilder, + ( + ActiveExerciseStepProgressState, + $$ActiveExerciseStepProgressStatesTableReferences, + ), + ActiveExerciseStepProgressState, + PrefetchHooks Function({bool activeWorkoutSessionId}) + >; +typedef $$ActiveExerciseStepResultsTableCreateCompanionBuilder = + ActiveExerciseStepResultsCompanion Function({ + required String id, + required DateTime createdAt, + required DateTime updatedAt, + Value deletedAt, + Value schemaVersion, + required String syncState, + required int localRevision, + required String originDeviceId, + Value futureOwnerProfileId, + Value lastSyncedAt, + Value remoteRevision, + required String activeWorkoutSessionId, + required String programSnapshotId, + required String exerciseSnapshotId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required String stepSnapshotId, + required String stepNameSnapshot, + required String stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + Value scoreInputModeSnapshot, + Value scoreLabelSnapshot, + Value scoreUnitSnapshot, + Value targetScoreSnapshot, + Value targetScoreTimeMsSnapshot, + required String status, + Value startedAt, + Value completedAt, + Value actualTimeMs, + Value actualReps, + Value actualScore, + Value actualScoreTimeMs, + Value note, + Value rowid, + }); +typedef $$ActiveExerciseStepResultsTableUpdateCompanionBuilder = + ActiveExerciseStepResultsCompanion Function({ + Value id, + Value createdAt, + Value updatedAt, + Value deletedAt, + Value schemaVersion, + Value syncState, + Value localRevision, + Value originDeviceId, + Value futureOwnerProfileId, + Value lastSyncedAt, + Value remoteRevision, + Value activeWorkoutSessionId, + Value programSnapshotId, + Value exerciseSnapshotId, + Value programIndex, + Value exerciseIndex, + Value setIndex, + Value passageIndex, + Value stepIndex, + Value stepSnapshotId, + Value stepNameSnapshot, + Value stepTypeSnapshot, + Value targetValueSnapshot, + Value hasScoreSnapshot, + Value scoreInputModeSnapshot, + Value scoreLabelSnapshot, + Value scoreUnitSnapshot, + Value targetScoreSnapshot, + Value targetScoreTimeMsSnapshot, + Value status, + Value startedAt, + Value completedAt, + Value actualTimeMs, + Value actualReps, + Value actualScore, + Value actualScoreTimeMs, + Value note, + Value rowid, + }); + +final class $$ActiveExerciseStepResultsTableReferences + extends + BaseReferences< + _$AppDatabase, + $ActiveExerciseStepResultsTable, + ActiveExerciseStepResult + > { + $$ActiveExerciseStepResultsTableReferences( + super.$_db, + super.$_table, + super.$_typedResult, + ); + + static $ActiveWorkoutSessionsTable _activeWorkoutSessionIdTable( + _$AppDatabase db, + ) => db.activeWorkoutSessions.createAlias( + 'active_exercise_step_results__active_workout_session_id__active_workout_sessions__id', + ); + + $$ActiveWorkoutSessionsTableProcessedTableManager get activeWorkoutSessionId { + final $_column = $_itemColumn('active_workout_session_id')!; + + final manager = $$ActiveWorkoutSessionsTableTableManager( + $_db, + $_db.activeWorkoutSessions, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull( + _activeWorkoutSessionIdTable($_db), + ); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } +} + +class $$ActiveExerciseStepResultsTableFilterComposer + extends Composer<_$AppDatabase, $ActiveExerciseStepResultsTable> { + $$ActiveExerciseStepResultsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get deletedAt => $composableBuilder( + column: $table.deletedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get schemaVersion => $composableBuilder( + column: $table.schemaVersion, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get syncState => $composableBuilder( + column: $table.syncState, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get localRevision => $composableBuilder( + column: $table.localRevision, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get originDeviceId => $composableBuilder( + column: $table.originDeviceId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get futureOwnerProfileId => $composableBuilder( + column: $table.futureOwnerProfileId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get remoteRevision => $composableBuilder( + column: $table.remoteRevision, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get programSnapshotId => $composableBuilder( + column: $table.programSnapshotId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get exerciseSnapshotId => $composableBuilder( + column: $table.exerciseSnapshotId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get programIndex => $composableBuilder( + column: $table.programIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get exerciseIndex => $composableBuilder( + column: $table.exerciseIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get setIndex => $composableBuilder( + column: $table.setIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get passageIndex => $composableBuilder( + column: $table.passageIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepIndex => $composableBuilder( + column: $table.stepIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepSnapshotId => $composableBuilder( + column: $table.stepSnapshotId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepNameSnapshot => $composableBuilder( + column: $table.stepNameSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepTypeSnapshot => $composableBuilder( + column: $table.stepTypeSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get targetValueSnapshot => $composableBuilder( + column: $table.targetValueSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get hasScoreSnapshot => $composableBuilder( + column: $table.hasScoreSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get scoreLabelSnapshot => $composableBuilder( + column: $table.scoreLabelSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get scoreUnitSnapshot => $composableBuilder( + column: $table.scoreUnitSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get targetScoreSnapshot => $composableBuilder( + column: $table.targetScoreSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get status => $composableBuilder( + column: $table.status, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get startedAt => $composableBuilder( + column: $table.startedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualTimeMs => $composableBuilder( + column: $table.actualTimeMs, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualReps => $composableBuilder( + column: $table.actualReps, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualScore => $composableBuilder( + column: $table.actualScore, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get note => $composableBuilder( + column: $table.note, + builder: (column) => ColumnFilters(column), + ); + + $$ActiveWorkoutSessionsTableFilterComposer get activeWorkoutSessionId { + final $$ActiveWorkoutSessionsTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.activeWorkoutSessionId, + referencedTable: $db.activeWorkoutSessions, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveWorkoutSessionsTableFilterComposer( + $db: $db, + $table: $db.activeWorkoutSessions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$ActiveExerciseStepResultsTableOrderingComposer + extends Composer<_$AppDatabase, $ActiveExerciseStepResultsTable> { + $$ActiveExerciseStepResultsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get deletedAt => $composableBuilder( + column: $table.deletedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get schemaVersion => $composableBuilder( + column: $table.schemaVersion, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get syncState => $composableBuilder( + column: $table.syncState, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get localRevision => $composableBuilder( + column: $table.localRevision, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get originDeviceId => $composableBuilder( + column: $table.originDeviceId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get futureOwnerProfileId => $composableBuilder( + column: $table.futureOwnerProfileId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get remoteRevision => $composableBuilder( + column: $table.remoteRevision, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get programSnapshotId => $composableBuilder( + column: $table.programSnapshotId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get exerciseSnapshotId => $composableBuilder( + column: $table.exerciseSnapshotId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get programIndex => $composableBuilder( + column: $table.programIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get exerciseIndex => $composableBuilder( + column: $table.exerciseIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get setIndex => $composableBuilder( + column: $table.setIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get passageIndex => $composableBuilder( + column: $table.passageIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepIndex => $composableBuilder( + column: $table.stepIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepSnapshotId => $composableBuilder( + column: $table.stepSnapshotId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepNameSnapshot => $composableBuilder( + column: $table.stepNameSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepTypeSnapshot => $composableBuilder( + column: $table.stepTypeSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get targetValueSnapshot => $composableBuilder( + column: $table.targetValueSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get hasScoreSnapshot => $composableBuilder( + column: $table.hasScoreSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get scoreLabelSnapshot => $composableBuilder( + column: $table.scoreLabelSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get scoreUnitSnapshot => $composableBuilder( + column: $table.scoreUnitSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get targetScoreSnapshot => $composableBuilder( + column: $table.targetScoreSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get status => $composableBuilder( + column: $table.status, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get startedAt => $composableBuilder( + column: $table.startedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualTimeMs => $composableBuilder( + column: $table.actualTimeMs, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualReps => $composableBuilder( + column: $table.actualReps, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualScore => $composableBuilder( + column: $table.actualScore, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get note => $composableBuilder( + column: $table.note, + builder: (column) => ColumnOrderings(column), + ); + + $$ActiveWorkoutSessionsTableOrderingComposer get activeWorkoutSessionId { + final $$ActiveWorkoutSessionsTableOrderingComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.activeWorkoutSessionId, + referencedTable: $db.activeWorkoutSessions, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveWorkoutSessionsTableOrderingComposer( + $db: $db, + $table: $db.activeWorkoutSessions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$ActiveExerciseStepResultsTableAnnotationComposer + extends Composer<_$AppDatabase, $ActiveExerciseStepResultsTable> { + $$ActiveExerciseStepResultsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + GeneratedColumn get updatedAt => + $composableBuilder(column: $table.updatedAt, builder: (column) => column); + + GeneratedColumn get deletedAt => + $composableBuilder(column: $table.deletedAt, builder: (column) => column); + + GeneratedColumn get schemaVersion => $composableBuilder( + column: $table.schemaVersion, + builder: (column) => column, + ); + + GeneratedColumn get syncState => + $composableBuilder(column: $table.syncState, builder: (column) => column); + + GeneratedColumn get localRevision => $composableBuilder( + column: $table.localRevision, + builder: (column) => column, + ); + + GeneratedColumn get originDeviceId => $composableBuilder( + column: $table.originDeviceId, + builder: (column) => column, + ); + + GeneratedColumn get futureOwnerProfileId => $composableBuilder( + column: $table.futureOwnerProfileId, + builder: (column) => column, + ); + + GeneratedColumn get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => column, + ); + + GeneratedColumn get remoteRevision => $composableBuilder( + column: $table.remoteRevision, + builder: (column) => column, + ); + + GeneratedColumn get programSnapshotId => $composableBuilder( + column: $table.programSnapshotId, + builder: (column) => column, + ); + + GeneratedColumn get exerciseSnapshotId => $composableBuilder( + column: $table.exerciseSnapshotId, + builder: (column) => column, + ); + + GeneratedColumn get programIndex => $composableBuilder( + column: $table.programIndex, + builder: (column) => column, + ); + + GeneratedColumn get exerciseIndex => $composableBuilder( + column: $table.exerciseIndex, + builder: (column) => column, + ); + + GeneratedColumn get setIndex => + $composableBuilder(column: $table.setIndex, builder: (column) => column); + + GeneratedColumn get passageIndex => $composableBuilder( + column: $table.passageIndex, + builder: (column) => column, + ); + + GeneratedColumn get stepIndex => + $composableBuilder(column: $table.stepIndex, builder: (column) => column); + + GeneratedColumn get stepSnapshotId => $composableBuilder( + column: $table.stepSnapshotId, + builder: (column) => column, + ); + + GeneratedColumn get stepNameSnapshot => $composableBuilder( + column: $table.stepNameSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get stepTypeSnapshot => $composableBuilder( + column: $table.stepTypeSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get targetValueSnapshot => $composableBuilder( + column: $table.targetValueSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get hasScoreSnapshot => $composableBuilder( + column: $table.hasScoreSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get scoreLabelSnapshot => $composableBuilder( + column: $table.scoreLabelSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get scoreUnitSnapshot => $composableBuilder( + column: $table.scoreUnitSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get targetScoreSnapshot => $composableBuilder( + column: $table.targetScoreSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get status => + $composableBuilder(column: $table.status, builder: (column) => column); + + GeneratedColumn get startedAt => + $composableBuilder(column: $table.startedAt, builder: (column) => column); + + GeneratedColumn get completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => column, + ); + + GeneratedColumn get actualTimeMs => $composableBuilder( + column: $table.actualTimeMs, + builder: (column) => column, + ); + + GeneratedColumn get actualReps => $composableBuilder( + column: $table.actualReps, + builder: (column) => column, + ); + + GeneratedColumn get actualScore => $composableBuilder( + column: $table.actualScore, + builder: (column) => column, + ); + + GeneratedColumn get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => column, + ); + + GeneratedColumn get note => + $composableBuilder(column: $table.note, builder: (column) => column); + + $$ActiveWorkoutSessionsTableAnnotationComposer get activeWorkoutSessionId { + final $$ActiveWorkoutSessionsTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.activeWorkoutSessionId, + referencedTable: $db.activeWorkoutSessions, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveWorkoutSessionsTableAnnotationComposer( + $db: $db, + $table: $db.activeWorkoutSessions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$ActiveExerciseStepResultsTableTableManager + extends + RootTableManager< + _$AppDatabase, + $ActiveExerciseStepResultsTable, + ActiveExerciseStepResult, + $$ActiveExerciseStepResultsTableFilterComposer, + $$ActiveExerciseStepResultsTableOrderingComposer, + $$ActiveExerciseStepResultsTableAnnotationComposer, + $$ActiveExerciseStepResultsTableCreateCompanionBuilder, + $$ActiveExerciseStepResultsTableUpdateCompanionBuilder, + ( + ActiveExerciseStepResult, + $$ActiveExerciseStepResultsTableReferences, + ), + ActiveExerciseStepResult, + PrefetchHooks Function({bool activeWorkoutSessionId}) + > { + $$ActiveExerciseStepResultsTableTableManager( + _$AppDatabase db, + $ActiveExerciseStepResultsTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$ActiveExerciseStepResultsTableFilterComposer( + $db: db, + $table: table, + ), + createOrderingComposer: () => + $$ActiveExerciseStepResultsTableOrderingComposer( + $db: db, + $table: table, + ), + createComputedFieldComposer: () => + $$ActiveExerciseStepResultsTableAnnotationComposer( + $db: db, + $table: table, + ), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value createdAt = const Value.absent(), + Value updatedAt = const Value.absent(), + Value deletedAt = const Value.absent(), + Value schemaVersion = const Value.absent(), + Value syncState = const Value.absent(), + Value localRevision = const Value.absent(), + Value originDeviceId = const Value.absent(), + Value futureOwnerProfileId = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value remoteRevision = const Value.absent(), + Value activeWorkoutSessionId = const Value.absent(), + Value programSnapshotId = const Value.absent(), + Value exerciseSnapshotId = const Value.absent(), + Value programIndex = const Value.absent(), + Value exerciseIndex = const Value.absent(), + Value setIndex = const Value.absent(), + Value passageIndex = const Value.absent(), + Value stepIndex = const Value.absent(), + Value stepSnapshotId = const Value.absent(), + Value stepNameSnapshot = const Value.absent(), + Value stepTypeSnapshot = const Value.absent(), + Value targetValueSnapshot = const Value.absent(), + Value hasScoreSnapshot = const Value.absent(), + Value scoreInputModeSnapshot = const Value.absent(), + Value scoreLabelSnapshot = const Value.absent(), + Value scoreUnitSnapshot = const Value.absent(), + Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), + Value status = const Value.absent(), + Value startedAt = const Value.absent(), + Value completedAt = const Value.absent(), + Value actualTimeMs = const Value.absent(), + Value actualReps = const Value.absent(), + Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value note = const Value.absent(), + Value rowid = const Value.absent(), + }) => ActiveExerciseStepResultsCompanion( + id: id, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + schemaVersion: schemaVersion, + syncState: syncState, + localRevision: localRevision, + originDeviceId: originDeviceId, + futureOwnerProfileId: futureOwnerProfileId, + lastSyncedAt: lastSyncedAt, + remoteRevision: remoteRevision, + activeWorkoutSessionId: activeWorkoutSessionId, + programSnapshotId: programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + passageIndex: passageIndex, + stepIndex: stepIndex, + stepSnapshotId: stepSnapshotId, + stepNameSnapshot: stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, + status: status, + startedAt: startedAt, + completedAt: completedAt, + actualTimeMs: actualTimeMs, + actualReps: actualReps, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + note: note, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String id, + required DateTime createdAt, + required DateTime updatedAt, + Value deletedAt = const Value.absent(), + Value schemaVersion = const Value.absent(), + required String syncState, + required int localRevision, + required String originDeviceId, + Value futureOwnerProfileId = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value remoteRevision = const Value.absent(), + required String activeWorkoutSessionId, + required String programSnapshotId, + required String exerciseSnapshotId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required String stepSnapshotId, + required String stepNameSnapshot, + required String stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + Value scoreInputModeSnapshot = const Value.absent(), + Value scoreLabelSnapshot = const Value.absent(), + Value scoreUnitSnapshot = const Value.absent(), + Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), + required String status, + Value startedAt = const Value.absent(), + Value completedAt = const Value.absent(), + Value actualTimeMs = const Value.absent(), + Value actualReps = const Value.absent(), + Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value note = const Value.absent(), + Value rowid = const Value.absent(), + }) => ActiveExerciseStepResultsCompanion.insert( + id: id, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + schemaVersion: schemaVersion, + syncState: syncState, + localRevision: localRevision, + originDeviceId: originDeviceId, + futureOwnerProfileId: futureOwnerProfileId, + lastSyncedAt: lastSyncedAt, + remoteRevision: remoteRevision, + activeWorkoutSessionId: activeWorkoutSessionId, + programSnapshotId: programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + passageIndex: passageIndex, + stepIndex: stepIndex, + stepSnapshotId: stepSnapshotId, + stepNameSnapshot: stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, + status: status, + startedAt: startedAt, + completedAt: completedAt, + actualTimeMs: actualTimeMs, + actualReps: actualReps, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + note: note, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map( + (e) => ( + e.readTable(table), + $$ActiveExerciseStepResultsTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({activeWorkoutSessionId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: + < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (activeWorkoutSessionId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.activeWorkoutSessionId, + referencedTable: + $$ActiveExerciseStepResultsTableReferences + ._activeWorkoutSessionIdTable(db), + referencedColumn: + $$ActiveExerciseStepResultsTableReferences + ._activeWorkoutSessionIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + ), + ); +} + +typedef $$ActiveExerciseStepResultsTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $ActiveExerciseStepResultsTable, + ActiveExerciseStepResult, + $$ActiveExerciseStepResultsTableFilterComposer, + $$ActiveExerciseStepResultsTableOrderingComposer, + $$ActiveExerciseStepResultsTableAnnotationComposer, + $$ActiveExerciseStepResultsTableCreateCompanionBuilder, + $$ActiveExerciseStepResultsTableUpdateCompanionBuilder, + (ActiveExerciseStepResult, $$ActiveExerciseStepResultsTableReferences), + ActiveExerciseStepResult, + PrefetchHooks Function({bool activeWorkoutSessionId}) + >; typedef $$ActiveRestStatesTableCreateCompanionBuilder = ActiveRestStatesCompanion Function({ required String id, @@ -29627,6 +37145,36 @@ final class $$WorkoutHistoriesTableReferences manager.$state.copyWith(prefetchedData: cache), ); } + + static MultiTypedResultKey< + $WorkoutHistoryStepResultsTable, + List + > + _workoutHistoryStepResultsRefsTable( + _$AppDatabase db, + ) => MultiTypedResultKey.fromTable( + db.workoutHistoryStepResults, + aliasName: + 'workout_history__id__workout_history_step_results__workout_history_id', + ); + + $$WorkoutHistoryStepResultsTableProcessedTableManager + get workoutHistoryStepResultsRefs { + final manager = + $$WorkoutHistoryStepResultsTableTableManager( + $_db, + $_db.workoutHistoryStepResults, + ).filter( + (f) => f.workoutHistoryId.id.sqlEquals($_itemColumn('id')!), + ); + + final cache = $_typedResult.readTableOrNull( + _workoutHistoryStepResultsRefsTable($_db), + ); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } } class $$WorkoutHistoriesTableFilterComposer @@ -29796,6 +37344,33 @@ class $$WorkoutHistoriesTableFilterComposer ); return f(composer); } + + Expression workoutHistoryStepResultsRefs( + Expression Function($$WorkoutHistoryStepResultsTableFilterComposer f) + f, + ) { + final $$WorkoutHistoryStepResultsTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.workoutHistoryStepResults, + getReferencedColumn: (t) => t.workoutHistoryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$WorkoutHistoryStepResultsTableFilterComposer( + $db: $db, + $table: $db.workoutHistoryStepResults, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } } class $$WorkoutHistoriesTableOrderingComposer @@ -30093,6 +37668,33 @@ class $$WorkoutHistoriesTableAnnotationComposer ); return f(composer); } + + Expression workoutHistoryStepResultsRefs( + Expression Function($$WorkoutHistoryStepResultsTableAnnotationComposer a) + f, + ) { + final $$WorkoutHistoryStepResultsTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.workoutHistoryStepResults, + getReferencedColumn: (t) => t.workoutHistoryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$WorkoutHistoryStepResultsTableAnnotationComposer( + $db: $db, + $table: $db.workoutHistoryStepResults, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } } class $$WorkoutHistoriesTableTableManager @@ -30112,6 +37714,7 @@ class $$WorkoutHistoriesTableTableManager bool sourceWorkoutTemplateId, bool sourceActiveWorkoutSessionId, bool workoutHistorySetResultsRefs, + bool workoutHistoryStepResultsRefs, }) > { $$WorkoutHistoriesTableTableManager( @@ -30230,12 +37833,15 @@ class $$WorkoutHistoriesTableTableManager sourceWorkoutTemplateId = false, sourceActiveWorkoutSessionId = false, workoutHistorySetResultsRefs = false, + workoutHistoryStepResultsRefs = false, }) { return PrefetchHooks( db: db, explicitlyWatchedTables: [ if (workoutHistorySetResultsRefs) db.workoutHistorySetResults, + if (workoutHistoryStepResultsRefs) + db.workoutHistoryStepResults, ], addJoins: < @@ -30315,6 +37921,27 @@ class $$WorkoutHistoriesTableTableManager ), typedResults: items, ), + if (workoutHistoryStepResultsRefs) + await $_getPrefetchedData< + WorkoutHistory, + $WorkoutHistoriesTable, + WorkoutHistoryStepResult + >( + currentTable: table, + referencedTable: $$WorkoutHistoriesTableReferences + ._workoutHistoryStepResultsRefsTable(db), + managerFromTypedResult: (p0) => + $$WorkoutHistoriesTableReferences( + db, + table, + p0, + ).workoutHistoryStepResultsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.workoutHistoryId == item.id, + ), + typedResults: items, + ), ]; }, ); @@ -30339,6 +37966,7 @@ typedef $$WorkoutHistoriesTableProcessedTableManager = bool sourceWorkoutTemplateId, bool sourceActiveWorkoutSessionId, bool workoutHistorySetResultsRefs, + bool workoutHistoryStepResultsRefs, }) >; typedef $$WorkoutHistorySetResultsTableCreateCompanionBuilder = @@ -31325,6 +38953,1010 @@ typedef $$WorkoutHistorySetResultsTableProcessedTableManager = WorkoutHistorySetResult, PrefetchHooks Function({bool workoutHistoryId}) >; +typedef $$WorkoutHistoryStepResultsTableCreateCompanionBuilder = + WorkoutHistoryStepResultsCompanion Function({ + required String id, + required DateTime createdAt, + required DateTime updatedAt, + Value deletedAt, + Value schemaVersion, + required String syncState, + required int localRevision, + required String originDeviceId, + Value futureOwnerProfileId, + Value lastSyncedAt, + Value remoteRevision, + required String workoutHistoryId, + required String programSnapshotId, + required String exerciseSnapshotId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required String stepSnapshotId, + required String stepNameSnapshot, + required String stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + Value scoreInputModeSnapshot, + Value scoreLabelSnapshot, + Value scoreUnitSnapshot, + Value targetScoreSnapshot, + Value targetScoreTimeMsSnapshot, + required String status, + Value startedAt, + Value completedAt, + Value actualTimeMs, + Value actualReps, + Value actualScore, + Value actualScoreTimeMs, + Value note, + Value rowid, + }); +typedef $$WorkoutHistoryStepResultsTableUpdateCompanionBuilder = + WorkoutHistoryStepResultsCompanion Function({ + Value id, + Value createdAt, + Value updatedAt, + Value deletedAt, + Value schemaVersion, + Value syncState, + Value localRevision, + Value originDeviceId, + Value futureOwnerProfileId, + Value lastSyncedAt, + Value remoteRevision, + Value workoutHistoryId, + Value programSnapshotId, + Value exerciseSnapshotId, + Value programIndex, + Value exerciseIndex, + Value setIndex, + Value passageIndex, + Value stepIndex, + Value stepSnapshotId, + Value stepNameSnapshot, + Value stepTypeSnapshot, + Value targetValueSnapshot, + Value hasScoreSnapshot, + Value scoreInputModeSnapshot, + Value scoreLabelSnapshot, + Value scoreUnitSnapshot, + Value targetScoreSnapshot, + Value targetScoreTimeMsSnapshot, + Value status, + Value startedAt, + Value completedAt, + Value actualTimeMs, + Value actualReps, + Value actualScore, + Value actualScoreTimeMs, + Value note, + Value rowid, + }); + +final class $$WorkoutHistoryStepResultsTableReferences + extends + BaseReferences< + _$AppDatabase, + $WorkoutHistoryStepResultsTable, + WorkoutHistoryStepResult + > { + $$WorkoutHistoryStepResultsTableReferences( + super.$_db, + super.$_table, + super.$_typedResult, + ); + + static $WorkoutHistoriesTable _workoutHistoryIdTable(_$AppDatabase db) => + db.workoutHistories.createAlias( + 'workout_history_step_results__workout_history_id__workout_history__id', + ); + + $$WorkoutHistoriesTableProcessedTableManager get workoutHistoryId { + final $_column = $_itemColumn('workout_history_id')!; + + final manager = $$WorkoutHistoriesTableTableManager( + $_db, + $_db.workoutHistories, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_workoutHistoryIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } +} + +class $$WorkoutHistoryStepResultsTableFilterComposer + extends Composer<_$AppDatabase, $WorkoutHistoryStepResultsTable> { + $$WorkoutHistoryStepResultsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get deletedAt => $composableBuilder( + column: $table.deletedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get schemaVersion => $composableBuilder( + column: $table.schemaVersion, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get syncState => $composableBuilder( + column: $table.syncState, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get localRevision => $composableBuilder( + column: $table.localRevision, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get originDeviceId => $composableBuilder( + column: $table.originDeviceId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get futureOwnerProfileId => $composableBuilder( + column: $table.futureOwnerProfileId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get remoteRevision => $composableBuilder( + column: $table.remoteRevision, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get programSnapshotId => $composableBuilder( + column: $table.programSnapshotId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get exerciseSnapshotId => $composableBuilder( + column: $table.exerciseSnapshotId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get programIndex => $composableBuilder( + column: $table.programIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get exerciseIndex => $composableBuilder( + column: $table.exerciseIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get setIndex => $composableBuilder( + column: $table.setIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get passageIndex => $composableBuilder( + column: $table.passageIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepIndex => $composableBuilder( + column: $table.stepIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepSnapshotId => $composableBuilder( + column: $table.stepSnapshotId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepNameSnapshot => $composableBuilder( + column: $table.stepNameSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepTypeSnapshot => $composableBuilder( + column: $table.stepTypeSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get targetValueSnapshot => $composableBuilder( + column: $table.targetValueSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get hasScoreSnapshot => $composableBuilder( + column: $table.hasScoreSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get scoreLabelSnapshot => $composableBuilder( + column: $table.scoreLabelSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get scoreUnitSnapshot => $composableBuilder( + column: $table.scoreUnitSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get targetScoreSnapshot => $composableBuilder( + column: $table.targetScoreSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get status => $composableBuilder( + column: $table.status, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get startedAt => $composableBuilder( + column: $table.startedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualTimeMs => $composableBuilder( + column: $table.actualTimeMs, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualReps => $composableBuilder( + column: $table.actualReps, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualScore => $composableBuilder( + column: $table.actualScore, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get note => $composableBuilder( + column: $table.note, + builder: (column) => ColumnFilters(column), + ); + + $$WorkoutHistoriesTableFilterComposer get workoutHistoryId { + final $$WorkoutHistoriesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.workoutHistoryId, + referencedTable: $db.workoutHistories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$WorkoutHistoriesTableFilterComposer( + $db: $db, + $table: $db.workoutHistories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$WorkoutHistoryStepResultsTableOrderingComposer + extends Composer<_$AppDatabase, $WorkoutHistoryStepResultsTable> { + $$WorkoutHistoryStepResultsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get deletedAt => $composableBuilder( + column: $table.deletedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get schemaVersion => $composableBuilder( + column: $table.schemaVersion, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get syncState => $composableBuilder( + column: $table.syncState, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get localRevision => $composableBuilder( + column: $table.localRevision, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get originDeviceId => $composableBuilder( + column: $table.originDeviceId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get futureOwnerProfileId => $composableBuilder( + column: $table.futureOwnerProfileId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get remoteRevision => $composableBuilder( + column: $table.remoteRevision, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get programSnapshotId => $composableBuilder( + column: $table.programSnapshotId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get exerciseSnapshotId => $composableBuilder( + column: $table.exerciseSnapshotId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get programIndex => $composableBuilder( + column: $table.programIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get exerciseIndex => $composableBuilder( + column: $table.exerciseIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get setIndex => $composableBuilder( + column: $table.setIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get passageIndex => $composableBuilder( + column: $table.passageIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepIndex => $composableBuilder( + column: $table.stepIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepSnapshotId => $composableBuilder( + column: $table.stepSnapshotId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepNameSnapshot => $composableBuilder( + column: $table.stepNameSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepTypeSnapshot => $composableBuilder( + column: $table.stepTypeSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get targetValueSnapshot => $composableBuilder( + column: $table.targetValueSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get hasScoreSnapshot => $composableBuilder( + column: $table.hasScoreSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get scoreLabelSnapshot => $composableBuilder( + column: $table.scoreLabelSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get scoreUnitSnapshot => $composableBuilder( + column: $table.scoreUnitSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get targetScoreSnapshot => $composableBuilder( + column: $table.targetScoreSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get status => $composableBuilder( + column: $table.status, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get startedAt => $composableBuilder( + column: $table.startedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualTimeMs => $composableBuilder( + column: $table.actualTimeMs, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualReps => $composableBuilder( + column: $table.actualReps, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualScore => $composableBuilder( + column: $table.actualScore, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get note => $composableBuilder( + column: $table.note, + builder: (column) => ColumnOrderings(column), + ); + + $$WorkoutHistoriesTableOrderingComposer get workoutHistoryId { + final $$WorkoutHistoriesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.workoutHistoryId, + referencedTable: $db.workoutHistories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$WorkoutHistoriesTableOrderingComposer( + $db: $db, + $table: $db.workoutHistories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$WorkoutHistoryStepResultsTableAnnotationComposer + extends Composer<_$AppDatabase, $WorkoutHistoryStepResultsTable> { + $$WorkoutHistoryStepResultsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + GeneratedColumn get updatedAt => + $composableBuilder(column: $table.updatedAt, builder: (column) => column); + + GeneratedColumn get deletedAt => + $composableBuilder(column: $table.deletedAt, builder: (column) => column); + + GeneratedColumn get schemaVersion => $composableBuilder( + column: $table.schemaVersion, + builder: (column) => column, + ); + + GeneratedColumn get syncState => + $composableBuilder(column: $table.syncState, builder: (column) => column); + + GeneratedColumn get localRevision => $composableBuilder( + column: $table.localRevision, + builder: (column) => column, + ); + + GeneratedColumn get originDeviceId => $composableBuilder( + column: $table.originDeviceId, + builder: (column) => column, + ); + + GeneratedColumn get futureOwnerProfileId => $composableBuilder( + column: $table.futureOwnerProfileId, + builder: (column) => column, + ); + + GeneratedColumn get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => column, + ); + + GeneratedColumn get remoteRevision => $composableBuilder( + column: $table.remoteRevision, + builder: (column) => column, + ); + + GeneratedColumn get programSnapshotId => $composableBuilder( + column: $table.programSnapshotId, + builder: (column) => column, + ); + + GeneratedColumn get exerciseSnapshotId => $composableBuilder( + column: $table.exerciseSnapshotId, + builder: (column) => column, + ); + + GeneratedColumn get programIndex => $composableBuilder( + column: $table.programIndex, + builder: (column) => column, + ); + + GeneratedColumn get exerciseIndex => $composableBuilder( + column: $table.exerciseIndex, + builder: (column) => column, + ); + + GeneratedColumn get setIndex => + $composableBuilder(column: $table.setIndex, builder: (column) => column); + + GeneratedColumn get passageIndex => $composableBuilder( + column: $table.passageIndex, + builder: (column) => column, + ); + + GeneratedColumn get stepIndex => + $composableBuilder(column: $table.stepIndex, builder: (column) => column); + + GeneratedColumn get stepSnapshotId => $composableBuilder( + column: $table.stepSnapshotId, + builder: (column) => column, + ); + + GeneratedColumn get stepNameSnapshot => $composableBuilder( + column: $table.stepNameSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get stepTypeSnapshot => $composableBuilder( + column: $table.stepTypeSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get targetValueSnapshot => $composableBuilder( + column: $table.targetValueSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get hasScoreSnapshot => $composableBuilder( + column: $table.hasScoreSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get scoreLabelSnapshot => $composableBuilder( + column: $table.scoreLabelSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get scoreUnitSnapshot => $composableBuilder( + column: $table.scoreUnitSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get targetScoreSnapshot => $composableBuilder( + column: $table.targetScoreSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get status => + $composableBuilder(column: $table.status, builder: (column) => column); + + GeneratedColumn get startedAt => + $composableBuilder(column: $table.startedAt, builder: (column) => column); + + GeneratedColumn get completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => column, + ); + + GeneratedColumn get actualTimeMs => $composableBuilder( + column: $table.actualTimeMs, + builder: (column) => column, + ); + + GeneratedColumn get actualReps => $composableBuilder( + column: $table.actualReps, + builder: (column) => column, + ); + + GeneratedColumn get actualScore => $composableBuilder( + column: $table.actualScore, + builder: (column) => column, + ); + + GeneratedColumn get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => column, + ); + + GeneratedColumn get note => + $composableBuilder(column: $table.note, builder: (column) => column); + + $$WorkoutHistoriesTableAnnotationComposer get workoutHistoryId { + final $$WorkoutHistoriesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.workoutHistoryId, + referencedTable: $db.workoutHistories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$WorkoutHistoriesTableAnnotationComposer( + $db: $db, + $table: $db.workoutHistories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$WorkoutHistoryStepResultsTableTableManager + extends + RootTableManager< + _$AppDatabase, + $WorkoutHistoryStepResultsTable, + WorkoutHistoryStepResult, + $$WorkoutHistoryStepResultsTableFilterComposer, + $$WorkoutHistoryStepResultsTableOrderingComposer, + $$WorkoutHistoryStepResultsTableAnnotationComposer, + $$WorkoutHistoryStepResultsTableCreateCompanionBuilder, + $$WorkoutHistoryStepResultsTableUpdateCompanionBuilder, + ( + WorkoutHistoryStepResult, + $$WorkoutHistoryStepResultsTableReferences, + ), + WorkoutHistoryStepResult, + PrefetchHooks Function({bool workoutHistoryId}) + > { + $$WorkoutHistoryStepResultsTableTableManager( + _$AppDatabase db, + $WorkoutHistoryStepResultsTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$WorkoutHistoryStepResultsTableFilterComposer( + $db: db, + $table: table, + ), + createOrderingComposer: () => + $$WorkoutHistoryStepResultsTableOrderingComposer( + $db: db, + $table: table, + ), + createComputedFieldComposer: () => + $$WorkoutHistoryStepResultsTableAnnotationComposer( + $db: db, + $table: table, + ), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value createdAt = const Value.absent(), + Value updatedAt = const Value.absent(), + Value deletedAt = const Value.absent(), + Value schemaVersion = const Value.absent(), + Value syncState = const Value.absent(), + Value localRevision = const Value.absent(), + Value originDeviceId = const Value.absent(), + Value futureOwnerProfileId = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value remoteRevision = const Value.absent(), + Value workoutHistoryId = const Value.absent(), + Value programSnapshotId = const Value.absent(), + Value exerciseSnapshotId = const Value.absent(), + Value programIndex = const Value.absent(), + Value exerciseIndex = const Value.absent(), + Value setIndex = const Value.absent(), + Value passageIndex = const Value.absent(), + Value stepIndex = const Value.absent(), + Value stepSnapshotId = const Value.absent(), + Value stepNameSnapshot = const Value.absent(), + Value stepTypeSnapshot = const Value.absent(), + Value targetValueSnapshot = const Value.absent(), + Value hasScoreSnapshot = const Value.absent(), + Value scoreInputModeSnapshot = const Value.absent(), + Value scoreLabelSnapshot = const Value.absent(), + Value scoreUnitSnapshot = const Value.absent(), + Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), + Value status = const Value.absent(), + Value startedAt = const Value.absent(), + Value completedAt = const Value.absent(), + Value actualTimeMs = const Value.absent(), + Value actualReps = const Value.absent(), + Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value note = const Value.absent(), + Value rowid = const Value.absent(), + }) => WorkoutHistoryStepResultsCompanion( + id: id, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + schemaVersion: schemaVersion, + syncState: syncState, + localRevision: localRevision, + originDeviceId: originDeviceId, + futureOwnerProfileId: futureOwnerProfileId, + lastSyncedAt: lastSyncedAt, + remoteRevision: remoteRevision, + workoutHistoryId: workoutHistoryId, + programSnapshotId: programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + passageIndex: passageIndex, + stepIndex: stepIndex, + stepSnapshotId: stepSnapshotId, + stepNameSnapshot: stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, + status: status, + startedAt: startedAt, + completedAt: completedAt, + actualTimeMs: actualTimeMs, + actualReps: actualReps, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + note: note, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String id, + required DateTime createdAt, + required DateTime updatedAt, + Value deletedAt = const Value.absent(), + Value schemaVersion = const Value.absent(), + required String syncState, + required int localRevision, + required String originDeviceId, + Value futureOwnerProfileId = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value remoteRevision = const Value.absent(), + required String workoutHistoryId, + required String programSnapshotId, + required String exerciseSnapshotId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required String stepSnapshotId, + required String stepNameSnapshot, + required String stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + Value scoreInputModeSnapshot = const Value.absent(), + Value scoreLabelSnapshot = const Value.absent(), + Value scoreUnitSnapshot = const Value.absent(), + Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), + required String status, + Value startedAt = const Value.absent(), + Value completedAt = const Value.absent(), + Value actualTimeMs = const Value.absent(), + Value actualReps = const Value.absent(), + Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value note = const Value.absent(), + Value rowid = const Value.absent(), + }) => WorkoutHistoryStepResultsCompanion.insert( + id: id, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + schemaVersion: schemaVersion, + syncState: syncState, + localRevision: localRevision, + originDeviceId: originDeviceId, + futureOwnerProfileId: futureOwnerProfileId, + lastSyncedAt: lastSyncedAt, + remoteRevision: remoteRevision, + workoutHistoryId: workoutHistoryId, + programSnapshotId: programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + passageIndex: passageIndex, + stepIndex: stepIndex, + stepSnapshotId: stepSnapshotId, + stepNameSnapshot: stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, + status: status, + startedAt: startedAt, + completedAt: completedAt, + actualTimeMs: actualTimeMs, + actualReps: actualReps, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + note: note, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map( + (e) => ( + e.readTable(table), + $$WorkoutHistoryStepResultsTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({workoutHistoryId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: + < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (workoutHistoryId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.workoutHistoryId, + referencedTable: + $$WorkoutHistoryStepResultsTableReferences + ._workoutHistoryIdTable(db), + referencedColumn: + $$WorkoutHistoryStepResultsTableReferences + ._workoutHistoryIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + ), + ); +} + +typedef $$WorkoutHistoryStepResultsTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $WorkoutHistoryStepResultsTable, + WorkoutHistoryStepResult, + $$WorkoutHistoryStepResultsTableFilterComposer, + $$WorkoutHistoryStepResultsTableOrderingComposer, + $$WorkoutHistoryStepResultsTableAnnotationComposer, + $$WorkoutHistoryStepResultsTableCreateCompanionBuilder, + $$WorkoutHistoryStepResultsTableUpdateCompanionBuilder, + (WorkoutHistoryStepResult, $$WorkoutHistoryStepResultsTableReferences), + WorkoutHistoryStepResult, + PrefetchHooks Function({bool workoutHistoryId}) + >; typedef $$WorkoutTemplateProgramsTableCreateCompanionBuilder = WorkoutTemplateProgramsCompanion Function({ required String id, @@ -32771,6 +41403,17 @@ class $AppDatabaseManager { $$WorkoutTemplatesTableTableManager(_db, _db.workoutTemplates); $$ActiveWorkoutSessionsTableTableManager get activeWorkoutSessions => $$ActiveWorkoutSessionsTableTableManager(_db, _db.activeWorkoutSessions); + $$ActiveExerciseStepProgressStatesTableTableManager + get activeExerciseStepProgressStates => + $$ActiveExerciseStepProgressStatesTableTableManager( + _db, + _db.activeExerciseStepProgressStates, + ); + $$ActiveExerciseStepResultsTableTableManager get activeExerciseStepResults => + $$ActiveExerciseStepResultsTableTableManager( + _db, + _db.activeExerciseStepResults, + ); $$ActiveRestStatesTableTableManager get activeRestStates => $$ActiveRestStatesTableTableManager(_db, _db.activeRestStates); $$ActiveScoreStopwatchStatesTableTableManager @@ -32802,6 +41445,11 @@ class $AppDatabaseManager { _db, _db.workoutHistorySetResults, ); + $$WorkoutHistoryStepResultsTableTableManager get workoutHistoryStepResults => + $$WorkoutHistoryStepResultsTableTableManager( + _db, + _db.workoutHistoryStepResults, + ); $$WorkoutTemplateProgramsTableTableManager get workoutTemplatePrograms => $$WorkoutTemplateProgramsTableTableManager( _db, diff --git a/lib/infrastructure/local/drift_repositories.dart b/lib/infrastructure/local/drift_repositories.dart index 0089e8f..d7a1632 100644 --- a/lib/infrastructure/local/drift_repositories.dart +++ b/lib/infrastructure/local/drift_repositories.dart @@ -532,6 +532,38 @@ final class DriftActiveSessionRepository implements ActiveSessionRepository { ); } + @override + Future saveExerciseStepProgressState( + domain.ActiveExerciseStepProgressState state, + ) async { + await _upsertWithChangeLog( + database: database, + tableName: 'active_exercise_step_progress_states', + entityType: 'ActiveExerciseStepProgressState', + metadata: state.metadata, + write: () => database + .into(database.activeExerciseStepProgressStates) + .insertOnConflictUpdate( + _activeExerciseStepProgressStateCompanion(state), + ), + ); + } + + @override + Future saveExerciseStepResult( + domain.ActiveExerciseStepResult result, + ) async { + await _upsertWithChangeLog( + database: database, + tableName: 'active_exercise_step_results', + entityType: 'ActiveExerciseStepResult', + metadata: result.metadata, + write: () => database + .into(database.activeExerciseStepResults) + .insertOnConflictUpdate(_activeExerciseStepResultCompanion(result)), + ); + } + @override Future deleteScoreStopwatchState({ required String sessionId, @@ -588,6 +620,28 @@ final class DriftActiveSessionRepository implements ActiveSessionRepository { return row == null ? null : _activeScoreStopwatchStateFromRow(row); } + @override + Future + findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final row = + await (database.select(database.activeExerciseStepProgressStates) + ..where( + (table) => + table.activeWorkoutSessionId.equals(sessionId) & + table.programIndex.equals(programIndex) & + table.exerciseIndex.equals(exerciseIndex) & + table.setIndex.equals(setIndex) & + table.deletedAt.isNull(), + )) + .getSingleOrNull(); + return row == null ? null : _activeExerciseStepProgressStateFromRow(row); + } + @override Future> listSetResults(String sessionId) async { final rows = @@ -602,6 +656,47 @@ final class DriftActiveSessionRepository implements ActiveSessionRepository { return rows.map(_activeSetResultFromRow).toList(); } + @override + Future> + listExerciseStepProgressStates(String sessionId) async { + final rows = + await (database.select(database.activeExerciseStepProgressStates) + ..where( + (table) => + table.activeWorkoutSessionId.equals(sessionId) & + table.deletedAt.isNull(), + ) + ..orderBy([ + (table) => OrderingTerm.asc(table.programIndex), + (table) => OrderingTerm.asc(table.exerciseIndex), + (table) => OrderingTerm.asc(table.setIndex), + ])) + .get(); + return rows.map(_activeExerciseStepProgressStateFromRow).toList(); + } + + @override + Future> listExerciseStepResults( + String sessionId, + ) async { + final rows = + await (database.select(database.activeExerciseStepResults) + ..where( + (table) => + table.activeWorkoutSessionId.equals(sessionId) & + table.deletedAt.isNull(), + ) + ..orderBy([ + (table) => OrderingTerm.asc(table.programIndex), + (table) => OrderingTerm.asc(table.exerciseIndex), + (table) => OrderingTerm.asc(table.setIndex), + (table) => OrderingTerm.asc(table.passageIndex), + (table) => OrderingTerm.asc(table.stepIndex), + ])) + .get(); + return rows.map(_activeExerciseStepResultFromRow).toList(); + } + @override Future> listRestStates(String sessionId) async { final rows = @@ -661,9 +756,25 @@ final class DriftWorkoutHistoryRepository implements WorkoutHistoryRepository { (table) => OrderingTerm.asc(table.setIndex), ])) .get(); + final stepResults = + await (database.select(database.workoutHistoryStepResults) + ..where( + (table) => + table.workoutHistoryId.equals(id) & + table.deletedAt.isNull(), + ) + ..orderBy([ + (table) => OrderingTerm.asc(table.programIndex), + (table) => OrderingTerm.asc(table.exerciseIndex), + (table) => OrderingTerm.asc(table.setIndex), + (table) => OrderingTerm.asc(table.passageIndex), + (table) => OrderingTerm.asc(table.stepIndex), + ])) + .get(); return _workoutHistoryFromRow( row, results.map(_workoutHistorySetResultFromRow).toList(), + stepResults.map(_workoutHistoryStepResultFromRow).toList(), ); } @@ -699,6 +810,9 @@ final class DriftWorkoutHistoryRepository implements WorkoutHistoryRepository { for (final result in history.results) { await saveSetResult(result); } + for (final result in history.stepResults) { + await saveStepResult(result); + } }); } @@ -715,6 +829,19 @@ final class DriftWorkoutHistoryRepository implements WorkoutHistoryRepository { ); } + @override + Future saveStepResult(domain.WorkoutHistoryStepResult result) async { + await _upsertWithChangeLog( + database: database, + tableName: 'workout_history_step_results', + entityType: 'WorkoutHistoryStepResult', + metadata: result.metadata, + write: () => database + .into(database.workoutHistoryStepResults) + .insertOnConflictUpdate(_workoutHistoryStepResultCompanion(result)), + ); + } + @override Future delete(String id, DateTime deletedAt) async { await database.transaction(() async { @@ -753,6 +880,18 @@ final class DriftWorkoutHistoryRepository implements WorkoutHistoryRepository { resultRows, deletedAt, ); + final stepResultRows = + await (database.select(database.workoutHistoryStepResults)..where( + (table) => + table.workoutHistoryId.equals(id) & + table.deletedAt.isNull(), + )) + .get(); + await _softDeleteWorkoutHistoryStepResultRows( + database, + stepResultRows, + deletedAt, + ); }); } } @@ -1149,6 +1288,35 @@ Future _softDeleteWorkoutHistorySetResultRows( } } +Future _softDeleteWorkoutHistoryStepResultRows( + db.AppDatabase database, + List rows, + DateTime deletedAt, +) async { + for (final row in rows) { + final revision = row.localRevision + 1; + await (database.update( + database.workoutHistoryStepResults, + )..where((table) => table.id.equals(row.id))).write( + db.WorkoutHistoryStepResultsCompanion( + deletedAt: Value(deletedAt.toUtc()), + updatedAt: Value(deletedAt.toUtc()), + localRevision: Value(revision), + syncState: const Value('deleted'), + ), + ); + await _writeChangeLog( + database: database, + entityType: 'WorkoutHistoryStepResult', + entityId: row.id, + operation: 'softDelete', + localRevision: revision, + originDeviceId: row.originDeviceId, + createdAt: deletedAt, + ); + } +} + DateTime _utc(DateTime value) => value.toUtc(); DateTime? _utcOrNull(DateTime? value) => value?.toUtc(); @@ -1732,6 +1900,142 @@ domain.ActiveScoreStopwatchState _activeScoreStopwatchStateFromRow( ); } +db.ActiveExerciseStepProgressStatesCompanion +_activeExerciseStepProgressStateCompanion( + domain.ActiveExerciseStepProgressState state, +) { + final values = _metadataValues(state.metadata); + return db.ActiveExerciseStepProgressStatesCompanion( + id: values[0] as Value, + createdAt: values[1] as Value, + updatedAt: values[2] as Value, + deletedAt: values[3] as Value, + schemaVersion: values[4] as Value, + syncState: values[5] as Value, + localRevision: values[6] as Value, + originDeviceId: values[7] as Value, + futureOwnerProfileId: values[8] as Value, + lastSyncedAt: values[9] as Value, + remoteRevision: values[10] as Value, + activeWorkoutSessionId: Value(state.activeWorkoutSessionId), + programIndex: Value(state.programIndex), + exerciseIndex: Value(state.exerciseIndex), + setIndex: Value(state.setIndex), + currentPassageIndex: Value(state.currentPassageIndex), + currentStepIndex: Value(state.currentStepIndex), + currentStepSnapshotId: Value(state.currentStepSnapshotId), + status: Value(_exerciseStepProgressStatusToDb(state.status)), + startedAt: Value(_utcOrNull(state.startedAt)), + accumulatedMs: Value(state.accumulatedMs), + lastTransitionAt: Value(state.lastTransitionAt.toUtc()), + ); +} + +domain.ActiveExerciseStepProgressState +_activeExerciseStepProgressStateFromRow( + db.ActiveExerciseStepProgressState row, +) { + return domain.ActiveExerciseStepProgressState( + metadata: _metadataFromRow(row), + activeWorkoutSessionId: row.activeWorkoutSessionId, + programIndex: row.programIndex, + exerciseIndex: row.exerciseIndex, + setIndex: row.setIndex, + currentPassageIndex: row.currentPassageIndex, + currentStepIndex: row.currentStepIndex, + currentStepSnapshotId: row.currentStepSnapshotId, + status: _exerciseStepProgressStatusFromDb(row.status), + startedAt: _utcOrNull(row.startedAt), + accumulatedMs: row.accumulatedMs, + lastTransitionAt: _utc(row.lastTransitionAt), + ); +} + +db.ActiveExerciseStepResultsCompanion _activeExerciseStepResultCompanion( + domain.ActiveExerciseStepResult result, +) { + final values = _metadataValues(result.metadata); + return db.ActiveExerciseStepResultsCompanion( + id: values[0] as Value, + createdAt: values[1] as Value, + updatedAt: values[2] as Value, + deletedAt: values[3] as Value, + schemaVersion: values[4] as Value, + syncState: values[5] as Value, + localRevision: values[6] as Value, + originDeviceId: values[7] as Value, + futureOwnerProfileId: values[8] as Value, + lastSyncedAt: values[9] as Value, + remoteRevision: values[10] as Value, + activeWorkoutSessionId: Value(result.activeWorkoutSessionId), + programSnapshotId: Value(result.programSnapshotId), + exerciseSnapshotId: Value(result.exerciseSnapshotId), + programIndex: Value(result.programIndex), + exerciseIndex: Value(result.exerciseIndex), + setIndex: Value(result.setIndex), + passageIndex: Value(result.passageIndex), + stepIndex: Value(result.stepIndex), + stepSnapshotId: Value(result.stepSnapshotId), + stepNameSnapshot: Value(result.stepNameSnapshot), + stepTypeSnapshot: Value(_exerciseStepTypeToDb(result.stepTypeSnapshot)), + targetValueSnapshot: Value(result.targetValueSnapshot), + hasScoreSnapshot: Value(result.hasScoreSnapshot), + scoreInputModeSnapshot: Value( + result.scoreInputModeSnapshot == null + ? null + : _scoreInputModeToDb(result.scoreInputModeSnapshot!), + ), + scoreLabelSnapshot: Value(result.scoreLabelSnapshot), + scoreUnitSnapshot: Value(result.scoreUnitSnapshot), + targetScoreSnapshot: Value(result.targetScoreSnapshot), + targetScoreTimeMsSnapshot: Value(result.targetScoreTimeMsSnapshot), + status: Value(_setResultStatusToDb(result.status)), + startedAt: Value(_utcOrNull(result.startedAt)), + completedAt: Value(_utcOrNull(result.completedAt)), + actualTimeMs: Value(result.actualTimeMs), + actualReps: Value(result.actualReps), + actualScore: Value(result.actualScore), + actualScoreTimeMs: Value(result.actualScoreTimeMs), + note: Value(result.note), + ); +} + +domain.ActiveExerciseStepResult _activeExerciseStepResultFromRow( + db.ActiveExerciseStepResult row, +) { + return domain.ActiveExerciseStepResult( + metadata: _metadataFromRow(row), + activeWorkoutSessionId: row.activeWorkoutSessionId, + programSnapshotId: row.programSnapshotId, + exerciseSnapshotId: row.exerciseSnapshotId, + programIndex: row.programIndex, + exerciseIndex: row.exerciseIndex, + setIndex: row.setIndex, + passageIndex: row.passageIndex, + stepIndex: row.stepIndex, + stepSnapshotId: row.stepSnapshotId, + stepNameSnapshot: row.stepNameSnapshot, + stepTypeSnapshot: _exerciseStepTypeFromDb(row.stepTypeSnapshot), + targetValueSnapshot: row.targetValueSnapshot, + hasScoreSnapshot: row.hasScoreSnapshot, + scoreInputModeSnapshot: row.scoreInputModeSnapshot == null + ? null + : _scoreInputModeFromDb(row.scoreInputModeSnapshot!), + scoreLabelSnapshot: row.scoreLabelSnapshot, + scoreUnitSnapshot: row.scoreUnitSnapshot, + targetScoreSnapshot: row.targetScoreSnapshot, + targetScoreTimeMsSnapshot: row.targetScoreTimeMsSnapshot, + status: _setResultStatusFromDb(row.status), + startedAt: _utcOrNull(row.startedAt), + completedAt: _utcOrNull(row.completedAt), + actualTimeMs: row.actualTimeMs, + actualReps: row.actualReps, + actualScore: row.actualScore, + actualScoreTimeMs: row.actualScoreTimeMs, + note: row.note, + ); +} + db.WorkoutHistoriesCompanion _workoutHistoryCompanion( domain.WorkoutHistory history, ) { @@ -1805,9 +2109,59 @@ db.WorkoutHistorySetResultsCompanion _workoutHistorySetResultCompanion( ); } +db.WorkoutHistoryStepResultsCompanion _workoutHistoryStepResultCompanion( + domain.WorkoutHistoryStepResult result, +) { + final values = _metadataValues(result.metadata); + return db.WorkoutHistoryStepResultsCompanion( + id: values[0] as Value, + createdAt: values[1] as Value, + updatedAt: values[2] as Value, + deletedAt: values[3] as Value, + schemaVersion: values[4] as Value, + syncState: values[5] as Value, + localRevision: values[6] as Value, + originDeviceId: values[7] as Value, + futureOwnerProfileId: values[8] as Value, + lastSyncedAt: values[9] as Value, + remoteRevision: values[10] as Value, + workoutHistoryId: Value(result.workoutHistoryId), + programSnapshotId: Value(result.programSnapshotId), + exerciseSnapshotId: Value(result.exerciseSnapshotId), + programIndex: Value(result.programIndex), + exerciseIndex: Value(result.exerciseIndex), + setIndex: Value(result.setIndex), + passageIndex: Value(result.passageIndex), + stepIndex: Value(result.stepIndex), + stepSnapshotId: Value(result.stepSnapshotId), + stepNameSnapshot: Value(result.stepNameSnapshot), + stepTypeSnapshot: Value(_exerciseStepTypeToDb(result.stepTypeSnapshot)), + targetValueSnapshot: Value(result.targetValueSnapshot), + hasScoreSnapshot: Value(result.hasScoreSnapshot), + scoreInputModeSnapshot: Value( + result.scoreInputModeSnapshot == null + ? null + : _scoreInputModeToDb(result.scoreInputModeSnapshot!), + ), + scoreLabelSnapshot: Value(result.scoreLabelSnapshot), + scoreUnitSnapshot: Value(result.scoreUnitSnapshot), + targetScoreSnapshot: Value(result.targetScoreSnapshot), + targetScoreTimeMsSnapshot: Value(result.targetScoreTimeMsSnapshot), + status: Value(_setResultStatusToDb(result.status)), + startedAt: Value(_utcOrNull(result.startedAt)), + completedAt: Value(_utcOrNull(result.completedAt)), + actualTimeMs: Value(result.actualTimeMs), + actualReps: Value(result.actualReps), + actualScore: Value(result.actualScore), + actualScoreTimeMs: Value(result.actualScoreTimeMs), + note: Value(result.note), + ); +} + domain.WorkoutHistory _workoutHistoryFromRow( db.WorkoutHistory row, List results, + List stepResults, ) { return domain.WorkoutHistory( metadata: _metadataFromRow(row), @@ -1820,6 +2174,7 @@ domain.WorkoutHistory _workoutHistoryFromRow( completed: row.completed, historySnapshotJson: row.historySnapshotJson, results: results, + stepResults: stepResults, ); } @@ -1856,6 +2211,42 @@ domain.WorkoutHistorySetResult _workoutHistorySetResultFromRow( ); } +domain.WorkoutHistoryStepResult _workoutHistoryStepResultFromRow( + db.WorkoutHistoryStepResult row, +) { + return domain.WorkoutHistoryStepResult( + metadata: _metadataFromRow(row), + workoutHistoryId: row.workoutHistoryId, + programSnapshotId: row.programSnapshotId, + exerciseSnapshotId: row.exerciseSnapshotId, + programIndex: row.programIndex, + exerciseIndex: row.exerciseIndex, + setIndex: row.setIndex, + passageIndex: row.passageIndex, + stepIndex: row.stepIndex, + stepSnapshotId: row.stepSnapshotId, + stepNameSnapshot: row.stepNameSnapshot, + stepTypeSnapshot: _exerciseStepTypeFromDb(row.stepTypeSnapshot), + targetValueSnapshot: row.targetValueSnapshot, + hasScoreSnapshot: row.hasScoreSnapshot, + scoreInputModeSnapshot: row.scoreInputModeSnapshot == null + ? null + : _scoreInputModeFromDb(row.scoreInputModeSnapshot!), + scoreLabelSnapshot: row.scoreLabelSnapshot, + scoreUnitSnapshot: row.scoreUnitSnapshot, + targetScoreSnapshot: row.targetScoreSnapshot, + targetScoreTimeMsSnapshot: row.targetScoreTimeMsSnapshot, + status: _setResultStatusFromDb(row.status), + startedAt: _utcOrNull(row.startedAt), + completedAt: _utcOrNull(row.completedAt), + actualTimeMs: row.actualTimeMs, + actualReps: row.actualReps, + actualScore: row.actualScore, + actualScoreTimeMs: row.actualScoreTimeMs, + note: row.note, + ); +} + String _syncStateToDb(domain.SyncState state) => switch (state) { domain.SyncState.localOnly => 'localOnly', domain.SyncState.dirty => 'dirty', @@ -1939,6 +2330,33 @@ domain.ActiveScoreStopwatchStatus _scoreStopwatchStatusFromDb(String value) => ), }; +String _exerciseStepProgressStatusToDb( + domain.ActiveExerciseStepProgressStatus status, +) => switch (status) { + domain.ActiveExerciseStepProgressStatus.notStarted => 'notStarted', + domain.ActiveExerciseStepProgressStatus.waitingManual => 'waitingManual', + domain.ActiveExerciseStepProgressStatus.runningTimer => 'runningTimer', + domain.ActiveExerciseStepProgressStatus.pausedTimer => 'pausedTimer', + domain.ActiveExerciseStepProgressStatus.stoppedTimer => 'stoppedTimer', + domain.ActiveExerciseStepProgressStatus.sequenceComplete => + 'sequenceComplete', +}; + +domain.ActiveExerciseStepProgressStatus _exerciseStepProgressStatusFromDb( + String value, +) => switch (value) { + 'notStarted' => domain.ActiveExerciseStepProgressStatus.notStarted, + 'waitingManual' => domain.ActiveExerciseStepProgressStatus.waitingManual, + 'runningTimer' => domain.ActiveExerciseStepProgressStatus.runningTimer, + 'pausedTimer' => domain.ActiveExerciseStepProgressStatus.pausedTimer, + 'stoppedTimer' => domain.ActiveExerciseStepProgressStatus.stoppedTimer, + 'sequenceComplete' => + domain.ActiveExerciseStepProgressStatus.sequenceComplete, + _ => throw domain.DomainException( + 'Unknown active exercise step progress status: $value', + ), +}; + String? _encodeImageMediaIdsSnapshot(List imageMediaIds) { return imageMediaIds.isEmpty ? null : jsonEncode(imageMediaIds); } diff --git a/lib/infrastructure/local/tables.dart b/lib/infrastructure/local/tables.dart index eeee536..6ab7e85 100644 --- a/lib/infrastructure/local/tables.dart +++ b/lib/infrastructure/local/tables.dart @@ -419,6 +419,108 @@ class ActiveRestStates extends SyncableTable { ]; } +class ActiveExerciseStepProgressStates extends SyncableTable { + @override + String get tableName => 'active_exercise_step_progress_states'; + + TextColumn get activeWorkoutSessionId => + text().references(ActiveWorkoutSessions, #id)(); + IntColumn get programIndex => integer()(); + IntColumn get exerciseIndex => integer()(); + IntColumn get setIndex => integer()(); + IntColumn get currentPassageIndex => integer()(); + IntColumn get currentStepIndex => integer()(); + TextColumn get currentStepSnapshotId => text().withLength(min: 1)(); + TextColumn get status => text()(); + DateTimeColumn get startedAt => dateTime().nullable()(); + IntColumn get accumulatedMs => integer()(); + DateTimeColumn get lastTransitionAt => dateTime()(); + + @override + List get customConstraints => [ + 'UNIQUE (active_workout_session_id, program_index, exercise_index, ' + 'set_index)', + 'CHECK (program_index >= 0)', + 'CHECK (exercise_index >= 0)', + 'CHECK (set_index >= 0)', + 'CHECK (current_passage_index >= 0)', + 'CHECK (current_step_index >= 0)', + "CHECK (status IN ('notStarted', 'waitingManual', 'runningTimer', " + "'pausedTimer', 'stoppedTimer', 'sequenceComplete'))", + 'CHECK (status != \'runningTimer\' OR started_at IS NOT NULL)', + 'CHECK (accumulated_ms >= 0)', + ]; +} + +class ActiveExerciseStepResults extends SyncableTable { + @override + String get tableName => 'active_exercise_step_results'; + + TextColumn get activeWorkoutSessionId => + text().references(ActiveWorkoutSessions, #id)(); + TextColumn get programSnapshotId => text().withLength(min: 1)(); + TextColumn get exerciseSnapshotId => text().withLength(min: 1)(); + IntColumn get programIndex => integer()(); + IntColumn get exerciseIndex => integer()(); + IntColumn get setIndex => integer()(); + IntColumn get passageIndex => integer()(); + IntColumn get stepIndex => integer()(); + TextColumn get stepSnapshotId => text().withLength(min: 1)(); + TextColumn get stepNameSnapshot => text().withLength(min: 1)(); + TextColumn get stepTypeSnapshot => text()(); + IntColumn get targetValueSnapshot => integer()(); + BoolColumn get hasScoreSnapshot => boolean()(); + TextColumn get scoreInputModeSnapshot => text().nullable()(); + TextColumn get scoreLabelSnapshot => text().nullable()(); + TextColumn get scoreUnitSnapshot => text().nullable()(); + RealColumn get targetScoreSnapshot => real().nullable()(); + IntColumn get targetScoreTimeMsSnapshot => integer().nullable()(); + TextColumn get status => text()(); + DateTimeColumn get startedAt => dateTime().nullable()(); + DateTimeColumn get completedAt => dateTime().nullable()(); + IntColumn get actualTimeMs => integer().nullable()(); + IntColumn get actualReps => integer().nullable()(); + RealColumn get actualScore => real().nullable()(); + IntColumn get actualScoreTimeMs => integer().nullable()(); + TextColumn get note => text().nullable()(); + + @override + List get customConstraints => [ + 'UNIQUE (active_workout_session_id, program_index, exercise_index, ' + 'set_index, passage_index, step_index)', + 'CHECK (program_index >= 0)', + 'CHECK (exercise_index >= 0)', + 'CHECK (set_index >= 0)', + 'CHECK (passage_index >= 0)', + 'CHECK (step_index >= 0)', + "CHECK (step_type_snapshot IN ('time', 'reps'))", + 'CHECK (target_value_snapshot > 0)', + "CHECK (score_input_mode_snapshot IS NULL OR " + "score_input_mode_snapshot IN ('manual', 'stopwatch'))", + "CHECK (status IN ('completed', 'skipped'))", + 'CHECK (actual_time_ms IS NULL OR actual_time_ms >= 0)', + 'CHECK (actual_reps IS NULL OR actual_reps >= 0)', + 'CHECK (actual_score IS NULL OR actual_score >= 0)', + 'CHECK (actual_score_time_ms IS NULL OR actual_score_time_ms >= 0)', + 'CHECK (actual_time_ms IS NULL OR step_type_snapshot = \'time\')', + 'CHECK (actual_reps IS NULL OR step_type_snapshot = \'reps\')', + 'CHECK (status != \'skipped\' OR (actual_time_ms IS NULL ' + 'AND actual_reps IS NULL AND actual_score IS NULL ' + 'AND actual_score_time_ms IS NULL))', + 'CHECK (target_score_snapshot IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'manual'))", + 'CHECK (target_score_time_ms_snapshot IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'stopwatch'))", + 'CHECK (actual_score IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'manual'))", + 'CHECK (actual_score_time_ms IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'stopwatch'))", + 'CHECK (actual_score IS NULL OR actual_score_time_ms IS NULL)', + 'CHECK (target_score_snapshot IS NULL OR ' + 'target_score_time_ms_snapshot IS NULL)', + ]; +} + class WorkoutHistories extends SyncableTable { @override String get tableName => 'workout_history'; @@ -511,6 +613,74 @@ class WorkoutHistorySetResults extends SyncableTable { ]; } +class WorkoutHistoryStepResults extends SyncableTable { + @override + String get tableName => 'workout_history_step_results'; + + TextColumn get workoutHistoryId => text().references(WorkoutHistories, #id)(); + TextColumn get programSnapshotId => text().withLength(min: 1)(); + TextColumn get exerciseSnapshotId => text().withLength(min: 1)(); + IntColumn get programIndex => integer()(); + IntColumn get exerciseIndex => integer()(); + IntColumn get setIndex => integer()(); + IntColumn get passageIndex => integer()(); + IntColumn get stepIndex => integer()(); + TextColumn get stepSnapshotId => text().withLength(min: 1)(); + TextColumn get stepNameSnapshot => text().withLength(min: 1)(); + TextColumn get stepTypeSnapshot => text()(); + IntColumn get targetValueSnapshot => integer()(); + BoolColumn get hasScoreSnapshot => boolean()(); + TextColumn get scoreInputModeSnapshot => text().nullable()(); + TextColumn get scoreLabelSnapshot => text().nullable()(); + TextColumn get scoreUnitSnapshot => text().nullable()(); + RealColumn get targetScoreSnapshot => real().nullable()(); + IntColumn get targetScoreTimeMsSnapshot => integer().nullable()(); + TextColumn get status => text()(); + DateTimeColumn get startedAt => dateTime().nullable()(); + DateTimeColumn get completedAt => dateTime().nullable()(); + IntColumn get actualTimeMs => integer().nullable()(); + IntColumn get actualReps => integer().nullable()(); + RealColumn get actualScore => real().nullable()(); + IntColumn get actualScoreTimeMs => integer().nullable()(); + TextColumn get note => text().nullable()(); + + @override + List get customConstraints => [ + 'UNIQUE (workout_history_id, program_index, exercise_index, set_index, ' + 'passage_index, step_index)', + 'CHECK (program_index >= 0)', + 'CHECK (exercise_index >= 0)', + 'CHECK (set_index >= 0)', + 'CHECK (passage_index >= 0)', + 'CHECK (step_index >= 0)', + "CHECK (step_type_snapshot IN ('time', 'reps'))", + 'CHECK (target_value_snapshot > 0)', + "CHECK (score_input_mode_snapshot IS NULL OR " + "score_input_mode_snapshot IN ('manual', 'stopwatch'))", + "CHECK (status IN ('completed', 'skipped'))", + 'CHECK (actual_time_ms IS NULL OR actual_time_ms >= 0)', + 'CHECK (actual_reps IS NULL OR actual_reps >= 0)', + 'CHECK (actual_score IS NULL OR actual_score >= 0)', + 'CHECK (actual_score_time_ms IS NULL OR actual_score_time_ms >= 0)', + 'CHECK (actual_time_ms IS NULL OR step_type_snapshot = \'time\')', + 'CHECK (actual_reps IS NULL OR step_type_snapshot = \'reps\')', + 'CHECK (status != \'skipped\' OR (actual_time_ms IS NULL ' + 'AND actual_reps IS NULL AND actual_score IS NULL ' + 'AND actual_score_time_ms IS NULL))', + 'CHECK (target_score_snapshot IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'manual'))", + 'CHECK (target_score_time_ms_snapshot IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'stopwatch'))", + 'CHECK (actual_score IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'manual'))", + 'CHECK (actual_score_time_ms IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'stopwatch'))", + 'CHECK (actual_score IS NULL OR actual_score_time_ms IS NULL)', + 'CHECK (target_score_snapshot IS NULL OR ' + 'target_score_time_ms_snapshot IS NULL)', + ]; +} + class ChangeLogEntries extends Table { @override String get tableName => 'change_log'; diff --git a/lib/presentation/exercise_library_screen.dart b/lib/presentation/exercise_library_screen.dart index 1c3c972..dd51049 100644 --- a/lib/presentation/exercise_library_screen.dart +++ b/lib/presentation/exercise_library_screen.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; @@ -400,7 +402,11 @@ final class _ExerciseFormScreenState extends State { var _saving = false; var _importingImage = false; var _importingVideo = false; + var _stepsEnabled = false; + var _nextStepDraftId = 0; + final _stepDrafts = <_ExerciseStepDraft>[]; String? _measureError; + String? _stepError; String? _warning; bool get _isEditing => widget.exercise != null; @@ -434,6 +440,10 @@ final class _ExerciseFormScreenState extends State { _hasReps = exercise?.hasRepsMeasure ?? false; _hasScore = exercise?.hasScoreMeasure ?? false; _scoreInputMode = exercise?.scoreInputMode ?? ScoreInputMode.manual; + _stepsEnabled = exercise?.steps.isNotEmpty ?? false; + for (final step in exercise?.steps ?? const []) { + _stepDrafts.add(_draftFromStep(step)); + } } @override @@ -446,6 +456,9 @@ final class _ExerciseFormScreenState extends State { _defaultRepsController.dispose(); _defaultScoreController.dispose(); _defaultScoreTimeController.dispose(); + for (final draft in _stepDrafts) { + draft.dispose(); + } super.dispose(); } @@ -666,6 +679,8 @@ final class _ExerciseFormScreenState extends State { ), ], ], + const SizedBox(height: 24), + _buildExerciseStepsSection(context), if (_warning != null) ...[ const SizedBox(height: 16), MaterialBanner( @@ -696,6 +711,305 @@ final class _ExerciseFormScreenState extends State { ); } + Widget _buildExerciseStepsSection(BuildContext context) { + final reachedLimit = _stepDrafts.length >= 8; + return Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Text( + 'Séquence d’étapes', + style: Theme.of(context).textTheme.titleMedium, + ), + const SizedBox(height: 8), + SwitchListTile( + contentPadding: EdgeInsets.zero, + title: const Text('Rythmer cet exercice avec des étapes'), + subtitle: Text( + _stepsEnabled + ? 'Chaque passage suit ces étapes dans l’ordre. Si la série ' + 'suit des répétitions, une répétition correspond à un ' + 'passage complet.' + : 'Ajoute des étapes si l’exercice doit suivre un ordre précis ' + 'pendant chaque série.', + ), + value: _stepsEnabled, + onChanged: (value) { + setState(() { + _stepsEnabled = value; + _stepError = null; + }); + }, + ), + if (_stepsEnabled) ...[ + const SizedBox(height: 8), + ReorderableListView.builder( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + buildDefaultDragHandles: false, + itemCount: _stepDrafts.length, + onReorder: _reorderStep, + itemBuilder: (context, index) { + return _buildStepCard(context, index, _stepDrafts[index]); + }, + ), + if (_stepError != null) ...[ + const SizedBox(height: 8), + Text( + _stepError!, + style: TextStyle(color: Theme.of(context).colorScheme.error), + ), + ], + const SizedBox(height: 8), + if (reachedLimit) + const ListTile( + contentPadding: EdgeInsets.zero, + leading: Icon(Icons.info_outline), + title: Text('Limite atteinte'), + subtitle: Text('Un exercice peut contenir jusqu’à 8 étapes.'), + ) + else + OutlinedButton.icon( + onPressed: _addStep, + icon: const Icon(Icons.add), + label: const Text('Ajouter une étape'), + ), + ], + ], + ); + } + + Widget _buildStepCard( + BuildContext context, + int index, + _ExerciseStepDraft draft, + ) { + final targetLabel = draft.type == ExerciseStepType.time + ? 'Durée par défaut (s)' + : 'Répétitions par défaut'; + final targetMessage = draft.type == ExerciseStepType.time + ? 'Saisis une durée supérieure à 0.' + : 'Saisis un nombre de répétitions supérieur à 0.'; + final summaryUnit = draft.type == ExerciseStepType.time ? 's' : ''; + return CourtBlazerAccentPanel( + key: ValueKey(draft.id), + margin: const EdgeInsets.only(bottom: 12), + padding: const EdgeInsets.all(12), + child: Material( + type: MaterialType.transparency, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Row( + children: [ + ReorderableDragStartListener( + index: index, + child: const Padding( + padding: EdgeInsets.only(right: 8), + child: Icon(Icons.drag_handle), + ), + ), + Expanded( + child: Text( + '${index + 1}. ${draft.displayName}', + style: Theme.of(context).textTheme.titleSmall, + ), + ), + PopupMenuButton<_StepAction>( + tooltip: 'Actions de l’étape ${index + 1}', + onSelected: (action) => _handleStepAction(index, action), + itemBuilder: (context) => [ + PopupMenuItem( + value: _StepAction.moveUp, + enabled: index > 0, + child: const Text('Monter'), + ), + PopupMenuItem( + value: _StepAction.moveDown, + enabled: index < _stepDrafts.length - 1, + child: const Text('Descendre'), + ), + const PopupMenuItem( + value: _StepAction.duplicate, + child: Text('Dupliquer'), + ), + const PopupMenuItem( + value: _StepAction.delete, + child: Text('Supprimer'), + ), + ], + ), + ], + ), + const SizedBox(height: 8), + Text( + draft.type == ExerciseStepType.time + ? 'Temps · ${draft.targetController.text.trim()} $summaryUnit' + : 'Répétitions · ${draft.targetController.text.trim()}', + style: Theme.of(context).textTheme.bodySmall, + ), + const SizedBox(height: 12), + TextFormField( + controller: draft.nameController, + decoration: const InputDecoration(labelText: 'Nom de l’étape'), + validator: (value) { + if (!_stepsEnabled) return null; + return value == null || value.trim().isEmpty + ? 'Le nom de l’étape est obligatoire.' + : null; + }, + onChanged: (_) => setState(() {}), + ), + const SizedBox(height: 8), + Text('Type d’étape', style: Theme.of(context).textTheme.titleSmall), + RadioListTile( + contentPadding: EdgeInsets.zero, + title: const Text('Temps'), + value: ExerciseStepType.time, + groupValue: draft.type, + onChanged: (value) { + if (value == null) return; + setState(() => draft.type = value); + }, + ), + RadioListTile( + contentPadding: EdgeInsets.zero, + title: const Text('Répétitions'), + value: ExerciseStepType.reps, + groupValue: draft.type, + onChanged: (value) { + if (value == null) return; + setState(() => draft.type = value); + }, + ), + TextFormField( + controller: draft.targetController, + decoration: InputDecoration(labelText: targetLabel), + keyboardType: TextInputType.number, + validator: (value) => + _stepsEnabled ? _positiveIntValidator(value, targetMessage) : null, + onChanged: (_) => setState(() {}), + ), + const SizedBox(height: 8), + SwitchListTile( + contentPadding: EdgeInsets.zero, + title: const Text('Score d’étape'), + subtitle: const Text('Ajouter un score pour cette étape'), + value: draft.hasScore, + onChanged: (value) => setState(() => draft.hasScore = value), + ), + if (draft.hasScore) ...[ + Text('Mode de score', style: Theme.of(context).textTheme.titleSmall), + RadioListTile( + contentPadding: EdgeInsets.zero, + title: const Text('Saisie libre'), + value: ScoreInputMode.manual, + groupValue: draft.scoreInputMode, + onChanged: (value) { + if (value == null) return; + setState(() => draft.scoreInputMode = value); + }, + ), + RadioListTile( + contentPadding: EdgeInsets.zero, + title: const Text('Chrono intégré'), + value: ScoreInputMode.stopwatch, + groupValue: draft.scoreInputMode, + onChanged: (value) { + if (value == null) return; + setState(() => draft.scoreInputMode = value); + }, + ), + if (draft.scoreInputMode == ScoreInputMode.manual) ...[ + TextFormField( + controller: draft.scoreLabelController, + decoration: const InputDecoration(labelText: 'Score à saisir'), + validator: (value) { + if (!_stepsEnabled || !draft.hasScore) return null; + if (draft.scoreInputMode != ScoreInputMode.manual) { + return null; + } + return value == null || value.trim().isEmpty + ? 'Le libellé du score est obligatoire.' + : null; + }, + ), + const SizedBox(height: 8), + TextFormField( + controller: draft.scoreUnitController, + decoration: const InputDecoration(labelText: 'Unité'), + validator: (value) { + if (!_stepsEnabled || !draft.hasScore) return null; + if (draft.scoreInputMode != ScoreInputMode.manual) { + return null; + } + return value == null || value.trim().isEmpty + ? 'L’unité du score est obligatoire.' + : null; + }, + ), + const SizedBox(height: 8), + TextFormField( + controller: draft.scoreTargetController, + decoration: const InputDecoration( + labelText: 'Score par défaut', + ), + keyboardType: const TextInputType.numberWithOptions( + decimal: true, + ), + validator: (value) { + if (!_stepsEnabled || + !draft.hasScore || + draft.scoreInputMode != ScoreInputMode.manual || + value == null || + value.trim().isEmpty) { + return null; + } + return _nonNegativeDoubleValidator( + value, + 'Saisis un score supérieur ou égal à 0.', + ); + }, + ), + ] else ...[ + if (draft.type == ExerciseStepType.time) ...[ + const SizedBox(height: 8), + const Text( + 'Cette étape utilise déjà un compte à rebours. Le score ' + 'chrono ajoute un second temps mesuré ; garde-le seulement ' + 'si tu veux enregistrer une performance distincte.', + ), + ], + const SizedBox(height: 8), + TextFormField( + controller: draft.scoreTargetController, + decoration: const InputDecoration( + labelText: 'Objectif de chrono par défaut (optionnel)', + ), + keyboardType: const TextInputType.numberWithOptions( + decimal: true, + ), + validator: (value) { + if (!_stepsEnabled || + !draft.hasScore || + draft.scoreInputMode != ScoreInputMode.stopwatch || + value == null || + value.trim().isEmpty) { + return null; + } + return _positiveDoubleValidator( + value, + 'Saisis un objectif supérieur à 0.', + ); + }, + ), + ], + ], + ], + ), + ), + ); + } + void _setMeasure(VoidCallback update) { setState(() { update(); @@ -704,6 +1018,141 @@ final class _ExerciseFormScreenState extends State { }); } + void _addStep() { + if (_stepDrafts.length >= 8) { + setState(() { + _stepError = 'Un exercice peut contenir jusqu’à 8 étapes.'; + }); + return; + } + setState(() { + _stepError = null; + _stepDrafts.add( + _ExerciseStepDraft( + id: 'step-draft-${_nextStepDraftId++}', + name: 'Nouvelle étape', + defaultTargetValue: '10', + ), + ); + }); + } + + void _reorderStep(int oldIndex, int newIndex) { + setState(() { + if (newIndex > oldIndex) { + newIndex -= 1; + } + final draft = _stepDrafts.removeAt(oldIndex); + _stepDrafts.insert(newIndex, draft); + }); + } + + void _handleStepAction(int index, _StepAction action) { + switch (action) { + case _StepAction.moveUp: + if (index <= 0) return; + setState(() { + final draft = _stepDrafts.removeAt(index); + _stepDrafts.insert(index - 1, draft); + }); + break; + case _StepAction.moveDown: + if (index >= _stepDrafts.length - 1) return; + setState(() { + final draft = _stepDrafts.removeAt(index); + _stepDrafts.insert(index + 1, draft); + }); + break; + case _StepAction.duplicate: + _duplicateStep(index); + break; + case _StepAction.delete: + unawaited(_confirmRemoveStep(index)); + break; + } + } + + void _duplicateStep(int index) { + if (_stepDrafts.length >= 8) { + setState(() { + _stepError = 'Un exercice peut contenir jusqu’à 8 étapes.'; + }); + return; + } + setState(() { + _stepError = null; + _stepDrafts.insert(index + 1, _stepDrafts[index].duplicate( + 'step-draft-${_nextStepDraftId++}', + )); + }); + } + + Future _confirmRemoveStep(int index) async { + final draft = _stepDrafts[index]; + var confirmed = true; + if (draft.hasFilledContent) { + confirmed = + await showDialog( + context: context, + builder: (context) => AlertDialog( + title: const Text('Supprimer cette étape ?'), + content: const Text('Cette étape sera retirée de la séquence.'), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(false), + child: const Text('Annuler'), + ), + FilledButton( + onPressed: () => Navigator.of(context).pop(true), + child: const Text('Supprimer'), + ), + ], + ), + ) ?? + false; + } + if (!confirmed || !mounted) return; + setState(() { + final removed = _stepDrafts.removeAt(index); + removed.dispose(); + _stepError = null; + }); + } + + _ExerciseStepDraft _draftFromStep(ExerciseStep step) { + return _ExerciseStepDraft( + id: step.id, + name: step.name, + type: step.type, + defaultTargetValue: step.defaultTargetValue.toString(), + hasScore: step.hasScore, + scoreInputMode: step.scoreInputMode, + scoreLabel: step.scoreLabel, + scoreUnit: step.scoreUnit, + scoreTarget: step.scoreInputMode == ScoreInputMode.stopwatch + ? _optionalDoubleText( + _millisecondsToSeconds(step.defaultTargetScoreTimeMs), + ) + : _optionalDoubleText(step.defaultTargetScore), + ); + } + + List _buildSteps() { + if (!_stepsEnabled) return const []; + return [ + for (var index = 0; index < _stepDrafts.length; index++) + _stepDrafts[index].toExerciseStep( + position: index, + defaultTargetScoreTimeMs: _stepDrafts[index].scoreInputMode == + ScoreInputMode.stopwatch + ? _optionalSecondsToMilliseconds( + _stepDrafts[index].scoreTargetController.text, + ) + : null, + ), + ]; + } + Future _importImage() async { if (_imageMediaIds.length >= 5) { _showSnackBar('Maximum 5 images par exercice.'); @@ -784,12 +1233,16 @@ final class _ExerciseFormScreenState extends State { Future _save() async { final hasMeasure = _hasTime || _hasReps || _hasScore; + final hasValidSteps = !_stepsEnabled || _stepDrafts.isNotEmpty; setState(() { _measureError = hasMeasure ? null : 'Active au moins une mesure pour enregistrer.'; + _stepError = hasValidSteps + ? null + : 'Ajoute au moins une étape ou désactive la séquence.'; }); - if (!_formKey.currentState!.validate() || !hasMeasure) { + if (!_formKey.currentState!.validate() || !hasMeasure || !hasValidSteps) { return; } @@ -832,6 +1285,7 @@ final class _ExerciseFormScreenState extends State { _hasScore && scoreInputMode == ScoreInputMode.stopwatch ? _optionalSecondsToMilliseconds(_defaultScoreTimeController.text) : null; + final steps = _buildSteps(); try { if (exercise == null) { await widget.exerciseUseCases.create( @@ -850,6 +1304,7 @@ final class _ExerciseFormScreenState extends State { defaultTargetReps: defaultTargetReps, defaultTargetScore: defaultTargetScore, defaultTargetScoreTimeMs: defaultTargetScoreTimeMs, + steps: steps, ); } else { await widget.exerciseUseCases.update( @@ -869,6 +1324,7 @@ final class _ExerciseFormScreenState extends State { defaultTargetReps: defaultTargetReps, defaultTargetScore: defaultTargetScore, defaultTargetScoreTimeMs: defaultTargetScoreTimeMs, + steps: steps, ); } if (mounted) { @@ -961,6 +1417,104 @@ final class _ExerciseFormScreenState extends State { } } +enum _StepAction { moveUp, moveDown, duplicate, delete } + +final class _ExerciseStepDraft { + _ExerciseStepDraft({ + required this.id, + required String name, + this.type = ExerciseStepType.time, + required String defaultTargetValue, + this.hasScore = false, + this.scoreInputMode = ScoreInputMode.manual, + String? scoreLabel, + String? scoreUnit, + String? scoreTarget, + }) : nameController = TextEditingController(text: name), + targetController = TextEditingController(text: defaultTargetValue), + scoreLabelController = TextEditingController(text: scoreLabel), + scoreUnitController = TextEditingController(text: scoreUnit), + scoreTargetController = TextEditingController(text: scoreTarget); + + final String id; + ExerciseStepType type; + bool hasScore; + ScoreInputMode scoreInputMode; + final TextEditingController nameController; + final TextEditingController targetController; + final TextEditingController scoreLabelController; + final TextEditingController scoreUnitController; + final TextEditingController scoreTargetController; + + String get displayName { + final text = nameController.text.trim(); + return text.isEmpty ? 'Étape sans nom' : text; + } + + bool get hasFilledContent { + return nameController.text.trim().isNotEmpty || + targetController.text.trim().isNotEmpty || + hasScore || + scoreLabelController.text.trim().isNotEmpty || + scoreUnitController.text.trim().isNotEmpty || + scoreTargetController.text.trim().isNotEmpty; + } + + _ExerciseStepDraft duplicate(String id) { + return _ExerciseStepDraft( + id: id, + name: nameController.text, + type: type, + defaultTargetValue: targetController.text, + hasScore: hasScore, + scoreInputMode: scoreInputMode, + scoreLabel: scoreLabelController.text, + scoreUnit: scoreUnitController.text, + scoreTarget: scoreTargetController.text, + ); + } + + ExerciseStep toExerciseStep({ + required int position, + required int? defaultTargetScoreTimeMs, + }) { + final scoreTargetText = scoreTargetController.text.trim(); + return ExerciseStep( + id: id, + position: position, + name: nameController.text.trim(), + type: type, + defaultTargetValue: int.parse(targetController.text.trim()), + hasScore: hasScore, + scoreInputMode: hasScore ? scoreInputMode : ScoreInputMode.manual, + scoreLabel: hasScore && scoreInputMode == ScoreInputMode.manual + ? scoreLabelController.text.trim() + : null, + scoreUnit: hasScore && scoreInputMode == ScoreInputMode.manual + ? scoreUnitController.text.trim() + : null, + defaultTargetScore: + hasScore && + scoreInputMode == ScoreInputMode.manual && + scoreTargetText.isNotEmpty + ? double.parse(scoreTargetText) + : null, + defaultTargetScoreTimeMs: + hasScore && scoreInputMode == ScoreInputMode.stopwatch + ? defaultTargetScoreTimeMs + : null, + ); + } + + void dispose() { + nameController.dispose(); + targetController.dispose(); + scoreLabelController.dispose(); + scoreUnitController.dispose(); + scoreTargetController.dispose(); + } +} + final class MeasureBadge extends StatelessWidget { const MeasureBadge({ required this.measure, diff --git a/test/application/use_cases_test.dart b/test/application/use_cases_test.dart index bb02d5f..fcadb4e 100644 --- a/test/application/use_cases_test.dart +++ b/test/application/use_cases_test.dart @@ -1311,6 +1311,8 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { final results = []; final restStates = {}; final scoreStopwatchStates = {}; + final stepProgressStates = {}; + final stepResults = []; @override Future findById(String id) async { @@ -1342,6 +1344,25 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { .firstOrNull; } + @override + Future findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + return stepProgressStates.values + .where( + (state) => + state.activeWorkoutSessionId == sessionId && + state.programIndex == programIndex && + state.exerciseIndex == exerciseIndex && + state.setIndex == setIndex && + state.metadata.deletedAt == null, + ) + .firstOrNull; + } + @override Future> listRestStates(String sessionId) async { return restStates.values @@ -1369,6 +1390,24 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { .toList(); } + @override + Future> listExerciseStepProgressStates( + String sessionId, + ) async { + return stepProgressStates.values + .where((state) => state.activeWorkoutSessionId == sessionId) + .toList(); + } + + @override + Future> listExerciseStepResults( + String sessionId, + ) async { + return stepResults + .where((result) => result.activeWorkoutSessionId == sessionId) + .toList(); + } + @override Future save(ActiveWorkoutSession session) async { this.session = session; @@ -1384,6 +1423,29 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { scoreStopwatchStates[state.metadata.id] = state; } + @override + Future saveExerciseStepProgressState( + ActiveExerciseStepProgressState state, + ) async { + stepProgressStates[state.metadata.id] = state; + } + + @override + Future saveExerciseStepResult( + ActiveExerciseStepResult result, + ) async { + stepResults.removeWhere( + (existing) => + existing.activeWorkoutSessionId == result.activeWorkoutSessionId && + existing.programIndex == result.programIndex && + existing.exerciseIndex == result.exerciseIndex && + existing.setIndex == result.setIndex && + existing.passageIndex == result.passageIndex && + existing.stepIndex == result.stepIndex, + ); + stepResults.add(result); + } + @override Future deleteScoreStopwatchState({ required String sessionId, diff --git a/test/presentation/exercise_library_screen_test.dart b/test/presentation/exercise_library_screen_test.dart index 53000f9..f9fda9d 100644 --- a/test/presentation/exercise_library_screen_test.dart +++ b/test/presentation/exercise_library_screen_test.dart @@ -216,6 +216,204 @@ void main() { expect(find.text('Aucune image sélectionnée'), findsOneWidget); }); + testWidgets('activer les étapes permet d’ajouter une étape temps', ( + tester, + ) async { + final exerciseRepository = _FakeExerciseRepository(); + + await tester.binding.setSurfaceSize(const Size(400, 3200)); + addTearDown(() => tester.binding.setSurfaceSize(null)); + + await _pumpExerciseForm(tester, exerciseRepository); + await tester.tap( + find.widgetWithText(SwitchListTile, 'Rythmer cet exercice avec des étapes'), + ); + await tester.pump(); + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + + await tester.enterText( + find.widgetWithText(TextFormField, 'Nom de l’étape').last, + 'Dribble main droite', + ); + await tester.enterText( + find.widgetWithText(TextFormField, 'Durée par défaut (s)').last, + '12', + ); + await tester.pump(); + + expect(find.text('1. Dribble main droite'), findsOneWidget); + expect(find.text('Temps · 12 s'), findsOneWidget); + }); + + testWidgets('ajouter une étape répétitions avec score manuel', ( + tester, + ) async { + final exerciseRepository = _FakeExerciseRepository(); + + await tester.binding.setSurfaceSize(const Size(400, 3600)); + addTearDown(() => tester.binding.setSurfaceSize(null)); + + await _pumpExerciseForm(tester, exerciseRepository); + await tester.tap( + find.widgetWithText(SwitchListTile, 'Rythmer cet exercice avec des étapes'), + ); + await tester.pump(); + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + await tester.tap(_stepTypeRadio('Répétitions').last); + await tester.pump(); + await tester.enterText( + find.widgetWithText(TextFormField, 'Nom de l’étape').last, + 'Pompes', + ); + await tester.enterText( + find.widgetWithText(TextFormField, 'Répétitions par défaut').last, + '10', + ); + await tester.tap(find.widgetWithText(SwitchListTile, 'Score d’étape')); + await tester.pump(); + await tester.enterText( + find.widgetWithText(TextFormField, 'Score à saisir').last, + 'Réussites', + ); + await tester.enterText( + find.widgetWithText(TextFormField, 'Unité').last, + 'paniers', + ); + await tester.enterText( + find.widgetWithText(TextFormField, 'Score par défaut').last, + '0', + ); + await tester.pump(); + + expect(find.text('1. Pompes'), findsOneWidget); + expect(find.text('Répétitions · 10'), findsOneWidget); + expect(find.text('Mode de score'), findsOneWidget); + }); + + testWidgets('réordonner les étapes via Monter Descendre', (tester) async { + final exerciseRepository = _FakeExerciseRepository(); + + await tester.binding.setSurfaceSize(const Size(400, 4200)); + addTearDown(() => tester.binding.setSurfaceSize(null)); + + await _pumpExerciseForm(tester, exerciseRepository); + await tester.tap( + find.widgetWithText(SwitchListTile, 'Rythmer cet exercice avec des étapes'), + ); + await tester.pump(); + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + await tester.enterText( + find.widgetWithText(TextFormField, 'Nom de l’étape').at(0), + 'Première', + ); + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + await tester.enterText( + find.widgetWithText(TextFormField, 'Nom de l’étape').at(1), + 'Deuxième', + ); + await tester.pump(); + + await tester.tap(find.byTooltip('Actions de l’étape 2')); + await tester.pumpAndSettle(); + await tester.tap(find.text('Monter')); + await tester.pumpAndSettle(); + + expect(find.text('1. Deuxième'), findsOneWidget); + expect(find.text('2. Première'), findsOneWidget); + }); + + testWidgets('supprimer une étape demande confirmation', (tester) async { + final exerciseRepository = _FakeExerciseRepository(); + + await tester.binding.setSurfaceSize(const Size(400, 3200)); + addTearDown(() => tester.binding.setSurfaceSize(null)); + + await _pumpExerciseForm(tester, exerciseRepository); + await tester.tap( + find.widgetWithText(SwitchListTile, 'Rythmer cet exercice avec des étapes'), + ); + await tester.pump(); + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + + await tester.tap(find.byTooltip('Actions de l’étape 1')); + await tester.pumpAndSettle(); + await tester.tap(find.text('Supprimer')); + await tester.pumpAndSettle(); + + expect(find.text('Supprimer cette étape ?'), findsOneWidget); + + await tester.tap(find.widgetWithText(FilledButton, 'Supprimer')); + await tester.pumpAndSettle(); + + expect(find.text('Nouvelle étape'), findsNothing); + }); + + testWidgets('la limite de 8 étapes bloque l’ajout d’une neuvième', ( + tester, + ) async { + final exerciseRepository = _FakeExerciseRepository(); + + await tester.binding.setSurfaceSize(const Size(400, 8000)); + addTearDown(() => tester.binding.setSurfaceSize(null)); + + await _pumpExerciseForm(tester, exerciseRepository); + await tester.tap( + find.widgetWithText(SwitchListTile, 'Rythmer cet exercice avec des étapes'), + ); + await tester.pump(); + for (var index = 0; index < 8; index++) { + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + } + + expect(find.text('Limite atteinte'), findsOneWidget); + expect(find.text('Un exercice peut contenir jusqu’à 8 étapes.'), findsOneWidget); + expect(find.text('Ajouter une étape'), findsNothing); + }); + + testWidgets('sauvegarder transmet les étapes au use case', (tester) async { + final exerciseRepository = _FakeExerciseRepository(); + + await tester.binding.setSurfaceSize(const Size(400, 3600)); + addTearDown(() => tester.binding.setSurfaceSize(null)); + + await _pumpExerciseForm(tester, exerciseRepository); + await tester.enterText(find.widgetWithText(TextFormField, 'Nom'), 'Combo'); + await tester.enterText( + find.widgetWithText(TextFormField, 'Temps par défaut (s)'), + '30', + ); + await tester.tap( + find.widgetWithText(SwitchListTile, 'Rythmer cet exercice avec des étapes'), + ); + await tester.pump(); + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + await tester.enterText( + find.widgetWithText(TextFormField, 'Nom de l’étape').last, + 'Dribble main droite', + ); + await tester.enterText( + find.widgetWithText(TextFormField, 'Durée par défaut (s)').last, + '12', + ); + + await tester.ensureVisible(find.text('Enregistrer')); + await tester.tap(find.text('Enregistrer')); + await tester.pumpAndSettle(); + + final saved = exerciseRepository.saved.single; + expect(saved.steps, hasLength(1)); + expect(saved.steps.single.name, 'Dribble main droite'); + expect(saved.steps.single.type, ExerciseStepType.time); + expect(saved.steps.single.defaultTargetValue, 12); + }); + testWidgets('désigner une image comme icône l’indique visuellement', ( tester, ) async { @@ -335,6 +533,30 @@ void main() { ); } +Future _pumpExerciseForm( + WidgetTester tester, + _FakeExerciseRepository exerciseRepository, +) { + return tester.pumpWidget( + MaterialApp( + home: ExerciseFormScreen( + exerciseUseCases: _exerciseUseCases(exerciseRepository), + mediaUseCases: _mediaUseCases(exerciseRepository), + ), + ), + ); +} + +Finder _stepTypeRadio(String title) { + return find.byWidgetPredicate( + (widget) => + widget is RadioListTile && + widget.title is Text && + (widget.title as Text).data == title, + description: 'RadioListTile "$title"', + ); +} + ExerciseUseCases _exerciseUseCases(_FakeExerciseRepository repository) { return ExerciseUseCases( repository: repository, diff --git a/test/presentation/history_screen_test.dart b/test/presentation/history_screen_test.dart index 1b81011..5b30d29 100644 --- a/test/presentation/history_screen_test.dart +++ b/test/presentation/history_screen_test.dart @@ -274,6 +274,9 @@ final class _FakeWorkoutHistoryRepository implements WorkoutHistoryRepository { @override Future saveSetResult(WorkoutHistorySetResult result) async {} + + @override + Future saveStepResult(WorkoutHistoryStepResult result) async {} } final class _FakeWorkoutTemplateRepository @@ -335,6 +338,14 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { required int setIndex, }) async => null; + @override + Future findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async => null; + @override Future> listRestStates(String sessionId) async { return const []; @@ -352,6 +363,20 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return const []; } + @override + Future> listExerciseStepProgressStates( + String sessionId, + ) async { + return const []; + } + + @override + Future> listExerciseStepResults( + String sessionId, + ) async { + return const []; + } + @override Future save(ActiveWorkoutSession session) async {} @@ -361,6 +386,14 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { @override Future saveScoreStopwatchState(ActiveScoreStopwatchState state) async {} + @override + Future saveExerciseStepProgressState( + ActiveExerciseStepProgressState state, + ) async {} + + @override + Future saveExerciseStepResult(ActiveExerciseStepResult result) async {} + @override Future deleteScoreStopwatchState({ required String sessionId, diff --git a/test/presentation/home_screen_test.dart b/test/presentation/home_screen_test.dart index 98d030f..ad6a979 100644 --- a/test/presentation/home_screen_test.dart +++ b/test/presentation/home_screen_test.dart @@ -267,6 +267,16 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return null; } + @override + Future findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + return null; + } + @override Future> listRestStates(String sessionId) async { return restStates; @@ -284,6 +294,20 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return results; } + @override + Future> listExerciseStepProgressStates( + String sessionId, + ) async { + return const []; + } + + @override + Future> listExerciseStepResults( + String sessionId, + ) async { + return const []; + } + @override Future save(ActiveWorkoutSession session) async { this.session = session; @@ -299,6 +323,14 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { scoreStopwatchStates.add(state); } + @override + Future saveExerciseStepProgressState( + ActiveExerciseStepProgressState state, + ) async {} + + @override + Future saveExerciseStepResult(ActiveExerciseStepResult result) async {} + @override Future deleteScoreStopwatchState({ required String sessionId, @@ -416,4 +448,7 @@ final class _FakeWorkoutHistoryRepository implements WorkoutHistoryRepository { @override Future saveSetResult(WorkoutHistorySetResult result) async {} + + @override + Future saveStepResult(WorkoutHistoryStepResult result) async {} } diff --git a/test/presentation/workout_execution_screen_test.dart b/test/presentation/workout_execution_screen_test.dart index 0fedc1c..34ff377 100644 --- a/test/presentation/workout_execution_screen_test.dart +++ b/test/presentation/workout_execution_screen_test.dart @@ -1085,6 +1085,8 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { final results = []; final restStates = []; final scoreStopwatchStates = []; + final stepProgressStates = []; + final stepResults = []; @override Future findById(String id) async { @@ -1123,6 +1125,25 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return null; } + @override + Future findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + for (final state in stepProgressStates) { + if (state.activeWorkoutSessionId == sessionId && + state.programIndex == programIndex && + state.exerciseIndex == exerciseIndex && + state.setIndex == setIndex && + state.metadata.deletedAt == null) { + return state; + } + } + return null; + } + @override Future> listRestStates(String sessionId) async { return restStates @@ -1144,6 +1165,24 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return results; } + @override + Future> listExerciseStepProgressStates( + String sessionId, + ) async { + return stepProgressStates + .where((state) => state.activeWorkoutSessionId == sessionId) + .toList(); + } + + @override + Future> listExerciseStepResults( + String sessionId, + ) async { + return stepResults + .where((result) => result.activeWorkoutSessionId == sessionId) + .toList(); + } + @override Future save(ActiveWorkoutSession session) async { this.session = session; @@ -1173,6 +1212,44 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { } } + @override + Future saveExerciseStepProgressState( + ActiveExerciseStepProgressState state, + ) async { + final index = stepProgressStates.indexWhere( + (saved) => + saved.activeWorkoutSessionId == state.activeWorkoutSessionId && + saved.programIndex == state.programIndex && + saved.exerciseIndex == state.exerciseIndex && + saved.setIndex == state.setIndex, + ); + if (index == -1) { + stepProgressStates.add(state); + } else { + stepProgressStates[index] = state; + } + } + + @override + Future saveExerciseStepResult( + ActiveExerciseStepResult result, + ) async { + final index = stepResults.indexWhere( + (saved) => + saved.activeWorkoutSessionId == result.activeWorkoutSessionId && + saved.programIndex == result.programIndex && + saved.exerciseIndex == result.exerciseIndex && + saved.setIndex == result.setIndex && + saved.passageIndex == result.passageIndex && + saved.stepIndex == result.stepIndex, + ); + if (index == -1) { + stepResults.add(result); + } else { + stepResults[index] = result; + } + } + @override Future deleteScoreStopwatchState({ required String sessionId, @@ -1246,6 +1323,9 @@ final class _FakeWorkoutHistoryRepository implements WorkoutHistoryRepository { @override Future saveSetResult(WorkoutHistorySetResult result) async {} + + @override + Future saveStepResult(WorkoutHistoryStepResult result) async {} } final class _FakeProgramRepository implements ProgramRepository { diff --git a/test/presentation/workout_template_screen_test.dart b/test/presentation/workout_template_screen_test.dart index 4ec57f4..8f1b72f 100644 --- a/test/presentation/workout_template_screen_test.dart +++ b/test/presentation/workout_template_screen_test.dart @@ -342,6 +342,16 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return null; } + @override + Future findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + return null; + } + @override Future> listRestStates(String sessionId) async { return const []; @@ -359,6 +369,20 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return const []; } + @override + Future> listExerciseStepProgressStates( + String sessionId, + ) async { + return const []; + } + + @override + Future> listExerciseStepResults( + String sessionId, + ) async { + return const []; + } + @override Future save(ActiveWorkoutSession session) async { saveCount += 1; @@ -371,6 +395,14 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { @override Future saveScoreStopwatchState(ActiveScoreStopwatchState state) async {} + @override + Future saveExerciseStepProgressState( + ActiveExerciseStepProgressState state, + ) async {} + + @override + Future saveExerciseStepResult(ActiveExerciseStepResult result) async {} + @override Future deleteScoreStopwatchState({ required String sessionId, @@ -430,4 +462,7 @@ final class _FakeWorkoutHistoryRepository implements WorkoutHistoryRepository { @override Future saveSetResult(WorkoutHistorySetResult result) async {} + + @override + Future saveStepResult(WorkoutHistoryStepResult result) async {} }