diff --git a/lib/main.dart b/lib/main.dart index 2790be2..2c98f4c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,13 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:isar/isar.dart'; -import 'package:path_provider/path_provider.dart'; - import 'src/app.dart'; -import 'src/shared/data/local/collections/user_collection.dart'; -import 'src/shared/data/local/collections/cycle_collection.dart'; -import 'src/shared/data/local/collections/workout_collection.dart'; +import 'src/shared/data/local/app_database.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -17,19 +12,15 @@ void main() async { DeviceOrientation.portraitDown, ]); - final dir = await getApplicationDocumentsDirectory(); - final isar = await Isar.open( - [UserCollectionSchema, CycleCollectionSchema, WorkoutCollectionSchema], - directory: dir.path, - name: 'slrpg_db', - ); + final database = AppDatabase(); runApp( ProviderScope( - overrides: [isarProvider.overrideWithValue(isar)], + overrides: [appDatabaseProvider.overrideWithValue(database)], child: const SLRPGApp(), ), ); } -final isarProvider = Provider((ref) => throw UnimplementedError()); +final appDatabaseProvider = + Provider((ref) => throw UnimplementedError()); diff --git a/lib/src/features/authentication/presentation/screens/login_screen.dart b/lib/src/features/authentication/presentation/screens/login_screen.dart index cc4d1a2..3997300 100644 --- a/lib/src/features/authentication/presentation/screens/login_screen.dart +++ b/lib/src/features/authentication/presentation/screens/login_screen.dart @@ -43,10 +43,22 @@ class _LoginScreenState extends ConsumerState { } } catch (e) { if (mounted) { + String message = 'Login failed. Please try again.'; + final errorStr = e.toString(); + + if (errorStr.contains('400')) { + message = 'Invalid email or password.'; + } else if (errorStr.contains('SocketException') || + errorStr.contains('Connection refused') || + errorStr.contains('Network is unreachable')) { + message = 'Could not connect to server. Please check your internet.'; + } + ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text('Login failed: ${e.toString()}'), + content: Text(message), backgroundColor: AppTheme.errorColor, + behavior: SnackBarBehavior.floating, ), ); } @@ -70,7 +82,6 @@ class _LoginScreenState extends ConsumerState { mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - // Logo Container( width: 100, height: 100, @@ -85,7 +96,6 @@ class _LoginScreenState extends ConsumerState { ), ), const SizedBox(height: 24), - Text( 'WELCOME BACK', style: Theme.of(context).textTheme.displayMedium, @@ -98,7 +108,6 @@ class _LoginScreenState extends ConsumerState { textAlign: TextAlign.center, ), const SizedBox(height: 48), - TextFormField( controller: _emailController, keyboardType: TextInputType.emailAddress, @@ -117,7 +126,6 @@ class _LoginScreenState extends ConsumerState { }, ), const SizedBox(height: 16), - TextFormField( controller: _passwordController, obscureText: _obscurePassword, @@ -146,7 +154,6 @@ class _LoginScreenState extends ConsumerState { }, ), const SizedBox(height: 32), - ElevatedButton( onPressed: _isLoading ? null : _handleLogin, child: _isLoading @@ -161,7 +168,6 @@ class _LoginScreenState extends ConsumerState { : const Text('LOGIN'), ), const SizedBox(height: 16), - Row( mainAxisAlignment: MainAxisAlignment.center, children: [ diff --git a/lib/src/features/authentication/presentation/screens/profile_screen.dart b/lib/src/features/authentication/presentation/screens/profile_screen.dart index daf80ea..82f0b3a 100644 --- a/lib/src/features/authentication/presentation/screens/profile_screen.dart +++ b/lib/src/features/authentication/presentation/screens/profile_screen.dart @@ -1,14 +1,14 @@ +import 'package:drift/drift.dart' hide Column; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import '../../../../core/theme/app_theme.dart'; import '../../../../shared/data/repositories/user_repository.dart'; -import '../../../../shared/data/local/collections/user_collection.dart'; +import '../../../../shared/data/local/app_database.dart'; import '../../../gamification/domain/entities/avatar_config.dart'; import '../../../gamification/presentation/widgets/avatar_editor.dart'; import '../../../gamification/presentation/widgets/avatar_renderer.dart'; -import 'dart:convert'; class ProfileScreen extends ConsumerStatefulWidget { const ProfileScreen({super.key}); @@ -46,6 +46,11 @@ class _ProfileScreenState extends ConsumerState { await ref .read(userRepositoryProvider) .updateBodyweight(_currentBodyweight); + + if (_user != null) { + _user = _user!.copyWith(currentBodyweight: _currentBodyweight); + } + if (mounted) { setState(() => _hasChanges = false); ScaffoldMessenger.of(context).showSnackBar( @@ -163,8 +168,8 @@ class _ProfileScreenState extends ConsumerState { } void _showAvatarEditor() { - final currentConfig = _user?.avatarConfigJson != null - ? AvatarConfig.fromJson(jsonDecode(_user!.avatarConfigJson!)) + final currentConfig = _user?.avatarConfig != null + ? AvatarConfig.fromJson(_user!.avatarConfig!) : const AvatarConfig(); showModalBottomSheet( @@ -199,8 +204,13 @@ class _ProfileScreenState extends ConsumerState { ).then((result) async { if (result is AvatarConfig) { setState(() => _isLoading = true); - _user!.avatarConfigJson = jsonEncode(result.toJson()); - _user!.isDirty = true; + + final updatedUser = _user!.copyWith( + avatarConfig: Value(result.toJson()), + isDirty: true, + ); + _user = updatedUser; + await ref.read(userRepositoryProvider).saveLocalUser(_user!); setState(() => _isLoading = false); } @@ -210,8 +220,8 @@ class _ProfileScreenState extends ConsumerState { @override Widget build(BuildContext context) { final userRepo = ref.watch(userRepositoryProvider); - final avatarConfig = _user?.avatarConfigJson != null - ? AvatarConfig.fromJson(jsonDecode(_user!.avatarConfigJson!)) + final avatarConfig = _user?.avatarConfig != null + ? AvatarConfig.fromJson(_user!.avatarConfig!) : const AvatarConfig(); return Scaffold( diff --git a/lib/src/features/dashboard/presentation/screens/hub_screen.dart b/lib/src/features/dashboard/presentation/screens/hub_screen.dart index 8fc4725..0a1e3b7 100644 --- a/lib/src/features/dashboard/presentation/screens/hub_screen.dart +++ b/lib/src/features/dashboard/presentation/screens/hub_screen.dart @@ -6,21 +6,20 @@ import 'package:go_router/go_router.dart'; import '../../../../core/constants/asset_paths.dart'; import '../../../../core/theme/app_theme.dart'; +import '../../../../shared/data/local/app_database.dart'; import '../../../../shared/data/repositories/user_repository.dart'; import '../../../../shared/data/repositories/cycle_repository.dart'; -import '../../../../shared/domain/logic/xp_calculator.dart'; -import '../widgets/xp_bar_widget.dart'; -import '../widgets/level_display.dart'; -import '../widgets/start_raid_button.dart'; -import '../../../../shared/data/local/collections/user_collection.dart'; -import '../../../../shared/data/local/collections/cycle_collection.dart'; import '../../../../shared/data/repositories/workout_repository.dart'; -import '../../../../shared/domain/entities/exercise.dart'; -import '../../../../shared/domain/logic/wendler_calculator.dart'; import '../../../../shared/data/remote/sync_service.dart'; +import '../../../../shared/domain/logic/xp_calculator.dart'; +import '../../../../shared/domain/logic/wendler_calculator.dart'; +import '../../../../shared/domain/entities/exercise.dart'; import '../../../../shared/domain/entities/workout_set.dart'; import '../../../gamification/domain/entities/avatar_config.dart'; import '../../../gamification/presentation/widgets/avatar_renderer.dart'; +import '../widgets/xp_bar_widget.dart'; +import '../widgets/level_display.dart'; +import '../widgets/start_raid_button.dart'; class HubScreen extends ConsumerStatefulWidget { const HubScreen({super.key}); @@ -41,7 +40,6 @@ class _HubScreenState extends ConsumerState { @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) { _runSync(); }); @@ -104,7 +102,10 @@ class _HubScreenState extends ConsumerState { CycleCollection cycle, UserCollection user) async { try { final workoutRepo = ref.read(workoutRepositoryProvider); - final cycleRepo = ref.read(cycleRepositoryProvider); + + final tmsDynamic = cycle.trainingMaxes; + final trainingMaxes = Map.from(tmsDynamic + .map((key, value) => MapEntry(key, (value as num).toDouble()))); int targetWeek = 1; int targetDay = 1; @@ -138,8 +139,6 @@ class _HubScreenState extends ConsumerState { return; } - final trainingMaxes = cycleRepo.getCurrentTrainingMaxes(); - var workout = await workoutRepo.getWorkoutByWeekDay( cycleId: cycleRefId, localCycleId: localCycleId, @@ -162,7 +161,7 @@ class _HubScreenState extends ConsumerState { cycleId: cycleRefId, week: targetWeek, day: targetDay, - exercisesJson: jsonEncode(exercises.map((e) => e.toJson()).toList()), + exercises: exercises.map((e) => e.toJson()).toList(), ); } @@ -202,8 +201,9 @@ class _HubScreenState extends ConsumerState { final user = snapshot.data![0] as UserCollection?; final cycle = snapshot.data![1] as CycleCollection?; - final avatarConfig = user?.avatarConfigJson != null - ? AvatarConfig.fromJson(jsonDecode(user!.avatarConfigJson!)) + + final avatarConfig = user?.avatarConfig != null + ? AvatarConfig.fromJson(user!.avatarConfig!) : const AvatarConfig(); if (user == null) { diff --git a/lib/src/features/history/presentation/screens/history_screen.dart b/lib/src/features/history/presentation/screens/history_screen.dart index 47326e8..305127d 100644 --- a/lib/src/features/history/presentation/screens/history_screen.dart +++ b/lib/src/features/history/presentation/screens/history_screen.dart @@ -1,15 +1,13 @@ -import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'package:intl/intl.dart'; import '../../../../core/theme/app_theme.dart'; +import '../../../../shared/data/local/app_database.dart'; import '../../../../shared/data/repositories/user_repository.dart'; import '../../../../shared/data/repositories/workout_repository.dart'; -import '../../../../shared/data/local/collections/workout_collection.dart'; import '../../../../shared/domain/entities/exercise.dart'; -import '../../../../shared/domain/entities/workout_set.dart'; class HistoryScreen extends ConsumerStatefulWidget { const HistoryScreen({super.key}); @@ -27,13 +25,11 @@ class _HistoryScreenState extends ConsumerState { if (user == null) return []; final userId = user.serverId ?? user.id.toString(); - return workoutRepo.getCompletedWorkouts(userId); // ID übergeben + return workoutRepo.getCompletedWorkouts(userId); } @override Widget build(BuildContext context) { - final workoutRepo = ref.watch(workoutRepositoryProvider); - return Scaffold( appBar: AppBar( title: const Text('Quest Log'), @@ -74,7 +70,7 @@ class _HistoryScreenState extends ConsumerState { ); } - final workouts = snapshot.data! + final workouts = List.from(snapshot.data!) ..sort((a, b) => b.completedAt!.compareTo(a.completedAt!)); return ListView.builder( @@ -98,8 +94,10 @@ class _WorkoutHistoryCard extends StatelessWidget { List _parseExercises() { try { - final List jsonList = jsonDecode(workout.exercisesJson); - return jsonList.map((json) => Exercise.fromJson(json)).toList(); + final List list = workout.exercises; + return list + .map((json) => Exercise.fromJson(json as Map)) + .toList(); } catch (e) { debugPrint('Error parsing workout history: $e'); return []; @@ -237,10 +235,10 @@ class _ExerciseDetailRow extends StatelessWidget { Table( defaultVerticalAlignment: TableCellVerticalAlignment.middle, columnWidths: const { - 0: FlexColumnWidth(1), // Set - 1: FlexColumnWidth(2), // Weight - 2: FlexColumnWidth(2), // Reps - 3: FlexColumnWidth(1), // Type (AMRAP/FSL) + 0: FlexColumnWidth(1), + 1: FlexColumnWidth(2), + 2: FlexColumnWidth(2), + 3: FlexColumnWidth(1), }, children: exercise.sets.where((s) => s.completed).map((set) { return TableRow( diff --git a/lib/src/features/inventory/presentation/screens/inventory_screen.dart b/lib/src/features/inventory/presentation/screens/inventory_screen.dart index 1372aad..440a331 100644 --- a/lib/src/features/inventory/presentation/screens/inventory_screen.dart +++ b/lib/src/features/inventory/presentation/screens/inventory_screen.dart @@ -29,7 +29,7 @@ class _InventoryScreenState extends ConsumerState { Future _loadCurrentInventory() async { final userRepo = ref.read(userRepositoryProvider); - final inventory = userRepo.getInventorySettings(); + final inventory = await userRepo.getInventorySettingsAsync(); final barWeight = (inventory['bar_weight'] as num?)?.toDouble() ?? 20.0; @@ -62,7 +62,8 @@ class _InventoryScreenState extends ConsumerState { }; for (var b in bandsList) { - final color = b['color'] as String; + final band = b as Map; + final color = band['color'] as String; if (bandMap.containsKey(color)) { bandMap[color] = true; } diff --git a/lib/src/features/onboarding/presentation/screens/avatar_setup_screen.dart b/lib/src/features/onboarding/presentation/screens/avatar_setup_screen.dart index 306701a..51ff430 100644 --- a/lib/src/features/onboarding/presentation/screens/avatar_setup_screen.dart +++ b/lib/src/features/onboarding/presentation/screens/avatar_setup_screen.dart @@ -1,12 +1,12 @@ -import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; +import 'package:drift/drift.dart' hide Column; import '../../../../core/theme/app_theme.dart'; -import '../../../../core/constants/app_constants.dart'; import '../../../../shared/data/repositories/user_repository.dart'; import '../../../../shared/data/repositories/cycle_repository.dart'; +import '../../../../shared/data/local/app_database.dart'; import '../../../gamification/domain/entities/avatar_config.dart'; import '../../../gamification/presentation/widgets/avatar_editor.dart'; import 'bodyweight_input_screen.dart'; @@ -41,10 +41,12 @@ class _AvatarSetupScreenState extends ConsumerState { inventorySettings: inventorySettings, ); } else { - user.currentBodyweight = - onboardingData['bodyweight'] ?? user.currentBodyweight; - user.inventorySettingsJson = jsonEncode(inventorySettings); - user.isDirty = true; + user = user.copyWith( + currentBodyweight: + onboardingData['bodyweight'] ?? user.currentBodyweight, + inventorySettings: Value(inventorySettings), + isDirty: true, + ); await userRepo.saveLocalUser(user); try { @@ -55,8 +57,10 @@ class _AvatarSetupScreenState extends ConsumerState { } } - user!.avatarConfigJson = jsonEncode(_config.toJson()); - user.isDirty = true; + user = user.copyWith( + avatarConfig: Value(_config.toJson()), + isDirty: true, + ); await userRepo.saveLocalUser(user); final trainingMaxes = diff --git a/lib/src/features/stats/presentation/screens/stats_screen.dart b/lib/src/features/stats/presentation/screens/stats_screen.dart index 9fa6924..199371e 100644 --- a/lib/src/features/stats/presentation/screens/stats_screen.dart +++ b/lib/src/features/stats/presentation/screens/stats_screen.dart @@ -1,12 +1,10 @@ -import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import '../../../../core/theme/app_theme.dart'; +import '../../../../shared/data/local/app_database.dart'; // Drift Models import '../../../../shared/data/repositories/cycle_repository.dart'; -import '../../../../shared/data/local/collections/cycle_collection.dart'; -import '../../../../shared/data/remote/api_client.dart'; // Zugriff auf API import '../../../../shared/data/repositories/user_repository.dart'; import '../../../../shared/data/repositories/workout_repository.dart'; import '../../../../shared/domain/entities/exercise.dart'; @@ -55,19 +53,15 @@ class _StatsScreenState extends ConsumerState { for (var workout in allWorkouts) { if (workout.completedAt == null) continue; - List exercisesJson = []; - try { - exercisesJson = jsonDecode(workout.exercisesJson); - } catch (e) { - continue; - } + final exercisesList = workout.exercises; double max1RM = 0.0; double sessionVolume = 0.0; bool foundExercise = false; double trainingMax = 0.0; - for (var exJson in exercisesJson) { + for (var exDynamic in exercisesList) { + final exJson = exDynamic as Map; final exercise = Exercise.fromJson(exJson); if (exercise.exerciseId == _selectedExercise) { @@ -147,12 +141,10 @@ class _StatsScreenState extends ConsumerState { try { final cycleRepo = ref.read(cycleRepositoryProvider); - final oldTMs = - jsonDecode(currentCycle.trainingMaxesJson) as Map; + final oldTMs = currentCycle.trainingMaxes; final newCycle = await cycleRepo.finishCycle(); - final newTMs = - jsonDecode(newCycle.trainingMaxesJson) as Map; + final newTMs = newCycle.trainingMaxes; if (mounted) { await showDialog( @@ -215,7 +207,6 @@ class _StatsScreenState extends ConsumerState { ), const SizedBox(height: 24), ], - Text( 'Progress Analysis', style: Theme.of(context) @@ -224,7 +215,6 @@ class _StatsScreenState extends ConsumerState { ?.copyWith(color: AppTheme.textPrimary), ), const SizedBox(height: 16), - SingleChildScrollView( scrollDirection: Axis.horizontal, child: Row( @@ -250,14 +240,11 @@ class _StatsScreenState extends ConsumerState { ), ), const SizedBox(height: 16), - _isChartLoading ? const SizedBox( height: 250, child: Center(child: CircularProgressIndicator())) : ProgressChart(data: _chartData), - - // (Optional: Range Selector unten drunter '1M', '3M', '1Y'...) ], ), ); @@ -275,7 +262,8 @@ class _CurrentCycleCard extends StatelessWidget { @override Widget build(BuildContext context) { - final tms = jsonDecode(cycle.trainingMaxesJson) as Map; + // Drift: Direct access + final tms = cycle.trainingMaxes; return Card( child: Padding( @@ -380,7 +368,7 @@ class _CycleFinishDialog extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( - 'You have defeated the guardians of this cycle. But deeper in the dungeon, stronger foes await...'), // Story + 'You have defeated the guardians of this cycle. But deeper in the dungeon, stronger foes await...'), const SizedBox(height: 16), const Divider(), const SizedBox(height: 8), @@ -388,12 +376,17 @@ class _CycleFinishDialog extends StatelessWidget { style: TextStyle(fontWeight: FontWeight.bold)), const SizedBox(height: 16), _DiffRow( - name: 'Squat', oldVal: oldTMs['squat'], newVal: newTMs['squat']), + name: 'Squat', + oldVal: (oldTMs['squat'] as num).toDouble(), + newVal: (newTMs['squat'] as num).toDouble()), _DiffRow( name: 'Pull-up', - oldVal: oldTMs['pullup'], - newVal: newTMs['pullup']), - _DiffRow(name: 'Dip', oldVal: oldTMs['dip'], newVal: newTMs['dip']), + oldVal: (oldTMs['pullup'] as num).toDouble(), + newVal: (newTMs['pullup'] as num).toDouble()), + _DiffRow( + name: 'Dip', + oldVal: (oldTMs['dip'] as num).toDouble(), + newVal: (newTMs['dip'] as num).toDouble()), ], ), actions: [ diff --git a/lib/src/features/workout_runner/presentation/screens/battle_screen.dart b/lib/src/features/workout_runner/presentation/screens/battle_screen.dart index 6709f59..ec985a9 100644 --- a/lib/src/features/workout_runner/presentation/screens/battle_screen.dart +++ b/lib/src/features/workout_runner/presentation/screens/battle_screen.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'dart:async'; -import 'dart:convert'; import '../../../../core/constants/asset_paths.dart'; import '../../../../core/theme/app_theme.dart'; @@ -127,16 +126,14 @@ class _BattleScreenState extends ConsumerState { final cycleRepo = ref.read(cycleRepositoryProvider); final user = await userRepo.getLocalUser(); - final cycle = await cycleRepo.getCurrentCycle(); + final trainingMaxesMap = await cycleRepo.getCurrentTrainingMaxesAsync(); - if (user == null || cycle == null) { + if (user == null) { if (mounted) context.go('/hub'); return; } - final trainingMaxes = cycleRepo.getCurrentTrainingMaxes(); final exercises = []; - final exerciseConfigs = _getExerciseConfig(widget.day); for (final config in exerciseConfigs) { @@ -145,7 +142,7 @@ class _BattleScreenState extends ConsumerState { final type = config['type'] as ExerciseType; final isMain = config['isMain'] as bool; - final tm = trainingMaxes[id] ?? 0.0; + final tm = trainingMaxesMap[id] ?? 0.0; List sets = []; if (isMain) { @@ -175,14 +172,16 @@ class _BattleScreenState extends ConsumerState { } } - setState(() { - _exercises = exercises; - _isLoading = false; + if (mounted) { + setState(() { + _exercises = exercises; + _isLoading = false; - if (exercises.isNotEmpty && exercises.first.sets.isNotEmpty) { - _repsCompleted = exercises.first.sets.first.repsTarget; - } - }); + if (exercises.isNotEmpty && exercises.first.sets.isNotEmpty) { + _repsCompleted = exercises.first.sets.first.repsTarget; + } + }); + } } void _completeSet() { @@ -286,9 +285,10 @@ class _BattleScreenState extends ConsumerState { cycleId: cycleIdRef, week: widget.week, day: widget.day); if (workout != null) { - workout.exercisesJson = - jsonEncode(_exercises.map((e) => e.toJson()).toList()); - await workoutRepo.completeWorkout(workout, xpEarned: xpEarned); + final updatedExercises = _exercises.map((e) => e.toJson()).toList(); + final updatedWorkout = workout.copyWith(exercises: updatedExercises); + + await workoutRepo.completeWorkout(updatedWorkout, xpEarned: xpEarned); ref.read(syncServiceProvider).sync(); } @@ -355,7 +355,7 @@ class _BattleScreenState extends ConsumerState { ), const SizedBox(height: 8), Text( - 'The monsters tremble at your new power.', // Story Flavor + 'The monsters tremble at your new power.', style: Theme.of(context).textTheme.bodySmall?.copyWith( color: Colors.black54, fontStyle: FontStyle.italic), textAlign: TextAlign.center, @@ -381,6 +381,17 @@ class _BattleScreenState extends ConsumerState { ); } + void _handleCompletePress(WorkoutSet currentSet) { + if (currentSet.isAmrap) { + _showAmrapDialog(currentSet); + } else { + setState(() { + _repsCompleted = currentSet.repsTarget; + }); + _completeSet(); + } + } + @override Widget build(BuildContext context) { if (_isLoading) { @@ -396,101 +407,115 @@ class _BattleScreenState extends ConsumerState { final currentExercise = _exercises[_currentExerciseIndex]; final currentSet = currentExercise.sets[_currentSetIndex]; - final userRepo = ref.watch(userRepositoryProvider); - final totalHP = _exercises.fold( - 0, - (sum, ex) => sum + ex.sets.fold(0, (s, set) => s + set.repsTarget), - ); + return FutureBuilder>( + future: ref.read(userRepositoryProvider).getInventorySettingsAsync(), + builder: (context, snapshot) { + if (!snapshot.hasData) + return const Scaffold( + body: Center(child: CircularProgressIndicator())); - final completedHP = _exercises.take(_currentExerciseIndex).fold( - 0, - (sum, ex) => - sum + ex.sets.fold(0, (s, set) => s + set.repsActual), - ) + - currentExercise.sets - .take(_currentSetIndex) - .fold(0, (sum, set) => sum + set.repsActual); + final inventory = snapshot.data!; - final isBodyweight = currentExercise.exerciseId != 'squat'; - final barWeight = isBodyweight - ? currentExercise.bodyweightAtSession - : userRepo.getBarWeight(); - final availablePlates = userRepo.getAvailablePlates(); - final inventory = userRepo.getInventorySettings(); - final bandsList = - (inventory['bands'] as List?)?.cast>() ?? []; + final totalHP = _exercises.fold( + 0, + (sum, ex) => + sum + ex.sets.fold(0, (s, set) => s + set.repsTarget), + ); - final Map availableBands = {}; - for (var band in bandsList) { - final color = band['color'] as String; - final resistance = (band['resistance_kg'] as num).toDouble(); - if (band['count'] as int > 0) { - availableBands[color] = resistance; - } - } + final completedHP = _exercises.take(_currentExerciseIndex).fold( + 0, + (sum, ex) => + sum + + ex.sets.fold(0, (s, set) => s + set.repsActual), + ) + + currentExercise.sets + .take(_currentSetIndex) + .fold(0, (sum, set) => sum + set.repsActual); - final plateResult = PlateCalculator.calculate( - targetWeight: currentSet.targetWeightTotal, - barWeight: barWeight, - availablePlates: availablePlates, - availableBands: availableBands, - isTwoSided: !isBodyweight, - ); + final isBodyweight = currentExercise.exerciseId != 'squat'; + final barWeight = isBodyweight + ? currentExercise.bodyweightAtSession + : (inventory['bar_weight'] as num?)?.toDouble() ?? 20.0; - return Scaffold( - appBar: AppBar( - title: Text('Week ${widget.week} - Day ${widget.day}'), - leading: IconButton( - icon: const Icon(Icons.close), - onPressed: () { - showDialog( - context: context, - builder: (context) => AlertDialog( - title: const Text('Abandon Raid?'), - content: const Text('Your progress will not be saved.'), - actions: [ - TextButton( - onPressed: () => Navigator.of(context).pop(), - child: const Text('CANCEL'), - ), - TextButton( - onPressed: () { - Navigator.of(context).pop(); - context.go('/hub'); - }, - style: TextButton.styleFrom( - foregroundColor: AppTheme.errorColor), - child: const Text('ABANDON'), - ), - ], + final platesList = (inventory['plates'] as List?) + ?.map((e) => (e as num).toDouble()) + .toList() ?? + []; + + final bandsList = + (inventory['bands'] as List?)?.cast>() ?? []; + final Map availableBands = {}; + for (var band in bandsList) { + final color = band['color'] as String; + final resistance = (band['resistance_kg'] as num).toDouble(); + if (band['count'] as int > 0) { + availableBands[color] = resistance; + } + } + + final plateResult = PlateCalculator.calculate( + targetWeight: currentSet.targetWeightTotal, + barWeight: barWeight, + availablePlates: platesList, + availableBands: availableBands, + isTwoSided: !isBodyweight, + ); + + return Scaffold( + appBar: AppBar( + title: Text('Week ${widget.week} - Day ${widget.day}'), + leading: IconButton( + icon: const Icon(Icons.close), + onPressed: () { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: const Text('Abandon Raid?'), + content: const Text('Your progress will not be saved.'), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: const Text('CANCEL'), + ), + TextButton( + onPressed: () { + Navigator.of(context).pop(); + context.go('/hub'); + }, + style: TextButton.styleFrom( + foregroundColor: AppTheme.errorColor), + child: const Text('ABANDON'), + ), + ], + ), + ); + }, ), - ); - }, - ), - ), - body: Stack( - children: [ - Positioned.fill( - child: Image.asset( - AssetPaths.bgUndergroundGym, - fit: BoxFit.cover, ), - ), - Positioned.fill( - child: Container( - color: Colors.black.withOpacity(0.7), + body: Stack( + children: [ + Positioned.fill( + child: Image.asset( + AssetPaths.bgUndergroundGym, + fit: BoxFit.cover, + ), + ), + Positioned.fill( + child: Container( + color: Colors.black.withOpacity(0.7), + ), + ), + SafeArea( + child: _isResting + ? _buildRestScreen() + : _buildWorkoutScreen(currentExercise, currentSet, + plateResult, completedHP, totalHP), + ), + ], ), - ), - SafeArea( - child: _isResting - ? _buildRestScreen() - : _buildWorkoutScreen(currentExercise, currentSet, plateResult, - completedHP, totalHP), - ), - ], - ), - ); + ); + }); } Widget _buildRestScreen() { @@ -759,17 +784,6 @@ class _BattleScreenState extends ConsumerState { ); } - void _handleCompletePress(WorkoutSet currentSet) { - if (currentSet.isAmrap) { - _showAmrapDialog(currentSet); - } else { - setState(() { - _repsCompleted = currentSet.repsTarget; - }); - _completeSet(); - } - } - String _formatTime(int seconds) { final minutes = seconds ~/ 60; final secs = seconds % 60; diff --git a/lib/src/shared/data/local/app_database.dart b/lib/src/shared/data/local/app_database.dart new file mode 100644 index 0000000..5d2f593 --- /dev/null +++ b/lib/src/shared/data/local/app_database.dart @@ -0,0 +1,32 @@ +import 'dart:io'; +import 'package:drift/drift.dart'; +import 'package:drift/native.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:path/path.dart' as p; +import 'tables.dart'; +import 'converters/json_converter.dart'; + +part 'app_database.g.dart'; + +@DriftDatabase(tables: [Users, Cycles, Workouts]) +class AppDatabase extends _$AppDatabase { + AppDatabase() : super(_openConnection()); + + @override + int get schemaVersion => 1; + + @override + MigrationStrategy get migration => MigrationStrategy( + onCreate: (Migrator m) async { + await m.createAll(); + }, + ); +} + +LazyDatabase _openConnection() { + return LazyDatabase(() async { + final dbFolder = await getApplicationDocumentsDirectory(); + final file = File(p.join(dbFolder.path, 'slrpg.sqlite')); + return NativeDatabase.createInBackground(file); + }); +} diff --git a/lib/src/shared/data/local/app_database.g.dart b/lib/src/shared/data/local/app_database.g.dart new file mode 100644 index 0000000..af6980a --- /dev/null +++ b/lib/src/shared/data/local/app_database.g.dart @@ -0,0 +1,1345 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'app_database.dart'; + +// ignore_for_file: type=lint +class $UsersTable extends Users with TableInfo<$UsersTable, UserCollection>{ +@override final GeneratedDatabase attachedDatabase; +final String? _alias; +$UsersTable(this.attachedDatabase, [this._alias]); +static const VerificationMeta _idMeta = const VerificationMeta('id'); +@override +late final GeneratedColumn id = GeneratedColumn('id', aliasedName, false, hasAutoIncrement: true, type: DriftSqlType.int, requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); +static const VerificationMeta _serverIdMeta = const VerificationMeta('serverId'); +@override +late final GeneratedColumn serverId = GeneratedColumn('server_id', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); +static const VerificationMeta _emailMeta = const VerificationMeta('email'); +@override +late final GeneratedColumn email = GeneratedColumn('email', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: false, defaultValue: const Constant('')); +static const VerificationMeta _xpMeta = const VerificationMeta('xp'); +@override +late final GeneratedColumn xp = GeneratedColumn('xp', aliasedName, false, type: DriftSqlType.int, requiredDuringInsert: false, defaultValue: const Constant(0)); +static const VerificationMeta _levelMeta = const VerificationMeta('level'); +@override +late final GeneratedColumn level = GeneratedColumn('level', aliasedName, false, type: DriftSqlType.int, requiredDuringInsert: false, defaultValue: const Constant(1)); +static const VerificationMeta _currentBodyweightMeta = const VerificationMeta('currentBodyweight'); +@override +late final GeneratedColumn currentBodyweight = GeneratedColumn('current_bodyweight', aliasedName, false, type: DriftSqlType.double, requiredDuringInsert: false, defaultValue: const Constant(70.0)); +static const VerificationMeta _inventorySettingsMeta = const VerificationMeta('inventorySettings'); +@override +late final GeneratedColumnWithTypeConverter?, String> inventorySettings = GeneratedColumn('inventory_settings', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false).withConverter?>($UsersTable.$converterinventorySettingsn); +static const VerificationMeta _avatarConfigMeta = const VerificationMeta('avatarConfig'); +@override +late final GeneratedColumnWithTypeConverter?, String> avatarConfig = GeneratedColumn('avatar_config', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false).withConverter?>($UsersTable.$converteravatarConfign); +static const VerificationMeta _lastSyncAtMeta = const VerificationMeta('lastSyncAt'); +@override +late final GeneratedColumn lastSyncAt = GeneratedColumn('last_sync_at', aliasedName, true, type: DriftSqlType.dateTime, requiredDuringInsert: false); +static const VerificationMeta _isDirtyMeta = const VerificationMeta('isDirty'); +@override +late final GeneratedColumn isDirty = GeneratedColumn('is_dirty', aliasedName, false, type: DriftSqlType.bool, requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("is_dirty" IN (0, 1))'), defaultValue: const Constant(false)); +static const VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); +@override +late final GeneratedColumn createdAt = GeneratedColumn('created_at', aliasedName, false, type: DriftSqlType.dateTime, requiredDuringInsert: false, defaultValue: currentDateAndTime); +static const VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); +@override +late final GeneratedColumn updatedAt = GeneratedColumn('updated_at', aliasedName, false, type: DriftSqlType.dateTime, requiredDuringInsert: false, defaultValue: currentDateAndTime); +@override +List get $columns => [id, serverId, email, xp, level, currentBodyweight, inventorySettings, avatarConfig, lastSyncAt, isDirty, createdAt, updatedAt]; +@override +String get aliasedName => _alias ?? actualTableName; +@override + String get actualTableName => $name; +static const String $name = 'users'; +@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));}if (data.containsKey('server_id')) { +context.handle(_serverIdMeta, serverId.isAcceptableOrUnknown(data['server_id']!, _serverIdMeta));}if (data.containsKey('email')) { +context.handle(_emailMeta, email.isAcceptableOrUnknown(data['email']!, _emailMeta));}if (data.containsKey('xp')) { +context.handle(_xpMeta, xp.isAcceptableOrUnknown(data['xp']!, _xpMeta));}if (data.containsKey('level')) { +context.handle(_levelMeta, level.isAcceptableOrUnknown(data['level']!, _levelMeta));}if (data.containsKey('current_bodyweight')) { +context.handle(_currentBodyweightMeta, currentBodyweight.isAcceptableOrUnknown(data['current_bodyweight']!, _currentBodyweightMeta));}context.handle(_inventorySettingsMeta, const VerificationResult.success());context.handle(_avatarConfigMeta, const VerificationResult.success());if (data.containsKey('last_sync_at')) { +context.handle(_lastSyncAtMeta, lastSyncAt.isAcceptableOrUnknown(data['last_sync_at']!, _lastSyncAtMeta));}if (data.containsKey('is_dirty')) { +context.handle(_isDirtyMeta, isDirty.isAcceptableOrUnknown(data['is_dirty']!, _isDirtyMeta));}if (data.containsKey('created_at')) { +context.handle(_createdAtMeta, createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta));}if (data.containsKey('updated_at')) { +context.handle(_updatedAtMeta, updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta));}return context; +} +@override +Set get $primaryKey => {id}; +@override UserCollection map(Map data, {String? tablePrefix}) { +final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';return UserCollection(id: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}id'])!, serverId: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}server_id']), email: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}email'])!, xp: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}xp'])!, level: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}level'])!, currentBodyweight: attachedDatabase.typeMapping.read(DriftSqlType.double, data['${effectivePrefix}current_bodyweight'])!, inventorySettings: $UsersTable.$converterinventorySettingsn.fromSql(attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}inventory_settings'])), avatarConfig: $UsersTable.$converteravatarConfign.fromSql(attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}avatar_config'])), lastSyncAt: attachedDatabase.typeMapping.read(DriftSqlType.dateTime, data['${effectivePrefix}last_sync_at']), isDirty: attachedDatabase.typeMapping.read(DriftSqlType.bool, data['${effectivePrefix}is_dirty'])!, createdAt: attachedDatabase.typeMapping.read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, updatedAt: attachedDatabase.typeMapping.read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, ); +} +@override +$UsersTable createAlias(String alias) { +return $UsersTable(attachedDatabase, alias);}static TypeConverter,String> $converterinventorySettings = const MapConverter();static TypeConverter?,String?> $converterinventorySettingsn = NullAwareTypeConverter.wrap($converterinventorySettings);static TypeConverter,String> $converteravatarConfig = const MapConverter();static TypeConverter?,String?> $converteravatarConfign = NullAwareTypeConverter.wrap($converteravatarConfig);}class UserCollection extends DataClass implements Insertable +{ +final int id; +final String? serverId; +final String email; +final int xp; +final int level; +final double currentBodyweight; +final Map? inventorySettings; +final Map? avatarConfig; +final DateTime? lastSyncAt; +final bool isDirty; +final DateTime createdAt; +final DateTime updatedAt; +const UserCollection({required this.id, this.serverId, required this.email, required this.xp, required this.level, required this.currentBodyweight, this.inventorySettings, this.avatarConfig, this.lastSyncAt, required this.isDirty, required this.createdAt, required this.updatedAt});@override +Map toColumns(bool nullToAbsent) { +final map = {};map['id'] = Variable(id); +if (!nullToAbsent || serverId != null){map['server_id'] = Variable(serverId); +}map['email'] = Variable(email); +map['xp'] = Variable(xp); +map['level'] = Variable(level); +map['current_bodyweight'] = Variable(currentBodyweight); +if (!nullToAbsent || inventorySettings != null){map['inventory_settings'] = Variable($UsersTable.$converterinventorySettingsn.toSql(inventorySettings)); +}if (!nullToAbsent || avatarConfig != null){map['avatar_config'] = Variable($UsersTable.$converteravatarConfign.toSql(avatarConfig)); +}if (!nullToAbsent || lastSyncAt != null){map['last_sync_at'] = Variable(lastSyncAt); +}map['is_dirty'] = Variable(isDirty); +map['created_at'] = Variable(createdAt); +map['updated_at'] = Variable(updatedAt); +return map; +} +UsersCompanion toCompanion(bool nullToAbsent) { +return UsersCompanion(id: Value(id),serverId: serverId == null && nullToAbsent ? const Value.absent() : Value(serverId),email: Value(email),xp: Value(xp),level: Value(level),currentBodyweight: Value(currentBodyweight),inventorySettings: inventorySettings == null && nullToAbsent ? const Value.absent() : Value(inventorySettings),avatarConfig: avatarConfig == null && nullToAbsent ? const Value.absent() : Value(avatarConfig),lastSyncAt: lastSyncAt == null && nullToAbsent ? const Value.absent() : Value(lastSyncAt),isDirty: Value(isDirty),createdAt: Value(createdAt),updatedAt: Value(updatedAt),); +} +factory UserCollection.fromJson(Map json, {ValueSerializer? serializer}) { +serializer ??= driftRuntimeOptions.defaultSerializer; +return UserCollection(id: serializer.fromJson(json['id']),serverId: serializer.fromJson(json['serverId']),email: serializer.fromJson(json['email']),xp: serializer.fromJson(json['xp']),level: serializer.fromJson(json['level']),currentBodyweight: serializer.fromJson(json['currentBodyweight']),inventorySettings: serializer.fromJson?>(json['inventorySettings']),avatarConfig: serializer.fromJson?>(json['avatarConfig']),lastSyncAt: serializer.fromJson(json['lastSyncAt']),isDirty: serializer.fromJson(json['isDirty']),createdAt: serializer.fromJson(json['createdAt']),updatedAt: serializer.fromJson(json['updatedAt']),);} +@override Map toJson({ValueSerializer? serializer}) { +serializer ??= driftRuntimeOptions.defaultSerializer; +return { +'id': serializer.toJson(id),'serverId': serializer.toJson(serverId),'email': serializer.toJson(email),'xp': serializer.toJson(xp),'level': serializer.toJson(level),'currentBodyweight': serializer.toJson(currentBodyweight),'inventorySettings': serializer.toJson?>(inventorySettings),'avatarConfig': serializer.toJson?>(avatarConfig),'lastSyncAt': serializer.toJson(lastSyncAt),'isDirty': serializer.toJson(isDirty),'createdAt': serializer.toJson(createdAt),'updatedAt': serializer.toJson(updatedAt),};}UserCollection copyWith({int? id,Value serverId = const Value.absent(),String? email,int? xp,int? level,double? currentBodyweight,Value?> inventorySettings = const Value.absent(),Value?> avatarConfig = const Value.absent(),Value lastSyncAt = const Value.absent(),bool? isDirty,DateTime? createdAt,DateTime? updatedAt}) => UserCollection(id: id ?? this.id,serverId: serverId.present ? serverId.value : this.serverId,email: email ?? this.email,xp: xp ?? this.xp,level: level ?? this.level,currentBodyweight: currentBodyweight ?? this.currentBodyweight,inventorySettings: inventorySettings.present ? inventorySettings.value : this.inventorySettings,avatarConfig: avatarConfig.present ? avatarConfig.value : this.avatarConfig,lastSyncAt: lastSyncAt.present ? lastSyncAt.value : this.lastSyncAt,isDirty: isDirty ?? this.isDirty,createdAt: createdAt ?? this.createdAt,updatedAt: updatedAt ?? this.updatedAt,);UserCollection copyWithCompanion(UsersCompanion data) { +return UserCollection( +id: data.id.present ? data.id.value : this.id,serverId: data.serverId.present ? data.serverId.value : this.serverId,email: data.email.present ? data.email.value : this.email,xp: data.xp.present ? data.xp.value : this.xp,level: data.level.present ? data.level.value : this.level,currentBodyweight: data.currentBodyweight.present ? data.currentBodyweight.value : this.currentBodyweight,inventorySettings: data.inventorySettings.present ? data.inventorySettings.value : this.inventorySettings,avatarConfig: data.avatarConfig.present ? data.avatarConfig.value : this.avatarConfig,lastSyncAt: data.lastSyncAt.present ? data.lastSyncAt.value : this.lastSyncAt,isDirty: data.isDirty.present ? data.isDirty.value : this.isDirty,createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt,); +} +@override +String toString() {return (StringBuffer('UserCollection(')..write('id: $id, ')..write('serverId: $serverId, ')..write('email: $email, ')..write('xp: $xp, ')..write('level: $level, ')..write('currentBodyweight: $currentBodyweight, ')..write('inventorySettings: $inventorySettings, ')..write('avatarConfig: $avatarConfig, ')..write('lastSyncAt: $lastSyncAt, ')..write('isDirty: $isDirty, ')..write('createdAt: $createdAt, ')..write('updatedAt: $updatedAt')..write(')')).toString();} +@override + int get hashCode => Object.hash(id, serverId, email, xp, level, currentBodyweight, inventorySettings, avatarConfig, lastSyncAt, isDirty, createdAt, updatedAt);@override +bool operator ==(Object other) => identical(this, other) || (other is UserCollection && other.id == this.id && other.serverId == this.serverId && other.email == this.email && other.xp == this.xp && other.level == this.level && other.currentBodyweight == this.currentBodyweight && other.inventorySettings == this.inventorySettings && other.avatarConfig == this.avatarConfig && other.lastSyncAt == this.lastSyncAt && other.isDirty == this.isDirty && other.createdAt == this.createdAt && other.updatedAt == this.updatedAt); +}class UsersCompanion extends UpdateCompanion { +final Value id; +final Value serverId; +final Value email; +final Value xp; +final Value level; +final Value currentBodyweight; +final Value?> inventorySettings; +final Value?> avatarConfig; +final Value lastSyncAt; +final Value isDirty; +final Value createdAt; +final Value updatedAt; +const UsersCompanion({this.id = const Value.absent(),this.serverId = const Value.absent(),this.email = const Value.absent(),this.xp = const Value.absent(),this.level = const Value.absent(),this.currentBodyweight = const Value.absent(),this.inventorySettings = const Value.absent(),this.avatarConfig = const Value.absent(),this.lastSyncAt = const Value.absent(),this.isDirty = const Value.absent(),this.createdAt = const Value.absent(),this.updatedAt = const Value.absent(),}); +UsersCompanion.insert({this.id = const Value.absent(),this.serverId = const Value.absent(),this.email = const Value.absent(),this.xp = const Value.absent(),this.level = const Value.absent(),this.currentBodyweight = const Value.absent(),this.inventorySettings = const Value.absent(),this.avatarConfig = const Value.absent(),this.lastSyncAt = const Value.absent(),this.isDirty = const Value.absent(),this.createdAt = const Value.absent(),this.updatedAt = const Value.absent(),}); +static Insertable custom({Expression? id, +Expression? serverId, +Expression? email, +Expression? xp, +Expression? level, +Expression? currentBodyweight, +Expression? inventorySettings, +Expression? avatarConfig, +Expression? lastSyncAt, +Expression? isDirty, +Expression? createdAt, +Expression? updatedAt, +}) { +return RawValuesInsertable({if (id != null)'id': id,if (serverId != null)'server_id': serverId,if (email != null)'email': email,if (xp != null)'xp': xp,if (level != null)'level': level,if (currentBodyweight != null)'current_bodyweight': currentBodyweight,if (inventorySettings != null)'inventory_settings': inventorySettings,if (avatarConfig != null)'avatar_config': avatarConfig,if (lastSyncAt != null)'last_sync_at': lastSyncAt,if (isDirty != null)'is_dirty': isDirty,if (createdAt != null)'created_at': createdAt,if (updatedAt != null)'updated_at': updatedAt,}); +}UsersCompanion copyWith({Value? id, Value? serverId, Value? email, Value? xp, Value? level, Value? currentBodyweight, Value?>? inventorySettings, Value?>? avatarConfig, Value? lastSyncAt, Value? isDirty, Value? createdAt, Value? updatedAt}) { +return UsersCompanion(id: id ?? this.id,serverId: serverId ?? this.serverId,email: email ?? this.email,xp: xp ?? this.xp,level: level ?? this.level,currentBodyweight: currentBodyweight ?? this.currentBodyweight,inventorySettings: inventorySettings ?? this.inventorySettings,avatarConfig: avatarConfig ?? this.avatarConfig,lastSyncAt: lastSyncAt ?? this.lastSyncAt,isDirty: isDirty ?? this.isDirty,createdAt: createdAt ?? this.createdAt,updatedAt: updatedAt ?? this.updatedAt,); +} +@override +Map toColumns(bool nullToAbsent) { +final map = {};if (id.present) { +map['id'] = Variable(id.value);} +if (serverId.present) { +map['server_id'] = Variable(serverId.value);} +if (email.present) { +map['email'] = Variable(email.value);} +if (xp.present) { +map['xp'] = Variable(xp.value);} +if (level.present) { +map['level'] = Variable(level.value);} +if (currentBodyweight.present) { +map['current_bodyweight'] = Variable(currentBodyweight.value);} +if (inventorySettings.present) { +map['inventory_settings'] = Variable($UsersTable.$converterinventorySettingsn.toSql(inventorySettings.value));} +if (avatarConfig.present) { +map['avatar_config'] = Variable($UsersTable.$converteravatarConfign.toSql(avatarConfig.value));} +if (lastSyncAt.present) { +map['last_sync_at'] = Variable(lastSyncAt.value);} +if (isDirty.present) { +map['is_dirty'] = Variable(isDirty.value);} +if (createdAt.present) { +map['created_at'] = Variable(createdAt.value);} +if (updatedAt.present) { +map['updated_at'] = Variable(updatedAt.value);} +return map; +} +@override +String toString() {return (StringBuffer('UsersCompanion(')..write('id: $id, ')..write('serverId: $serverId, ')..write('email: $email, ')..write('xp: $xp, ')..write('level: $level, ')..write('currentBodyweight: $currentBodyweight, ')..write('inventorySettings: $inventorySettings, ')..write('avatarConfig: $avatarConfig, ')..write('lastSyncAt: $lastSyncAt, ')..write('isDirty: $isDirty, ')..write('createdAt: $createdAt, ')..write('updatedAt: $updatedAt')..write(')')).toString();} +} +class $CyclesTable extends Cycles with TableInfo<$CyclesTable, CycleCollection>{ +@override final GeneratedDatabase attachedDatabase; +final String? _alias; +$CyclesTable(this.attachedDatabase, [this._alias]); +static const VerificationMeta _idMeta = const VerificationMeta('id'); +@override +late final GeneratedColumn id = GeneratedColumn('id', aliasedName, false, hasAutoIncrement: true, type: DriftSqlType.int, requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); +static const VerificationMeta _serverIdMeta = const VerificationMeta('serverId'); +@override +late final GeneratedColumn serverId = GeneratedColumn('server_id', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); +static const VerificationMeta _userIdMeta = const VerificationMeta('userId'); +@override +late final GeneratedColumn userId = GeneratedColumn('user_id', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true); +static const VerificationMeta _cycleNumberMeta = const VerificationMeta('cycleNumber'); +@override +late final GeneratedColumn cycleNumber = GeneratedColumn('cycle_number', aliasedName, false, type: DriftSqlType.int, requiredDuringInsert: true); +static const VerificationMeta _startDateMeta = const VerificationMeta('startDate'); +@override +late final GeneratedColumn startDate = GeneratedColumn('start_date', aliasedName, false, type: DriftSqlType.dateTime, requiredDuringInsert: true); +static const VerificationMeta _endDateMeta = const VerificationMeta('endDate'); +@override +late final GeneratedColumn endDate = GeneratedColumn('end_date', aliasedName, true, type: DriftSqlType.dateTime, requiredDuringInsert: false); +static const VerificationMeta _isActiveMeta = const VerificationMeta('isActive'); +@override +late final GeneratedColumn isActive = GeneratedColumn('is_active', aliasedName, false, type: DriftSqlType.bool, requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("is_active" IN (0, 1))'), defaultValue: const Constant(true)); +static const VerificationMeta _trainingMaxesMeta = const VerificationMeta('trainingMaxes'); +@override +late final GeneratedColumnWithTypeConverter, String> trainingMaxes = GeneratedColumn('training_maxes', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true).withConverter>($CyclesTable.$convertertrainingMaxes); +static const VerificationMeta _isDirtyMeta = const VerificationMeta('isDirty'); +@override +late final GeneratedColumn isDirty = GeneratedColumn('is_dirty', aliasedName, false, type: DriftSqlType.bool, requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("is_dirty" IN (0, 1))'), defaultValue: const Constant(false)); +static const VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); +@override +late final GeneratedColumn createdAt = GeneratedColumn('created_at', aliasedName, false, type: DriftSqlType.dateTime, requiredDuringInsert: false, defaultValue: currentDateAndTime); +static const VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); +@override +late final GeneratedColumn updatedAt = GeneratedColumn('updated_at', aliasedName, false, type: DriftSqlType.dateTime, requiredDuringInsert: false, defaultValue: currentDateAndTime); +@override +List get $columns => [id, serverId, userId, cycleNumber, startDate, endDate, isActive, trainingMaxes, isDirty, createdAt, updatedAt]; +@override +String get aliasedName => _alias ?? actualTableName; +@override + String get actualTableName => $name; +static const String $name = 'cycles'; +@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));}if (data.containsKey('server_id')) { +context.handle(_serverIdMeta, serverId.isAcceptableOrUnknown(data['server_id']!, _serverIdMeta));}if (data.containsKey('user_id')) { +context.handle(_userIdMeta, userId.isAcceptableOrUnknown(data['user_id']!, _userIdMeta));} else if (isInserting) { +context.missing(_userIdMeta); +} +if (data.containsKey('cycle_number')) { +context.handle(_cycleNumberMeta, cycleNumber.isAcceptableOrUnknown(data['cycle_number']!, _cycleNumberMeta));} else if (isInserting) { +context.missing(_cycleNumberMeta); +} +if (data.containsKey('start_date')) { +context.handle(_startDateMeta, startDate.isAcceptableOrUnknown(data['start_date']!, _startDateMeta));} else if (isInserting) { +context.missing(_startDateMeta); +} +if (data.containsKey('end_date')) { +context.handle(_endDateMeta, endDate.isAcceptableOrUnknown(data['end_date']!, _endDateMeta));}if (data.containsKey('is_active')) { +context.handle(_isActiveMeta, isActive.isAcceptableOrUnknown(data['is_active']!, _isActiveMeta));}context.handle(_trainingMaxesMeta, const VerificationResult.success());if (data.containsKey('is_dirty')) { +context.handle(_isDirtyMeta, isDirty.isAcceptableOrUnknown(data['is_dirty']!, _isDirtyMeta));}if (data.containsKey('created_at')) { +context.handle(_createdAtMeta, createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta));}if (data.containsKey('updated_at')) { +context.handle(_updatedAtMeta, updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta));}return context; +} +@override +Set get $primaryKey => {id}; +@override CycleCollection map(Map data, {String? tablePrefix}) { +final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';return CycleCollection(id: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}id'])!, serverId: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}server_id']), userId: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}user_id'])!, cycleNumber: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}cycle_number'])!, startDate: attachedDatabase.typeMapping.read(DriftSqlType.dateTime, data['${effectivePrefix}start_date'])!, endDate: attachedDatabase.typeMapping.read(DriftSqlType.dateTime, data['${effectivePrefix}end_date']), isActive: attachedDatabase.typeMapping.read(DriftSqlType.bool, data['${effectivePrefix}is_active'])!, trainingMaxes: $CyclesTable.$convertertrainingMaxes.fromSql(attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}training_maxes'])!), isDirty: attachedDatabase.typeMapping.read(DriftSqlType.bool, data['${effectivePrefix}is_dirty'])!, createdAt: attachedDatabase.typeMapping.read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, updatedAt: attachedDatabase.typeMapping.read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, ); +} +@override +$CyclesTable createAlias(String alias) { +return $CyclesTable(attachedDatabase, alias);}static TypeConverter,String> $convertertrainingMaxes = const MapConverter();}class CycleCollection extends DataClass implements Insertable +{ +final int id; +final String? serverId; +final String userId; +final int cycleNumber; +final DateTime startDate; +final DateTime? endDate; +final bool isActive; +final Map trainingMaxes; +final bool isDirty; +final DateTime createdAt; +final DateTime updatedAt; +const CycleCollection({required this.id, this.serverId, required this.userId, required this.cycleNumber, required this.startDate, this.endDate, required this.isActive, required this.trainingMaxes, required this.isDirty, required this.createdAt, required this.updatedAt});@override +Map toColumns(bool nullToAbsent) { +final map = {};map['id'] = Variable(id); +if (!nullToAbsent || serverId != null){map['server_id'] = Variable(serverId); +}map['user_id'] = Variable(userId); +map['cycle_number'] = Variable(cycleNumber); +map['start_date'] = Variable(startDate); +if (!nullToAbsent || endDate != null){map['end_date'] = Variable(endDate); +}map['is_active'] = Variable(isActive); +{map['training_maxes'] = Variable($CyclesTable.$convertertrainingMaxes.toSql(trainingMaxes)); +}map['is_dirty'] = Variable(isDirty); +map['created_at'] = Variable(createdAt); +map['updated_at'] = Variable(updatedAt); +return map; +} +CyclesCompanion toCompanion(bool nullToAbsent) { +return CyclesCompanion(id: Value(id),serverId: serverId == null && nullToAbsent ? const Value.absent() : Value(serverId),userId: Value(userId),cycleNumber: Value(cycleNumber),startDate: Value(startDate),endDate: endDate == null && nullToAbsent ? const Value.absent() : Value(endDate),isActive: Value(isActive),trainingMaxes: Value(trainingMaxes),isDirty: Value(isDirty),createdAt: Value(createdAt),updatedAt: Value(updatedAt),); +} +factory CycleCollection.fromJson(Map json, {ValueSerializer? serializer}) { +serializer ??= driftRuntimeOptions.defaultSerializer; +return CycleCollection(id: serializer.fromJson(json['id']),serverId: serializer.fromJson(json['serverId']),userId: serializer.fromJson(json['userId']),cycleNumber: serializer.fromJson(json['cycleNumber']),startDate: serializer.fromJson(json['startDate']),endDate: serializer.fromJson(json['endDate']),isActive: serializer.fromJson(json['isActive']),trainingMaxes: serializer.fromJson>(json['trainingMaxes']),isDirty: serializer.fromJson(json['isDirty']),createdAt: serializer.fromJson(json['createdAt']),updatedAt: serializer.fromJson(json['updatedAt']),);} +@override Map toJson({ValueSerializer? serializer}) { +serializer ??= driftRuntimeOptions.defaultSerializer; +return { +'id': serializer.toJson(id),'serverId': serializer.toJson(serverId),'userId': serializer.toJson(userId),'cycleNumber': serializer.toJson(cycleNumber),'startDate': serializer.toJson(startDate),'endDate': serializer.toJson(endDate),'isActive': serializer.toJson(isActive),'trainingMaxes': serializer.toJson>(trainingMaxes),'isDirty': serializer.toJson(isDirty),'createdAt': serializer.toJson(createdAt),'updatedAt': serializer.toJson(updatedAt),};}CycleCollection copyWith({int? id,Value serverId = const Value.absent(),String? userId,int? cycleNumber,DateTime? startDate,Value endDate = const Value.absent(),bool? isActive,Map? trainingMaxes,bool? isDirty,DateTime? createdAt,DateTime? updatedAt}) => CycleCollection(id: id ?? this.id,serverId: serverId.present ? serverId.value : this.serverId,userId: userId ?? this.userId,cycleNumber: cycleNumber ?? this.cycleNumber,startDate: startDate ?? this.startDate,endDate: endDate.present ? endDate.value : this.endDate,isActive: isActive ?? this.isActive,trainingMaxes: trainingMaxes ?? this.trainingMaxes,isDirty: isDirty ?? this.isDirty,createdAt: createdAt ?? this.createdAt,updatedAt: updatedAt ?? this.updatedAt,);CycleCollection copyWithCompanion(CyclesCompanion data) { +return CycleCollection( +id: data.id.present ? data.id.value : this.id,serverId: data.serverId.present ? data.serverId.value : this.serverId,userId: data.userId.present ? data.userId.value : this.userId,cycleNumber: data.cycleNumber.present ? data.cycleNumber.value : this.cycleNumber,startDate: data.startDate.present ? data.startDate.value : this.startDate,endDate: data.endDate.present ? data.endDate.value : this.endDate,isActive: data.isActive.present ? data.isActive.value : this.isActive,trainingMaxes: data.trainingMaxes.present ? data.trainingMaxes.value : this.trainingMaxes,isDirty: data.isDirty.present ? data.isDirty.value : this.isDirty,createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt,); +} +@override +String toString() {return (StringBuffer('CycleCollection(')..write('id: $id, ')..write('serverId: $serverId, ')..write('userId: $userId, ')..write('cycleNumber: $cycleNumber, ')..write('startDate: $startDate, ')..write('endDate: $endDate, ')..write('isActive: $isActive, ')..write('trainingMaxes: $trainingMaxes, ')..write('isDirty: $isDirty, ')..write('createdAt: $createdAt, ')..write('updatedAt: $updatedAt')..write(')')).toString();} +@override + int get hashCode => Object.hash(id, serverId, userId, cycleNumber, startDate, endDate, isActive, trainingMaxes, isDirty, createdAt, updatedAt);@override +bool operator ==(Object other) => identical(this, other) || (other is CycleCollection && other.id == this.id && other.serverId == this.serverId && other.userId == this.userId && other.cycleNumber == this.cycleNumber && other.startDate == this.startDate && other.endDate == this.endDate && other.isActive == this.isActive && other.trainingMaxes == this.trainingMaxes && other.isDirty == this.isDirty && other.createdAt == this.createdAt && other.updatedAt == this.updatedAt); +}class CyclesCompanion extends UpdateCompanion { +final Value id; +final Value serverId; +final Value userId; +final Value cycleNumber; +final Value startDate; +final Value endDate; +final Value isActive; +final Value> trainingMaxes; +final Value isDirty; +final Value createdAt; +final Value updatedAt; +const CyclesCompanion({this.id = const Value.absent(),this.serverId = const Value.absent(),this.userId = const Value.absent(),this.cycleNumber = const Value.absent(),this.startDate = const Value.absent(),this.endDate = const Value.absent(),this.isActive = const Value.absent(),this.trainingMaxes = const Value.absent(),this.isDirty = const Value.absent(),this.createdAt = const Value.absent(),this.updatedAt = const Value.absent(),}); +CyclesCompanion.insert({this.id = const Value.absent(),this.serverId = const Value.absent(),required String userId,required int cycleNumber,required DateTime startDate,this.endDate = const Value.absent(),this.isActive = const Value.absent(),required Map trainingMaxes,this.isDirty = const Value.absent(),this.createdAt = const Value.absent(),this.updatedAt = const Value.absent(),}): userId = Value(userId), cycleNumber = Value(cycleNumber), startDate = Value(startDate), trainingMaxes = Value(trainingMaxes); +static Insertable custom({Expression? id, +Expression? serverId, +Expression? userId, +Expression? cycleNumber, +Expression? startDate, +Expression? endDate, +Expression? isActive, +Expression? trainingMaxes, +Expression? isDirty, +Expression? createdAt, +Expression? updatedAt, +}) { +return RawValuesInsertable({if (id != null)'id': id,if (serverId != null)'server_id': serverId,if (userId != null)'user_id': userId,if (cycleNumber != null)'cycle_number': cycleNumber,if (startDate != null)'start_date': startDate,if (endDate != null)'end_date': endDate,if (isActive != null)'is_active': isActive,if (trainingMaxes != null)'training_maxes': trainingMaxes,if (isDirty != null)'is_dirty': isDirty,if (createdAt != null)'created_at': createdAt,if (updatedAt != null)'updated_at': updatedAt,}); +}CyclesCompanion copyWith({Value? id, Value? serverId, Value? userId, Value? cycleNumber, Value? startDate, Value? endDate, Value? isActive, Value>? trainingMaxes, Value? isDirty, Value? createdAt, Value? updatedAt}) { +return CyclesCompanion(id: id ?? this.id,serverId: serverId ?? this.serverId,userId: userId ?? this.userId,cycleNumber: cycleNumber ?? this.cycleNumber,startDate: startDate ?? this.startDate,endDate: endDate ?? this.endDate,isActive: isActive ?? this.isActive,trainingMaxes: trainingMaxes ?? this.trainingMaxes,isDirty: isDirty ?? this.isDirty,createdAt: createdAt ?? this.createdAt,updatedAt: updatedAt ?? this.updatedAt,); +} +@override +Map toColumns(bool nullToAbsent) { +final map = {};if (id.present) { +map['id'] = Variable(id.value);} +if (serverId.present) { +map['server_id'] = Variable(serverId.value);} +if (userId.present) { +map['user_id'] = Variable(userId.value);} +if (cycleNumber.present) { +map['cycle_number'] = Variable(cycleNumber.value);} +if (startDate.present) { +map['start_date'] = Variable(startDate.value);} +if (endDate.present) { +map['end_date'] = Variable(endDate.value);} +if (isActive.present) { +map['is_active'] = Variable(isActive.value);} +if (trainingMaxes.present) { +map['training_maxes'] = Variable($CyclesTable.$convertertrainingMaxes.toSql(trainingMaxes.value));} +if (isDirty.present) { +map['is_dirty'] = Variable(isDirty.value);} +if (createdAt.present) { +map['created_at'] = Variable(createdAt.value);} +if (updatedAt.present) { +map['updated_at'] = Variable(updatedAt.value);} +return map; +} +@override +String toString() {return (StringBuffer('CyclesCompanion(')..write('id: $id, ')..write('serverId: $serverId, ')..write('userId: $userId, ')..write('cycleNumber: $cycleNumber, ')..write('startDate: $startDate, ')..write('endDate: $endDate, ')..write('isActive: $isActive, ')..write('trainingMaxes: $trainingMaxes, ')..write('isDirty: $isDirty, ')..write('createdAt: $createdAt, ')..write('updatedAt: $updatedAt')..write(')')).toString();} +} +class $WorkoutsTable extends Workouts with TableInfo<$WorkoutsTable, WorkoutCollection>{ +@override final GeneratedDatabase attachedDatabase; +final String? _alias; +$WorkoutsTable(this.attachedDatabase, [this._alias]); +static const VerificationMeta _idMeta = const VerificationMeta('id'); +@override +late final GeneratedColumn id = GeneratedColumn('id', aliasedName, false, hasAutoIncrement: true, type: DriftSqlType.int, requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); +static const VerificationMeta _serverIdMeta = const VerificationMeta('serverId'); +@override +late final GeneratedColumn serverId = GeneratedColumn('server_id', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); +static const VerificationMeta _userIdMeta = const VerificationMeta('userId'); +@override +late final GeneratedColumn userId = GeneratedColumn('user_id', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true); +static const VerificationMeta _cycleIdMeta = const VerificationMeta('cycleId'); +@override +late final GeneratedColumn cycleId = GeneratedColumn('cycle_id', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true); +static const VerificationMeta _weekMeta = const VerificationMeta('week'); +@override +late final GeneratedColumn week = GeneratedColumn('week', aliasedName, false, type: DriftSqlType.int, requiredDuringInsert: true); +static const VerificationMeta _dayMeta = const VerificationMeta('day'); +@override +late final GeneratedColumn day = GeneratedColumn('day', aliasedName, false, type: DriftSqlType.int, requiredDuringInsert: true); +static const VerificationMeta _scheduledDateMeta = const VerificationMeta('scheduledDate'); +@override +late final GeneratedColumn scheduledDate = GeneratedColumn('scheduled_date', 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 _xpEarnedMeta = const VerificationMeta('xpEarned'); +@override +late final GeneratedColumn xpEarned = GeneratedColumn('xp_earned', aliasedName, false, type: DriftSqlType.int, requiredDuringInsert: false, defaultValue: const Constant(0)); +static const VerificationMeta _exercisesMeta = const VerificationMeta('exercises'); +@override +late final GeneratedColumnWithTypeConverter, String> exercises = GeneratedColumn('exercises', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true).withConverter>($WorkoutsTable.$converterexercises); +static const VerificationMeta _notesMeta = const VerificationMeta('notes'); +@override +late final GeneratedColumn notes = GeneratedColumn('notes', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: false, defaultValue: const Constant('')); +static const VerificationMeta _isDirtyMeta = const VerificationMeta('isDirty'); +@override +late final GeneratedColumn isDirty = GeneratedColumn('is_dirty', aliasedName, false, type: DriftSqlType.bool, requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("is_dirty" IN (0, 1))'), defaultValue: const Constant(false)); +static const VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); +@override +late final GeneratedColumn createdAt = GeneratedColumn('created_at', aliasedName, false, type: DriftSqlType.dateTime, requiredDuringInsert: false, defaultValue: currentDateAndTime); +static const VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); +@override +late final GeneratedColumn updatedAt = GeneratedColumn('updated_at', aliasedName, false, type: DriftSqlType.dateTime, requiredDuringInsert: false, defaultValue: currentDateAndTime); +@override +List get $columns => [id, serverId, userId, cycleId, week, day, scheduledDate, completedAt, xpEarned, exercises, notes, isDirty, createdAt, updatedAt]; +@override +String get aliasedName => _alias ?? actualTableName; +@override + String get actualTableName => $name; +static const String $name = 'workouts'; +@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));}if (data.containsKey('server_id')) { +context.handle(_serverIdMeta, serverId.isAcceptableOrUnknown(data['server_id']!, _serverIdMeta));}if (data.containsKey('user_id')) { +context.handle(_userIdMeta, userId.isAcceptableOrUnknown(data['user_id']!, _userIdMeta));} else if (isInserting) { +context.missing(_userIdMeta); +} +if (data.containsKey('cycle_id')) { +context.handle(_cycleIdMeta, cycleId.isAcceptableOrUnknown(data['cycle_id']!, _cycleIdMeta));} else if (isInserting) { +context.missing(_cycleIdMeta); +} +if (data.containsKey('week')) { +context.handle(_weekMeta, week.isAcceptableOrUnknown(data['week']!, _weekMeta));} else if (isInserting) { +context.missing(_weekMeta); +} +if (data.containsKey('day')) { +context.handle(_dayMeta, day.isAcceptableOrUnknown(data['day']!, _dayMeta));} else if (isInserting) { +context.missing(_dayMeta); +} +if (data.containsKey('scheduled_date')) { +context.handle(_scheduledDateMeta, scheduledDate.isAcceptableOrUnknown(data['scheduled_date']!, _scheduledDateMeta));}if (data.containsKey('completed_at')) { +context.handle(_completedAtMeta, completedAt.isAcceptableOrUnknown(data['completed_at']!, _completedAtMeta));}if (data.containsKey('xp_earned')) { +context.handle(_xpEarnedMeta, xpEarned.isAcceptableOrUnknown(data['xp_earned']!, _xpEarnedMeta));}context.handle(_exercisesMeta, const VerificationResult.success());if (data.containsKey('notes')) { +context.handle(_notesMeta, notes.isAcceptableOrUnknown(data['notes']!, _notesMeta));}if (data.containsKey('is_dirty')) { +context.handle(_isDirtyMeta, isDirty.isAcceptableOrUnknown(data['is_dirty']!, _isDirtyMeta));}if (data.containsKey('created_at')) { +context.handle(_createdAtMeta, createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta));}if (data.containsKey('updated_at')) { +context.handle(_updatedAtMeta, updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta));}return context; +} +@override +Set get $primaryKey => {id}; +@override WorkoutCollection map(Map data, {String? tablePrefix}) { +final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';return WorkoutCollection(id: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}id'])!, serverId: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}server_id']), userId: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}user_id'])!, cycleId: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}cycle_id'])!, week: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}week'])!, day: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}day'])!, scheduledDate: attachedDatabase.typeMapping.read(DriftSqlType.dateTime, data['${effectivePrefix}scheduled_date']), completedAt: attachedDatabase.typeMapping.read(DriftSqlType.dateTime, data['${effectivePrefix}completed_at']), xpEarned: attachedDatabase.typeMapping.read(DriftSqlType.int, data['${effectivePrefix}xp_earned'])!, exercises: $WorkoutsTable.$converterexercises.fromSql(attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}exercises'])!), notes: attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}notes'])!, isDirty: attachedDatabase.typeMapping.read(DriftSqlType.bool, data['${effectivePrefix}is_dirty'])!, createdAt: attachedDatabase.typeMapping.read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, updatedAt: attachedDatabase.typeMapping.read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, ); +} +@override +$WorkoutsTable createAlias(String alias) { +return $WorkoutsTable(attachedDatabase, alias);}static TypeConverter,String> $converterexercises = const ListConverter();}class WorkoutCollection extends DataClass implements Insertable +{ +final int id; +final String? serverId; +final String userId; +final String cycleId; +final int week; +final int day; +final DateTime? scheduledDate; +final DateTime? completedAt; +final int xpEarned; +final List exercises; +final String notes; +final bool isDirty; +final DateTime createdAt; +final DateTime updatedAt; +const WorkoutCollection({required this.id, this.serverId, required this.userId, required this.cycleId, required this.week, required this.day, this.scheduledDate, this.completedAt, required this.xpEarned, required this.exercises, required this.notes, required this.isDirty, required this.createdAt, required this.updatedAt});@override +Map toColumns(bool nullToAbsent) { +final map = {};map['id'] = Variable(id); +if (!nullToAbsent || serverId != null){map['server_id'] = Variable(serverId); +}map['user_id'] = Variable(userId); +map['cycle_id'] = Variable(cycleId); +map['week'] = Variable(week); +map['day'] = Variable(day); +if (!nullToAbsent || scheduledDate != null){map['scheduled_date'] = Variable(scheduledDate); +}if (!nullToAbsent || completedAt != null){map['completed_at'] = Variable(completedAt); +}map['xp_earned'] = Variable(xpEarned); +{map['exercises'] = Variable($WorkoutsTable.$converterexercises.toSql(exercises)); +}map['notes'] = Variable(notes); +map['is_dirty'] = Variable(isDirty); +map['created_at'] = Variable(createdAt); +map['updated_at'] = Variable(updatedAt); +return map; +} +WorkoutsCompanion toCompanion(bool nullToAbsent) { +return WorkoutsCompanion(id: Value(id),serverId: serverId == null && nullToAbsent ? const Value.absent() : Value(serverId),userId: Value(userId),cycleId: Value(cycleId),week: Value(week),day: Value(day),scheduledDate: scheduledDate == null && nullToAbsent ? const Value.absent() : Value(scheduledDate),completedAt: completedAt == null && nullToAbsent ? const Value.absent() : Value(completedAt),xpEarned: Value(xpEarned),exercises: Value(exercises),notes: Value(notes),isDirty: Value(isDirty),createdAt: Value(createdAt),updatedAt: Value(updatedAt),); +} +factory WorkoutCollection.fromJson(Map json, {ValueSerializer? serializer}) { +serializer ??= driftRuntimeOptions.defaultSerializer; +return WorkoutCollection(id: serializer.fromJson(json['id']),serverId: serializer.fromJson(json['serverId']),userId: serializer.fromJson(json['userId']),cycleId: serializer.fromJson(json['cycleId']),week: serializer.fromJson(json['week']),day: serializer.fromJson(json['day']),scheduledDate: serializer.fromJson(json['scheduledDate']),completedAt: serializer.fromJson(json['completedAt']),xpEarned: serializer.fromJson(json['xpEarned']),exercises: serializer.fromJson>(json['exercises']),notes: serializer.fromJson(json['notes']),isDirty: serializer.fromJson(json['isDirty']),createdAt: serializer.fromJson(json['createdAt']),updatedAt: serializer.fromJson(json['updatedAt']),);} +@override Map toJson({ValueSerializer? serializer}) { +serializer ??= driftRuntimeOptions.defaultSerializer; +return { +'id': serializer.toJson(id),'serverId': serializer.toJson(serverId),'userId': serializer.toJson(userId),'cycleId': serializer.toJson(cycleId),'week': serializer.toJson(week),'day': serializer.toJson(day),'scheduledDate': serializer.toJson(scheduledDate),'completedAt': serializer.toJson(completedAt),'xpEarned': serializer.toJson(xpEarned),'exercises': serializer.toJson>(exercises),'notes': serializer.toJson(notes),'isDirty': serializer.toJson(isDirty),'createdAt': serializer.toJson(createdAt),'updatedAt': serializer.toJson(updatedAt),};}WorkoutCollection copyWith({int? id,Value serverId = const Value.absent(),String? userId,String? cycleId,int? week,int? day,Value scheduledDate = const Value.absent(),Value completedAt = const Value.absent(),int? xpEarned,List? exercises,String? notes,bool? isDirty,DateTime? createdAt,DateTime? updatedAt}) => WorkoutCollection(id: id ?? this.id,serverId: serverId.present ? serverId.value : this.serverId,userId: userId ?? this.userId,cycleId: cycleId ?? this.cycleId,week: week ?? this.week,day: day ?? this.day,scheduledDate: scheduledDate.present ? scheduledDate.value : this.scheduledDate,completedAt: completedAt.present ? completedAt.value : this.completedAt,xpEarned: xpEarned ?? this.xpEarned,exercises: exercises ?? this.exercises,notes: notes ?? this.notes,isDirty: isDirty ?? this.isDirty,createdAt: createdAt ?? this.createdAt,updatedAt: updatedAt ?? this.updatedAt,);WorkoutCollection copyWithCompanion(WorkoutsCompanion data) { +return WorkoutCollection( +id: data.id.present ? data.id.value : this.id,serverId: data.serverId.present ? data.serverId.value : this.serverId,userId: data.userId.present ? data.userId.value : this.userId,cycleId: data.cycleId.present ? data.cycleId.value : this.cycleId,week: data.week.present ? data.week.value : this.week,day: data.day.present ? data.day.value : this.day,scheduledDate: data.scheduledDate.present ? data.scheduledDate.value : this.scheduledDate,completedAt: data.completedAt.present ? data.completedAt.value : this.completedAt,xpEarned: data.xpEarned.present ? data.xpEarned.value : this.xpEarned,exercises: data.exercises.present ? data.exercises.value : this.exercises,notes: data.notes.present ? data.notes.value : this.notes,isDirty: data.isDirty.present ? data.isDirty.value : this.isDirty,createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt,); +} +@override +String toString() {return (StringBuffer('WorkoutCollection(')..write('id: $id, ')..write('serverId: $serverId, ')..write('userId: $userId, ')..write('cycleId: $cycleId, ')..write('week: $week, ')..write('day: $day, ')..write('scheduledDate: $scheduledDate, ')..write('completedAt: $completedAt, ')..write('xpEarned: $xpEarned, ')..write('exercises: $exercises, ')..write('notes: $notes, ')..write('isDirty: $isDirty, ')..write('createdAt: $createdAt, ')..write('updatedAt: $updatedAt')..write(')')).toString();} +@override + int get hashCode => Object.hash(id, serverId, userId, cycleId, week, day, scheduledDate, completedAt, xpEarned, exercises, notes, isDirty, createdAt, updatedAt);@override +bool operator ==(Object other) => identical(this, other) || (other is WorkoutCollection && other.id == this.id && other.serverId == this.serverId && other.userId == this.userId && other.cycleId == this.cycleId && other.week == this.week && other.day == this.day && other.scheduledDate == this.scheduledDate && other.completedAt == this.completedAt && other.xpEarned == this.xpEarned && other.exercises == this.exercises && other.notes == this.notes && other.isDirty == this.isDirty && other.createdAt == this.createdAt && other.updatedAt == this.updatedAt); +}class WorkoutsCompanion extends UpdateCompanion { +final Value id; +final Value serverId; +final Value userId; +final Value cycleId; +final Value week; +final Value day; +final Value scheduledDate; +final Value completedAt; +final Value xpEarned; +final Value> exercises; +final Value notes; +final Value isDirty; +final Value createdAt; +final Value updatedAt; +const WorkoutsCompanion({this.id = const Value.absent(),this.serverId = const Value.absent(),this.userId = const Value.absent(),this.cycleId = const Value.absent(),this.week = const Value.absent(),this.day = const Value.absent(),this.scheduledDate = const Value.absent(),this.completedAt = const Value.absent(),this.xpEarned = const Value.absent(),this.exercises = const Value.absent(),this.notes = const Value.absent(),this.isDirty = const Value.absent(),this.createdAt = const Value.absent(),this.updatedAt = const Value.absent(),}); +WorkoutsCompanion.insert({this.id = const Value.absent(),this.serverId = const Value.absent(),required String userId,required String cycleId,required int week,required int day,this.scheduledDate = const Value.absent(),this.completedAt = const Value.absent(),this.xpEarned = const Value.absent(),required List exercises,this.notes = const Value.absent(),this.isDirty = const Value.absent(),this.createdAt = const Value.absent(),this.updatedAt = const Value.absent(),}): userId = Value(userId), cycleId = Value(cycleId), week = Value(week), day = Value(day), exercises = Value(exercises); +static Insertable custom({Expression? id, +Expression? serverId, +Expression? userId, +Expression? cycleId, +Expression? week, +Expression? day, +Expression? scheduledDate, +Expression? completedAt, +Expression? xpEarned, +Expression? exercises, +Expression? notes, +Expression? isDirty, +Expression? createdAt, +Expression? updatedAt, +}) { +return RawValuesInsertable({if (id != null)'id': id,if (serverId != null)'server_id': serverId,if (userId != null)'user_id': userId,if (cycleId != null)'cycle_id': cycleId,if (week != null)'week': week,if (day != null)'day': day,if (scheduledDate != null)'scheduled_date': scheduledDate,if (completedAt != null)'completed_at': completedAt,if (xpEarned != null)'xp_earned': xpEarned,if (exercises != null)'exercises': exercises,if (notes != null)'notes': notes,if (isDirty != null)'is_dirty': isDirty,if (createdAt != null)'created_at': createdAt,if (updatedAt != null)'updated_at': updatedAt,}); +}WorkoutsCompanion copyWith({Value? id, Value? serverId, Value? userId, Value? cycleId, Value? week, Value? day, Value? scheduledDate, Value? completedAt, Value? xpEarned, Value>? exercises, Value? notes, Value? isDirty, Value? createdAt, Value? updatedAt}) { +return WorkoutsCompanion(id: id ?? this.id,serverId: serverId ?? this.serverId,userId: userId ?? this.userId,cycleId: cycleId ?? this.cycleId,week: week ?? this.week,day: day ?? this.day,scheduledDate: scheduledDate ?? this.scheduledDate,completedAt: completedAt ?? this.completedAt,xpEarned: xpEarned ?? this.xpEarned,exercises: exercises ?? this.exercises,notes: notes ?? this.notes,isDirty: isDirty ?? this.isDirty,createdAt: createdAt ?? this.createdAt,updatedAt: updatedAt ?? this.updatedAt,); +} +@override +Map toColumns(bool nullToAbsent) { +final map = {};if (id.present) { +map['id'] = Variable(id.value);} +if (serverId.present) { +map['server_id'] = Variable(serverId.value);} +if (userId.present) { +map['user_id'] = Variable(userId.value);} +if (cycleId.present) { +map['cycle_id'] = Variable(cycleId.value);} +if (week.present) { +map['week'] = Variable(week.value);} +if (day.present) { +map['day'] = Variable(day.value);} +if (scheduledDate.present) { +map['scheduled_date'] = Variable(scheduledDate.value);} +if (completedAt.present) { +map['completed_at'] = Variable(completedAt.value);} +if (xpEarned.present) { +map['xp_earned'] = Variable(xpEarned.value);} +if (exercises.present) { +map['exercises'] = Variable($WorkoutsTable.$converterexercises.toSql(exercises.value));} +if (notes.present) { +map['notes'] = Variable(notes.value);} +if (isDirty.present) { +map['is_dirty'] = Variable(isDirty.value);} +if (createdAt.present) { +map['created_at'] = Variable(createdAt.value);} +if (updatedAt.present) { +map['updated_at'] = Variable(updatedAt.value);} +return map; +} +@override +String toString() {return (StringBuffer('WorkoutsCompanion(')..write('id: $id, ')..write('serverId: $serverId, ')..write('userId: $userId, ')..write('cycleId: $cycleId, ')..write('week: $week, ')..write('day: $day, ')..write('scheduledDate: $scheduledDate, ')..write('completedAt: $completedAt, ')..write('xpEarned: $xpEarned, ')..write('exercises: $exercises, ')..write('notes: $notes, ')..write('isDirty: $isDirty, ')..write('createdAt: $createdAt, ')..write('updatedAt: $updatedAt')..write(')')).toString();} +} +abstract class _$AppDatabase extends GeneratedDatabase{ +_$AppDatabase(QueryExecutor e): super(e); +$AppDatabaseManager get managers => $AppDatabaseManager(this); +late final $UsersTable users = $UsersTable(this); +late final $CyclesTable cycles = $CyclesTable(this); +late final $WorkoutsTable workouts = $WorkoutsTable(this); +@override +Iterable> get allTables => allSchemaEntities.whereType>(); +@override +List get allSchemaEntities => [users, cycles, workouts]; +} +typedef $$UsersTableCreateCompanionBuilder = UsersCompanion Function({Value id,Value serverId,Value email,Value xp,Value level,Value currentBodyweight,Value?> inventorySettings,Value?> avatarConfig,Value lastSyncAt,Value isDirty,Value createdAt,Value updatedAt,}); +typedef $$UsersTableUpdateCompanionBuilder = UsersCompanion Function({Value id,Value serverId,Value email,Value xp,Value level,Value currentBodyweight,Value?> inventorySettings,Value?> avatarConfig,Value lastSyncAt,Value isDirty,Value createdAt,Value updatedAt,}); +class $$UsersTableFilterComposer extends Composer< + _$AppDatabase, + $UsersTable> { + $$UsersTableFilterComposer({ + 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 serverId => $composableBuilder( + column: $table.serverId, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get email => $composableBuilder( + column: $table.email, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get xp => $composableBuilder( + column: $table.xp, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get level => $composableBuilder( + column: $table.level, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get currentBodyweight => $composableBuilder( + column: $table.currentBodyweight, + builder: (column) => + ColumnFilters(column)); + + ColumnWithTypeConverterFilters?,Map,String> get inventorySettings => $composableBuilder( + column: $table.inventorySettings, + builder: (column) => + ColumnWithTypeConverterFilters(column)); + + ColumnWithTypeConverterFilters?,Map,String> get avatarConfig => $composableBuilder( + column: $table.avatarConfig, + builder: (column) => + ColumnWithTypeConverterFilters(column)); + +ColumnFilters get lastSyncAt => $composableBuilder( + column: $table.lastSyncAt, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get isDirty => $composableBuilder( + column: $table.isDirty, + 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)); + + } + class $$UsersTableOrderingComposer extends Composer< + _$AppDatabase, + $UsersTable> { + $$UsersTableOrderingComposer({ + 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 serverId => $composableBuilder( + column: $table.serverId, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get email => $composableBuilder( + column: $table.email, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get xp => $composableBuilder( + column: $table.xp, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get level => $composableBuilder( + column: $table.level, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get currentBodyweight => $composableBuilder( + column: $table.currentBodyweight, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get inventorySettings => $composableBuilder( + column: $table.inventorySettings, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get avatarConfig => $composableBuilder( + column: $table.avatarConfig, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get lastSyncAt => $composableBuilder( + column: $table.lastSyncAt, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get isDirty => $composableBuilder( + column: $table.isDirty, + 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)); + + } + class $$UsersTableAnnotationComposer extends Composer< + _$AppDatabase, + $UsersTable> { + $$UsersTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => $composableBuilder( + column: $table.id, + builder: (column) => column); + +GeneratedColumn get serverId => $composableBuilder( + column: $table.serverId, + builder: (column) => column); + +GeneratedColumn get email => $composableBuilder( + column: $table.email, + builder: (column) => column); + +GeneratedColumn get xp => $composableBuilder( + column: $table.xp, + builder: (column) => column); + +GeneratedColumn get level => $composableBuilder( + column: $table.level, + builder: (column) => column); + +GeneratedColumn get currentBodyweight => $composableBuilder( + column: $table.currentBodyweight, + builder: (column) => column); + + GeneratedColumnWithTypeConverter?,String> get inventorySettings => $composableBuilder( + column: $table.inventorySettings, + builder: (column) => column); + + GeneratedColumnWithTypeConverter?,String> get avatarConfig => $composableBuilder( + column: $table.avatarConfig, + builder: (column) => column); + +GeneratedColumn get lastSyncAt => $composableBuilder( + column: $table.lastSyncAt, + builder: (column) => column); + +GeneratedColumn get isDirty => $composableBuilder( + column: $table.isDirty, + builder: (column) => column); + +GeneratedColumn get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => column); + +GeneratedColumn get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => column); + + } + class $$UsersTableTableManager extends RootTableManager <_$AppDatabase, + $UsersTable, + UserCollection, + $$UsersTableFilterComposer, + $$UsersTableOrderingComposer, + $$UsersTableAnnotationComposer, + $$UsersTableCreateCompanionBuilder, + $$UsersTableUpdateCompanionBuilder, + (UserCollection,BaseReferences<_$AppDatabase,$UsersTable,UserCollection>), + UserCollection, + PrefetchHooks Function() + > { + $$UsersTableTableManager(_$AppDatabase db, $UsersTable table) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => $$UsersTableFilterComposer($db: db,$table:table), + createOrderingComposer: () => $$UsersTableOrderingComposer($db: db,$table:table), + createComputedFieldComposer: () => $$UsersTableAnnotationComposer($db: db,$table:table), + updateCompanionCallback: ({Value id = const Value.absent(),Value serverId = const Value.absent(),Value email = const Value.absent(),Value xp = const Value.absent(),Value level = const Value.absent(),Value currentBodyweight = const Value.absent(),Value?> inventorySettings = const Value.absent(),Value?> avatarConfig = const Value.absent(),Value lastSyncAt = const Value.absent(),Value isDirty = const Value.absent(),Value createdAt = const Value.absent(),Value updatedAt = const Value.absent(),})=> UsersCompanion(id: id,serverId: serverId,email: email,xp: xp,level: level,currentBodyweight: currentBodyweight,inventorySettings: inventorySettings,avatarConfig: avatarConfig,lastSyncAt: lastSyncAt,isDirty: isDirty,createdAt: createdAt,updatedAt: updatedAt,), + createCompanionCallback: ({Value id = const Value.absent(),Value serverId = const Value.absent(),Value email = const Value.absent(),Value xp = const Value.absent(),Value level = const Value.absent(),Value currentBodyweight = const Value.absent(),Value?> inventorySettings = const Value.absent(),Value?> avatarConfig = const Value.absent(),Value lastSyncAt = const Value.absent(),Value isDirty = const Value.absent(),Value createdAt = const Value.absent(),Value updatedAt = const Value.absent(),})=> UsersCompanion.insert(id: id,serverId: serverId,email: email,xp: xp,level: level,currentBodyweight: currentBodyweight,inventorySettings: inventorySettings,avatarConfig: avatarConfig,lastSyncAt: lastSyncAt,isDirty: isDirty,createdAt: createdAt,updatedAt: updatedAt,), + withReferenceMapper: (p0) => p0 + .map( + (e) => + (e.readTable(table), BaseReferences(db, table, e)) + ) + .toList(), + prefetchHooksCallback: null, + )); + } + typedef $$UsersTableProcessedTableManager = ProcessedTableManager <_$AppDatabase, + $UsersTable, + UserCollection, + $$UsersTableFilterComposer, + $$UsersTableOrderingComposer, + $$UsersTableAnnotationComposer, + $$UsersTableCreateCompanionBuilder, + $$UsersTableUpdateCompanionBuilder, + (UserCollection,BaseReferences<_$AppDatabase,$UsersTable,UserCollection>), + UserCollection, + PrefetchHooks Function() + >;typedef $$CyclesTableCreateCompanionBuilder = CyclesCompanion Function({Value id,Value serverId,required String userId,required int cycleNumber,required DateTime startDate,Value endDate,Value isActive,required Map trainingMaxes,Value isDirty,Value createdAt,Value updatedAt,}); +typedef $$CyclesTableUpdateCompanionBuilder = CyclesCompanion Function({Value id,Value serverId,Value userId,Value cycleNumber,Value startDate,Value endDate,Value isActive,Value> trainingMaxes,Value isDirty,Value createdAt,Value updatedAt,}); +class $$CyclesTableFilterComposer extends Composer< + _$AppDatabase, + $CyclesTable> { + $$CyclesTableFilterComposer({ + 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 serverId => $composableBuilder( + column: $table.serverId, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get userId => $composableBuilder( + column: $table.userId, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get cycleNumber => $composableBuilder( + column: $table.cycleNumber, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get startDate => $composableBuilder( + column: $table.startDate, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get endDate => $composableBuilder( + column: $table.endDate, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get isActive => $composableBuilder( + column: $table.isActive, + builder: (column) => + ColumnFilters(column)); + + ColumnWithTypeConverterFilters,Map,String> get trainingMaxes => $composableBuilder( + column: $table.trainingMaxes, + builder: (column) => + ColumnWithTypeConverterFilters(column)); + +ColumnFilters get isDirty => $composableBuilder( + column: $table.isDirty, + 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)); + + } + class $$CyclesTableOrderingComposer extends Composer< + _$AppDatabase, + $CyclesTable> { + $$CyclesTableOrderingComposer({ + 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 serverId => $composableBuilder( + column: $table.serverId, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get userId => $composableBuilder( + column: $table.userId, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get cycleNumber => $composableBuilder( + column: $table.cycleNumber, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get startDate => $composableBuilder( + column: $table.startDate, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get endDate => $composableBuilder( + column: $table.endDate, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get isActive => $composableBuilder( + column: $table.isActive, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get trainingMaxes => $composableBuilder( + column: $table.trainingMaxes, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get isDirty => $composableBuilder( + column: $table.isDirty, + 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)); + + } + class $$CyclesTableAnnotationComposer extends Composer< + _$AppDatabase, + $CyclesTable> { + $$CyclesTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => $composableBuilder( + column: $table.id, + builder: (column) => column); + +GeneratedColumn get serverId => $composableBuilder( + column: $table.serverId, + builder: (column) => column); + +GeneratedColumn get userId => $composableBuilder( + column: $table.userId, + builder: (column) => column); + +GeneratedColumn get cycleNumber => $composableBuilder( + column: $table.cycleNumber, + builder: (column) => column); + +GeneratedColumn get startDate => $composableBuilder( + column: $table.startDate, + builder: (column) => column); + +GeneratedColumn get endDate => $composableBuilder( + column: $table.endDate, + builder: (column) => column); + +GeneratedColumn get isActive => $composableBuilder( + column: $table.isActive, + builder: (column) => column); + + GeneratedColumnWithTypeConverter,String> get trainingMaxes => $composableBuilder( + column: $table.trainingMaxes, + builder: (column) => column); + +GeneratedColumn get isDirty => $composableBuilder( + column: $table.isDirty, + builder: (column) => column); + +GeneratedColumn get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => column); + +GeneratedColumn get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => column); + + } + class $$CyclesTableTableManager extends RootTableManager <_$AppDatabase, + $CyclesTable, + CycleCollection, + $$CyclesTableFilterComposer, + $$CyclesTableOrderingComposer, + $$CyclesTableAnnotationComposer, + $$CyclesTableCreateCompanionBuilder, + $$CyclesTableUpdateCompanionBuilder, + (CycleCollection,BaseReferences<_$AppDatabase,$CyclesTable,CycleCollection>), + CycleCollection, + PrefetchHooks Function() + > { + $$CyclesTableTableManager(_$AppDatabase db, $CyclesTable table) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => $$CyclesTableFilterComposer($db: db,$table:table), + createOrderingComposer: () => $$CyclesTableOrderingComposer($db: db,$table:table), + createComputedFieldComposer: () => $$CyclesTableAnnotationComposer($db: db,$table:table), + updateCompanionCallback: ({Value id = const Value.absent(),Value serverId = const Value.absent(),Value userId = const Value.absent(),Value cycleNumber = const Value.absent(),Value startDate = const Value.absent(),Value endDate = const Value.absent(),Value isActive = const Value.absent(),Value> trainingMaxes = const Value.absent(),Value isDirty = const Value.absent(),Value createdAt = const Value.absent(),Value updatedAt = const Value.absent(),})=> CyclesCompanion(id: id,serverId: serverId,userId: userId,cycleNumber: cycleNumber,startDate: startDate,endDate: endDate,isActive: isActive,trainingMaxes: trainingMaxes,isDirty: isDirty,createdAt: createdAt,updatedAt: updatedAt,), + createCompanionCallback: ({Value id = const Value.absent(),Value serverId = const Value.absent(),required String userId,required int cycleNumber,required DateTime startDate,Value endDate = const Value.absent(),Value isActive = const Value.absent(),required Map trainingMaxes,Value isDirty = const Value.absent(),Value createdAt = const Value.absent(),Value updatedAt = const Value.absent(),})=> CyclesCompanion.insert(id: id,serverId: serverId,userId: userId,cycleNumber: cycleNumber,startDate: startDate,endDate: endDate,isActive: isActive,trainingMaxes: trainingMaxes,isDirty: isDirty,createdAt: createdAt,updatedAt: updatedAt,), + withReferenceMapper: (p0) => p0 + .map( + (e) => + (e.readTable(table), BaseReferences(db, table, e)) + ) + .toList(), + prefetchHooksCallback: null, + )); + } + typedef $$CyclesTableProcessedTableManager = ProcessedTableManager <_$AppDatabase, + $CyclesTable, + CycleCollection, + $$CyclesTableFilterComposer, + $$CyclesTableOrderingComposer, + $$CyclesTableAnnotationComposer, + $$CyclesTableCreateCompanionBuilder, + $$CyclesTableUpdateCompanionBuilder, + (CycleCollection,BaseReferences<_$AppDatabase,$CyclesTable,CycleCollection>), + CycleCollection, + PrefetchHooks Function() + >;typedef $$WorkoutsTableCreateCompanionBuilder = WorkoutsCompanion Function({Value id,Value serverId,required String userId,required String cycleId,required int week,required int day,Value scheduledDate,Value completedAt,Value xpEarned,required List exercises,Value notes,Value isDirty,Value createdAt,Value updatedAt,}); +typedef $$WorkoutsTableUpdateCompanionBuilder = WorkoutsCompanion Function({Value id,Value serverId,Value userId,Value cycleId,Value week,Value day,Value scheduledDate,Value completedAt,Value xpEarned,Value> exercises,Value notes,Value isDirty,Value createdAt,Value updatedAt,}); +class $$WorkoutsTableFilterComposer extends Composer< + _$AppDatabase, + $WorkoutsTable> { + $$WorkoutsTableFilterComposer({ + 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 serverId => $composableBuilder( + column: $table.serverId, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get userId => $composableBuilder( + column: $table.userId, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get cycleId => $composableBuilder( + column: $table.cycleId, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get week => $composableBuilder( + column: $table.week, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get day => $composableBuilder( + column: $table.day, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get scheduledDate => $composableBuilder( + column: $table.scheduledDate, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get xpEarned => $composableBuilder( + column: $table.xpEarned, + builder: (column) => + ColumnFilters(column)); + + ColumnWithTypeConverterFilters,List,String> get exercises => $composableBuilder( + column: $table.exercises, + builder: (column) => + ColumnWithTypeConverterFilters(column)); + +ColumnFilters get notes => $composableBuilder( + column: $table.notes, + builder: (column) => + ColumnFilters(column)); + +ColumnFilters get isDirty => $composableBuilder( + column: $table.isDirty, + 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)); + + } + class $$WorkoutsTableOrderingComposer extends Composer< + _$AppDatabase, + $WorkoutsTable> { + $$WorkoutsTableOrderingComposer({ + 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 serverId => $composableBuilder( + column: $table.serverId, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get userId => $composableBuilder( + column: $table.userId, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get cycleId => $composableBuilder( + column: $table.cycleId, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get week => $composableBuilder( + column: $table.week, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get day => $composableBuilder( + column: $table.day, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get scheduledDate => $composableBuilder( + column: $table.scheduledDate, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get xpEarned => $composableBuilder( + column: $table.xpEarned, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get exercises => $composableBuilder( + column: $table.exercises, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get notes => $composableBuilder( + column: $table.notes, + builder: (column) => + ColumnOrderings(column)); + +ColumnOrderings get isDirty => $composableBuilder( + column: $table.isDirty, + 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)); + + } + class $$WorkoutsTableAnnotationComposer extends Composer< + _$AppDatabase, + $WorkoutsTable> { + $$WorkoutsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => $composableBuilder( + column: $table.id, + builder: (column) => column); + +GeneratedColumn get serverId => $composableBuilder( + column: $table.serverId, + builder: (column) => column); + +GeneratedColumn get userId => $composableBuilder( + column: $table.userId, + builder: (column) => column); + +GeneratedColumn get cycleId => $composableBuilder( + column: $table.cycleId, + builder: (column) => column); + +GeneratedColumn get week => $composableBuilder( + column: $table.week, + builder: (column) => column); + +GeneratedColumn get day => $composableBuilder( + column: $table.day, + builder: (column) => column); + +GeneratedColumn get scheduledDate => $composableBuilder( + column: $table.scheduledDate, + builder: (column) => column); + +GeneratedColumn get completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => column); + +GeneratedColumn get xpEarned => $composableBuilder( + column: $table.xpEarned, + builder: (column) => column); + + GeneratedColumnWithTypeConverter,String> get exercises => $composableBuilder( + column: $table.exercises, + builder: (column) => column); + +GeneratedColumn get notes => $composableBuilder( + column: $table.notes, + builder: (column) => column); + +GeneratedColumn get isDirty => $composableBuilder( + column: $table.isDirty, + builder: (column) => column); + +GeneratedColumn get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => column); + +GeneratedColumn get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => column); + + } + class $$WorkoutsTableTableManager extends RootTableManager <_$AppDatabase, + $WorkoutsTable, + WorkoutCollection, + $$WorkoutsTableFilterComposer, + $$WorkoutsTableOrderingComposer, + $$WorkoutsTableAnnotationComposer, + $$WorkoutsTableCreateCompanionBuilder, + $$WorkoutsTableUpdateCompanionBuilder, + (WorkoutCollection,BaseReferences<_$AppDatabase,$WorkoutsTable,WorkoutCollection>), + WorkoutCollection, + PrefetchHooks Function() + > { + $$WorkoutsTableTableManager(_$AppDatabase db, $WorkoutsTable table) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => $$WorkoutsTableFilterComposer($db: db,$table:table), + createOrderingComposer: () => $$WorkoutsTableOrderingComposer($db: db,$table:table), + createComputedFieldComposer: () => $$WorkoutsTableAnnotationComposer($db: db,$table:table), + updateCompanionCallback: ({Value id = const Value.absent(),Value serverId = const Value.absent(),Value userId = const Value.absent(),Value cycleId = const Value.absent(),Value week = const Value.absent(),Value day = const Value.absent(),Value scheduledDate = const Value.absent(),Value completedAt = const Value.absent(),Value xpEarned = const Value.absent(),Value> exercises = const Value.absent(),Value notes = const Value.absent(),Value isDirty = const Value.absent(),Value createdAt = const Value.absent(),Value updatedAt = const Value.absent(),})=> WorkoutsCompanion(id: id,serverId: serverId,userId: userId,cycleId: cycleId,week: week,day: day,scheduledDate: scheduledDate,completedAt: completedAt,xpEarned: xpEarned,exercises: exercises,notes: notes,isDirty: isDirty,createdAt: createdAt,updatedAt: updatedAt,), + createCompanionCallback: ({Value id = const Value.absent(),Value serverId = const Value.absent(),required String userId,required String cycleId,required int week,required int day,Value scheduledDate = const Value.absent(),Value completedAt = const Value.absent(),Value xpEarned = const Value.absent(),required List exercises,Value notes = const Value.absent(),Value isDirty = const Value.absent(),Value createdAt = const Value.absent(),Value updatedAt = const Value.absent(),})=> WorkoutsCompanion.insert(id: id,serverId: serverId,userId: userId,cycleId: cycleId,week: week,day: day,scheduledDate: scheduledDate,completedAt: completedAt,xpEarned: xpEarned,exercises: exercises,notes: notes,isDirty: isDirty,createdAt: createdAt,updatedAt: updatedAt,), + withReferenceMapper: (p0) => p0 + .map( + (e) => + (e.readTable(table), BaseReferences(db, table, e)) + ) + .toList(), + prefetchHooksCallback: null, + )); + } + typedef $$WorkoutsTableProcessedTableManager = ProcessedTableManager <_$AppDatabase, + $WorkoutsTable, + WorkoutCollection, + $$WorkoutsTableFilterComposer, + $$WorkoutsTableOrderingComposer, + $$WorkoutsTableAnnotationComposer, + $$WorkoutsTableCreateCompanionBuilder, + $$WorkoutsTableUpdateCompanionBuilder, + (WorkoutCollection,BaseReferences<_$AppDatabase,$WorkoutsTable,WorkoutCollection>), + WorkoutCollection, + PrefetchHooks Function() + >;class $AppDatabaseManager { +final _$AppDatabase _db; +$AppDatabaseManager(this._db); +$$UsersTableTableManager get users => $$UsersTableTableManager(_db, _db.users); +$$CyclesTableTableManager get cycles => $$CyclesTableTableManager(_db, _db.cycles); +$$WorkoutsTableTableManager get workouts => $$WorkoutsTableTableManager(_db, _db.workouts); +} diff --git a/lib/src/shared/data/local/collections/cycle_collection.dart b/lib/src/shared/data/local/collections/cycle_collection.dart deleted file mode 100644 index 72bd209..0000000 --- a/lib/src/shared/data/local/collections/cycle_collection.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:isar/isar.dart'; - -part 'cycle_collection.g.dart'; - -@collection -class CycleCollection { - Id id = Isar.autoIncrement; - - @Index(unique: true) - String? serverId; - - String userId = ''; // Local reference - int cycleNumber = 1; - - DateTime startDate = DateTime.now(); - DateTime? endDate; - - bool isActive = true; - - // Training Maxes (stored as JSON string) - String trainingMaxesJson = '{}'; - - bool isDirty = false; - DateTime createdAt = DateTime.now(); - DateTime updatedAt = DateTime.now(); -} - diff --git a/lib/src/shared/data/local/collections/cycle_collection.g.dart b/lib/src/shared/data/local/collections/cycle_collection.g.dart deleted file mode 100644 index 5642b32..0000000 --- a/lib/src/shared/data/local/collections/cycle_collection.g.dart +++ /dev/null @@ -1,1649 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'cycle_collection.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetCycleCollectionCollection on Isar { - IsarCollection get cycleCollections => this.collection(); -} - -const CycleCollectionSchema = CollectionSchema( - name: r'CycleCollection', - id: 3532561085934404, - properties: { - r'createdAt': PropertySchema( - id: 0, - name: r'createdAt', - type: IsarType.dateTime, - ), - r'cycleNumber': PropertySchema( - id: 1, - name: r'cycleNumber', - type: IsarType.long, - ), - r'endDate': PropertySchema( - id: 2, - name: r'endDate', - type: IsarType.dateTime, - ), - r'isActive': PropertySchema( - id: 3, - name: r'isActive', - type: IsarType.bool, - ), - r'isDirty': PropertySchema( - id: 4, - name: r'isDirty', - type: IsarType.bool, - ), - r'serverId': PropertySchema( - id: 5, - name: r'serverId', - type: IsarType.string, - ), - r'startDate': PropertySchema( - id: 6, - name: r'startDate', - type: IsarType.dateTime, - ), - r'trainingMaxesJson': PropertySchema( - id: 7, - name: r'trainingMaxesJson', - type: IsarType.string, - ), - r'updatedAt': PropertySchema( - id: 8, - name: r'updatedAt', - type: IsarType.dateTime, - ), - r'userId': PropertySchema( - id: 9, - name: r'userId', - type: IsarType.string, - ) - }, - estimateSize: _cycleCollectionEstimateSize, - serialize: _cycleCollectionSerialize, - deserialize: _cycleCollectionDeserialize, - deserializeProp: _cycleCollectionDeserializeProp, - idName: r'id', - indexes: { - r'serverId': IndexSchema( - id: -7950187970872907662, - name: r'serverId', - unique: true, - replace: false, - properties: [ - IndexPropertySchema( - name: r'serverId', - type: IndexType.hash, - caseSensitive: true, - ) - ], - ) - }, - links: {}, - embeddedSchemas: {}, - getId: _cycleCollectionGetId, - getLinks: _cycleCollectionGetLinks, - attach: _cycleCollectionAttach, - version: '3.1.0+1', -); - -int _cycleCollectionEstimateSize( - CycleCollection object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - { - final value = object.serverId; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - bytesCount += 3 + object.trainingMaxesJson.length * 3; - bytesCount += 3 + object.userId.length * 3; - return bytesCount; -} - -void _cycleCollectionSerialize( - CycleCollection object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeDateTime(offsets[0], object.createdAt); - writer.writeLong(offsets[1], object.cycleNumber); - writer.writeDateTime(offsets[2], object.endDate); - writer.writeBool(offsets[3], object.isActive); - writer.writeBool(offsets[4], object.isDirty); - writer.writeString(offsets[5], object.serverId); - writer.writeDateTime(offsets[6], object.startDate); - writer.writeString(offsets[7], object.trainingMaxesJson); - writer.writeDateTime(offsets[8], object.updatedAt); - writer.writeString(offsets[9], object.userId); -} - -CycleCollection _cycleCollectionDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = CycleCollection(); - object.createdAt = reader.readDateTime(offsets[0]); - object.cycleNumber = reader.readLong(offsets[1]); - object.endDate = reader.readDateTimeOrNull(offsets[2]); - object.id = id; - object.isActive = reader.readBool(offsets[3]); - object.isDirty = reader.readBool(offsets[4]); - object.serverId = reader.readStringOrNull(offsets[5]); - object.startDate = reader.readDateTime(offsets[6]); - object.trainingMaxesJson = reader.readString(offsets[7]); - object.updatedAt = reader.readDateTime(offsets[8]); - object.userId = reader.readString(offsets[9]); - return object; -} - -P _cycleCollectionDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readDateTime(offset)) as P; - case 1: - return (reader.readLong(offset)) as P; - case 2: - return (reader.readDateTimeOrNull(offset)) as P; - case 3: - return (reader.readBool(offset)) as P; - case 4: - return (reader.readBool(offset)) as P; - case 5: - return (reader.readStringOrNull(offset)) as P; - case 6: - return (reader.readDateTime(offset)) as P; - case 7: - return (reader.readString(offset)) as P; - case 8: - return (reader.readDateTime(offset)) as P; - case 9: - return (reader.readString(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _cycleCollectionGetId(CycleCollection object) { - return object.id; -} - -List> _cycleCollectionGetLinks(CycleCollection object) { - return []; -} - -void _cycleCollectionAttach( - IsarCollection col, Id id, CycleCollection object) { - object.id = id; -} - -extension CycleCollectionByIndex on IsarCollection { - Future getByServerId(String? serverId) { - return getByIndex(r'serverId', [serverId]); - } - - CycleCollection? getByServerIdSync(String? serverId) { - return getByIndexSync(r'serverId', [serverId]); - } - - Future deleteByServerId(String? serverId) { - return deleteByIndex(r'serverId', [serverId]); - } - - bool deleteByServerIdSync(String? serverId) { - return deleteByIndexSync(r'serverId', [serverId]); - } - - Future> getAllByServerId( - List serverIdValues) { - final values = serverIdValues.map((e) => [e]).toList(); - return getAllByIndex(r'serverId', values); - } - - List getAllByServerIdSync(List serverIdValues) { - final values = serverIdValues.map((e) => [e]).toList(); - return getAllByIndexSync(r'serverId', values); - } - - Future deleteAllByServerId(List serverIdValues) { - final values = serverIdValues.map((e) => [e]).toList(); - return deleteAllByIndex(r'serverId', values); - } - - int deleteAllByServerIdSync(List serverIdValues) { - final values = serverIdValues.map((e) => [e]).toList(); - return deleteAllByIndexSync(r'serverId', values); - } - - Future putByServerId(CycleCollection object) { - return putByIndex(r'serverId', object); - } - - Id putByServerIdSync(CycleCollection object, {bool saveLinks = true}) { - return putByIndexSync(r'serverId', object, saveLinks: saveLinks); - } - - Future> putAllByServerId(List objects) { - return putAllByIndex(r'serverId', objects); - } - - List putAllByServerIdSync(List objects, - {bool saveLinks = true}) { - return putAllByIndexSync(r'serverId', objects, saveLinks: saveLinks); - } -} - -extension CycleCollectionQueryWhereSort - on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension CycleCollectionQueryWhere - on QueryBuilder { - QueryBuilder idEqualTo( - Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); - }); - } - - QueryBuilder - idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder - idGreaterThan(Id id, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder idLessThan( - Id id, - {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - serverIdIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IndexWhereClause.equalTo( - indexName: r'serverId', - value: [null], - )); - }); - } - - QueryBuilder - serverIdIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [null], - includeLower: false, - upper: [], - )); - }); - } - - QueryBuilder - serverIdEqualTo(String? serverId) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IndexWhereClause.equalTo( - indexName: r'serverId', - value: [serverId], - )); - }); - } - - QueryBuilder - serverIdNotEqualTo(String? serverId) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [], - upper: [serverId], - includeUpper: false, - )) - .addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [serverId], - includeLower: false, - upper: [], - )); - } else { - return query - .addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [serverId], - includeLower: false, - upper: [], - )) - .addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [], - upper: [serverId], - includeUpper: false, - )); - } - }); - } -} - -extension CycleCollectionQueryFilter - on QueryBuilder { - QueryBuilder - createdAtEqualTo(DateTime value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'createdAt', - value: value, - )); - }); - } - - QueryBuilder - createdAtGreaterThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'createdAt', - value: value, - )); - }); - } - - QueryBuilder - createdAtLessThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'createdAt', - value: value, - )); - }); - } - - QueryBuilder - createdAtBetween( - DateTime lower, - DateTime upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'createdAt', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - cycleNumberEqualTo(int value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'cycleNumber', - value: value, - )); - }); - } - - QueryBuilder - cycleNumberGreaterThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'cycleNumber', - value: value, - )); - }); - } - - QueryBuilder - cycleNumberLessThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'cycleNumber', - value: value, - )); - }); - } - - QueryBuilder - cycleNumberBetween( - int lower, - int upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'cycleNumber', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - endDateIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'endDate', - )); - }); - } - - QueryBuilder - endDateIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'endDate', - )); - }); - } - - QueryBuilder - endDateEqualTo(DateTime? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'endDate', - value: value, - )); - }); - } - - QueryBuilder - endDateGreaterThan( - DateTime? value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'endDate', - value: value, - )); - }); - } - - QueryBuilder - endDateLessThan( - DateTime? value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'endDate', - value: value, - )); - }); - } - - QueryBuilder - endDateBetween( - DateTime? lower, - DateTime? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'endDate', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - idEqualTo(Id value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'id', - value: value, - )); - }); - } - - QueryBuilder - idGreaterThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - )); - }); - } - - QueryBuilder - idLessThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - )); - }); - } - - QueryBuilder - idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - isActiveEqualTo(bool value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'isActive', - value: value, - )); - }); - } - - QueryBuilder - isDirtyEqualTo(bool value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'isDirty', - value: value, - )); - }); - } - - QueryBuilder - serverIdIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'serverId', - )); - }); - } - - QueryBuilder - serverIdIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'serverId', - )); - }); - } - - QueryBuilder - serverIdEqualTo( - String? value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'serverId', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'serverId', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'serverId', - value: '', - )); - }); - } - - QueryBuilder - serverIdIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'serverId', - value: '', - )); - }); - } - - QueryBuilder - startDateEqualTo(DateTime value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'startDate', - value: value, - )); - }); - } - - QueryBuilder - startDateGreaterThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'startDate', - value: value, - )); - }); - } - - QueryBuilder - startDateLessThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'startDate', - value: value, - )); - }); - } - - QueryBuilder - startDateBetween( - DateTime lower, - DateTime upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'startDate', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - trainingMaxesJsonEqualTo( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'trainingMaxesJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - trainingMaxesJsonGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'trainingMaxesJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - trainingMaxesJsonLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'trainingMaxesJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - trainingMaxesJsonBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'trainingMaxesJson', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - trainingMaxesJsonStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'trainingMaxesJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - trainingMaxesJsonEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'trainingMaxesJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - trainingMaxesJsonContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'trainingMaxesJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - trainingMaxesJsonMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'trainingMaxesJson', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - trainingMaxesJsonIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'trainingMaxesJson', - value: '', - )); - }); - } - - QueryBuilder - trainingMaxesJsonIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'trainingMaxesJson', - value: '', - )); - }); - } - - QueryBuilder - updatedAtEqualTo(DateTime value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'updatedAt', - value: value, - )); - }); - } - - QueryBuilder - updatedAtGreaterThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'updatedAt', - value: value, - )); - }); - } - - QueryBuilder - updatedAtLessThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'updatedAt', - value: value, - )); - }); - } - - QueryBuilder - updatedAtBetween( - DateTime lower, - DateTime upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'updatedAt', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - userIdEqualTo( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'userId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'userId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'userId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'userId', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'userId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'userId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'userId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'userId', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'userId', - value: '', - )); - }); - } - - QueryBuilder - userIdIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'userId', - value: '', - )); - }); - } -} - -extension CycleCollectionQueryObject - on QueryBuilder {} - -extension CycleCollectionQueryLinks - on QueryBuilder {} - -extension CycleCollectionQuerySortBy - on QueryBuilder { - QueryBuilder - sortByCreatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'createdAt', Sort.asc); - }); - } - - QueryBuilder - sortByCreatedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'createdAt', Sort.desc); - }); - } - - QueryBuilder - sortByCycleNumber() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cycleNumber', Sort.asc); - }); - } - - QueryBuilder - sortByCycleNumberDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cycleNumber', Sort.desc); - }); - } - - QueryBuilder sortByEndDate() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'endDate', Sort.asc); - }); - } - - QueryBuilder - sortByEndDateDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'endDate', Sort.desc); - }); - } - - QueryBuilder - sortByIsActive() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isActive', Sort.asc); - }); - } - - QueryBuilder - sortByIsActiveDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isActive', Sort.desc); - }); - } - - QueryBuilder sortByIsDirty() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isDirty', Sort.asc); - }); - } - - QueryBuilder - sortByIsDirtyDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isDirty', Sort.desc); - }); - } - - QueryBuilder - sortByServerId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'serverId', Sort.asc); - }); - } - - QueryBuilder - sortByServerIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'serverId', Sort.desc); - }); - } - - QueryBuilder - sortByStartDate() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'startDate', Sort.asc); - }); - } - - QueryBuilder - sortByStartDateDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'startDate', Sort.desc); - }); - } - - QueryBuilder - sortByTrainingMaxesJson() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'trainingMaxesJson', Sort.asc); - }); - } - - QueryBuilder - sortByTrainingMaxesJsonDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'trainingMaxesJson', Sort.desc); - }); - } - - QueryBuilder - sortByUpdatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAt', Sort.asc); - }); - } - - QueryBuilder - sortByUpdatedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAt', Sort.desc); - }); - } - - QueryBuilder sortByUserId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'userId', Sort.asc); - }); - } - - QueryBuilder - sortByUserIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'userId', Sort.desc); - }); - } -} - -extension CycleCollectionQuerySortThenBy - on QueryBuilder { - QueryBuilder - thenByCreatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'createdAt', Sort.asc); - }); - } - - QueryBuilder - thenByCreatedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'createdAt', Sort.desc); - }); - } - - QueryBuilder - thenByCycleNumber() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cycleNumber', Sort.asc); - }); - } - - QueryBuilder - thenByCycleNumberDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cycleNumber', Sort.desc); - }); - } - - QueryBuilder thenByEndDate() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'endDate', Sort.asc); - }); - } - - QueryBuilder - thenByEndDateDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'endDate', Sort.desc); - }); - } - - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } - - QueryBuilder - thenByIsActive() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isActive', Sort.asc); - }); - } - - QueryBuilder - thenByIsActiveDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isActive', Sort.desc); - }); - } - - QueryBuilder thenByIsDirty() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isDirty', Sort.asc); - }); - } - - QueryBuilder - thenByIsDirtyDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isDirty', Sort.desc); - }); - } - - QueryBuilder - thenByServerId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'serverId', Sort.asc); - }); - } - - QueryBuilder - thenByServerIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'serverId', Sort.desc); - }); - } - - QueryBuilder - thenByStartDate() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'startDate', Sort.asc); - }); - } - - QueryBuilder - thenByStartDateDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'startDate', Sort.desc); - }); - } - - QueryBuilder - thenByTrainingMaxesJson() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'trainingMaxesJson', Sort.asc); - }); - } - - QueryBuilder - thenByTrainingMaxesJsonDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'trainingMaxesJson', Sort.desc); - }); - } - - QueryBuilder - thenByUpdatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAt', Sort.asc); - }); - } - - QueryBuilder - thenByUpdatedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAt', Sort.desc); - }); - } - - QueryBuilder thenByUserId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'userId', Sort.asc); - }); - } - - QueryBuilder - thenByUserIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'userId', Sort.desc); - }); - } -} - -extension CycleCollectionQueryWhereDistinct - on QueryBuilder { - QueryBuilder - distinctByCreatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'createdAt'); - }); - } - - QueryBuilder - distinctByCycleNumber() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'cycleNumber'); - }); - } - - QueryBuilder - distinctByEndDate() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'endDate'); - }); - } - - QueryBuilder - distinctByIsActive() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'isActive'); - }); - } - - QueryBuilder - distinctByIsDirty() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'isDirty'); - }); - } - - QueryBuilder distinctByServerId( - {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'serverId', caseSensitive: caseSensitive); - }); - } - - QueryBuilder - distinctByStartDate() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'startDate'); - }); - } - - QueryBuilder - distinctByTrainingMaxesJson({bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'trainingMaxesJson', - caseSensitive: caseSensitive); - }); - } - - QueryBuilder - distinctByUpdatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'updatedAt'); - }); - } - - QueryBuilder distinctByUserId( - {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'userId', caseSensitive: caseSensitive); - }); - } -} - -extension CycleCollectionQueryProperty - on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder - createdAtProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'createdAt'); - }); - } - - QueryBuilder cycleNumberProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'cycleNumber'); - }); - } - - QueryBuilder endDateProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'endDate'); - }); - } - - QueryBuilder isActiveProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'isActive'); - }); - } - - QueryBuilder isDirtyProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'isDirty'); - }); - } - - QueryBuilder serverIdProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'serverId'); - }); - } - - QueryBuilder - startDateProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'startDate'); - }); - } - - QueryBuilder - trainingMaxesJsonProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'trainingMaxesJson'); - }); - } - - QueryBuilder - updatedAtProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'updatedAt'); - }); - } - - QueryBuilder userIdProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'userId'); - }); - } -} diff --git a/lib/src/shared/data/local/collections/user_collection.dart b/lib/src/shared/data/local/collections/user_collection.dart deleted file mode 100644 index 7dd3978..0000000 --- a/lib/src/shared/data/local/collections/user_collection.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:isar/isar.dart'; - -part 'user_collection.g.dart'; - -@collection -class UserCollection { - Id id = Isar.autoIncrement; - - @Index(unique: true) - String? serverId; - - String email = ''; - int xp = 0; - int level = 1; - double currentBodyweight = 70.0; - - String? inventorySettingsJson; - String? avatarConfigJson; - - DateTime? lastSyncAt; - bool isDirty = false; - - DateTime createdAt = DateTime.now(); - DateTime updatedAt = DateTime.now(); -} diff --git a/lib/src/shared/data/local/collections/user_collection.g.dart b/lib/src/shared/data/local/collections/user_collection.g.dart deleted file mode 100644 index 4ecd4ee..0000000 --- a/lib/src/shared/data/local/collections/user_collection.g.dart +++ /dev/null @@ -1,1921 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'user_collection.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetUserCollectionCollection on Isar { - IsarCollection get userCollections => this.collection(); -} - -const UserCollectionSchema = CollectionSchema( - name: r'UserCollection', - id: 1551134645489327298, - properties: { - r'avatarConfigJson': PropertySchema( - id: 0, - name: r'avatarConfigJson', - type: IsarType.string, - ), - r'createdAt': PropertySchema( - id: 1, - name: r'createdAt', - type: IsarType.dateTime, - ), - r'currentBodyweight': PropertySchema( - id: 2, - name: r'currentBodyweight', - type: IsarType.double, - ), - r'email': PropertySchema( - id: 3, - name: r'email', - type: IsarType.string, - ), - r'inventorySettingsJson': PropertySchema( - id: 4, - name: r'inventorySettingsJson', - type: IsarType.string, - ), - r'isDirty': PropertySchema( - id: 5, - name: r'isDirty', - type: IsarType.bool, - ), - r'lastSyncAt': PropertySchema( - id: 6, - name: r'lastSyncAt', - type: IsarType.dateTime, - ), - r'level': PropertySchema( - id: 7, - name: r'level', - type: IsarType.long, - ), - r'serverId': PropertySchema( - id: 8, - name: r'serverId', - type: IsarType.string, - ), - r'updatedAt': PropertySchema( - id: 9, - name: r'updatedAt', - type: IsarType.dateTime, - ), - r'xp': PropertySchema( - id: 10, - name: r'xp', - type: IsarType.long, - ) - }, - estimateSize: _userCollectionEstimateSize, - serialize: _userCollectionSerialize, - deserialize: _userCollectionDeserialize, - deserializeProp: _userCollectionDeserializeProp, - idName: r'id', - indexes: { - r'serverId': IndexSchema( - id: -7950187970872907662, - name: r'serverId', - unique: true, - replace: false, - properties: [ - IndexPropertySchema( - name: r'serverId', - type: IndexType.hash, - caseSensitive: true, - ) - ], - ) - }, - links: {}, - embeddedSchemas: {}, - getId: _userCollectionGetId, - getLinks: _userCollectionGetLinks, - attach: _userCollectionAttach, - version: '3.1.0+1', -); - -int _userCollectionEstimateSize( - UserCollection object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - { - final value = object.avatarConfigJson; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - bytesCount += 3 + object.email.length * 3; - { - final value = object.inventorySettingsJson; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - { - final value = object.serverId; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - return bytesCount; -} - -void _userCollectionSerialize( - UserCollection object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeString(offsets[0], object.avatarConfigJson); - writer.writeDateTime(offsets[1], object.createdAt); - writer.writeDouble(offsets[2], object.currentBodyweight); - writer.writeString(offsets[3], object.email); - writer.writeString(offsets[4], object.inventorySettingsJson); - writer.writeBool(offsets[5], object.isDirty); - writer.writeDateTime(offsets[6], object.lastSyncAt); - writer.writeLong(offsets[7], object.level); - writer.writeString(offsets[8], object.serverId); - writer.writeDateTime(offsets[9], object.updatedAt); - writer.writeLong(offsets[10], object.xp); -} - -UserCollection _userCollectionDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = UserCollection(); - object.avatarConfigJson = reader.readStringOrNull(offsets[0]); - object.createdAt = reader.readDateTime(offsets[1]); - object.currentBodyweight = reader.readDouble(offsets[2]); - object.email = reader.readString(offsets[3]); - object.id = id; - object.inventorySettingsJson = reader.readStringOrNull(offsets[4]); - object.isDirty = reader.readBool(offsets[5]); - object.lastSyncAt = reader.readDateTimeOrNull(offsets[6]); - object.level = reader.readLong(offsets[7]); - object.serverId = reader.readStringOrNull(offsets[8]); - object.updatedAt = reader.readDateTime(offsets[9]); - object.xp = reader.readLong(offsets[10]); - return object; -} - -P _userCollectionDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readStringOrNull(offset)) as P; - case 1: - return (reader.readDateTime(offset)) as P; - case 2: - return (reader.readDouble(offset)) as P; - case 3: - return (reader.readString(offset)) as P; - case 4: - return (reader.readStringOrNull(offset)) as P; - case 5: - return (reader.readBool(offset)) as P; - case 6: - return (reader.readDateTimeOrNull(offset)) as P; - case 7: - return (reader.readLong(offset)) as P; - case 8: - return (reader.readStringOrNull(offset)) as P; - case 9: - return (reader.readDateTime(offset)) as P; - case 10: - return (reader.readLong(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _userCollectionGetId(UserCollection object) { - return object.id; -} - -List> _userCollectionGetLinks(UserCollection object) { - return []; -} - -void _userCollectionAttach( - IsarCollection col, Id id, UserCollection object) { - object.id = id; -} - -extension UserCollectionByIndex on IsarCollection { - Future getByServerId(String? serverId) { - return getByIndex(r'serverId', [serverId]); - } - - UserCollection? getByServerIdSync(String? serverId) { - return getByIndexSync(r'serverId', [serverId]); - } - - Future deleteByServerId(String? serverId) { - return deleteByIndex(r'serverId', [serverId]); - } - - bool deleteByServerIdSync(String? serverId) { - return deleteByIndexSync(r'serverId', [serverId]); - } - - Future> getAllByServerId(List serverIdValues) { - final values = serverIdValues.map((e) => [e]).toList(); - return getAllByIndex(r'serverId', values); - } - - List getAllByServerIdSync(List serverIdValues) { - final values = serverIdValues.map((e) => [e]).toList(); - return getAllByIndexSync(r'serverId', values); - } - - Future deleteAllByServerId(List serverIdValues) { - final values = serverIdValues.map((e) => [e]).toList(); - return deleteAllByIndex(r'serverId', values); - } - - int deleteAllByServerIdSync(List serverIdValues) { - final values = serverIdValues.map((e) => [e]).toList(); - return deleteAllByIndexSync(r'serverId', values); - } - - Future putByServerId(UserCollection object) { - return putByIndex(r'serverId', object); - } - - Id putByServerIdSync(UserCollection object, {bool saveLinks = true}) { - return putByIndexSync(r'serverId', object, saveLinks: saveLinks); - } - - Future> putAllByServerId(List objects) { - return putAllByIndex(r'serverId', objects); - } - - List putAllByServerIdSync(List objects, - {bool saveLinks = true}) { - return putAllByIndexSync(r'serverId', objects, saveLinks: saveLinks); - } -} - -extension UserCollectionQueryWhereSort - on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension UserCollectionQueryWhere - on QueryBuilder { - QueryBuilder idEqualTo( - Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); - }); - } - - QueryBuilder idNotEqualTo( - Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder idGreaterThan( - Id id, - {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder idLessThan( - Id id, - {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - serverIdIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IndexWhereClause.equalTo( - indexName: r'serverId', - value: [null], - )); - }); - } - - QueryBuilder - serverIdIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [null], - includeLower: false, - upper: [], - )); - }); - } - - QueryBuilder - serverIdEqualTo(String? serverId) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IndexWhereClause.equalTo( - indexName: r'serverId', - value: [serverId], - )); - }); - } - - QueryBuilder - serverIdNotEqualTo(String? serverId) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [], - upper: [serverId], - includeUpper: false, - )) - .addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [serverId], - includeLower: false, - upper: [], - )); - } else { - return query - .addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [serverId], - includeLower: false, - upper: [], - )) - .addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [], - upper: [serverId], - includeUpper: false, - )); - } - }); - } -} - -extension UserCollectionQueryFilter - on QueryBuilder { - QueryBuilder - avatarConfigJsonIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'avatarConfigJson', - )); - }); - } - - QueryBuilder - avatarConfigJsonIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'avatarConfigJson', - )); - }); - } - - QueryBuilder - avatarConfigJsonEqualTo( - String? value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'avatarConfigJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - avatarConfigJsonGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'avatarConfigJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - avatarConfigJsonLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'avatarConfigJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - avatarConfigJsonBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'avatarConfigJson', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - avatarConfigJsonStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'avatarConfigJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - avatarConfigJsonEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'avatarConfigJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - avatarConfigJsonContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'avatarConfigJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - avatarConfigJsonMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'avatarConfigJson', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - avatarConfigJsonIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'avatarConfigJson', - value: '', - )); - }); - } - - QueryBuilder - avatarConfigJsonIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'avatarConfigJson', - value: '', - )); - }); - } - - QueryBuilder - createdAtEqualTo(DateTime value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'createdAt', - value: value, - )); - }); - } - - QueryBuilder - createdAtGreaterThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'createdAt', - value: value, - )); - }); - } - - QueryBuilder - createdAtLessThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'createdAt', - value: value, - )); - }); - } - - QueryBuilder - createdAtBetween( - DateTime lower, - DateTime upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'createdAt', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - currentBodyweightEqualTo( - double value, { - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'currentBodyweight', - value: value, - epsilon: epsilon, - )); - }); - } - - QueryBuilder - currentBodyweightGreaterThan( - double value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'currentBodyweight', - value: value, - epsilon: epsilon, - )); - }); - } - - QueryBuilder - currentBodyweightLessThan( - double value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'currentBodyweight', - value: value, - epsilon: epsilon, - )); - }); - } - - QueryBuilder - currentBodyweightBetween( - double lower, - double upper, { - bool includeLower = true, - bool includeUpper = true, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'currentBodyweight', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - epsilon: epsilon, - )); - }); - } - - QueryBuilder - emailEqualTo( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'email', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - emailGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'email', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - emailLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'email', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - emailBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'email', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - emailStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'email', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - emailEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'email', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - emailContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'email', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - emailMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'email', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - emailIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'email', - value: '', - )); - }); - } - - QueryBuilder - emailIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'email', - value: '', - )); - }); - } - - QueryBuilder idEqualTo( - Id value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'id', - value: value, - )); - }); - } - - QueryBuilder - idGreaterThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - )); - }); - } - - QueryBuilder - idLessThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - )); - }); - } - - QueryBuilder idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - inventorySettingsJsonIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'inventorySettingsJson', - )); - }); - } - - QueryBuilder - inventorySettingsJsonIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'inventorySettingsJson', - )); - }); - } - - QueryBuilder - inventorySettingsJsonEqualTo( - String? value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'inventorySettingsJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - inventorySettingsJsonGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'inventorySettingsJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - inventorySettingsJsonLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'inventorySettingsJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - inventorySettingsJsonBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'inventorySettingsJson', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - inventorySettingsJsonStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'inventorySettingsJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - inventorySettingsJsonEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'inventorySettingsJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - inventorySettingsJsonContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'inventorySettingsJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - inventorySettingsJsonMatches(String pattern, - {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'inventorySettingsJson', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - inventorySettingsJsonIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'inventorySettingsJson', - value: '', - )); - }); - } - - QueryBuilder - inventorySettingsJsonIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'inventorySettingsJson', - value: '', - )); - }); - } - - QueryBuilder - isDirtyEqualTo(bool value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'isDirty', - value: value, - )); - }); - } - - QueryBuilder - lastSyncAtIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'lastSyncAt', - )); - }); - } - - QueryBuilder - lastSyncAtIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'lastSyncAt', - )); - }); - } - - QueryBuilder - lastSyncAtEqualTo(DateTime? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'lastSyncAt', - value: value, - )); - }); - } - - QueryBuilder - lastSyncAtGreaterThan( - DateTime? value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'lastSyncAt', - value: value, - )); - }); - } - - QueryBuilder - lastSyncAtLessThan( - DateTime? value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'lastSyncAt', - value: value, - )); - }); - } - - QueryBuilder - lastSyncAtBetween( - DateTime? lower, - DateTime? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'lastSyncAt', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - levelEqualTo(int value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'level', - value: value, - )); - }); - } - - QueryBuilder - levelGreaterThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'level', - value: value, - )); - }); - } - - QueryBuilder - levelLessThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'level', - value: value, - )); - }); - } - - QueryBuilder - levelBetween( - int lower, - int upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'level', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - serverIdIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'serverId', - )); - }); - } - - QueryBuilder - serverIdIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'serverId', - )); - }); - } - - QueryBuilder - serverIdEqualTo( - String? value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'serverId', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'serverId', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'serverId', - value: '', - )); - }); - } - - QueryBuilder - serverIdIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'serverId', - value: '', - )); - }); - } - - QueryBuilder - updatedAtEqualTo(DateTime value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'updatedAt', - value: value, - )); - }); - } - - QueryBuilder - updatedAtGreaterThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'updatedAt', - value: value, - )); - }); - } - - QueryBuilder - updatedAtLessThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'updatedAt', - value: value, - )); - }); - } - - QueryBuilder - updatedAtBetween( - DateTime lower, - DateTime upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'updatedAt', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder xpEqualTo( - int value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'xp', - value: value, - )); - }); - } - - QueryBuilder - xpGreaterThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'xp', - value: value, - )); - }); - } - - QueryBuilder - xpLessThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'xp', - value: value, - )); - }); - } - - QueryBuilder xpBetween( - int lower, - int upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'xp', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } -} - -extension UserCollectionQueryObject - on QueryBuilder {} - -extension UserCollectionQueryLinks - on QueryBuilder {} - -extension UserCollectionQuerySortBy - on QueryBuilder { - QueryBuilder - sortByAvatarConfigJson() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'avatarConfigJson', Sort.asc); - }); - } - - QueryBuilder - sortByAvatarConfigJsonDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'avatarConfigJson', Sort.desc); - }); - } - - QueryBuilder sortByCreatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'createdAt', Sort.asc); - }); - } - - QueryBuilder - sortByCreatedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'createdAt', Sort.desc); - }); - } - - QueryBuilder - sortByCurrentBodyweight() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'currentBodyweight', Sort.asc); - }); - } - - QueryBuilder - sortByCurrentBodyweightDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'currentBodyweight', Sort.desc); - }); - } - - QueryBuilder sortByEmail() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'email', Sort.asc); - }); - } - - QueryBuilder sortByEmailDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'email', Sort.desc); - }); - } - - QueryBuilder - sortByInventorySettingsJson() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'inventorySettingsJson', Sort.asc); - }); - } - - QueryBuilder - sortByInventorySettingsJsonDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'inventorySettingsJson', Sort.desc); - }); - } - - QueryBuilder sortByIsDirty() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isDirty', Sort.asc); - }); - } - - QueryBuilder - sortByIsDirtyDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isDirty', Sort.desc); - }); - } - - QueryBuilder - sortByLastSyncAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'lastSyncAt', Sort.asc); - }); - } - - QueryBuilder - sortByLastSyncAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'lastSyncAt', Sort.desc); - }); - } - - QueryBuilder sortByLevel() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'level', Sort.asc); - }); - } - - QueryBuilder sortByLevelDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'level', Sort.desc); - }); - } - - QueryBuilder sortByServerId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'serverId', Sort.asc); - }); - } - - QueryBuilder - sortByServerIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'serverId', Sort.desc); - }); - } - - QueryBuilder sortByUpdatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAt', Sort.asc); - }); - } - - QueryBuilder - sortByUpdatedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAt', Sort.desc); - }); - } - - QueryBuilder sortByXp() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'xp', Sort.asc); - }); - } - - QueryBuilder sortByXpDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'xp', Sort.desc); - }); - } -} - -extension UserCollectionQuerySortThenBy - on QueryBuilder { - QueryBuilder - thenByAvatarConfigJson() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'avatarConfigJson', Sort.asc); - }); - } - - QueryBuilder - thenByAvatarConfigJsonDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'avatarConfigJson', Sort.desc); - }); - } - - QueryBuilder thenByCreatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'createdAt', Sort.asc); - }); - } - - QueryBuilder - thenByCreatedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'createdAt', Sort.desc); - }); - } - - QueryBuilder - thenByCurrentBodyweight() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'currentBodyweight', Sort.asc); - }); - } - - QueryBuilder - thenByCurrentBodyweightDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'currentBodyweight', Sort.desc); - }); - } - - QueryBuilder thenByEmail() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'email', Sort.asc); - }); - } - - QueryBuilder thenByEmailDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'email', Sort.desc); - }); - } - - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } - - QueryBuilder - thenByInventorySettingsJson() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'inventorySettingsJson', Sort.asc); - }); - } - - QueryBuilder - thenByInventorySettingsJsonDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'inventorySettingsJson', Sort.desc); - }); - } - - QueryBuilder thenByIsDirty() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isDirty', Sort.asc); - }); - } - - QueryBuilder - thenByIsDirtyDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isDirty', Sort.desc); - }); - } - - QueryBuilder - thenByLastSyncAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'lastSyncAt', Sort.asc); - }); - } - - QueryBuilder - thenByLastSyncAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'lastSyncAt', Sort.desc); - }); - } - - QueryBuilder thenByLevel() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'level', Sort.asc); - }); - } - - QueryBuilder thenByLevelDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'level', Sort.desc); - }); - } - - QueryBuilder thenByServerId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'serverId', Sort.asc); - }); - } - - QueryBuilder - thenByServerIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'serverId', Sort.desc); - }); - } - - QueryBuilder thenByUpdatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAt', Sort.asc); - }); - } - - QueryBuilder - thenByUpdatedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAt', Sort.desc); - }); - } - - QueryBuilder thenByXp() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'xp', Sort.asc); - }); - } - - QueryBuilder thenByXpDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'xp', Sort.desc); - }); - } -} - -extension UserCollectionQueryWhereDistinct - on QueryBuilder { - QueryBuilder - distinctByAvatarConfigJson({bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'avatarConfigJson', - caseSensitive: caseSensitive); - }); - } - - QueryBuilder - distinctByCreatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'createdAt'); - }); - } - - QueryBuilder - distinctByCurrentBodyweight() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'currentBodyweight'); - }); - } - - QueryBuilder distinctByEmail( - {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'email', caseSensitive: caseSensitive); - }); - } - - QueryBuilder - distinctByInventorySettingsJson({bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'inventorySettingsJson', - caseSensitive: caseSensitive); - }); - } - - QueryBuilder distinctByIsDirty() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'isDirty'); - }); - } - - QueryBuilder - distinctByLastSyncAt() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'lastSyncAt'); - }); - } - - QueryBuilder distinctByLevel() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'level'); - }); - } - - QueryBuilder distinctByServerId( - {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'serverId', caseSensitive: caseSensitive); - }); - } - - QueryBuilder - distinctByUpdatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'updatedAt'); - }); - } - - QueryBuilder distinctByXp() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'xp'); - }); - } -} - -extension UserCollectionQueryProperty - on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder - avatarConfigJsonProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'avatarConfigJson'); - }); - } - - QueryBuilder createdAtProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'createdAt'); - }); - } - - QueryBuilder - currentBodyweightProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'currentBodyweight'); - }); - } - - QueryBuilder emailProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'email'); - }); - } - - QueryBuilder - inventorySettingsJsonProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'inventorySettingsJson'); - }); - } - - QueryBuilder isDirtyProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'isDirty'); - }); - } - - QueryBuilder - lastSyncAtProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'lastSyncAt'); - }); - } - - QueryBuilder levelProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'level'); - }); - } - - QueryBuilder serverIdProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'serverId'); - }); - } - - QueryBuilder updatedAtProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'updatedAt'); - }); - } - - QueryBuilder xpProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'xp'); - }); - } -} diff --git a/lib/src/shared/data/local/collections/workout_collection.dart b/lib/src/shared/data/local/collections/workout_collection.dart deleted file mode 100644 index dc3c6d8..0000000 --- a/lib/src/shared/data/local/collections/workout_collection.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:isar/isar.dart'; - -part 'workout_collection.g.dart'; - -@collection -class WorkoutCollection { - Id id = Isar.autoIncrement; - - // @Index(unique: true) - @Index() - String? serverId; - - String userId = ''; - String cycleId = ''; - - int week = 1; // 1-4 - int day = 1; // 1-3 - - DateTime? scheduledDate; - DateTime? completedAt; - - int xpEarned = 0; - - // Exercises data (JSON string) - String exercisesJson = '[]'; - - String notes = ''; - - bool isDirty = false; - DateTime createdAt = DateTime.now(); - DateTime updatedAt = DateTime.now(); -} diff --git a/lib/src/shared/data/local/collections/workout_collection.g.dart b/lib/src/shared/data/local/collections/workout_collection.g.dart deleted file mode 100644 index fe6fde4..0000000 --- a/lib/src/shared/data/local/collections/workout_collection.g.dart +++ /dev/null @@ -1,2145 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'workout_collection.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetWorkoutCollectionCollection on Isar { - IsarCollection get workoutCollections => this.collection(); -} - -const WorkoutCollectionSchema = CollectionSchema( - name: r'WorkoutCollection', - id: -3773153767250735449, - properties: { - r'completedAt': PropertySchema( - id: 0, - name: r'completedAt', - type: IsarType.dateTime, - ), - r'createdAt': PropertySchema( - id: 1, - name: r'createdAt', - type: IsarType.dateTime, - ), - r'cycleId': PropertySchema( - id: 2, - name: r'cycleId', - type: IsarType.string, - ), - r'day': PropertySchema( - id: 3, - name: r'day', - type: IsarType.long, - ), - r'exercisesJson': PropertySchema( - id: 4, - name: r'exercisesJson', - type: IsarType.string, - ), - r'isDirty': PropertySchema( - id: 5, - name: r'isDirty', - type: IsarType.bool, - ), - r'notes': PropertySchema( - id: 6, - name: r'notes', - type: IsarType.string, - ), - r'scheduledDate': PropertySchema( - id: 7, - name: r'scheduledDate', - type: IsarType.dateTime, - ), - r'serverId': PropertySchema( - id: 8, - name: r'serverId', - type: IsarType.string, - ), - r'updatedAt': PropertySchema( - id: 9, - name: r'updatedAt', - type: IsarType.dateTime, - ), - r'userId': PropertySchema( - id: 10, - name: r'userId', - type: IsarType.string, - ), - r'week': PropertySchema( - id: 11, - name: r'week', - type: IsarType.long, - ), - r'xpEarned': PropertySchema( - id: 12, - name: r'xpEarned', - type: IsarType.long, - ) - }, - estimateSize: _workoutCollectionEstimateSize, - serialize: _workoutCollectionSerialize, - deserialize: _workoutCollectionDeserialize, - deserializeProp: _workoutCollectionDeserializeProp, - idName: r'id', - indexes: { - r'serverId': IndexSchema( - id: -7950187970872907662, - name: r'serverId', - unique: false, - replace: false, - properties: [ - IndexPropertySchema( - name: r'serverId', - type: IndexType.hash, - caseSensitive: true, - ) - ], - ) - }, - links: {}, - embeddedSchemas: {}, - getId: _workoutCollectionGetId, - getLinks: _workoutCollectionGetLinks, - attach: _workoutCollectionAttach, - version: '3.1.0+1', -); - -int _workoutCollectionEstimateSize( - WorkoutCollection object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - bytesCount += 3 + object.cycleId.length * 3; - bytesCount += 3 + object.exercisesJson.length * 3; - bytesCount += 3 + object.notes.length * 3; - { - final value = object.serverId; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - bytesCount += 3 + object.userId.length * 3; - return bytesCount; -} - -void _workoutCollectionSerialize( - WorkoutCollection object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeDateTime(offsets[0], object.completedAt); - writer.writeDateTime(offsets[1], object.createdAt); - writer.writeString(offsets[2], object.cycleId); - writer.writeLong(offsets[3], object.day); - writer.writeString(offsets[4], object.exercisesJson); - writer.writeBool(offsets[5], object.isDirty); - writer.writeString(offsets[6], object.notes); - writer.writeDateTime(offsets[7], object.scheduledDate); - writer.writeString(offsets[8], object.serverId); - writer.writeDateTime(offsets[9], object.updatedAt); - writer.writeString(offsets[10], object.userId); - writer.writeLong(offsets[11], object.week); - writer.writeLong(offsets[12], object.xpEarned); -} - -WorkoutCollection _workoutCollectionDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = WorkoutCollection(); - object.completedAt = reader.readDateTimeOrNull(offsets[0]); - object.createdAt = reader.readDateTime(offsets[1]); - object.cycleId = reader.readString(offsets[2]); - object.day = reader.readLong(offsets[3]); - object.exercisesJson = reader.readString(offsets[4]); - object.id = id; - object.isDirty = reader.readBool(offsets[5]); - object.notes = reader.readString(offsets[6]); - object.scheduledDate = reader.readDateTimeOrNull(offsets[7]); - object.serverId = reader.readStringOrNull(offsets[8]); - object.updatedAt = reader.readDateTime(offsets[9]); - object.userId = reader.readString(offsets[10]); - object.week = reader.readLong(offsets[11]); - object.xpEarned = reader.readLong(offsets[12]); - return object; -} - -P _workoutCollectionDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readDateTimeOrNull(offset)) as P; - case 1: - return (reader.readDateTime(offset)) as P; - case 2: - return (reader.readString(offset)) as P; - case 3: - return (reader.readLong(offset)) as P; - case 4: - return (reader.readString(offset)) as P; - case 5: - return (reader.readBool(offset)) as P; - case 6: - return (reader.readString(offset)) as P; - case 7: - return (reader.readDateTimeOrNull(offset)) as P; - case 8: - return (reader.readStringOrNull(offset)) as P; - case 9: - return (reader.readDateTime(offset)) as P; - case 10: - return (reader.readString(offset)) as P; - case 11: - return (reader.readLong(offset)) as P; - case 12: - return (reader.readLong(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _workoutCollectionGetId(WorkoutCollection object) { - return object.id; -} - -List> _workoutCollectionGetLinks( - WorkoutCollection object) { - return []; -} - -void _workoutCollectionAttach( - IsarCollection col, Id id, WorkoutCollection object) { - object.id = id; -} - -extension WorkoutCollectionQueryWhereSort - on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension WorkoutCollectionQueryWhere - on QueryBuilder { - QueryBuilder - idEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); - }); - } - - QueryBuilder - idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder - idGreaterThan(Id id, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder - idLessThan(Id id, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder - idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - serverIdIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IndexWhereClause.equalTo( - indexName: r'serverId', - value: [null], - )); - }); - } - - QueryBuilder - serverIdIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [null], - includeLower: false, - upper: [], - )); - }); - } - - QueryBuilder - serverIdEqualTo(String? serverId) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IndexWhereClause.equalTo( - indexName: r'serverId', - value: [serverId], - )); - }); - } - - QueryBuilder - serverIdNotEqualTo(String? serverId) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [], - upper: [serverId], - includeUpper: false, - )) - .addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [serverId], - includeLower: false, - upper: [], - )); - } else { - return query - .addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [serverId], - includeLower: false, - upper: [], - )) - .addWhereClause(IndexWhereClause.between( - indexName: r'serverId', - lower: [], - upper: [serverId], - includeUpper: false, - )); - } - }); - } -} - -extension WorkoutCollectionQueryFilter - on QueryBuilder { - QueryBuilder - completedAtIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'completedAt', - )); - }); - } - - QueryBuilder - completedAtIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'completedAt', - )); - }); - } - - QueryBuilder - completedAtEqualTo(DateTime? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'completedAt', - value: value, - )); - }); - } - - QueryBuilder - completedAtGreaterThan( - DateTime? value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'completedAt', - value: value, - )); - }); - } - - QueryBuilder - completedAtLessThan( - DateTime? value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'completedAt', - value: value, - )); - }); - } - - QueryBuilder - completedAtBetween( - DateTime? lower, - DateTime? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'completedAt', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - createdAtEqualTo(DateTime value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'createdAt', - value: value, - )); - }); - } - - QueryBuilder - createdAtGreaterThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'createdAt', - value: value, - )); - }); - } - - QueryBuilder - createdAtLessThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'createdAt', - value: value, - )); - }); - } - - QueryBuilder - createdAtBetween( - DateTime lower, - DateTime upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'createdAt', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - cycleIdEqualTo( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'cycleId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - cycleIdGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'cycleId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - cycleIdLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'cycleId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - cycleIdBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'cycleId', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - cycleIdStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'cycleId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - cycleIdEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'cycleId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - cycleIdContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'cycleId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - cycleIdMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'cycleId', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - cycleIdIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'cycleId', - value: '', - )); - }); - } - - QueryBuilder - cycleIdIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'cycleId', - value: '', - )); - }); - } - - QueryBuilder - dayEqualTo(int value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'day', - value: value, - )); - }); - } - - QueryBuilder - dayGreaterThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'day', - value: value, - )); - }); - } - - QueryBuilder - dayLessThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'day', - value: value, - )); - }); - } - - QueryBuilder - dayBetween( - int lower, - int upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'day', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - exercisesJsonEqualTo( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'exercisesJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - exercisesJsonGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'exercisesJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - exercisesJsonLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'exercisesJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - exercisesJsonBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'exercisesJson', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - exercisesJsonStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'exercisesJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - exercisesJsonEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'exercisesJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - exercisesJsonContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'exercisesJson', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - exercisesJsonMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'exercisesJson', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - exercisesJsonIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'exercisesJson', - value: '', - )); - }); - } - - QueryBuilder - exercisesJsonIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'exercisesJson', - value: '', - )); - }); - } - - QueryBuilder - idEqualTo(Id value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'id', - value: value, - )); - }); - } - - QueryBuilder - idGreaterThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - )); - }); - } - - QueryBuilder - idLessThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - )); - }); - } - - QueryBuilder - idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - isDirtyEqualTo(bool value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'isDirty', - value: value, - )); - }); - } - - QueryBuilder - notesEqualTo( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'notes', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - notesGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'notes', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - notesLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'notes', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - notesBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'notes', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - notesStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'notes', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - notesEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'notes', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - notesContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'notes', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - notesMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'notes', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - notesIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'notes', - value: '', - )); - }); - } - - QueryBuilder - notesIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'notes', - value: '', - )); - }); - } - - QueryBuilder - scheduledDateIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'scheduledDate', - )); - }); - } - - QueryBuilder - scheduledDateIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'scheduledDate', - )); - }); - } - - QueryBuilder - scheduledDateEqualTo(DateTime? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'scheduledDate', - value: value, - )); - }); - } - - QueryBuilder - scheduledDateGreaterThan( - DateTime? value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'scheduledDate', - value: value, - )); - }); - } - - QueryBuilder - scheduledDateLessThan( - DateTime? value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'scheduledDate', - value: value, - )); - }); - } - - QueryBuilder - scheduledDateBetween( - DateTime? lower, - DateTime? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'scheduledDate', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - serverIdIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'serverId', - )); - }); - } - - QueryBuilder - serverIdIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'serverId', - )); - }); - } - - QueryBuilder - serverIdEqualTo( - String? value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'serverId', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'serverId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'serverId', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - serverIdIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'serverId', - value: '', - )); - }); - } - - QueryBuilder - serverIdIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'serverId', - value: '', - )); - }); - } - - QueryBuilder - updatedAtEqualTo(DateTime value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'updatedAt', - value: value, - )); - }); - } - - QueryBuilder - updatedAtGreaterThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'updatedAt', - value: value, - )); - }); - } - - QueryBuilder - updatedAtLessThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'updatedAt', - value: value, - )); - }); - } - - QueryBuilder - updatedAtBetween( - DateTime lower, - DateTime upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'updatedAt', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - userIdEqualTo( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'userId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'userId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'userId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'userId', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'userId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'userId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'userId', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'userId', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - userIdIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'userId', - value: '', - )); - }); - } - - QueryBuilder - userIdIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'userId', - value: '', - )); - }); - } - - QueryBuilder - weekEqualTo(int value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'week', - value: value, - )); - }); - } - - QueryBuilder - weekGreaterThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'week', - value: value, - )); - }); - } - - QueryBuilder - weekLessThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'week', - value: value, - )); - }); - } - - QueryBuilder - weekBetween( - int lower, - int upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'week', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } - - QueryBuilder - xpEarnedEqualTo(int value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'xpEarned', - value: value, - )); - }); - } - - QueryBuilder - xpEarnedGreaterThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'xpEarned', - value: value, - )); - }); - } - - QueryBuilder - xpEarnedLessThan( - int value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'xpEarned', - value: value, - )); - }); - } - - QueryBuilder - xpEarnedBetween( - int lower, - int upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'xpEarned', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); - }); - } -} - -extension WorkoutCollectionQueryObject - on QueryBuilder {} - -extension WorkoutCollectionQueryLinks - on QueryBuilder {} - -extension WorkoutCollectionQuerySortBy - on QueryBuilder { - QueryBuilder - sortByCompletedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'completedAt', Sort.asc); - }); - } - - QueryBuilder - sortByCompletedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'completedAt', Sort.desc); - }); - } - - QueryBuilder - sortByCreatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'createdAt', Sort.asc); - }); - } - - QueryBuilder - sortByCreatedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'createdAt', Sort.desc); - }); - } - - QueryBuilder - sortByCycleId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cycleId', Sort.asc); - }); - } - - QueryBuilder - sortByCycleIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cycleId', Sort.desc); - }); - } - - QueryBuilder sortByDay() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'day', Sort.asc); - }); - } - - QueryBuilder - sortByDayDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'day', Sort.desc); - }); - } - - QueryBuilder - sortByExercisesJson() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'exercisesJson', Sort.asc); - }); - } - - QueryBuilder - sortByExercisesJsonDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'exercisesJson', Sort.desc); - }); - } - - QueryBuilder - sortByIsDirty() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isDirty', Sort.asc); - }); - } - - QueryBuilder - sortByIsDirtyDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isDirty', Sort.desc); - }); - } - - QueryBuilder - sortByNotes() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'notes', Sort.asc); - }); - } - - QueryBuilder - sortByNotesDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'notes', Sort.desc); - }); - } - - QueryBuilder - sortByScheduledDate() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'scheduledDate', Sort.asc); - }); - } - - QueryBuilder - sortByScheduledDateDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'scheduledDate', Sort.desc); - }); - } - - QueryBuilder - sortByServerId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'serverId', Sort.asc); - }); - } - - QueryBuilder - sortByServerIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'serverId', Sort.desc); - }); - } - - QueryBuilder - sortByUpdatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAt', Sort.asc); - }); - } - - QueryBuilder - sortByUpdatedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAt', Sort.desc); - }); - } - - QueryBuilder - sortByUserId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'userId', Sort.asc); - }); - } - - QueryBuilder - sortByUserIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'userId', Sort.desc); - }); - } - - QueryBuilder - sortByWeek() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'week', Sort.asc); - }); - } - - QueryBuilder - sortByWeekDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'week', Sort.desc); - }); - } - - QueryBuilder - sortByXpEarned() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'xpEarned', Sort.asc); - }); - } - - QueryBuilder - sortByXpEarnedDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'xpEarned', Sort.desc); - }); - } -} - -extension WorkoutCollectionQuerySortThenBy - on QueryBuilder { - QueryBuilder - thenByCompletedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'completedAt', Sort.asc); - }); - } - - QueryBuilder - thenByCompletedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'completedAt', Sort.desc); - }); - } - - QueryBuilder - thenByCreatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'createdAt', Sort.asc); - }); - } - - QueryBuilder - thenByCreatedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'createdAt', Sort.desc); - }); - } - - QueryBuilder - thenByCycleId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cycleId', Sort.asc); - }); - } - - QueryBuilder - thenByCycleIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cycleId', Sort.desc); - }); - } - - QueryBuilder thenByDay() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'day', Sort.asc); - }); - } - - QueryBuilder - thenByDayDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'day', Sort.desc); - }); - } - - QueryBuilder - thenByExercisesJson() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'exercisesJson', Sort.asc); - }); - } - - QueryBuilder - thenByExercisesJsonDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'exercisesJson', Sort.desc); - }); - } - - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder - thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } - - QueryBuilder - thenByIsDirty() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isDirty', Sort.asc); - }); - } - - QueryBuilder - thenByIsDirtyDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'isDirty', Sort.desc); - }); - } - - QueryBuilder - thenByNotes() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'notes', Sort.asc); - }); - } - - QueryBuilder - thenByNotesDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'notes', Sort.desc); - }); - } - - QueryBuilder - thenByScheduledDate() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'scheduledDate', Sort.asc); - }); - } - - QueryBuilder - thenByScheduledDateDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'scheduledDate', Sort.desc); - }); - } - - QueryBuilder - thenByServerId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'serverId', Sort.asc); - }); - } - - QueryBuilder - thenByServerIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'serverId', Sort.desc); - }); - } - - QueryBuilder - thenByUpdatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAt', Sort.asc); - }); - } - - QueryBuilder - thenByUpdatedAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAt', Sort.desc); - }); - } - - QueryBuilder - thenByUserId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'userId', Sort.asc); - }); - } - - QueryBuilder - thenByUserIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'userId', Sort.desc); - }); - } - - QueryBuilder - thenByWeek() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'week', Sort.asc); - }); - } - - QueryBuilder - thenByWeekDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'week', Sort.desc); - }); - } - - QueryBuilder - thenByXpEarned() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'xpEarned', Sort.asc); - }); - } - - QueryBuilder - thenByXpEarnedDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'xpEarned', Sort.desc); - }); - } -} - -extension WorkoutCollectionQueryWhereDistinct - on QueryBuilder { - QueryBuilder - distinctByCompletedAt() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'completedAt'); - }); - } - - QueryBuilder - distinctByCreatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'createdAt'); - }); - } - - QueryBuilder - distinctByCycleId({bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'cycleId', caseSensitive: caseSensitive); - }); - } - - QueryBuilder - distinctByDay() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'day'); - }); - } - - QueryBuilder - distinctByExercisesJson({bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'exercisesJson', - caseSensitive: caseSensitive); - }); - } - - QueryBuilder - distinctByIsDirty() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'isDirty'); - }); - } - - QueryBuilder distinctByNotes( - {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'notes', caseSensitive: caseSensitive); - }); - } - - QueryBuilder - distinctByScheduledDate() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'scheduledDate'); - }); - } - - QueryBuilder - distinctByServerId({bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'serverId', caseSensitive: caseSensitive); - }); - } - - QueryBuilder - distinctByUpdatedAt() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'updatedAt'); - }); - } - - QueryBuilder - distinctByUserId({bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'userId', caseSensitive: caseSensitive); - }); - } - - QueryBuilder - distinctByWeek() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'week'); - }); - } - - QueryBuilder - distinctByXpEarned() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'xpEarned'); - }); - } -} - -extension WorkoutCollectionQueryProperty - on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder - completedAtProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'completedAt'); - }); - } - - QueryBuilder - createdAtProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'createdAt'); - }); - } - - QueryBuilder cycleIdProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'cycleId'); - }); - } - - QueryBuilder dayProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'day'); - }); - } - - QueryBuilder - exercisesJsonProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'exercisesJson'); - }); - } - - QueryBuilder isDirtyProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'isDirty'); - }); - } - - QueryBuilder notesProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'notes'); - }); - } - - QueryBuilder - scheduledDateProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'scheduledDate'); - }); - } - - QueryBuilder - serverIdProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'serverId'); - }); - } - - QueryBuilder - updatedAtProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'updatedAt'); - }); - } - - QueryBuilder userIdProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'userId'); - }); - } - - QueryBuilder weekProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'week'); - }); - } - - QueryBuilder xpEarnedProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'xpEarned'); - }); - } -} diff --git a/lib/src/shared/data/local/converters/json_converter.dart b/lib/src/shared/data/local/converters/json_converter.dart new file mode 100644 index 0000000..80d82e7 --- /dev/null +++ b/lib/src/shared/data/local/converters/json_converter.dart @@ -0,0 +1,36 @@ +import 'dart:convert'; +import 'package:drift/drift.dart'; + +class MapConverter extends TypeConverter, String> { + const MapConverter(); + + @override + Map fromSql(String fromDb) { + if (fromDb.isEmpty) return {}; + try { + return json.decode(fromDb) as Map; + } catch (_) { + return {}; + } + } + + @override + String toSql(Map value) => json.encode(value); +} + +class ListConverter extends TypeConverter, String> { + const ListConverter(); + + @override + List fromSql(String fromDb) { + if (fromDb.isEmpty) return []; + try { + return json.decode(fromDb) as List; + } catch (_) { + return []; + } + } + + @override + String toSql(List value) => json.encode(value); +} diff --git a/lib/src/shared/data/local/tables.dart b/lib/src/shared/data/local/tables.dart new file mode 100644 index 0000000..a147926 --- /dev/null +++ b/lib/src/shared/data/local/tables.dart @@ -0,0 +1,66 @@ +import 'package:drift/drift.dart'; +import 'converters/json_converter.dart'; + +@DataClassName('UserCollection') +class Users extends Table { + IntColumn get id => integer().autoIncrement()(); + TextColumn get serverId => text().nullable().unique()(); + + TextColumn get email => text().withDefault(const Constant(''))(); + IntColumn get xp => integer().withDefault(const Constant(0))(); + IntColumn get level => integer().withDefault(const Constant(1))(); + RealColumn get currentBodyweight => + real().withDefault(const Constant(70.0))(); + + TextColumn get inventorySettings => + text().map(const MapConverter()).nullable()(); + TextColumn get avatarConfig => text().map(const MapConverter()).nullable()(); + + DateTimeColumn get lastSyncAt => dateTime().nullable()(); + BoolColumn get isDirty => boolean().withDefault(const Constant(false))(); + + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + DateTimeColumn get updatedAt => dateTime().withDefault(currentDateAndTime)(); +} + +@DataClassName('CycleCollection') +class Cycles extends Table { + IntColumn get id => integer().autoIncrement()(); + TextColumn get serverId => text().nullable().unique()(); + + TextColumn get userId => text()(); + + IntColumn get cycleNumber => integer()(); + DateTimeColumn get startDate => dateTime()(); + DateTimeColumn get endDate => dateTime().nullable()(); + BoolColumn get isActive => boolean().withDefault(const Constant(true))(); + + TextColumn get trainingMaxes => text().map(const MapConverter())(); + + BoolColumn get isDirty => boolean().withDefault(const Constant(false))(); + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + DateTimeColumn get updatedAt => dateTime().withDefault(currentDateAndTime)(); +} + +@DataClassName('WorkoutCollection') +class Workouts extends Table { + IntColumn get id => integer().autoIncrement()(); + TextColumn get serverId => text().nullable().unique()(); + + TextColumn get userId => text()(); + TextColumn get cycleId => text()(); + + IntColumn get week => integer()(); + IntColumn get day => integer()(); + + DateTimeColumn get scheduledDate => dateTime().nullable()(); + DateTimeColumn get completedAt => dateTime().nullable()(); + IntColumn get xpEarned => integer().withDefault(const Constant(0))(); + + TextColumn get exercises => text().map(const ListConverter())(); + TextColumn get notes => text().withDefault(const Constant(''))(); + + BoolColumn get isDirty => boolean().withDefault(const Constant(false))(); + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + DateTimeColumn get updatedAt => dateTime().withDefault(currentDateAndTime)(); +} diff --git a/lib/src/shared/data/remote/sync_service.dart b/lib/src/shared/data/remote/sync_service.dart index 543df98..a8127fb 100644 --- a/lib/src/shared/data/remote/sync_service.dart +++ b/lib/src/shared/data/remote/sync_service.dart @@ -1,30 +1,28 @@ import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:isar/isar.dart'; +import 'package:drift/drift.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import '../../../../main.dart'; import '../../../core/constants/app_constants.dart'; -import '../local/collections/user_collection.dart'; -import '../local/collections/cycle_collection.dart'; -import '../local/collections/workout_collection.dart'; -import 'api_client.dart'; +import '../local/app_database.dart'; import '../repositories/user_repository.dart'; +import 'api_client.dart'; final syncServiceProvider = Provider((ref) { - final isar = ref.watch(isarProvider); + final db = ref.watch(appDatabaseProvider); final apiClient = ref.watch(apiClientProvider); - return SyncService(isar: isar, apiClient: apiClient); + return SyncService(db: db, apiClient: apiClient); }); class SyncService { - final Isar isar; + final AppDatabase db; final ApiClient apiClient; final _storage = const FlutterSecureStorage(); bool _isSyncing = false; - SyncService({required this.isar, required this.apiClient}); + SyncService({required this.db, required this.apiClient}); Future sync() async { if (_isSyncing) return; @@ -32,160 +30,199 @@ class SyncService { try { debugPrint('🔄 Starting Sync...'); - final dirtyCycles = - await isar.cycleCollections.filter().isDirtyEqualTo(true).findAll(); + + final dirtyCycles = await (db.select(db.cycles) + ..where((c) => c.isDirty.equals(true))) + .get(); for (var cycle in dirtyCycles) { try { if (cycle.serverId == null) { debugPrint( '📤 Pushing new cycle ${cycle.cycleNumber} to server...'); - - Map tmsMap = {}; - try { - final tms = jsonDecode(cycle.trainingMaxesJson); - tmsMap = Map.from( - tms.map((k, v) => MapEntry(k, (v as num).toDouble()))); - } catch (e) { - debugPrint('⚠️ Error parsing TMs for cycle ${cycle.id}: $e'); - tmsMap = {'squat': 0.0, 'pullup': 0.0, 'dip': 0.0}; - } + final tmsMap = cycle.trainingMaxes + .map((k, v) => MapEntry(k, (v as num).toDouble())); final response = await apiClient.createCycle(tmsMap); final newServerId = response['id']; - await isar.writeTxn(() async { - cycle.serverId = newServerId; - cycle.isDirty = false; - await isar.cycleCollections.put(cycle); + await db.transaction(() async { + await (db.update(db.cycles)..where((c) => c.id.equals(cycle.id))) + .write( + CyclesCompanion( + serverId: Value(newServerId), + isDirty: const Value(false), + ), + ); final oldLocalIdRef = cycle.id.toString(); - - final orphanWorkouts = await isar.workoutCollections - .filter() - .cycleIdEqualTo(oldLocalIdRef) - .findAll(); - - for (var w in orphanWorkouts) { - w.cycleId = newServerId; - w.isDirty = true; - await isar.workoutCollections.put(w); - debugPrint('🔗 Relinked workout ${w.id} to cycle $newServerId'); - } + await (db.update(db.workouts) + ..where((w) => w.cycleId.equals(oldLocalIdRef))) + .write( + WorkoutsCompanion( + cycleId: Value(newServerId), + isDirty: const Value(true), + ), + ); + debugPrint( + '🔗 Relinked workouts from local cycle $oldLocalIdRef to server $newServerId'); }); } else { - await isar.writeTxn(() async { - cycle.isDirty = false; - await isar.cycleCollections.put(cycle); - }); + await (db.update(db.cycles)..where((c) => c.id.equals(cycle.id))) + .write( + const CyclesCompanion(isDirty: Value(false)), + ); } } catch (e) { - debugPrint('❌ Failed to sync cycle: $e'); - return; + debugPrint('❌ Failed to sync cycle ${cycle.id}: $e'); } } - final dirtyUser = - await isar.userCollections.filter().isDirtyEqualTo(true).findFirst(); + final dirtyUser = await (db.select(db.users) + ..where((u) => u.isDirty.equals(true))) + .getSingleOrNull(); + final dirtyWorkouts = await (db.select(db.workouts) + ..where((w) => w.isDirty.equals(true))) + .get(); - final dirtyWorkouts = - await isar.workoutCollections.filter().isDirtyEqualTo(true).findAll(); + final validWorkouts = + dirtyWorkouts.where((w) => w.cycleId.length > 5).toList(); - if (dirtyUser == null && dirtyWorkouts.isEmpty) { - debugPrint('✅ Nothing to push.'); - } else { - final pushData = { - 'workouts': dirtyWorkouts.where((w) { - return w.cycleId.length > 5; - }).map((w) { - return { - 'id': w.serverId, - 'local_id': w.id, - 'cycle_id': w.cycleId, - 'week': w.week, - 'day': w.day, - 'completed_at': w.completedAt?.toIso8601String(), - 'xp_earned': w.xpEarned, - 'notes': w.notes, - 'exercises': jsonDecode(w.exercisesJson), - }; - }).toList(), - 'user_stats': dirtyUser != null - ? { - 'xp': dirtyUser.xp, - 'level': dirtyUser.level, - 'current_bodyweight': dirtyUser.currentBodyweight, - } - : null, - }; + final pushData = { + 'workouts': validWorkouts.map((w) { + return { + 'id': w.serverId, + 'local_id': w.id, + 'cycle_id': w.cycleId, + 'week': w.week, + 'day': w.day, + 'completed_at': w.completedAt?.toIso8601String(), + 'xp_earned': w.xpEarned, + 'notes': w.notes, + 'exercises': w.exercises, + }; + }).toList(), + 'user_stats': dirtyUser != null + ? { + 'xp': dirtyUser.xp, + 'level': dirtyUser.level, + 'current_bodyweight': dirtyUser.currentBodyweight, + } + : null, + }; - if ((pushData['workouts'] as List).length < dirtyWorkouts.length) { - debugPrint( - '⚠️ Skipped some workouts because they lack a valid server cycle ID.'); + final lastSync = await _storage.read(key: AppConstants.keyLastSync); + + debugPrint( + '☁️ Contacting server (Push: ${validWorkouts.length} workouts)...'); + + final response = await apiClient.sync( + lastSyncTimestamp: lastSync ?? '', + pushData: pushData, + ); + + await db.transaction(() async { + if (dirtyUser != null) { + await (db.update(db.users)..where((u) => u.id.equals(dirtyUser.id))) + .write( + const UsersCompanion(isDirty: Value(false)), + ); + } + for (var w in validWorkouts) { + await (db.update(db.workouts)..where((dw) => dw.id.equals(w.id))) + .write( + const WorkoutsCompanion(isDirty: Value(false)), + ); } - final lastSync = await _storage.read(key: AppConstants.keyLastSync); + if (response['pull_data'] != null) { + if (response['pull_data']['cycles'] != null) { + final pulledCycles = response['pull_data']['cycles'] as List; + for (var cJson in pulledCycles) { + final serverId = cJson['id'] as String; + final existing = await (db.select(db.cycles) + ..where((c) => c.serverId.equals(serverId))) + .getSingleOrNull(); - if ((pushData['workouts'] as List).isNotEmpty || - pushData['user_stats'] != null) { - debugPrint('📤 Pushing data...'); - final response = await apiClient.sync( - lastSyncTimestamp: lastSync ?? '', - pushData: pushData, - ); + final tms = cJson['training_maxes'] as Map; - await isar.writeTxn(() async { - if (dirtyUser != null) { - dirtyUser.isDirty = false; - await isar.userCollections.put(dirtyUser); - } + final companion = CyclesCompanion( + serverId: Value(serverId), + userId: Value(cJson['user_id']), + cycleNumber: Value(cJson['cycle_number']), + startDate: Value(DateTime.parse(cJson['start_date'])), + endDate: Value(DateTime.tryParse(cJson['end_date'] ?? '')), + isActive: Value(cJson['is_active'] ?? false), + trainingMaxes: Value(tms), + isDirty: const Value(false), + updatedAt: Value(DateTime.now()), + createdAt: existing == null + ? Value(DateTime.now()) + : const Value.absent(), + ); - for (var w in dirtyWorkouts) { - w.isDirty = false; - await isar.workoutCollections.put(w); - } - - if (response['pull_data'] != null && - response['pull_data']['workouts'] != null) { - final pulledWorkouts = response['pull_data']['workouts'] as List; - for (var wJson in pulledWorkouts) { - final serverId = wJson['id']; - var workout = await isar.workoutCollections - .filter() - .serverIdEqualTo(serverId) - .findFirst(); - - workout ??= WorkoutCollection(); - - workout - ..serverId = serverId - ..cycleId = wJson['cycle_id'] - ..userId = wJson['user_id'] - ..week = wJson['week'] - ..day = wJson['day'] - ..completedAt = DateTime.tryParse(wJson['completed_at'] ?? '') - ..xpEarned = wJson['xp_earned'] ?? 0 - ..exercisesJson = jsonEncode(wJson['exercises']) - ..isDirty = false - ..updatedAt = DateTime.now(); - - await isar.workoutCollections.put(workout); + if (existing != null) { + await (db.update(db.cycles) + ..where((c) => c.id.equals(existing.id))) + .write(companion); + } else { + await db.into(db.cycles).insert(companion); } } - }); + } - if (response['server_timestamp'] != null) { - await _storage.write( - key: AppConstants.keyLastSync, - value: response['server_timestamp'], - ); + if (response['pull_data']['workouts'] != null) { + final pulledWorkouts = response['pull_data']['workouts'] as List; + debugPrint( + '📥 Pulled ${pulledWorkouts.length} workouts from server.'); + + for (var wJson in pulledWorkouts) { + final serverId = wJson['id'] as String; + final existing = await (db.select(db.workouts) + ..where((w) => w.serverId.equals(serverId))) + .getSingleOrNull(); + + final companion = WorkoutsCompanion( + serverId: Value(serverId), + cycleId: Value(wJson['cycle_id']), + userId: Value(wJson['user_id']), + week: Value(wJson['week']), + day: Value(wJson['day']), + completedAt: + Value(DateTime.tryParse(wJson['completed_at'] ?? '')), + xpEarned: Value(wJson['xp_earned'] ?? 0), + exercises: Value(wJson['exercises'] ?? []), + notes: Value(wJson['notes'] ?? ''), + isDirty: const Value(false), + updatedAt: Value(DateTime.now()), + createdAt: existing == null + ? Value(DateTime.now()) + : const Value.absent(), + ); + + if (existing != null) { + await (db.update(db.workouts) + ..where((w) => w.id.equals(existing.id))) + .write(companion); + } else { + await db.into(db.workouts).insert(companion); + } + } } } + }); + + if (response['server_timestamp'] != null) { + await _storage.write( + key: AppConstants.keyLastSync, + value: response['server_timestamp'], + ); } debugPrint('✅ Sync completed successfully'); - } catch (e) { + } catch (e, stack) { debugPrint('❌ Sync failed: $e'); + debugPrint(stack.toString()); } finally { _isSyncing = false; } diff --git a/lib/src/shared/data/repositories/cycle_repository.dart b/lib/src/shared/data/repositories/cycle_repository.dart index 959de45..6108771 100644 --- a/lib/src/shared/data/repositories/cycle_repository.dart +++ b/lib/src/shared/data/repositories/cycle_repository.dart @@ -1,45 +1,49 @@ -import 'package:flutter/material.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:isar/isar.dart'; +import 'package:drift/drift.dart'; import 'dart:convert'; -import '../local/collections/cycle_collection.dart'; +import '../local/app_database.dart'; import '../remote/api_client.dart'; import '../../../../main.dart'; import 'user_repository.dart'; import '../../../core/constants/app_constants.dart'; -import '../local/collections/workout_collection.dart'; final cycleRepositoryProvider = Provider((ref) { - final isar = ref.watch(isarProvider); + final db = ref.watch(appDatabaseProvider); final apiClient = ref.watch(apiClientProvider); - return CycleRepository(isar: isar, apiClient: apiClient); + return CycleRepository(db: db, apiClient: apiClient); }); class CycleRepository { - final Isar isar; + final AppDatabase db; final ApiClient apiClient; - CycleRepository({required this.isar, required this.apiClient}); + CycleRepository({required this.db, required this.apiClient}); Future getCurrentCycle() async { - return await isar.cycleCollections - .filter() - .isActiveEqualTo(true) - .findFirst(); + return await (db.select(db.cycles) + ..where((c) => c.isActive.equals(true)) + ..limit(1)) + .getSingleOrNull(); } Future> getAllCycles() async { - return await isar.cycleCollections.where().findAll(); + return await db.select(db.cycles).get(); } Future createCycle(Map trainingMaxes) async { - try { + return await db.transaction(() async { final currentCycle = await getCurrentCycle(); if (currentCycle != null) { - currentCycle.isActive = false; - currentCycle.endDate = DateTime.now(); - await saveCycle(currentCycle); + final updateOld = CyclesCompanion( + isActive: const Value(false), + endDate: Value(DateTime.now()), + updatedAt: Value(DateTime.now()), + isDirty: const Value(true), + ); + await (db.update(db.cycles)..where((c) => c.id.equals(currentCycle.id))) + .write(updateOld); } final allCycles = await getAllCycles(); @@ -50,34 +54,44 @@ class CycleRepository { .reduce((a, b) => a > b ? a : b) + 1; - final userRepo = UserRepository(isar: isar, apiClient: ApiClient()); - final user = await userRepo.getLocalUser(); - + final user = await (db.select(db.users)..limit(1)).getSingleOrNull(); if (user == null) { throw Exception('No user found for cycle creation'); } - final newCycle = CycleCollection() - ..userId = user.serverId ?? user.id.toString() - ..cycleNumber = nextNumber - ..startDate = DateTime.now() - ..isActive = true - ..trainingMaxesJson = jsonEncode(trainingMaxes) - ..isDirty = true; + final newCycleCompanion = CyclesCompanion( + userId: Value(user.serverId ?? user.id.toString()), + cycleNumber: Value(nextNumber), + startDate: Value(DateTime.now()), + isActive: const Value(true), + trainingMaxes: Value(trainingMaxes), + isDirty: const Value(true), + createdAt: Value(DateTime.now()), + updatedAt: Value(DateTime.now()), + ); - await saveCycle(newCycle); + final newId = await db.into(db.cycles).insert(newCycleCompanion); + var newCycle = await (db.select(db.cycles) + ..where((c) => c.id.equals(newId))) + .getSingle(); try { final response = await apiClient.createCycle(trainingMaxes); - newCycle.serverId = response['id']; - newCycle.isDirty = false; - await saveCycle(newCycle); - } catch (e) {} + await (db.update(db.cycles)..where((c) => c.id.equals(newId))).write( + CyclesCompanion( + serverId: Value(response['id']), + isDirty: const Value(false), + ), + ); + newCycle = await (db.select(db.cycles) + ..where((c) => c.id.equals(newId))) + .getSingle(); + } catch (e) { + // API Fehler ignorieren, wird später gesynct + } return newCycle; - } catch (e, stackTrace) { - rethrow; - } + }); } Future finishCycle() async { @@ -87,24 +101,26 @@ class CycleRepository { } final cycleIdRef = currentCycle.serverId ?? currentCycle.id.toString(); + final localCycleId = currentCycle.id.toString(); - final completedMainWorkouts = await isar.workoutCollections - .filter() - .weekLessThan(4) - .completedAtIsNotNull() - .group((q) => q - .cycleIdEqualTo(cycleIdRef) - .or() - .cycleIdEqualTo(currentCycle.id.toString())) - .count(); + final workoutsQuery = db.select(db.workouts) + ..where((w) { + final weekCheck = w.week.isSmallerThanValue(4); + final completedCheck = w.completedAt.isNotNull(); + final cycleCheck = + w.cycleId.equals(cycleIdRef) | w.cycleId.equals(localCycleId); + return weekCheck & completedCheck & cycleCheck; + }); + + final completedMainWorkouts = (await workoutsQuery.get()).length; if (completedMainWorkouts < 9) { final missing = 9 - completedMainWorkouts; throw Exception( 'Cycle incomplete! You still have $missing workouts left in the main phase (Weeks 1-3). Finish them before leveling up.'); } - final currentTMs = - jsonDecode(currentCycle.trainingMaxesJson) as Map; + + final currentTMs = currentCycle.trainingMaxes; final newTMs = { 'squat': (currentTMs['squat'] as num?)?.toDouble() ?? 0.0, @@ -112,23 +128,27 @@ class CycleRepository { 'dip': (currentTMs['dip'] as num?)?.toDouble() ?? 0.0, }; - final week3Workouts = await isar.workoutCollections - .filter() - .weekEqualTo(3) - .group((q) => q - .cycleIdEqualTo(cycleIdRef) - .or() - .cycleIdEqualTo(currentCycle.id.toString())) - .findAll(); + final week3Workouts = await (db.select(db.workouts) + ..where((w) { + final weekCheck = w.week.equals(3); + final cycleCheck = + w.cycleId.equals(cycleIdRef) | w.cycleId.equals(localCycleId); + return weekCheck & cycleCheck; + })) + .get(); bool checkSuccess(String exerciseId) { for (var workout in week3Workouts) { try { - final exercises = jsonDecode(workout.exercisesJson) as List; - for (var ex in exercises) { + final exercises = workout.exercises; + + for (var exData in exercises) { + final ex = exData as Map; + if (ex['exerciseId'] == exerciseId) { final sets = ex['sets'] as List; - for (var s in sets) { + for (var sData in sets) { + final s = sData as Map; if (s['isAmrap'] == true) { final reps = s['repsActual'] as int? ?? 0; if (reps >= 1) { @@ -170,33 +190,23 @@ class CycleRepository { try { await apiClient.finishCycle(currentCycle.serverId!); } catch (e) { - // Fehler ignorieren, wird später gesynct + // Fehler ignorieren } } return await createCycle(newTMs); } - Future saveCycle(CycleCollection cycle) async { - cycle.updatedAt = DateTime.now(); - await isar.writeTxn(() async { - await isar.cycleCollections.put(cycle); - }); - } - - Map getCurrentTrainingMaxes() { - final cycle = - isar.cycleCollections.filter().isActiveEqualTo(true).findFirstSync(); - + Future> getCurrentTrainingMaxesAsync() async { + final cycle = await getCurrentCycle(); if (cycle != null) { - final tms = jsonDecode(cycle.trainingMaxesJson); + final tms = cycle.trainingMaxes; return { 'squat': (tms['squat'] as num?)?.toDouble() ?? 0.0, 'pullup': (tms['pullup'] as num?)?.toDouble() ?? 0.0, 'dip': (tms['dip'] as num?)?.toDouble() ?? 0.0, }; } - return {'squat': 0.0, 'pullup': 0.0, 'dip': 0.0}; } } diff --git a/lib/src/shared/data/repositories/user_repository.dart b/lib/src/shared/data/repositories/user_repository.dart index 35e248b..1d0d20c 100644 --- a/lib/src/shared/data/repositories/user_repository.dart +++ b/lib/src/shared/data/repositories/user_repository.dart @@ -1,62 +1,76 @@ -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:isar/isar.dart'; import 'dart:convert'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:drift/drift.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -import '../local/collections/cycle_collection.dart'; -import '../local/collections/user_collection.dart'; -import '../local/collections/workout_collection.dart'; +import '../local/app_database.dart'; import '../remote/api_client.dart'; import '../../../../main.dart'; +import '../../../core/constants/app_constants.dart'; final userRepositoryProvider = Provider((ref) { - final isar = ref.watch(isarProvider); + final db = ref.watch(appDatabaseProvider); final apiClient = ref.watch(apiClientProvider); - return UserRepository(isar: isar, apiClient: apiClient); + return UserRepository(db: db, apiClient: apiClient); }); final apiClientProvider = Provider((ref) => ApiClient()); class UserRepository { - final Isar isar; + final AppDatabase db; final ApiClient apiClient; + final _storage = const FlutterSecureStorage(); // NEU: Instanz für Logout - UserRepository({required this.isar, required this.apiClient}); + UserRepository({required this.db, required this.apiClient}); Future getLocalUser() async { - return await isar.userCollections.where().findFirst(); + return await (db.select(db.users)..limit(1)).getSingleOrNull(); } Future saveLocalUser(UserCollection user) async { - user.updatedAt = DateTime.now(); - await isar.writeTxn(() async { - await isar.userCollections.put(user); - }); + final companion = user.toCompanion(true).copyWith( + updatedAt: Value(DateTime.now()), + ); + await db.into(db.users).insertOnConflictUpdate(companion); } Future updateXP(int xpToAdd) async { final user = await getLocalUser(); if (user != null) { - user.xp += xpToAdd; - user.isDirty = true; - await saveLocalUser(user); + final newXp = user.xp + xpToAdd; + final companion = UsersCompanion( + xp: Value(newXp), + isDirty: const Value(true), + updatedAt: Value(DateTime.now()), + ); + await (db.update(db.users)..where((u) => u.id.equals(user.id))) + .write(companion); } } Future updateLevel(int newLevel) async { final user = await getLocalUser(); if (user != null) { - user.level = newLevel; - user.isDirty = true; - await saveLocalUser(user); + final companion = UsersCompanion( + level: Value(newLevel), + isDirty: const Value(true), + updatedAt: Value(DateTime.now()), + ); + await (db.update(db.users)..where((u) => u.id.equals(user.id))) + .write(companion); } } Future updateBodyweight(double bodyweight) async { final user = await getLocalUser(); if (user != null) { - user.currentBodyweight = bodyweight; - user.isDirty = true; - await saveLocalUser(user); + final companion = UsersCompanion( + currentBodyweight: Value(bodyweight), + isDirty: const Value(true), + updatedAt: Value(DateTime.now()), + ); + await (db.update(db.users)..where((u) => u.id.equals(user.id))) + .write(companion); try { await apiClient.updateBodyweight(bodyweight); @@ -67,9 +81,13 @@ class UserRepository { Future updateInventory(Map inventory) async { final user = await getLocalUser(); if (user != null) { - user.inventorySettingsJson = jsonEncode(inventory); - user.isDirty = true; - await saveLocalUser(user); + final companion = UsersCompanion( + inventorySettings: Value(inventory), + isDirty: const Value(true), + updatedAt: Value(DateTime.now()), + ); + await (db.update(db.users)..where((u) => u.id.equals(user.id))) + .write(companion); try { await apiClient.updateInventory(inventory); @@ -79,21 +97,7 @@ class UserRepository { Future login(String email, String password) async { final response = await apiClient.login(email, password); - - final user = UserCollection() - ..serverId = response['record']['id'] - ..email = response['record']['email'] - ..xp = response['record']['xp'] ?? 0 - ..level = response['record']['level'] ?? 1 - ..currentBodyweight = - (response['record']['current_bodyweight'] ?? 70.0).toDouble() - ..inventorySettingsJson = - jsonEncode(response['record']['inventory_settings'] ?? {}) - ..avatarConfigJson = jsonEncode(response['record']['avatar_config'] ?? {}) - ..lastSyncAt = DateTime.now(); - - await saveLocalUser(user); - return user; + return _saveUserFromApi(response['record']); } Future register({ @@ -111,48 +115,57 @@ class UserRepository { ); final record = response['record'] ?? response; - - final user = UserCollection() - ..serverId = record['id']?.toString() - ..email = record['email']?.toString() ?? email - ..xp = (record['xp'] as num?)?.toInt() ?? 0 - ..level = (record['level'] as num?)?.toInt() ?? 1 - ..currentBodyweight = - (record['current_bodyweight'] as num?)?.toDouble() ?? bodyweight - ..inventorySettingsJson = - jsonEncode(record['inventory_settings'] ?? inventorySettings) - ..avatarConfigJson = jsonEncode(record['avatar_config'] ?? - { - 'skin_tone': 'medium', - 'hair_style': 'short_01', - 'clothing': 'basic_tee', - 'unlocked_items': ['basic_tee'], - }) - ..lastSyncAt = DateTime.now(); - - await saveLocalUser(user); + final user = await _saveUserFromApi(record); try { await apiClient.login(email, password); } catch (e) {} return user; - } catch (e, stackTrace) { + } catch (e) { rethrow; } } + Future _saveUserFromApi(Map record) async { + await db.delete(db.users).go(); + + final companion = UsersCompanion( + serverId: Value(record['id']), + email: Value(record['email'] ?? ''), + xp: Value((record['xp'] as num?)?.toInt() ?? 0), + level: Value((record['level'] as num?)?.toInt() ?? 1), + currentBodyweight: + Value((record['current_bodyweight'] as num?)?.toDouble() ?? 70.0), + inventorySettings: Value(record['inventory_settings'] ?? {}), + avatarConfig: Value(record['avatar_config'] ?? {}), + lastSyncAt: Value(DateTime.now()), + isDirty: const Value(false), + createdAt: Value(DateTime.now()), + updatedAt: Value(DateTime.now()), + ); + + final id = await db.into(db.users).insert(companion); + return (await (db.select(db.users)..where((u) => u.id.equals(id))) + .getSingle()); + } + Future logout() async { await apiClient.logout(); - await isar.writeTxn(() async { - await isar.userCollections.clear(); + + await _storage.delete(key: AppConstants.keyLastSync); + + await db.transaction(() async { + await db.delete(db.users).go(); + await db.delete(db.cycles).go(); + await db.delete(db.workouts).go(); }); } - Map getInventorySettings() { - final user = isar.userCollections.where().findFirstSync(); - if (user?.inventorySettingsJson != null) { - return jsonDecode(user!.inventorySettingsJson!); + Future> getInventorySettingsAsync() async { + final user = await getLocalUser(); + if (user?.inventorySettings != null) { + return user!.inventorySettings!; } return { 'bar_weight': 20.0, @@ -161,14 +174,14 @@ class UserRepository { }; } - List getAvailablePlates() { - final inventory = getInventorySettings(); + Future> getAvailablePlates() async { + final inventory = await getInventorySettingsAsync(); final plates = inventory['plates'] as List?; return plates?.map((e) => (e as num).toDouble()).toList() ?? []; } - double getBarWeight() { - final inventory = getInventorySettings(); + Future getBarWeight() async { + final inventory = await getInventorySettingsAsync(); return (inventory['bar_weight'] as num?)?.toDouble() ?? 20.0; } @@ -204,17 +217,17 @@ class UserRepository { "Server connection required to reset progress. Please try again when online."); } - user.xp = 0; - user.level = 1; + final companion = UsersCompanion( + xp: const Value(0), + level: const Value(1), + isDirty: const Value(false), + updatedAt: Value(DateTime.now()), + ); + await (db.update(db.users)..where((u) => u.id.equals(user.id))) + .write(companion); - user.isDirty = false; - - await isar.writeTxn(() async { - await isar.userCollections.put(user); - - await isar.cycleCollections.clear(); - await isar.workoutCollections.clear(); - }); + await db.delete(db.cycles).go(); + await db.delete(db.workouts).go(); } } } diff --git a/lib/src/shared/data/repositories/workout_repository.dart b/lib/src/shared/data/repositories/workout_repository.dart index fd38d1e..f1fdbf7 100644 --- a/lib/src/shared/data/repositories/workout_repository.dart +++ b/lib/src/shared/data/repositories/workout_repository.dart @@ -1,49 +1,44 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:isar/isar.dart'; -import 'dart:convert'; - -import '../local/collections/workout_collection.dart'; +import 'package:drift/drift.dart'; +import '../local/app_database.dart'; import '../remote/api_client.dart'; import '../../../../main.dart'; import 'user_repository.dart'; final workoutRepositoryProvider = Provider((ref) { - final isar = ref.watch(isarProvider); + final db = ref.watch(appDatabaseProvider); final apiClient = ref.watch(apiClientProvider); - return WorkoutRepository(isar: isar, apiClient: apiClient); + return WorkoutRepository(db: db, apiClient: apiClient); }); class WorkoutRepository { - final Isar isar; + final AppDatabase db; final ApiClient apiClient; - WorkoutRepository({required this.isar, required this.apiClient}); + WorkoutRepository({required this.db, required this.apiClient}); Future> getAllWorkouts() async { - return await isar.workoutCollections.where().findAll(); + return await db.select(db.workouts).get(); } Future> getWorkoutsForCycle(String cycleId) async { - return await isar.workoutCollections - .filter() - .cycleIdEqualTo(cycleId) - .findAll(); + return await (db.select(db.workouts) + ..where((w) => w.cycleId.equals(cycleId))) + .get(); } Future> getCompletedWorkouts(String userId) async { - return await isar.workoutCollections - .filter() - .userIdEqualTo(userId) - .completedAtIsNotNull() - .findAll(); + return await (db.select(db.workouts) + ..where((w) => w.userId.equals(userId) & w.completedAt.isNotNull())) + .get(); } Future saveWorkout(WorkoutCollection workout) async { - workout.updatedAt = DateTime.now(); - workout.isDirty = true; - await isar.writeTxn(() async { - await isar.workoutCollections.put(workout); - }); + final companion = workout.toCompanion(true).copyWith( + updatedAt: Value(DateTime.now()), + isDirty: const Value(true), + ); + await db.into(db.workouts).insertOnConflictUpdate(companion); } Future createWorkout({ @@ -51,27 +46,42 @@ class WorkoutRepository { required String cycleId, required int week, required int day, - required String exercisesJson, + required List exercises, }) async { - final workout = WorkoutCollection() - ..userId = userId - ..cycleId = cycleId - ..week = week - ..day = day - ..exercisesJson = exercisesJson - ..scheduledDate = DateTime.now(); + final companion = WorkoutsCompanion( + userId: Value(userId), + cycleId: Value(cycleId), + week: Value(week), + day: Value(day), + exercises: Value(exercises), + scheduledDate: Value(DateTime.now()), + xpEarned: const Value(0), + notes: const Value(''), + isDirty: const Value(true), + createdAt: Value(DateTime.now()), + updatedAt: Value(DateTime.now()), + ); - await saveWorkout(workout); - return workout; + final id = await db.into(db.workouts).insert(companion); + return await (db.select(db.workouts)..where((w) => w.id.equals(id))) + .getSingle(); } Future completeWorkout( WorkoutCollection workout, { required int xpEarned, }) async { - workout.completedAt = DateTime.now(); - workout.xpEarned = xpEarned; - await saveWorkout(workout); + final companion = WorkoutsCompanion( + id: Value(workout.id), + completedAt: Value(DateTime.now()), + xpEarned: Value(xpEarned), + exercises: Value(workout.exercises), + isDirty: const Value(true), + updatedAt: Value(DateTime.now()), + ); + + await (db.update(db.workouts)..where((w) => w.id.equals(workout.id))) + .write(companion); } Future getWorkoutByWeekDay({ @@ -80,16 +90,17 @@ class WorkoutRepository { required int week, required int day, }) async { - return await isar.workoutCollections - .filter() - .weekEqualTo(week) - .dayEqualTo(day) - .group((q) { - var query = q.cycleIdEqualTo(cycleId); - if (localCycleId != null) { - query = query.or().cycleIdEqualTo(localCycleId); - } - return query; - }).findFirst(); + return await (db.select(db.workouts) + ..where((w) { + final weekDayCheck = w.week.equals(week) & w.day.equals(day); + + Expression cycleCheck = w.cycleId.equals(cycleId); + if (localCycleId != null) { + cycleCheck = cycleCheck | w.cycleId.equals(localCycleId); + } + + return weekDayCheck & cycleCheck; + })) + .getSingleOrNull(); } } diff --git a/pubspec.lock b/pubspec.lock index a06b297..49b4e51 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,26 +5,26 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "61.0.0" + version: "67.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "5.13.0" + version: "6.4.1" analyzer_plugin: dependency: transitive description: name: analyzer_plugin - sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d + sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161" url: "https://pub.dev" source: hosted - version: "0.11.2" + version: "0.11.3" args: dependency: transitive description: @@ -145,6 +145,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a + url: "https://pub.dev" + source: hosted + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -153,6 +161,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.4" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.dev" + source: hosted + version: "0.4.2" clock: dependency: transitive description: @@ -217,14 +233,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.2" - dartx: - dependency: transitive - description: - name: dartx - sha256: "8b25435617027257d43e6508b5fe061012880ddfdaa75a71d607c3de2a13d244" - url: "https://pub.dev" - source: hosted - version: "1.2.0" dio: dependency: "direct main" description: @@ -241,6 +249,30 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + drift: + dependency: "direct main" + description: + name: drift + sha256: df027d168a2985a2e9da900adeba2ab0136f0d84436592cf3cd5135f82c8579c + url: "https://pub.dev" + source: hosted + version: "2.21.0" + drift_dev: + dependency: "direct dev" + description: + name: drift_dev + sha256: "623649abe932fc17bd32e578e7e05f7ac5e7dd0b33e6c8669a0634105d1389bf" + url: "https://pub.dev" + source: hosted + version: "2.21.2" + drift_flutter: + dependency: "direct main" + description: + name: drift_flutter + sha256: "0bc2f1dde59e59cedde0df67a4ff7bd8f0d42274f18b50bf7e7dae7ca3d77801" + url: "https://pub.dev" + source: hosted + version: "0.1.0" equatable: dependency: "direct main" description: @@ -480,30 +512,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.5" - isar: - dependency: "direct main" - description: - name: isar - sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_flutter_libs: - dependency: "direct main" - description: - name: isar_flutter_libs - sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_generator: - dependency: "direct dev" - description: - name: isar_generator - sha256: "76c121e1295a30423604f2f819bc255bc79f852f3bc8743a24017df6068ad133" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" js: dependency: transitive description: @@ -744,6 +752,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.0" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" riverpod: dependency: transitive description: @@ -933,6 +949,30 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.0" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: "3145bd74dcdb4fd6f5c6dda4d4e4490a8087d7f286a14dee5d37087290f0f8a2" + url: "https://pub.dev" + source: hosted + version: "2.9.4" + sqlite3_flutter_libs: + dependency: "direct main" + description: + name: sqlite3_flutter_libs + sha256: "1e800ebe7f85a80a66adacaa6febe4d5f4d8b75f244e9838a27cb2ffc7aec08d" + url: "https://pub.dev" + source: hosted + version: "0.5.41" + sqlparser: + dependency: transitive + description: + name: sqlparser + sha256: d77749237609784e337ec36c979d41f6f38a7b279df98622ae23929c8eb954a4 + url: "https://pub.dev" + source: hosted + version: "0.39.2" stack_trace: dependency: transitive description: @@ -997,14 +1037,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.7" - time: - dependency: transitive - description: - name: time - sha256: "370572cf5d1e58adcb3e354c47515da3f7469dac3a95b447117e728e7be6f461" - url: "https://pub.dev" - source: hosted - version: "2.1.5" timing: dependency: transitive description: @@ -1125,14 +1157,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.6.1" - xxh3: - dependency: transitive - description: - name: xxh3 - sha256: "399a0438f5d426785723c99da6b16e136f4953fb1e9db0bf270bd41dd4619916" - url: "https://pub.dev" - source: hosted - version: "1.2.0" yaml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 4bc1368..723265d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,8 +15,9 @@ dependencies: riverpod_annotation: ^2.3.5 # Local Database - isar: ^3.1.0+1 - isar_flutter_libs: ^3.1.0+1 + drift: ^2.16.0 + drift_flutter: ^0.1.0 + sqlite3_flutter_libs: ^0.5.20 path_provider: ^2.1.3 # Networking @@ -52,7 +53,7 @@ dev_dependencies: # Code Generation build_runner: ^2.4.9 riverpod_generator: ^2.4.0 - isar_generator: ^3.1.0+1 + drift_dev: ^2.16.0 freezed: ^2.5.2 json_serializable: ^6.8.0