migrating...

This commit is contained in:
Joshua Burman 2025-04-15 15:29:55 -04:00
parent bdc4fee8c2
commit de22d62432
22 changed files with 17610 additions and 1873 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,24 @@
import 'package:drift/drift.dart';
import 'package:sendtrain/database/database.dart';
part 'action_sets_dao.g.dart';
@DriftAccessor(tables: [ActionSets])
class ActionSetsDao extends DatabaseAccessor<AppDatabase>
with _$ActionSetsDaoMixin {
ActionSetsDao(super.db);
// Future<Session> find(int id) => (select(sessions)..where((session) => session.id.equals(id) )).getSingle();
// Stream<Session> watchSession(int id) => (select(sessions)..where((session) => session.id.equals(id) )).watchSingle();
// Future<List<Session>> all() => select(sessions).get();
// Stream<List<Session>> watch() => select(sessions).watch();
// Future createOrUpdate(SessionsCompanion session) => into(sessions).insertOnConflictUpdate(session);
// Future replace(Session session) => update(sessions).replace(session);
// Future remove(Session session) => delete(sessions).delete(session);
Future<List<ActionSet>> fromSession(Session session) async {
return await (select(actionSets)
..where((actionSet) => actionSet.sessionId.equals(session.id))..orderBy([(t) => OrderingTerm.asc(actionSets.position)]))
.get();
}
}

View File

@ -0,0 +1,10 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'action_sets_dao.dart';
// ignore_for_file: type=lint
mixin _$ActionSetsDaoMixin on DatabaseAccessor<AppDatabase> {
$ActivitiesTable get activities => attachedDatabase.activities;
$SessionsTable get sessions => attachedDatabase.sessions;
$ActionSetsTable get actionSets => attachedDatabase.actionSets;
}

View File

@ -12,7 +12,7 @@ class ActionsDao extends DatabaseAccessor<AppDatabase> with _$ActionsDaoMixin {
}
Future<Action> find(int id) async {
return await (select(actions)..where((action) => action.id.equals(id) )).getSingle();
return await (select(actions)..where((action) => action.id.equals(id))).getSingle();
}
Future<List<Action>> fromActivity(Activity activity, Session session) async {

View File

@ -7,6 +7,7 @@ import 'package:sendtrain/daos/media_items_dao.dart';
import 'package:sendtrain/daos/object_media_items_dao.dart';
import 'package:sendtrain/daos/session_activities_dao.dart';
import 'package:sendtrain/daos/sessions_dao.dart';
import 'package:sendtrain/daos/action_sets_dao.dart';
import 'package:sendtrain/database/seed.dart';
part 'database.g.dart';
@ -14,6 +15,8 @@ part 'database.g.dart';
@DriftDatabase(tables: [
Sessions,
SessionActivities,
// SessionSets,
ActionSets,
Activities,
ActivityActions,
Actions,
@ -25,6 +28,8 @@ part 'database.g.dart';
MediaItemsDao,
ObjectMediaItemsDao,
SessionActivitiesDao,
// SessionSetsDao,
ActionSetsDao,
ActivityActionsDao,
ActionsDao
])
@ -35,7 +40,7 @@ class AppDatabase extends _$AppDatabase {
AppDatabase() : super(_openConnection());
@override
int get schemaVersion => 35;
int get schemaVersion => 40;
@override
MigrationStrategy get migration {
@ -73,6 +78,26 @@ class Sessions extends Table {
dateTime().withDefault(Variable(DateTime.now()))();
}
class ActionSets extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get name => text().withLength(min: 3, max: 32)();
IntColumn get reps => integer()();
IntColumn get activityId =>
integer().references(Activities, #id, onDelete: KeyAction.cascade)();
IntColumn get restBeforeSet => integer().nullable()();
IntColumn get restBetweenReps => integer().nullable()();
IntColumn get restAfterSet => integer().nullable()();
TextColumn get repType => textEnum<RepType>()();
IntColumn get repLength => integer().nullable()();
TextColumn get setWeights => text().nullable()();
BoolColumn get isAlternating => boolean().withDefault(Variable(false))();
TextColumn get tempo => text().withLength(min: 6, max: 36).nullable()();
IntColumn get sessionId => integer().references(Sessions, #id, onDelete: KeyAction.cascade)();
IntColumn get position => integer()();
DateTimeColumn get createdAt =>
dateTime().withDefault(Variable(DateTime.now()))();
}
class SessionActivities extends Table {
IntColumn get id => integer().autoIncrement()();
IntColumn get sessionId =>
@ -85,6 +110,16 @@ class SessionActivities extends Table {
dateTime().withDefault(Variable(DateTime.now()))();
}
// class SessionSets extends Table {
// IntColumn get id => integer().autoIncrement()();
// IntColumn get setId =>
// integer().references(ActionSets, #id, onDelete: KeyAction.cascade)();
// IntColumn get sessionId => integer().references(Sessions, #id, onDelete: KeyAction.cascade)();
// IntColumn get position => integer()();
// DateTimeColumn get createdAt =>
// dateTime().withDefault(Variable(DateTime.now()))();
// }
enum ActivityCategories { fundamentals, conditioning, advanced, custom, pro }
enum ActivityType {
@ -113,7 +148,8 @@ enum ActivityEquipment {
bands,
medicineBall,
exerciseBall,
eZCurlBar
eZCurlBar,
crimpBlock,
}
enum ActivityMuscle {

File diff suppressed because it is too large Load Diff

View File

@ -5610,6 +5610,899 @@ final class Schema35 extends i0.VersionedSchema {
alias: null);
}
final class Schema36 extends i0.VersionedSchema {
Schema36({required super.database}) : super(version: 36);
@override
late final List<i1.DatabaseSchemaEntity> entities = [
sessions,
activities,
sessionActivities,
actions,
activityActions,
mediaItems,
objectMediaItems,
];
late final Shape12 sessions = Shape12(
source: i0.VersionedTable(
entityName: 'sessions',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_1,
_column_2,
_column_3,
_column_11,
_column_20,
_column_4,
_column_63,
],
attachedDatabase: database,
),
alias: null);
late final Shape17 activities = Shape17(
source: i0.VersionedTable(
entityName: 'activities',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_40,
_column_36,
_column_37,
_column_38,
_column_27,
_column_28,
_column_29,
_column_35,
_column_31,
_column_32,
_column_63,
],
attachedDatabase: database,
),
alias: null);
late final Shape13 sessionActivities = Shape13(
source: i0.VersionedTable(
entityName: 'session_activities',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_21,
_column_22,
_column_19,
_column_10,
_column_63,
],
attachedDatabase: database,
),
alias: null);
late final Shape21 actions = Shape21(
source: i0.VersionedTable(
entityName: 'actions',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_41,
_column_2,
_column_42,
_column_43,
_column_44,
_column_45,
_column_46,
_column_47,
_column_48,
_column_49,
_column_53,
_column_54,
_column_64,
_column_52,
_column_65,
_column_66,
_column_12,
_column_63,
],
attachedDatabase: database,
),
alias: null);
late final Shape22 activityActions = Shape22(
source: i0.VersionedTable(
entityName: 'activity_actions',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_22,
_column_23,
_column_21,
_column_19,
_column_63,
],
attachedDatabase: database,
),
alias: null);
late final Shape5 mediaItems = Shape5(
source: i0.VersionedTable(
entityName: 'media_items',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_41,
_column_2,
_column_25,
_column_6,
_column_63,
],
attachedDatabase: database,
),
alias: null);
late final Shape6 objectMediaItems = Shape6(
source: i0.VersionedTable(
entityName: 'object_media_items',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_15,
_column_16,
_column_24,
_column_63,
],
attachedDatabase: database,
),
alias: null);
}
i1.GeneratedColumn<DateTime> _column_63(String aliasedName) =>
i1.GeneratedColumn<DateTime>('created_at', aliasedName, false,
type: i1.DriftSqlType.dateTime,
defaultValue: const CustomExpression('1739308481'));
i1.GeneratedColumn<bool> _column_64(String aliasedName) =>
i1.GeneratedColumn<bool>('is_alternating', aliasedName, false,
type: i1.DriftSqlType.bool,
defaultConstraints: i1.GeneratedColumn.constraintIsAlways(
'CHECK ("is_alternating" IN (0, 1))'),
defaultValue: const CustomExpression('0'));
i1.GeneratedColumn<String> _column_65(String aliasedName) =>
i1.GeneratedColumn<String>('status', aliasedName, false,
type: i1.DriftSqlType.string,
defaultValue: const CustomExpression('\'pending\''));
i1.GeneratedColumn<String> _column_66(String aliasedName) => i1.GeneratedColumn<
String>('state', aliasedName, false,
type: i1.DriftSqlType.string,
defaultValue: const CustomExpression(
'\'{"currentSet": 0, "currentRep": 0, "currentActionType": 0, "currentTime": 0, "currentAction": 0}\''));
final class Schema37 extends i0.VersionedSchema {
Schema37({required super.database}) : super(version: 37);
@override
late final List<i1.DatabaseSchemaEntity> entities = [
sessions,
activities,
sessionActivities,
actions,
sets,
sessionSets,
activityActions,
mediaItems,
objectMediaItems,
];
late final Shape12 sessions = Shape12(
source: i0.VersionedTable(
entityName: 'sessions',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_1,
_column_2,
_column_3,
_column_11,
_column_20,
_column_4,
_column_67,
],
attachedDatabase: database,
),
alias: null);
late final Shape17 activities = Shape17(
source: i0.VersionedTable(
entityName: 'activities',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_40,
_column_36,
_column_37,
_column_38,
_column_27,
_column_28,
_column_29,
_column_35,
_column_31,
_column_32,
_column_67,
],
attachedDatabase: database,
),
alias: null);
late final Shape13 sessionActivities = Shape13(
source: i0.VersionedTable(
entityName: 'session_activities',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_21,
_column_22,
_column_19,
_column_10,
_column_67,
],
attachedDatabase: database,
),
alias: null);
late final Shape21 actions = Shape21(
source: i0.VersionedTable(
entityName: 'actions',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_41,
_column_2,
_column_42,
_column_43,
_column_44,
_column_45,
_column_46,
_column_47,
_column_48,
_column_49,
_column_53,
_column_54,
_column_64,
_column_52,
_column_65,
_column_66,
_column_12,
_column_67,
],
attachedDatabase: database,
),
alias: null);
late final Shape23 sets = Shape23(
source: i0.VersionedTable(
entityName: 'sets',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_68,
_column_69,
_column_23,
_column_70,
_column_46,
_column_71,
_column_48,
_column_49,
_column_54,
_column_64,
_column_52,
_column_67,
],
attachedDatabase: database,
),
alias: null);
late final Shape24 sessionSets = Shape24(
source: i0.VersionedTable(
entityName: 'session_sets',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_72,
_column_21,
_column_19,
_column_67,
],
attachedDatabase: database,
),
alias: null);
late final Shape22 activityActions = Shape22(
source: i0.VersionedTable(
entityName: 'activity_actions',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_22,
_column_23,
_column_21,
_column_19,
_column_67,
],
attachedDatabase: database,
),
alias: null);
late final Shape5 mediaItems = Shape5(
source: i0.VersionedTable(
entityName: 'media_items',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_41,
_column_2,
_column_25,
_column_6,
_column_67,
],
attachedDatabase: database,
),
alias: null);
late final Shape6 objectMediaItems = Shape6(
source: i0.VersionedTable(
entityName: 'object_media_items',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_15,
_column_16,
_column_24,
_column_67,
],
attachedDatabase: database,
),
alias: null);
}
i1.GeneratedColumn<DateTime> _column_67(String aliasedName) =>
i1.GeneratedColumn<DateTime>('created_at', aliasedName, false,
type: i1.DriftSqlType.dateTime,
defaultValue: const CustomExpression('1744074941'));
class Shape23 extends i0.VersionedTable {
Shape23({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<int> get id =>
columnsByName['id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get name =>
columnsByName['name']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get reps =>
columnsByName['reps']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get actionId =>
columnsByName['action_id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get restBeforeSet =>
columnsByName['rest_before_set']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get restBetweenReps =>
columnsByName['rest_between_reps']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get restAfterSet =>
columnsByName['rest_after_set']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get repType =>
columnsByName['rep_type']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get repLength =>
columnsByName['rep_length']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get setWeights =>
columnsByName['set_weights']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<bool> get isAlternating =>
columnsByName['is_alternating']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<String> get tempo =>
columnsByName['tempo']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<DateTime> get createdAt =>
columnsByName['created_at']! as i1.GeneratedColumn<DateTime>;
}
i1.GeneratedColumn<String> _column_68(String aliasedName) =>
i1.GeneratedColumn<String>('name', aliasedName, false,
additionalChecks: i1.GeneratedColumn.checkTextLength(
minTextLength: 3, maxTextLength: 32),
type: i1.DriftSqlType.string);
i1.GeneratedColumn<int> _column_69(String aliasedName) =>
i1.GeneratedColumn<int>('reps', aliasedName, false,
type: i1.DriftSqlType.int);
i1.GeneratedColumn<int> _column_70(String aliasedName) =>
i1.GeneratedColumn<int>('rest_before_set', aliasedName, true,
type: i1.DriftSqlType.int);
i1.GeneratedColumn<int> _column_71(String aliasedName) =>
i1.GeneratedColumn<int>('rest_after_set', aliasedName, true,
type: i1.DriftSqlType.int);
class Shape24 extends i0.VersionedTable {
Shape24({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<int> get id =>
columnsByName['id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get setId =>
columnsByName['set_id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get sessionId =>
columnsByName['session_id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get position =>
columnsByName['position']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<DateTime> get createdAt =>
columnsByName['created_at']! as i1.GeneratedColumn<DateTime>;
}
i1.GeneratedColumn<int> _column_72(String aliasedName) =>
i1.GeneratedColumn<int>('set_id', aliasedName, false,
type: i1.DriftSqlType.int,
defaultConstraints: i1.GeneratedColumn.constraintIsAlways(
'REFERENCES sets (id) ON DELETE CASCADE'));
final class Schema39 extends i0.VersionedSchema {
Schema39({required super.database}) : super(version: 39);
@override
late final List<i1.DatabaseSchemaEntity> entities = [
sessions,
activities,
sessionActivities,
actionSets,
sessionSets,
actions,
activityActions,
mediaItems,
objectMediaItems,
];
late final Shape12 sessions = Shape12(
source: i0.VersionedTable(
entityName: 'sessions',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_1,
_column_2,
_column_3,
_column_11,
_column_20,
_column_4,
_column_73,
],
attachedDatabase: database,
),
alias: null);
late final Shape17 activities = Shape17(
source: i0.VersionedTable(
entityName: 'activities',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_40,
_column_36,
_column_37,
_column_38,
_column_27,
_column_28,
_column_29,
_column_35,
_column_31,
_column_32,
_column_73,
],
attachedDatabase: database,
),
alias: null);
late final Shape13 sessionActivities = Shape13(
source: i0.VersionedTable(
entityName: 'session_activities',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_21,
_column_22,
_column_19,
_column_10,
_column_73,
],
attachedDatabase: database,
),
alias: null);
late final Shape25 actionSets = Shape25(
source: i0.VersionedTable(
entityName: 'action_sets',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_68,
_column_69,
_column_22,
_column_70,
_column_46,
_column_71,
_column_48,
_column_49,
_column_54,
_column_64,
_column_52,
_column_73,
],
attachedDatabase: database,
),
alias: null);
late final Shape24 sessionSets = Shape24(
source: i0.VersionedTable(
entityName: 'session_sets',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_74,
_column_21,
_column_19,
_column_73,
],
attachedDatabase: database,
),
alias: null);
late final Shape21 actions = Shape21(
source: i0.VersionedTable(
entityName: 'actions',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_41,
_column_2,
_column_42,
_column_43,
_column_44,
_column_45,
_column_46,
_column_47,
_column_48,
_column_49,
_column_53,
_column_54,
_column_64,
_column_52,
_column_65,
_column_66,
_column_12,
_column_73,
],
attachedDatabase: database,
),
alias: null);
late final Shape22 activityActions = Shape22(
source: i0.VersionedTable(
entityName: 'activity_actions',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_22,
_column_23,
_column_21,
_column_19,
_column_73,
],
attachedDatabase: database,
),
alias: null);
late final Shape5 mediaItems = Shape5(
source: i0.VersionedTable(
entityName: 'media_items',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_41,
_column_2,
_column_25,
_column_6,
_column_73,
],
attachedDatabase: database,
),
alias: null);
late final Shape6 objectMediaItems = Shape6(
source: i0.VersionedTable(
entityName: 'object_media_items',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_15,
_column_16,
_column_24,
_column_73,
],
attachedDatabase: database,
),
alias: null);
}
i1.GeneratedColumn<DateTime> _column_73(String aliasedName) =>
i1.GeneratedColumn<DateTime>('created_at', aliasedName, false,
type: i1.DriftSqlType.dateTime,
defaultValue: const CustomExpression('1744139454'));
class Shape25 extends i0.VersionedTable {
Shape25({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<int> get id =>
columnsByName['id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get name =>
columnsByName['name']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get reps =>
columnsByName['reps']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get activityId =>
columnsByName['activity_id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get restBeforeSet =>
columnsByName['rest_before_set']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get restBetweenReps =>
columnsByName['rest_between_reps']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get restAfterSet =>
columnsByName['rest_after_set']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get repType =>
columnsByName['rep_type']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get repLength =>
columnsByName['rep_length']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get setWeights =>
columnsByName['set_weights']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<bool> get isAlternating =>
columnsByName['is_alternating']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<String> get tempo =>
columnsByName['tempo']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<DateTime> get createdAt =>
columnsByName['created_at']! as i1.GeneratedColumn<DateTime>;
}
i1.GeneratedColumn<int> _column_74(String aliasedName) =>
i1.GeneratedColumn<int>('set_id', aliasedName, false,
type: i1.DriftSqlType.int,
defaultConstraints: i1.GeneratedColumn.constraintIsAlways(
'REFERENCES action_sets (id) ON DELETE CASCADE'));
final class Schema40 extends i0.VersionedSchema {
Schema40({required super.database}) : super(version: 40);
@override
late final List<i1.DatabaseSchemaEntity> entities = [
sessions,
activities,
sessionActivities,
actionSets,
actions,
activityActions,
mediaItems,
objectMediaItems,
];
late final Shape12 sessions = Shape12(
source: i0.VersionedTable(
entityName: 'sessions',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_1,
_column_2,
_column_3,
_column_11,
_column_20,
_column_4,
_column_75,
],
attachedDatabase: database,
),
alias: null);
late final Shape17 activities = Shape17(
source: i0.VersionedTable(
entityName: 'activities',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_40,
_column_36,
_column_37,
_column_38,
_column_27,
_column_28,
_column_29,
_column_35,
_column_31,
_column_32,
_column_75,
],
attachedDatabase: database,
),
alias: null);
late final Shape13 sessionActivities = Shape13(
source: i0.VersionedTable(
entityName: 'session_activities',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_21,
_column_22,
_column_19,
_column_10,
_column_75,
],
attachedDatabase: database,
),
alias: null);
late final Shape26 actionSets = Shape26(
source: i0.VersionedTable(
entityName: 'action_sets',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_68,
_column_69,
_column_22,
_column_70,
_column_46,
_column_71,
_column_48,
_column_49,
_column_54,
_column_64,
_column_52,
_column_21,
_column_19,
_column_75,
],
attachedDatabase: database,
),
alias: null);
late final Shape21 actions = Shape21(
source: i0.VersionedTable(
entityName: 'actions',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_41,
_column_2,
_column_42,
_column_43,
_column_44,
_column_45,
_column_46,
_column_47,
_column_48,
_column_49,
_column_53,
_column_54,
_column_64,
_column_52,
_column_65,
_column_66,
_column_12,
_column_75,
],
attachedDatabase: database,
),
alias: null);
late final Shape22 activityActions = Shape22(
source: i0.VersionedTable(
entityName: 'activity_actions',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_22,
_column_23,
_column_21,
_column_19,
_column_75,
],
attachedDatabase: database,
),
alias: null);
late final Shape5 mediaItems = Shape5(
source: i0.VersionedTable(
entityName: 'media_items',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_41,
_column_2,
_column_25,
_column_6,
_column_75,
],
attachedDatabase: database,
),
alias: null);
late final Shape6 objectMediaItems = Shape6(
source: i0.VersionedTable(
entityName: 'object_media_items',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_15,
_column_16,
_column_24,
_column_75,
],
attachedDatabase: database,
),
alias: null);
}
i1.GeneratedColumn<DateTime> _column_75(String aliasedName) =>
i1.GeneratedColumn<DateTime>('created_at', aliasedName, false,
type: i1.DriftSqlType.dateTime,
defaultValue: const CustomExpression('1744140262'));
class Shape26 extends i0.VersionedTable {
Shape26({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<int> get id =>
columnsByName['id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get name =>
columnsByName['name']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get reps =>
columnsByName['reps']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get activityId =>
columnsByName['activity_id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get restBeforeSet =>
columnsByName['rest_before_set']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get restBetweenReps =>
columnsByName['rest_between_reps']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get restAfterSet =>
columnsByName['rest_after_set']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get repType =>
columnsByName['rep_type']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get repLength =>
columnsByName['rep_length']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get setWeights =>
columnsByName['set_weights']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<bool> get isAlternating =>
columnsByName['is_alternating']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<String> get tempo =>
columnsByName['tempo']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get sessionId =>
columnsByName['session_id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get position =>
columnsByName['position']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<DateTime> get createdAt =>
columnsByName['created_at']! as i1.GeneratedColumn<DateTime>;
}
i0.MigrationStepWithVersion migrationSteps({
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
@ -5645,6 +6538,10 @@ i0.MigrationStepWithVersion migrationSteps({
required Future<void> Function(i1.Migrator m, Schema33 schema) from32To33,
required Future<void> Function(i1.Migrator m, Schema34 schema) from33To34,
required Future<void> Function(i1.Migrator m, Schema35 schema) from34To35,
required Future<void> Function(i1.Migrator m, Schema36 schema) from35To36,
required Future<void> Function(i1.Migrator m, Schema37 schema) from36To37,
required Future<void> Function(i1.Migrator m, Schema39 schema) from37To39,
required Future<void> Function(i1.Migrator m, Schema40 schema) from39To40,
}) {
return (currentVersion, database) async {
switch (currentVersion) {
@ -5818,6 +6715,26 @@ i0.MigrationStepWithVersion migrationSteps({
final migrator = i1.Migrator(database, schema);
await from34To35(migrator, schema);
return 35;
case 35:
final schema = Schema36(database: database);
final migrator = i1.Migrator(database, schema);
await from35To36(migrator, schema);
return 36;
case 36:
final schema = Schema37(database: database);
final migrator = i1.Migrator(database, schema);
await from36To37(migrator, schema);
return 37;
case 37:
final schema = Schema39(database: database);
final migrator = i1.Migrator(database, schema);
await from37To39(migrator, schema);
return 39;
case 39:
final schema = Schema40(database: database);
final migrator = i1.Migrator(database, schema);
await from39To40(migrator, schema);
return 40;
default:
throw ArgumentError.value('Unknown migration from $currentVersion');
}
@ -5859,6 +6776,10 @@ i1.OnUpgrade stepByStep({
required Future<void> Function(i1.Migrator m, Schema33 schema) from32To33,
required Future<void> Function(i1.Migrator m, Schema34 schema) from33To34,
required Future<void> Function(i1.Migrator m, Schema35 schema) from34To35,
required Future<void> Function(i1.Migrator m, Schema36 schema) from35To36,
required Future<void> Function(i1.Migrator m, Schema37 schema) from36To37,
required Future<void> Function(i1.Migrator m, Schema39 schema) from37To39,
required Future<void> Function(i1.Migrator m, Schema40 schema) from39To40,
}) =>
i0.VersionedSchema.stepByStepHelper(
step: migrationSteps(
@ -5896,4 +6817,8 @@ i1.OnUpgrade stepByStep({
from32To33: from32To33,
from33To34: from33To34,
from34To35: from34To35,
from35To36: from35To36,
from36To37: from36To37,
from37To39: from37To39,
from39To40: from39To40,
));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -66,18 +66,15 @@ Future<void> seedDb(AppDatabase database) async {
if (exercise['images'] != null) {
for (int j = 0; j < exercise['images'].length; j++) {
var image = exercise['images'][j];
images.add(
"https://raw.githubusercontent.com/yuhonas/free-exercise-db/main/exercises/$image");
images.add(image);
}
}
Map<Symbol, Value> payload = {
Symbol('title'): Value<String>(
exercise['name'].toString().trim().replaceAll(whitespaceRE, " ")),
Symbol('description'): Value<String>(json.encode(exercise['instructions']
.toString()
.trim()
.replaceAll(whitespaceRE, " "))),
Symbol('description'):
Value<String>(json.encode(exercise['instructions'])),
Symbol('force'): Value<String>(exercise['force'] ?? "")
};
@ -163,72 +160,100 @@ Future<void> seedDb(AppDatabase database) async {
"[\"achievement 1\", \"achievement 2\", \"achievement 3\"]"),
date: Value(DateTime.now())))
.then((sessionId) async {
// activities things
for (int j = 0; j <= random.nextInt(totalActivities); j++) {
int activityId = random.nextInt(activityIds.length);
activityIds.removeAt(activityId);
//session actions
int activityId = random.nextInt(activityIds.length);
await database
.into(database.sessionActivities)
.insert(SessionActivitiesCompanion.insert(
sessionId: sessionId,
activityId: activityId,
position: j,
results: Value("results json, will need to test"),
));
for (int i = 0; i < 5; i += 1) {
int restBefore = 0;
int restAfter = 300000;
// actions
// await database
// .into(database.actions)
// .insert(ActionsCompanion.insert(
// title: 'Test action',
// description:
// 'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
// totalSets: 5,
// totalReps: "[1]",
// restBeforeSets: Value(30000),
// restBetweenSets: Value(300000),
// restBetweenReps: Value(15000),
// restAfterSets: Value(300000),
// repType: RepType.time,
// repLength: Value(10000),
// repWeights: Value("[110]"),
// setWeights: Value("[1]"),
// isAlternating: Value(true),
// set: actionTypes[random.nextInt(actionTypes.length)]))
// .then((actionId) async {
// // add activity action association
// await database.into(database.activityActions).insert(
// ActivityActionsCompanion.insert(
// activityId: activityId, actionId: actionId, sessionId: sessionId, position: 0));
// });
// for (int k = 0; k <= random.nextInt(totalActions); k++) {
// await database
// .into(database.actions)
// .insert(ActionsCompanion.insert(
// title: 'Test action $k',
// description:
// '$k Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
// totalSets: 5,
// totalReps: "[1]",
// restBeforeSets: Value(30000),
// restBetweenSets: Value(300000),
// restBetweenReps: Value(15000),
// restAfterSets: Value(300000),
// repType: RepType.time,
// repLength: Value(10000),
// repWeights: Value("[110]"),
// setWeights: Value("[1]"),
// isAlternating: Value(true),
// set: actionTypes[random.nextInt(actionTypes.length)]))
// .then((actionId) async {
// // add activity action association
// await database.into(database.activityActions).insert(
// ActivityActionsCompanion.insert(
// activityId: activityId, actionId: actionId, position: k));
// });
// }
if (i == 0) {
restBefore = 30000;
}
await database.into(database.actionSets).insert(
ActionSetsCompanion.insert(
name: 'test set',
reps: 5,
activityId: activityId,
repType: RepType.time,
isAlternating: Value(true),
restBeforeSet: Value(restBefore),
restAfterSet: Value(restAfter),
restBetweenReps: Value(10000),
repLength: Value(10000),
setWeights: Value('[100]'),
tempo: Value('[3000,2000,1000]'),
sessionId: sessionId,
position: i));
}
// SessionSetsCompanion.insert()
// activities things
// for (int j = 0; j <= random.nextInt(totalActivities); j++) {
// int activityId = random.nextInt(activityIds.length);
// activityIds.removeAt(activityId);
// await database
// .into(database.sessionActivities)
// .insert(SessionActivitiesCompanion.insert(
// sessionId: sessionId,
// activityId: activityId,
// position: j,
// results: Value("results json, will need to test"),
// ));
// // actions
// // await database
// // .into(database.actions)
// // .insert(ActionsCompanion.insert(
// // title: 'Test action',
// // description:
// // 'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
// // totalSets: 5,
// // totalReps: "[1]",
// // restBeforeSets: Value(30000),
// // restBetweenSets: Value(300000),
// // restBetweenReps: Value(15000),
// // restAfterSets: Value(300000),
// // repType: RepType.time,
// // repLength: Value(10000),
// // repWeights: Value("[110]"),
// // setWeights: Value("[1]"),
// // isAlternating: Value(true),
// // set: actionTypes[random.nextInt(actionTypes.length)]))
// // .then((actionId) async {
// // // add activity action association
// // await database.into(database.activityActions).insert(
// // ActivityActionsCompanion.insert(
// // activityId: activityId, actionId: actionId, sessionId: sessionId, position: 0));
// // });
// // for (int k = 0; k <= random.nextInt(totalActions); k++) {
// // await database
// // .into(database.actions)
// // .insert(ActionsCompanion.insert(
// // title: 'Test action $k',
// // description:
// // '$k Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
// // totalSets: 5,
// // totalReps: "[1]",
// // restBeforeSets: Value(30000),
// // restBetweenSets: Value(300000),
// // restBetweenReps: Value(15000),
// // restAfterSets: Value(300000),
// // repType: RepType.time,
// // repLength: Value(10000),
// // repWeights: Value("[110]"),
// // setWeights: Value("[1]"),
// // isAlternating: Value(true),
// // set: actionTypes[random.nextInt(actionTypes.length)]))
// // .then((actionId) async {
// // // add activity action association
// // await database.into(database.activityActions).insert(
// // ActivityActionsCompanion.insert(
// // activityId: activityId, actionId: actionId, position: k));
// // });
// // }
// }
for (int n = 0; n <= random.nextInt(totalMedia); n++) {
final mediaItem = mediaItems[random.nextInt(mediaItems.length)];

View File

@ -6,7 +6,23 @@ ImageProvider findMediaByType(List<MediaItem> media, MediaType type) {
Image image;
if (found.isNotEmpty) {
image = Image.network(found.first.reference);
image = Image.network('https://test.com/image.jpg', loadingBuilder:
(BuildContext context, Widget child, ImageChunkEvent? loadingProgress) {
print('loading');
print(loadingProgress);
if (loadingProgress == null) return child;
return Center(
child: CircularProgressIndicator(
value: loadingProgress.expectedTotalBytes != null
? loadingProgress.cumulativeBytesLoaded /
loadingProgress.expectedTotalBytes!
: null,
),
);
}, errorBuilder: (context, error, stackTrace) {
print('error');
return Image.asset('assets/images/placeholder.jpg');
});
} else {
// Element is not found
image = Image.asset('assets/images/placeholder.jpg');

View File

@ -4,7 +4,7 @@ import 'package:sendtrain/database/database.dart';
import 'package:sendtrain/helpers/widget_helpers.dart';
import 'package:sendtrain/models/activity_timer_model.dart';
import 'package:sendtrain/providers/action_timer.dart';
import 'package:sendtrain/widgets/screens/activities_screen.dart';
// import 'package:sendtrain/widgets/screens/activities_screen.dart';
import 'package:sendtrain/widgets/screens/sessions_screen.dart';
// ignore: unused_import
import 'package:sendtrain/database/seed.dart';
@ -66,7 +66,7 @@ class _AppState extends State<App> {
padding: const EdgeInsets.fromLTRB(0, 50, 0, 0),
child: <Widget>[
SessionsScreen(),
const ActivitiesScreen(),
// const ActivitiesScreen(),
Container(
alignment: Alignment.center,
child: const Text('In Progress...'),
@ -94,9 +94,9 @@ class _AppState extends State<App> {
destinations: const <Widget>[
NavigationDestination(
icon: Icon(Icons.sports), label: "Sessions"),
NavigationDestination(
icon: Icon(Icons.sports_gymnastics_rounded),
label: "Activities"),
// NavigationDestination(
// icon: Icon(Icons.sports_gymnastics_rounded),
// label: "Activities"),
NavigationDestination(
icon: Icon(Icons.calendar_month_rounded), label: "Plan"),
NavigationDestination(

View File

@ -17,19 +17,45 @@ class MediaCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
DecorationImage mediaImage(MediaItem media) {
dynamic image;
mediaImage(MediaItem media) {
Image image = Image.asset('assets/images/placeholder.jpg');
if (media.type == MediaType.image || media.type == MediaType.location) {
image = NetworkImage(media.reference);
image = Image.network(media.reference, loadingBuilder:
(BuildContext context, Widget child,
ImageChunkEvent? loadingProgress) {
if (loadingProgress == null) return child;
return Text('WTF!!!!');
// return Center(
// child: CircularProgressIndicator(
// value: loadingProgress.expectedTotalBytes != null
// ? loadingProgress.cumulativeBytesLoaded /
// loadingProgress.expectedTotalBytes!
// : null,
// ),
// );
});
} else if (media.type == MediaType.localImage) {
image = Image.memory(base64Decode(media.reference)).image;
image = Image.memory(base64Decode(media.reference));
} else if (media.type == MediaType.youtube) {
image =
NetworkImage('https://img.youtube.com/vi/${media.reference}/0.jpg');
} else if (media.type == MediaType.localVideo) {}
Image.network('https://img.youtube.com/vi/${media.reference}/0.jpg',
loadingBuilder: (BuildContext context, Widget child,
ImageChunkEvent? loadingProgress) {
if (loadingProgress == null) return child;
return Text('WTF!!!!');
// return Center(
// child: CircularProgressIndicator(
// value: loadingProgress.expectedTotalBytes != null
// ? loadingProgress.cumulativeBytesLoaded /
// loadingProgress.expectedTotalBytes!
// : null,
// ),
// );
});
} //else if (media.type == MediaType.localVideo) {}
return DecorationImage(image: image, fit: BoxFit.cover);
return DecorationImage(image: image.image, fit: BoxFit.cover);
}
return Container(

View File

@ -13,6 +13,7 @@ import 'package:sendtrain/widgets/generic/elements/generic_progress_indicator.da
import 'package:sendtrain/widgets/sessions/session_activities_editor.dart';
import 'package:sendtrain/widgets/sessions/session_editor.dart';
import 'package:sendtrain/widgets/sessions/session_view_achievements.dart';
import 'package:sendtrain/widgets/sessions/session_view_actions.dart';
import 'package:sendtrain/widgets/sessions/session_view_activities.dart';
import 'package:sendtrain/widgets/sessions/session_view_media.dart';
@ -178,13 +179,20 @@ class _SessionViewState extends State<SessionView> {
fontSize: 20, fontWeight: FontWeight.bold),
'Media:')),
SessionViewMedia(session: session),
// const Padding(
// padding: EdgeInsets.fromLTRB(15, 30, 0, 10),
// child: Text(
// style: TextStyle(
// fontSize: 20, fontWeight: FontWeight.bold),
// 'Activites:')),
// SessionViewActivities(session: session),
const Padding(
padding: EdgeInsets.fromLTRB(15, 30, 0, 10),
child: Text(
style: TextStyle(
fontSize: 20, fontWeight: FontWeight.bold),
'Activites:')),
SessionViewActivities(session: session),
'Actions:')),
SessionViewActions(session: session)
],
));
} else {

View File

@ -0,0 +1,42 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
import 'package:sendtrain/daos/action_sets_dao.dart';
import 'package:sendtrain/database/database.dart';
class SessionViewActions extends StatelessWidget {
SessionViewActions({super.key, required this.session});
final Session session;
// final List actions;
final ItemScrollController itemScrollController = ItemScrollController();
final ScrollOffsetController scrollOffsetController =
ScrollOffsetController();
final ItemPositionsListener itemPositionsListener =
ItemPositionsListener.create();
final ScrollOffsetListener scrollOffsetListener =
ScrollOffsetListener.create();
@override
Widget build(BuildContext context) {
return FutureBuilder<List>(
future: ActionSetsDao(Provider.of<AppDatabase>(context))
.fromSession(session),
builder: (context, snapshot) {
if (snapshot.hasData) {
List<ActionSet> actionSets = snapshot.data! as List<ActionSet>;
return Text(actionSets.first.name);
} else {
return Container(
alignment: Alignment.center,
child: SizedBox(
height: 50.0,
width: 50.0,
child: CircularProgressIndicator(),
));
}
});
}
}

View File

@ -7,6 +7,11 @@ import 'schema_v1.dart' as v1;
import 'schema_v2.dart' as v2;
import 'schema_v3.dart' as v3;
import 'schema_v4.dart' as v4;
import 'schema_v5.dart' as v5;
import 'schema_v6.dart' as v6;
import 'schema_v7.dart' as v7;
import 'schema_v8.dart' as v8;
import 'schema_v9.dart' as v9;
import 'schema_v10.dart' as v10;
import 'schema_v11.dart' as v11;
import 'schema_v12.dart' as v12;
@ -17,11 +22,6 @@ import 'schema_v16.dart' as v16;
import 'schema_v17.dart' as v17;
import 'schema_v18.dart' as v18;
import 'schema_v19.dart' as v19;
import 'schema_v5.dart' as v5;
import 'schema_v6.dart' as v6;
import 'schema_v7.dart' as v7;
import 'schema_v8.dart' as v8;
import 'schema_v9.dart' as v9;
import 'schema_v20.dart' as v20;
import 'schema_v21.dart' as v21;
import 'schema_v22.dart' as v22;
@ -38,6 +38,10 @@ import 'schema_v32.dart' as v32;
import 'schema_v33.dart' as v33;
import 'schema_v34.dart' as v34;
import 'schema_v35.dart' as v35;
import 'schema_v36.dart' as v36;
import 'schema_v37.dart' as v37;
import 'schema_v39.dart' as v39;
import 'schema_v40.dart' as v40;
class GeneratedHelper implements SchemaInstantiationHelper {
@override
@ -51,6 +55,16 @@ class GeneratedHelper implements SchemaInstantiationHelper {
return v3.DatabaseAtV3(db);
case 4:
return v4.DatabaseAtV4(db);
case 5:
return v5.DatabaseAtV5(db);
case 6:
return v6.DatabaseAtV6(db);
case 7:
return v7.DatabaseAtV7(db);
case 8:
return v8.DatabaseAtV8(db);
case 9:
return v9.DatabaseAtV9(db);
case 10:
return v10.DatabaseAtV10(db);
case 11:
@ -71,16 +85,6 @@ class GeneratedHelper implements SchemaInstantiationHelper {
return v18.DatabaseAtV18(db);
case 19:
return v19.DatabaseAtV19(db);
case 5:
return v5.DatabaseAtV5(db);
case 6:
return v6.DatabaseAtV6(db);
case 7:
return v7.DatabaseAtV7(db);
case 8:
return v8.DatabaseAtV8(db);
case 9:
return v9.DatabaseAtV9(db);
case 20:
return v20.DatabaseAtV20(db);
case 21:
@ -113,6 +117,14 @@ class GeneratedHelper implements SchemaInstantiationHelper {
return v34.DatabaseAtV34(db);
case 35:
return v35.DatabaseAtV35(db);
case 36:
return v36.DatabaseAtV36(db);
case 37:
return v37.DatabaseAtV37(db);
case 39:
return v39.DatabaseAtV39(db);
case 40:
return v40.DatabaseAtV40(db);
default:
throw MissingSchemaException(version, versions);
}
@ -153,6 +165,10 @@ class GeneratedHelper implements SchemaInstantiationHelper {
32,
33,
34,
35
35,
36,
37,
39,
40
];
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff