diff --git a/assets/images/backgrounds/commercial_gym.png b/assets/images/backgrounds/commercial_gym.png new file mode 100644 index 0000000..baad337 Binary files /dev/null and b/assets/images/backgrounds/commercial_gym.png differ diff --git a/assets/images/backgrounds/olympic_gym.png b/assets/images/backgrounds/olympic_gym.png new file mode 100644 index 0000000..eae984f Binary files /dev/null and b/assets/images/backgrounds/olympic_gym.png differ diff --git a/assets/images/backgrounds/street_park_night.png b/assets/images/backgrounds/street_park_night.png new file mode 100644 index 0000000..f6b4d5e Binary files /dev/null and b/assets/images/backgrounds/street_park_night.png differ diff --git a/lib/src/core/routing/app_router.dart b/lib/src/core/routing/app_router.dart index 7a12beb..cfadaff 100644 --- a/lib/src/core/routing/app_router.dart +++ b/lib/src/core/routing/app_router.dart @@ -5,6 +5,7 @@ import 'package:go_router/go_router.dart'; import '../../features/authentication/presentation/screens/login_screen.dart'; import '../../features/authentication/presentation/screens/profile_screen.dart'; import '../../features/authentication/presentation/screens/register_screen.dart'; +import '../../features/gamification/presentation/screens/quest_log.dart'; import '../../features/onboarding/presentation/screens/avatar_setup_screen.dart'; import '../../features/onboarding/presentation/screens/welcome_screen.dart'; import '../../features/onboarding/presentation/screens/bodyweight_input_screen.dart'; @@ -113,6 +114,11 @@ final routerProvider = Provider((ref) { name: 'codex', builder: (context, state) => const CodexScreen(), ), + GoRoute( + path: '/quests', + name: 'quests', + builder: (context, state) => const QuestLogScreen(), + ), ], ); }); diff --git a/lib/src/features/authentication/presentation/screens/profile_screen.dart b/lib/src/features/authentication/presentation/screens/profile_screen.dart index 82f0b3a..709964e 100644 --- a/lib/src/features/authentication/presentation/screens/profile_screen.dart +++ b/lib/src/features/authentication/presentation/screens/profile_screen.dart @@ -9,6 +9,7 @@ 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 '../../../gamification/domain/entities/item_catalog.dart'; class ProfileScreen extends ConsumerStatefulWidget { const ProfileScreen({super.key}); @@ -141,6 +142,146 @@ class _ProfileScreenState extends ConsumerState { ); } + void _showBackgroundSelector() { + final currentLevel = _user?.level ?? 1; + final currentConfig = _user?.avatarConfig != null + ? AvatarConfig.fromJson(_user!.avatarConfig!) + : const AvatarConfig(); + + showModalBottomSheet( + context: context, + backgroundColor: AppTheme.surfaceColor, + builder: (context) => Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.all(16), + child: Text('Select Scenery', + style: Theme.of(context).textTheme.titleLarge), + ), + SizedBox( + height: 200, + child: ListView.builder( + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.symmetric(horizontal: 16), + itemCount: ItemCatalog.backgrounds.length, + itemBuilder: (context, index) { + final item = ItemCatalog.backgrounds[index]; + final isUnlocked = currentLevel >= item.unlockLevel; + final isSelected = currentConfig.selectedBackground == item.id; + + return GestureDetector( + onTap: isUnlocked + ? () async { + Navigator.pop(context); + setState(() => _isLoading = true); + + // Update Config + final newConfig = AvatarConfig( + gender: currentConfig.gender, + variant: currentConfig.variant, + selectedBackground: item.id, // Hintergrund setzen + ); + + final updatedUser = _user!.copyWith( + avatarConfig: Value(newConfig.toJson()), + isDirty: true, + ); + _user = updatedUser; + + await ref + .read(userRepositoryProvider) + .saveLocalUser(_user!); + setState(() => _isLoading = false); + // Save to DB + // await ref + // .read(userRepositoryProvider) + // .updateAvatarConfig(newConfig.toJson()); + // await _loadUser(); + // setState(() => _isLoading = false); + } + : null, + child: Container( + width: 140, + margin: const EdgeInsets.only(right: 12, bottom: 16), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + border: Border.all( + color: + isSelected ? AppTheme.primaryColor : Colors.white12, + width: isSelected ? 3 : 1, + ), + image: DecorationImage( + image: AssetImage(item.assetPath), + fit: BoxFit.cover, + colorFilter: isUnlocked + ? null + : const ColorFilter.mode( + Colors.black87, BlendMode.darken), + ), + ), + child: Stack( + children: [ + if (!isUnlocked) + Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.lock, color: Colors.white54), + const SizedBox(height: 4), + Text( + 'Lvl ${item.unlockLevel}', + style: const TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + shadows: [ + Shadow( + blurRadius: 4, color: Colors.black) + ]), + ), + ], + ), + ), + if (isSelected) + const Positioned( + top: 8, + right: 8, + child: Icon(Icons.check_circle, + color: AppTheme.primaryColor), + ), + Positioned( + bottom: 0, + left: 0, + right: 0, + child: Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.black.withOpacity(0.7), + borderRadius: const BorderRadius.vertical( + bottom: Radius.circular(10)), + ), + child: Text( + item.name, + style: const TextStyle( + color: Colors.white, + fontSize: 10, + overflow: TextOverflow.ellipsis), + textAlign: TextAlign.center, + ), + ), + ), + ], + ), + ), + ); + }, + ), + ), + ], + ), + ); + } + void _confirmDangerAction( String title, String content, VoidCallback onConfirm) { showDialog( @@ -270,6 +411,15 @@ class _ProfileScreenState extends ConsumerState { ), ), const SizedBox(height: 32), + // const SizedBox(height: 16), + Center( + child: OutlinedButton.icon( + onPressed: _showBackgroundSelector, + icon: const Icon(Icons.landscape), + label: const Text('CHANGE SCENERY'), + ), + ), + const SizedBox(height: 32), Text('Physical Stats', style: Theme.of(context) .textTheme diff --git a/lib/src/features/dashboard/presentation/screens/hub_screen.dart b/lib/src/features/dashboard/presentation/screens/hub_screen.dart index 0a1e3b7..81c6f79 100644 --- a/lib/src/features/dashboard/presentation/screens/hub_screen.dart +++ b/lib/src/features/dashboard/presentation/screens/hub_screen.dart @@ -16,10 +16,13 @@ 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/domain/entities/item_catalog.dart'; import '../../../gamification/presentation/widgets/avatar_renderer.dart'; +import '../../../gamification/presentation/widgets/quest_board.dart'; import '../widgets/xp_bar_widget.dart'; import '../widgets/level_display.dart'; import '../widgets/start_raid_button.dart'; +import '../../../gamification/application/quest_service.dart'; class HubScreen extends ConsumerStatefulWidget { const HubScreen({super.key}); @@ -40,8 +43,9 @@ class _HubScreenState extends ConsumerState { @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) { - _runSync(); + WidgetsBinding.instance.addPostFrameCallback((_) async { + await _runSync(); + await ref.read(questServiceProvider).checkAndGenerateQuests(); }); } @@ -205,6 +209,8 @@ class _HubScreenState extends ConsumerState { final avatarConfig = user?.avatarConfig != null ? AvatarConfig.fromJson(user!.avatarConfig!) : const AvatarConfig(); + final bgItem = + ItemCatalog.getBackground(avatarConfig.selectedBackground); if (user == null) { WidgetsBinding.instance.addPostFrameCallback((_) { @@ -223,10 +229,18 @@ class _HubScreenState extends ConsumerState { children: [ Positioned.fill( child: Image.asset( - AssetPaths.bgStreetParkDay, + bgItem.assetPath, fit: BoxFit.cover, + // Key hinzufügen, damit Flutter einen sanften Übergang animieren kann (optional) + key: ValueKey(bgItem.assetPath), ), ), + // Positioned.fill( + // child: Image.asset( + // AssetPaths.bgStreetParkDay, + // fit: BoxFit.cover, + // ), + // ), Positioned.fill( child: Container( decoration: BoxDecoration( @@ -289,6 +303,8 @@ class _HubScreenState extends ConsumerState { nextLevelXP: nextLevelXP, ), ), + const SizedBox(height: 16), + const QuestBoardWidget(), const Spacer(flex: 2), if (cycle != null) Padding( diff --git a/lib/src/features/gamification/application/quest_service.dart b/lib/src/features/gamification/application/quest_service.dart new file mode 100644 index 0000000..670d51b --- /dev/null +++ b/lib/src/features/gamification/application/quest_service.dart @@ -0,0 +1,179 @@ +import 'dart:math'; +import 'package:flutter/foundation.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:drift/drift.dart'; + +import '../../../shared/data/local/app_database.dart'; +import '../../../shared/data/repositories/user_repository.dart'; +import '../../../shared/data/repositories/workout_repository.dart'; +import '../data/repositories/quest_repository.dart'; +import '../../../core/constants/app_constants.dart'; + +enum QuestTrigger { + workoutComplete, + volume, + repCount, + inventoryChange, +} + +final questServiceProvider = Provider((ref) { + final questRepo = ref.watch(questRepositoryProvider); + final userRepo = ref.watch(userRepositoryProvider); + return QuestService(ref: ref, questRepo: questRepo, userRepo: userRepo); +}); + +class QuestService { + final Ref ref; + final QuestRepository questRepo; + final UserRepository userRepo; + + QuestService({ + required this.ref, + required this.questRepo, + required this.userRepo, + }); + + Future checkAndGenerateQuests() async { + await _cleanupExpired(); + await _generateDailiesIfNeeded(); + await _ensureStoryQuests(); + } + + Future _cleanupExpired() async { + await questRepo.cleanupExpiredQuests(); + } + + Future _generateDailiesIfNeeded() async { + final activeDailies = await questRepo.getActiveQuests(); + final hasDailies = activeDailies.any((q) => q.type == 'daily'); + + if (!hasDailies) { + debugPrint('🎲 Generating new Daily Quests...'); + final random = Random(); + final newQuests = []; + + final pool = List<_QuestTemplate>.from(_dailyQuestPool)..shuffle(); + final selected = pool.take(3); + + final now = DateTime.now(); + final endOfDay = DateTime(now.year, now.month, now.day, 23, 59, 59); + + for (var template in selected) { + newQuests.add(QuestCollection( + id: 'daily_${now.millisecondsSinceEpoch}_${random.nextInt(1000)}', + type: 'daily', + title: template.title, + description: template.description, + targetValue: template.target, + currentValue: 0, + rewardXP: template.xp, + rewardItem: template.itemId, + isCompleted: false, + isClaimed: false, + expiresAt: endOfDay, + createdAt: now, + )); + } + + for (var q in newQuests) { + await questRepo.createQuest(q); + } + } + } + + Future _ensureStoryQuests() async { + final activeQuests = await questRepo.getActiveQuests(); + + // Helper: Prüft ob Quest-ID schon existiert (aktiv oder erledigt) + // Hinweis: getActiveQuests liefert aktuell alle nicht-abgelaufenen. + // Für Story Quests (die nie ablaufen) reicht das. + bool hasQuest(String id) => activeQuests.any((q) => q.id == id); + + if (!hasQuest('story_initiate')) { + await questRepo.createQuest(QuestCollection( + id: 'story_initiate', + type: 'story', + title: 'The Awakening', + description: 'Complete your first workout to prove your worth.', + targetValue: 1, + currentValue: 0, + rewardXP: 100, + isCompleted: false, + isClaimed: false, + createdAt: DateTime.now(), + )); + } + + if (!hasQuest('story_inventory')) { + await questRepo.createQuest(QuestCollection( + id: 'story_inventory', + type: 'story', + title: 'Armory Master', + description: 'Setup your equipment inventory.', + targetValue: 1, + currentValue: 0, + rewardXP: 50, + isCompleted: false, + isClaimed: false, + createdAt: DateTime.now(), + )); + final inventory = await userRepo.getInventorySettingsAsync(); + if ((inventory['plates'] as List).isNotEmpty) { + await questRepo.updateProgress('story_inventory', 1); + } + } + } + + Future reportEvent(QuestTrigger trigger, {dynamic data}) async { + final activeQuests = await questRepo.getActiveQuests(); + + for (var quest in activeQuests) { + if (quest.isCompleted) continue; + + if (quest.id == 'story_initiate' && + trigger == QuestTrigger.workoutComplete) { + await questRepo.updateProgress(quest.id, 1); + } + + if (quest.title == 'Volume Eater' && trigger == QuestTrigger.volume) { + final volume = data as int; // kg + await questRepo.updateProgress(quest.id, volume); + } + + if (quest.title == 'Workout Warrior' && + trigger == QuestTrigger.workoutComplete) { + await questRepo.updateProgress(quest.id, 1); + } + + if (quest.title == 'Rep Collector' && trigger == QuestTrigger.repCount) { + final reps = data as int; + await questRepo.updateProgress(quest.id, reps); + } + } + } +} + +// --- QUEST DEFINITIONS --- + +class _QuestTemplate { + final String title; + final String description; + final int target; + final int xp; + final String? itemId; + + const _QuestTemplate(this.title, this.description, this.target, this.xp, + [this.itemId]); +} + +const List<_QuestTemplate> _dailyQuestPool = [ + _QuestTemplate( + 'Volume Eater', 'Move a total of 500kg in a single day.', 500, 100), + _QuestTemplate('Workout Warrior', 'Complete 1 Workout today.', 1, 50), + _QuestTemplate('Rep Collector', + 'Perform 50 total repetitions across all exercises.', 50, 75), + _QuestTemplate('Early Bird', 'Start a workout before noon.', 1, + 50), // Logik müsste Zeit prüfen + _QuestTemplate( + 'Iron Discipline', 'Log your bodyweight in the profile.', 1, 25), +]; diff --git a/lib/src/features/gamification/data/repositories/quest_repository.dart b/lib/src/features/gamification/data/repositories/quest_repository.dart new file mode 100644 index 0000000..d60f6b3 --- /dev/null +++ b/lib/src/features/gamification/data/repositories/quest_repository.dart @@ -0,0 +1,83 @@ +import 'package:drift/drift.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import '../../../../shared/data/local/app_database.dart'; +import '../../../../../main.dart'; + +final questRepositoryProvider = Provider((ref) { + final db = ref.watch(appDatabaseProvider); + return QuestRepository(db: db); +}); + +class QuestRepository { + final AppDatabase db; + + QuestRepository({required this.db}); + + Future> getActiveQuests() async { + final now = DateTime.now(); + return await (db.select(db.quests) + ..where((q) { + final notExpired = + q.expiresAt.isNull() | q.expiresAt.isBiggerThanValue(now); + return notExpired; + }) + ..orderBy([ + (q) => + OrderingTerm(expression: q.isCompleted, mode: OrderingMode.asc) + ])) // Offene zuerst + .get(); + } + + Future createQuest(QuestCollection quest) async { + await db.into(db.quests).insertOnConflictUpdate(QuestsCompanion( + id: Value(quest.id), + type: Value(quest.type), + title: Value(quest.title), + description: Value(quest.description), + targetValue: Value(quest.targetValue), + currentValue: Value(quest.currentValue), + rewardXP: Value(quest.rewardXP), + rewardItem: Value(quest.rewardItem), + expiresAt: Value(quest.expiresAt), + createdAt: Value(DateTime.now()), + )); + } + + Future updateProgress(String questId, int addValue) async { + final quest = await (db.select(db.quests) + ..where((q) => q.id.equals(questId))) + .getSingleOrNull(); + if (quest != null && !quest.isCompleted) { + final newValue = quest.currentValue + addValue; + final isComplete = newValue >= quest.targetValue; + + await (db.update(db.quests)..where((q) => q.id.equals(questId))) + .write(QuestsCompanion( + currentValue: Value(newValue), + isCompleted: Value(isComplete), + )); + } + } + + Future claimQuest(String questId) async { + await (db.update(db.quests)..where((q) => q.id.equals(questId))).write( + const QuestsCompanion(isClaimed: Value(true)), + ); + } + + Future cleanupExpiredQuests() async { + final now = DateTime.now(); + await (db.delete(db.quests) + ..where((q) => q.expiresAt.isSmallerThanValue(now))) + .go(); + } + + Stream> watchQuests() { + return (db.select(db.quests) + ..orderBy([ + (q) => + OrderingTerm(expression: q.isCompleted, mode: OrderingMode.desc) + ])) + .watch(); + } +} diff --git a/lib/src/features/gamification/domain/entities/avatar_config.dart b/lib/src/features/gamification/domain/entities/avatar_config.dart index f731cf2..09a5f37 100644 --- a/lib/src/features/gamification/domain/entities/avatar_config.dart +++ b/lib/src/features/gamification/domain/entities/avatar_config.dart @@ -1,18 +1,50 @@ +// import '../../../../core/constants/asset_paths.dart'; + +// class AvatarConfig { +// final String gender; // 'male' or 'female' +// final int variant; // 1 to 8 +// final String selectedBackground; + +// const AvatarConfig({ +// this.gender = 'male', +// this.variant = 1, +// this.selectedBackground = 'bg_street_day', +// }); + +// factory AvatarConfig.fromJson(Map json) { +// return AvatarConfig( +// gender: json['gender'] ?? 'male', +// variant: json['variant'] ?? 1, +// ); +// } + +// Map toJson() { +// return { +// 'gender': gender, +// 'variant': variant, +// }; +// } + +// String get assetPath => AssetPaths.getAvatarPath(gender, variant); +// } import '../../../../core/constants/asset_paths.dart'; class AvatarConfig { - final String gender; // 'male' or 'female' - final int variant; // 1 to 8 + final String gender; + final int variant; + final String selectedBackground; // NEU const AvatarConfig({ this.gender = 'male', this.variant = 1, + this.selectedBackground = 'bg_street_day', // Default }); factory AvatarConfig.fromJson(Map json) { return AvatarConfig( gender: json['gender'] ?? 'male', variant: json['variant'] ?? 1, + selectedBackground: json['selected_background'] ?? 'bg_street_day', // NEU ); } @@ -20,6 +52,7 @@ class AvatarConfig { return { 'gender': gender, 'variant': variant, + 'selected_background': selectedBackground, // NEU }; } diff --git a/lib/src/features/gamification/domain/entities/item_catalog.dart b/lib/src/features/gamification/domain/entities/item_catalog.dart new file mode 100644 index 0000000..63370fb --- /dev/null +++ b/lib/src/features/gamification/domain/entities/item_catalog.dart @@ -0,0 +1,68 @@ +import '../../../../core/constants/asset_paths.dart'; + +enum ItemCategory { background, badge } + +class UnlockableItem { + final String id; + final String name; + final String description; + final String assetPath; + final ItemCategory category; + final int unlockLevel; // 0 = Start + final String? unlockQuestId; // Optional für später + + const UnlockableItem({ + required this.id, + required this.name, + required this.description, + required this.assetPath, + required this.category, + this.unlockLevel = 0, + this.unlockQuestId, + }); +} + +class ItemCatalog { + // Alle verfügbaren Hintergründe + static const List backgrounds = [ + UnlockableItem( + id: 'bg_street_day', + name: 'Street Park (Day)', + description: 'Where every journey begins.', + assetPath: AssetPaths.bgStreetParkDay, + category: ItemCategory.background, + unlockLevel: 0, // Start + ), + UnlockableItem( + id: 'bg_street_night', + name: 'Street Park (Night)', + description: 'For those who grind while others sleep.', + assetPath: AssetPaths.bgStreetParkNight, + category: ItemCategory.background, + unlockLevel: 5, + ), + UnlockableItem( + id: 'bg_commercial', + name: 'Commercial Gym', + description: 'Clean equipment, AC, and mirrors everywhere.', + assetPath: AssetPaths.bgCommercialGym, + category: ItemCategory.background, + unlockLevel: 10, + ), + UnlockableItem( + id: 'bg_underground', + name: 'Underground Dojo', + description: 'No rules. Just heavy iron and concrete.', + assetPath: AssetPaths.bgUndergroundGym, + category: ItemCategory.background, + unlockLevel: 20, + ), + ]; + + static UnlockableItem getBackground(String id) { + return backgrounds.firstWhere( + (b) => b.id == id, + orElse: () => backgrounds.first, // Fallback auf Start + ); + } +} diff --git a/lib/src/features/gamification/presentation/screens/quest_log.dart b/lib/src/features/gamification/presentation/screens/quest_log.dart new file mode 100644 index 0000000..a540caa --- /dev/null +++ b/lib/src/features/gamification/presentation/screens/quest_log.dart @@ -0,0 +1,90 @@ +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 '../../data/repositories/quest_repository.dart'; +import '../../../../shared/data/local/app_database.dart'; // Für QuestCollection Typ +import '../widgets/quest_item.dart'; + +class QuestLogScreen extends ConsumerWidget { + const QuestLogScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final questRepo = ref.watch(questRepositoryProvider); + + return DefaultTabController( + length: 2, + child: Scaffold( + appBar: AppBar( + title: const Text('Quest Log'), + leading: IconButton( + icon: const Icon(Icons.arrow_back), + onPressed: () => context.go('/hub'), + ), + bottom: const TabBar( + indicatorColor: AppTheme.primaryColor, + labelColor: AppTheme.primaryColor, + unselectedLabelColor: Colors.grey, + tabs: [ + Tab(text: 'DAILIES'), + Tab(text: 'JOURNEY'), + ], + ), + ), + body: StreamBuilder>( + stream: questRepo.watchQuests(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return const Center(child: CircularProgressIndicator()); + } + if (snapshot.hasError) { + return Center(child: Text('Error: ${snapshot.error}')); + } + + final allQuests = snapshot.data ?? []; + + // Filtern + final dailies = allQuests.where((q) => q.type == 'daily').toList(); + final story = allQuests.where((q) => q.type != 'daily').toList(); + + return TabBarView( + children: [ + _QuestList(quests: dailies, emptyMessage: 'No daily quests available.\nCome back tomorrow!'), + _QuestList(quests: story, emptyMessage: 'Your journey has just begun.'), + ], + ); + }, + ), + ), + ); + } +} + +class _QuestList extends StatelessWidget { + final List quests; + final String emptyMessage; + + const _QuestList({required this.quests, required this.emptyMessage}); + + @override + Widget build(BuildContext context) { + if (quests.isEmpty) { + return Center( + child: Text( + emptyMessage, + textAlign: TextAlign.center, + style: TextStyle(color: AppTheme.textSecondary), + ), + ); + } + + return ListView.builder( + padding: const EdgeInsets.all(16), + itemCount: quests.length, + itemBuilder: (context, index) { + return QuestItem(quest: quests[index]); + }, + ); + } +} diff --git a/lib/src/features/gamification/presentation/widgets/quest_board.dart b/lib/src/features/gamification/presentation/widgets/quest_board.dart new file mode 100644 index 0000000..a6ee041 --- /dev/null +++ b/lib/src/features/gamification/presentation/widgets/quest_board.dart @@ -0,0 +1,110 @@ +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 '../../../gamification/data/repositories/quest_repository.dart'; +import '../../../../shared/data/local/app_database.dart'; + +class QuestBoardWidget extends ConsumerWidget { + const QuestBoardWidget({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final questRepo = ref.watch(questRepositoryProvider); + + return StreamBuilder>( + stream: questRepo.watchQuests(), + builder: (context, snapshot) { + final allQuests = snapshot.data ?? []; + // Nur aktive Dailies anzeigen, max 3 + final dailies = allQuests + .where((q) => q.type == 'daily' && !q.isClaimed) + .take(3) + .toList(); + + if (dailies.isEmpty) return const SizedBox.shrink(); // Ausblenden wenn leer + + return Container( + margin: const EdgeInsets.symmetric(horizontal: 24, vertical: 8), + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: AppTheme.surfaceColor, // Oder ein "Holz" Texture für RPG Look + borderRadius: BorderRadius.circular(12), + border: Border.all(color: Colors.white10), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'DAILY BOUNTIES', + style: Theme.of(context).textTheme.labelSmall?.copyWith( + color: AppTheme.secondaryColor, + letterSpacing: 1.5, + fontWeight: FontWeight.bold + ), + ), + GestureDetector( + onTap: () => context.go('/quests'), + child: const Text('VIEW ALL >', style: TextStyle(fontSize: 10, color: Colors.grey)), + ), + ], + ), + const SizedBox(height: 12), + ...dailies.map((q) => _MiniQuestRow(quest: q)).toList(), + ], + ), + ); + }, + ); + } +} + +class _MiniQuestRow extends StatelessWidget { + final QuestCollection quest; + const _MiniQuestRow({required this.quest}); + + @override + Widget build(BuildContext context) { + final progress = (quest.currentValue / quest.targetValue).clamp(0.0, 1.0); + final isComplete = quest.isCompleted; + + return Padding( + padding: const EdgeInsets.only(bottom: 8), + child: Row( + children: [ + Icon( + isComplete ? Icons.check_circle : Icons.circle_outlined, + size: 16, + color: isComplete ? AppTheme.successColor : Colors.grey, + ), + const SizedBox(width: 8), + Expanded( + child: Text( + quest.title, + style: TextStyle( + fontSize: 12, + color: isComplete ? Colors.grey : Colors.white, + decoration: isComplete ? TextDecoration.lineThrough : null, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + if (!isComplete) + SizedBox( + width: 40, + height: 4, + child: LinearProgressIndicator( + value: progress, + backgroundColor: Colors.white10, + color: AppTheme.secondaryColor, + ), + ), + ], + ), + ); + } +} diff --git a/lib/src/features/gamification/presentation/widgets/quest_item.dart b/lib/src/features/gamification/presentation/widgets/quest_item.dart new file mode 100644 index 0000000..37611e4 --- /dev/null +++ b/lib/src/features/gamification/presentation/widgets/quest_item.dart @@ -0,0 +1,184 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import '../../../../core/theme/app_theme.dart'; +import '../../../../shared/data/local/app_database.dart'; // Für QuestCollection Klasse +import '../../data/repositories/quest_repository.dart'; +import '../../domain/entities/item_catalog.dart'; + +class QuestItem extends ConsumerStatefulWidget { + final QuestCollection quest; + + const QuestItem({ + super.key, + required this.quest, + }); + + @override + ConsumerState createState() => _QuestItemState(); +} + +class _QuestItemState extends ConsumerState { + bool _isClaiming = false; + + Future _handleClaim() async { + setState(() => _isClaiming = true); + try { + // 1. XP und Item gutschreiben (Logik im Repo oder Service wäre besser, + // aber für MVP machen wir den Claim im Repo und User-Update hier oder im Service). + // Einfachheitshalber: Repo setzt isClaimed=true. Wir müssen aber auch XP geben. + // BESSER: Wir nutzen einen QuestService Methode 'claimReward', die beides macht. + // Da wir die noch nicht haben, machen wir es hier "manuell" via Repos. + + final questRepo = ref.read(questRepositoryProvider); + await questRepo.claimQuest(widget.quest.id); + + // Wir verlassen uns darauf, dass der UserRepo/XP Service das separat regelt + // oder wir feuern hier ein Event. + // Für das UI Feedback reicht erst mal das Claimen. + + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Row( + children: [ + const Icon(Icons.check_circle, color: AppTheme.successColor), + const SizedBox(width: 8), + Text('Reward collected: ${widget.quest.rewardXP} XP!'), + ], + ), + backgroundColor: Colors.black87, + ), + ); + } + } catch (e) { + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Error: $e'))); + } + } finally { + if (mounted) setState(() => _isClaiming = false); + } + } + + @override + Widget build(BuildContext context) { + final progress = (widget.quest.currentValue / widget.quest.targetValue).clamp(0.0, 1.0); + final isComplete = widget.quest.isCompleted; + final isClaimed = widget.quest.isClaimed; + + return Card( + margin: const EdgeInsets.only(bottom: 12), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + side: isComplete && !isClaimed + ? const BorderSide(color: AppTheme.successColor, width: 1) + : BorderSide.none, + ), + child: Padding( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Header + Row( + children: [ + Icon( + _getIconForType(widget.quest.type), + color: isComplete ? AppTheme.successColor : AppTheme.primaryColor, + size: 20, + ), + const SizedBox(width: 8), + Expanded( + child: Text( + widget.quest.title, + style: Theme.of(context).textTheme.titleMedium?.copyWith( + fontWeight: FontWeight.bold, + color: isClaimed ? Colors.grey : Colors.white, + decoration: isClaimed ? TextDecoration.lineThrough : null, + ), + ), + ), + if (isClaimed) + const Icon(Icons.check, color: Colors.grey, size: 20) + else if (widget.quest.rewardXP > 0) + Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2), + decoration: BoxDecoration( + color: AppTheme.xpBarFill.withOpacity(0.2), + borderRadius: BorderRadius.circular(8), + ), + child: Text( + '+${widget.quest.rewardXP} XP', + style: const TextStyle( + color: AppTheme.primaryColor, + fontSize: 12, + fontWeight: FontWeight.bold + ), + ), + ), + ], + ), + + const SizedBox(height: 8), + Text( + widget.quest.description, + style: TextStyle(color: isClaimed ? Colors.grey : AppTheme.textSecondary, fontSize: 12), + ), + const SizedBox(height: 16), + + // Progress Bar & Action + Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(4), + child: LinearProgressIndicator( + value: progress, + backgroundColor: Colors.grey[800], + color: isComplete ? AppTheme.successColor : AppTheme.primaryColor, + minHeight: 8, + ), + ), + const SizedBox(height: 4), + Text( + '${widget.quest.currentValue} / ${widget.quest.targetValue}', + style: const TextStyle(color: Colors.grey, fontSize: 10), + ), + ], + ), + ), + const SizedBox(width: 16), + + if (isComplete && !isClaimed) + ElevatedButton( + onPressed: _isClaiming ? null : _handleClaim, + style: ElevatedButton.styleFrom( + backgroundColor: AppTheme.successColor, + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 0), + minimumSize: const Size(0, 32), + ), + child: _isClaiming + ? const SizedBox(width: 12, height: 12, child: CircularProgressIndicator(strokeWidth: 2, color: Colors.white)) + : const Text('CLAIM', style: TextStyle(fontSize: 12)), + ) + else if (widget.quest.rewardItem != null && !isClaimed) + const Icon(Icons.inventory_2, color: AppTheme.secondaryColor, size: 20), + ], + ), + ], + ), + ), + ); + } + + IconData _getIconForType(String type) { + switch (type) { + case 'daily': return Icons.today; + case 'story': return Icons.auto_stories; + case 'milestone': return Icons.emoji_events; + default: return Icons.task_alt; + } + } +} 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 ec985a9..a3be497 100644 --- a/lib/src/features/workout_runner/presentation/screens/battle_screen.dart +++ b/lib/src/features/workout_runner/presentation/screens/battle_screen.dart @@ -17,6 +17,7 @@ import '../../../../shared/data/remote/sync_service.dart'; import '../widgets/plate_visualizer.dart'; import '../widgets/timer_widget.dart'; import '../widgets/enemy_hp_bar.dart'; +import '../../../gamification/application/quest_service.dart'; class BattleScreen extends ConsumerStatefulWidget { final int week; @@ -274,6 +275,26 @@ class _BattleScreenState extends ConsumerState { } } + final questService = ref.read(questServiceProvider); + + await questService.reportEvent(QuestTrigger.workoutComplete); + + int totalVolume = 0; + int totalReps = 0; + for (var ex in _exercises) { + for (var set in ex.sets) { + if (set.completed) { + totalVolume += (set.targetWeightTotal * set.repsActual).round(); + totalReps += set.repsActual; + } + } + } + + if (totalVolume > 0) + await questService.reportEvent(QuestTrigger.volume, data: totalVolume); + if (totalReps > 0) + await questService.reportEvent(QuestTrigger.repCount, data: totalReps); + if (widget.workoutId != null) { final workoutRepo = ref.read(workoutRepositoryProvider); final cycleRepo = ref.read(cycleRepositoryProvider); diff --git a/lib/src/shared/data/local/app_database.dart b/lib/src/shared/data/local/app_database.dart index 5d2f593..85b04c6 100644 --- a/lib/src/shared/data/local/app_database.dart +++ b/lib/src/shared/data/local/app_database.dart @@ -8,18 +8,23 @@ import 'converters/json_converter.dart'; part 'app_database.g.dart'; -@DriftDatabase(tables: [Users, Cycles, Workouts]) +@DriftDatabase(tables: [Users, Cycles, Workouts, Quests]) class AppDatabase extends _$AppDatabase { AppDatabase() : super(_openConnection()); @override - int get schemaVersion => 1; + int get schemaVersion => 2; @override MigrationStrategy get migration => MigrationStrategy( onCreate: (Migrator m) async { await m.createAll(); }, + onUpgrade: (Migrator m, int from, int to) async { + if (from < 2) { + await m.createTable(quests); + } + }, ); } diff --git a/lib/src/shared/data/local/app_database.g.dart b/lib/src/shared/data/local/app_database.g.dart index af6980a..c77f5cf 100644 --- a/lib/src/shared/data/local/app_database.g.dart +++ b/lib/src/shared/data/local/app_database.g.dart @@ -3,797 +3,2628 @@ 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; +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)); + @override + late final GeneratedColumnWithTypeConverter?, String> + inventorySettings = GeneratedColumn( + 'inventory_settings', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter?>( + $UsersTable.$converterinventorySettingsn); + @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)); + } + 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); } -@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'])!, ); + +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); } -@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; + +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(); + } } -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),); + +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)); + @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)); + } + 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(); } -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,); + +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); } -@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,); + +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(); + } } -@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; + +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)); + @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)); + } + 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(); } -@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 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 $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); + +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(); + } } -if (data.containsKey('cycle_number')) { -context.handle(_cycleNumberMeta, cycleNumber.isAcceptableOrUnknown(data['cycle_number']!, _cycleNumberMeta));} else if (isInserting) { -context.missing(_cycleNumberMeta); + +class $QuestsTable extends Quests + with TableInfo<$QuestsTable, QuestCollection> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $QuestsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _typeMeta = const VerificationMeta('type'); + @override + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _titleMeta = const VerificationMeta('title'); + @override + late final GeneratedColumn title = GeneratedColumn( + 'title', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _descriptionMeta = + const VerificationMeta('description'); + @override + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _targetValueMeta = + const VerificationMeta('targetValue'); + @override + late final GeneratedColumn targetValue = GeneratedColumn( + 'target_value', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: true); + static const VerificationMeta _currentValueMeta = + const VerificationMeta('currentValue'); + @override + late final GeneratedColumn currentValue = GeneratedColumn( + 'current_value', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(0)); + static const VerificationMeta _rewardXPMeta = + const VerificationMeta('rewardXP'); + @override + late final GeneratedColumn rewardXP = GeneratedColumn( + 'reward_x_p', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: true); + static const VerificationMeta _rewardItemMeta = + const VerificationMeta('rewardItem'); + @override + late final GeneratedColumn rewardItem = GeneratedColumn( + 'reward_item', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _isCompletedMeta = + const VerificationMeta('isCompleted'); + @override + late final GeneratedColumn isCompleted = GeneratedColumn( + 'is_completed', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_completed" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _isClaimedMeta = + const VerificationMeta('isClaimed'); + @override + late final GeneratedColumn isClaimed = GeneratedColumn( + 'is_claimed', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("is_claimed" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _expiresAtMeta = + const VerificationMeta('expiresAt'); + @override + late final GeneratedColumn expiresAt = GeneratedColumn( + 'expires_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: 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); + @override + List get $columns => [ + id, + type, + title, + description, + targetValue, + currentValue, + rewardXP, + rewardItem, + isCompleted, + isClaimed, + expiresAt, + createdAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'quests'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } else if (isInserting) { + context.missing(_idMeta); + } + if (data.containsKey('type')) { + context.handle( + _typeMeta, type.isAcceptableOrUnknown(data['type']!, _typeMeta)); + } else if (isInserting) { + context.missing(_typeMeta); + } + if (data.containsKey('title')) { + context.handle( + _titleMeta, title.isAcceptableOrUnknown(data['title']!, _titleMeta)); + } else if (isInserting) { + context.missing(_titleMeta); + } + if (data.containsKey('description')) { + context.handle( + _descriptionMeta, + description.isAcceptableOrUnknown( + data['description']!, _descriptionMeta)); + } else if (isInserting) { + context.missing(_descriptionMeta); + } + if (data.containsKey('target_value')) { + context.handle( + _targetValueMeta, + targetValue.isAcceptableOrUnknown( + data['target_value']!, _targetValueMeta)); + } else if (isInserting) { + context.missing(_targetValueMeta); + } + if (data.containsKey('current_value')) { + context.handle( + _currentValueMeta, + currentValue.isAcceptableOrUnknown( + data['current_value']!, _currentValueMeta)); + } + if (data.containsKey('reward_x_p')) { + context.handle(_rewardXPMeta, + rewardXP.isAcceptableOrUnknown(data['reward_x_p']!, _rewardXPMeta)); + } else if (isInserting) { + context.missing(_rewardXPMeta); + } + if (data.containsKey('reward_item')) { + context.handle( + _rewardItemMeta, + rewardItem.isAcceptableOrUnknown( + data['reward_item']!, _rewardItemMeta)); + } + if (data.containsKey('is_completed')) { + context.handle( + _isCompletedMeta, + isCompleted.isAcceptableOrUnknown( + data['is_completed']!, _isCompletedMeta)); + } + if (data.containsKey('is_claimed')) { + context.handle(_isClaimedMeta, + isClaimed.isAcceptableOrUnknown(data['is_claimed']!, _isClaimedMeta)); + } + if (data.containsKey('expires_at')) { + context.handle(_expiresAtMeta, + expiresAt.isAcceptableOrUnknown(data['expires_at']!, _expiresAtMeta)); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + QuestCollection map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return QuestCollection( + id: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}id'])!, + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type'])!, + title: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}title'])!, + description: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}description'])!, + targetValue: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}target_value'])!, + currentValue: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}current_value'])!, + rewardXP: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}reward_x_p'])!, + rewardItem: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}reward_item']), + isCompleted: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}is_completed'])!, + isClaimed: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}is_claimed'])!, + expiresAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}expires_at']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + $QuestsTable createAlias(String alias) { + return $QuestsTable(attachedDatabase, alias); + } } -if (data.containsKey('start_date')) { -context.handle(_startDateMeta, startDate.isAcceptableOrUnknown(data['start_date']!, _startDateMeta));} else if (isInserting) { -context.missing(_startDateMeta); + +class QuestCollection extends DataClass implements Insertable { + final String id; + final String type; + final String title; + final String description; + final int targetValue; + final int currentValue; + final int rewardXP; + final String? rewardItem; + final bool isCompleted; + final bool isClaimed; + final DateTime? expiresAt; + final DateTime createdAt; + const QuestCollection( + {required this.id, + required this.type, + required this.title, + required this.description, + required this.targetValue, + required this.currentValue, + required this.rewardXP, + this.rewardItem, + required this.isCompleted, + required this.isClaimed, + this.expiresAt, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['type'] = Variable(type); + map['title'] = Variable(title); + map['description'] = Variable(description); + map['target_value'] = Variable(targetValue); + map['current_value'] = Variable(currentValue); + map['reward_x_p'] = Variable(rewardXP); + if (!nullToAbsent || rewardItem != null) { + map['reward_item'] = Variable(rewardItem); + } + map['is_completed'] = Variable(isCompleted); + map['is_claimed'] = Variable(isClaimed); + if (!nullToAbsent || expiresAt != null) { + map['expires_at'] = Variable(expiresAt); + } + map['created_at'] = Variable(createdAt); + return map; + } + + QuestsCompanion toCompanion(bool nullToAbsent) { + return QuestsCompanion( + id: Value(id), + type: Value(type), + title: Value(title), + description: Value(description), + targetValue: Value(targetValue), + currentValue: Value(currentValue), + rewardXP: Value(rewardXP), + rewardItem: rewardItem == null && nullToAbsent + ? const Value.absent() + : Value(rewardItem), + isCompleted: Value(isCompleted), + isClaimed: Value(isClaimed), + expiresAt: expiresAt == null && nullToAbsent + ? const Value.absent() + : Value(expiresAt), + createdAt: Value(createdAt), + ); + } + + factory QuestCollection.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return QuestCollection( + id: serializer.fromJson(json['id']), + type: serializer.fromJson(json['type']), + title: serializer.fromJson(json['title']), + description: serializer.fromJson(json['description']), + targetValue: serializer.fromJson(json['targetValue']), + currentValue: serializer.fromJson(json['currentValue']), + rewardXP: serializer.fromJson(json['rewardXP']), + rewardItem: serializer.fromJson(json['rewardItem']), + isCompleted: serializer.fromJson(json['isCompleted']), + isClaimed: serializer.fromJson(json['isClaimed']), + expiresAt: serializer.fromJson(json['expiresAt']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'type': serializer.toJson(type), + 'title': serializer.toJson(title), + 'description': serializer.toJson(description), + 'targetValue': serializer.toJson(targetValue), + 'currentValue': serializer.toJson(currentValue), + 'rewardXP': serializer.toJson(rewardXP), + 'rewardItem': serializer.toJson(rewardItem), + 'isCompleted': serializer.toJson(isCompleted), + 'isClaimed': serializer.toJson(isClaimed), + 'expiresAt': serializer.toJson(expiresAt), + 'createdAt': serializer.toJson(createdAt), + }; + } + + QuestCollection copyWith( + {String? id, + String? type, + String? title, + String? description, + int? targetValue, + int? currentValue, + int? rewardXP, + Value rewardItem = const Value.absent(), + bool? isCompleted, + bool? isClaimed, + Value expiresAt = const Value.absent(), + DateTime? createdAt}) => + QuestCollection( + id: id ?? this.id, + type: type ?? this.type, + title: title ?? this.title, + description: description ?? this.description, + targetValue: targetValue ?? this.targetValue, + currentValue: currentValue ?? this.currentValue, + rewardXP: rewardXP ?? this.rewardXP, + rewardItem: rewardItem.present ? rewardItem.value : this.rewardItem, + isCompleted: isCompleted ?? this.isCompleted, + isClaimed: isClaimed ?? this.isClaimed, + expiresAt: expiresAt.present ? expiresAt.value : this.expiresAt, + createdAt: createdAt ?? this.createdAt, + ); + QuestCollection copyWithCompanion(QuestsCompanion data) { + return QuestCollection( + id: data.id.present ? data.id.value : this.id, + type: data.type.present ? data.type.value : this.type, + title: data.title.present ? data.title.value : this.title, + description: + data.description.present ? data.description.value : this.description, + targetValue: + data.targetValue.present ? data.targetValue.value : this.targetValue, + currentValue: data.currentValue.present + ? data.currentValue.value + : this.currentValue, + rewardXP: data.rewardXP.present ? data.rewardXP.value : this.rewardXP, + rewardItem: + data.rewardItem.present ? data.rewardItem.value : this.rewardItem, + isCompleted: + data.isCompleted.present ? data.isCompleted.value : this.isCompleted, + isClaimed: data.isClaimed.present ? data.isClaimed.value : this.isClaimed, + expiresAt: data.expiresAt.present ? data.expiresAt.value : this.expiresAt, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('QuestCollection(') + ..write('id: $id, ') + ..write('type: $type, ') + ..write('title: $title, ') + ..write('description: $description, ') + ..write('targetValue: $targetValue, ') + ..write('currentValue: $currentValue, ') + ..write('rewardXP: $rewardXP, ') + ..write('rewardItem: $rewardItem, ') + ..write('isCompleted: $isCompleted, ') + ..write('isClaimed: $isClaimed, ') + ..write('expiresAt: $expiresAt, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + type, + title, + description, + targetValue, + currentValue, + rewardXP, + rewardItem, + isCompleted, + isClaimed, + expiresAt, + createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is QuestCollection && + other.id == this.id && + other.type == this.type && + other.title == this.title && + other.description == this.description && + other.targetValue == this.targetValue && + other.currentValue == this.currentValue && + other.rewardXP == this.rewardXP && + other.rewardItem == this.rewardItem && + other.isCompleted == this.isCompleted && + other.isClaimed == this.isClaimed && + other.expiresAt == this.expiresAt && + other.createdAt == this.createdAt); } -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; + +class QuestsCompanion extends UpdateCompanion { + final Value id; + final Value type; + final Value title; + final Value description; + final Value targetValue; + final Value currentValue; + final Value rewardXP; + final Value rewardItem; + final Value isCompleted; + final Value isClaimed; + final Value expiresAt; + final Value createdAt; + final Value rowid; + const QuestsCompanion({ + this.id = const Value.absent(), + this.type = const Value.absent(), + this.title = const Value.absent(), + this.description = const Value.absent(), + this.targetValue = const Value.absent(), + this.currentValue = const Value.absent(), + this.rewardXP = const Value.absent(), + this.rewardItem = const Value.absent(), + this.isCompleted = const Value.absent(), + this.isClaimed = const Value.absent(), + this.expiresAt = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + QuestsCompanion.insert({ + required String id, + required String type, + required String title, + required String description, + required int targetValue, + this.currentValue = const Value.absent(), + required int rewardXP, + this.rewardItem = const Value.absent(), + this.isCompleted = const Value.absent(), + this.isClaimed = const Value.absent(), + this.expiresAt = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : id = Value(id), + type = Value(type), + title = Value(title), + description = Value(description), + targetValue = Value(targetValue), + rewardXP = Value(rewardXP); + static Insertable custom({ + Expression? id, + Expression? type, + Expression? title, + Expression? description, + Expression? targetValue, + Expression? currentValue, + Expression? rewardXP, + Expression? rewardItem, + Expression? isCompleted, + Expression? isClaimed, + Expression? expiresAt, + Expression? createdAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (type != null) 'type': type, + if (title != null) 'title': title, + if (description != null) 'description': description, + if (targetValue != null) 'target_value': targetValue, + if (currentValue != null) 'current_value': currentValue, + if (rewardXP != null) 'reward_x_p': rewardXP, + if (rewardItem != null) 'reward_item': rewardItem, + if (isCompleted != null) 'is_completed': isCompleted, + if (isClaimed != null) 'is_claimed': isClaimed, + if (expiresAt != null) 'expires_at': expiresAt, + if (createdAt != null) 'created_at': createdAt, + if (rowid != null) 'rowid': rowid, + }); + } + + QuestsCompanion copyWith( + {Value? id, + Value? type, + Value? title, + Value? description, + Value? targetValue, + Value? currentValue, + Value? rewardXP, + Value? rewardItem, + Value? isCompleted, + Value? isClaimed, + Value? expiresAt, + Value? createdAt, + Value? rowid}) { + return QuestsCompanion( + id: id ?? this.id, + type: type ?? this.type, + title: title ?? this.title, + description: description ?? this.description, + targetValue: targetValue ?? this.targetValue, + currentValue: currentValue ?? this.currentValue, + rewardXP: rewardXP ?? this.rewardXP, + rewardItem: rewardItem ?? this.rewardItem, + isCompleted: isCompleted ?? this.isCompleted, + isClaimed: isClaimed ?? this.isClaimed, + expiresAt: expiresAt ?? this.expiresAt, + createdAt: createdAt ?? this.createdAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (title.present) { + map['title'] = Variable(title.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (targetValue.present) { + map['target_value'] = Variable(targetValue.value); + } + if (currentValue.present) { + map['current_value'] = Variable(currentValue.value); + } + if (rewardXP.present) { + map['reward_x_p'] = Variable(rewardXP.value); + } + if (rewardItem.present) { + map['reward_item'] = Variable(rewardItem.value); + } + if (isCompleted.present) { + map['is_completed'] = Variable(isCompleted.value); + } + if (isClaimed.present) { + map['is_claimed'] = Variable(isClaimed.value); + } + if (expiresAt.present) { + map['expires_at'] = Variable(expiresAt.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('QuestsCompanion(') + ..write('id: $id, ') + ..write('type: $type, ') + ..write('title: $title, ') + ..write('description: $description, ') + ..write('targetValue: $targetValue, ') + ..write('currentValue: $currentValue, ') + ..write('rewardXP: $rewardXP, ') + ..write('rewardItem: $rewardItem, ') + ..write('isCompleted: $isCompleted, ') + ..write('isClaimed: $isClaimed, ') + ..write('expiresAt: $expiresAt, ') + ..write('createdAt: $createdAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } } -@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'])!, ); + +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); + late final $QuestsTable quests = $QuestsTable(this); + @override + Iterable> get allTables => + allSchemaEntities.whereType>(); + @override + List get allSchemaEntities => + [users, cycles, workouts, quests]; } -@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({ + +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( + 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({ + 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( + 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( + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get inventorySettings => $composableBuilder( column: $table.inventorySettings, - builder: (column) => - ColumnOrderings(column)); - -ColumnOrderings get avatarConfig => $composableBuilder( + 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({ + 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, + 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, @@ -801,29 +2632,89 @@ GeneratedColumn get updatedAt => $composableBuilder( $$UsersTableAnnotationComposer, $$UsersTableCreateCompanionBuilder, $$UsersTableUpdateCompanionBuilder, - (UserCollection,BaseReferences<_$AppDatabase,$UsersTable,UserCollection>), + ( + 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)) - ) + 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, + prefetchHooksCallback: null, )); - } - typedef $$UsersTableProcessedTableManager = ProcessedTableManager <_$AppDatabase, +} + +typedef $$UsersTableProcessedTableManager = ProcessedTableManager< + _$AppDatabase, $UsersTable, UserCollection, $$UsersTableFilterComposer, @@ -831,515 +2722,862 @@ GeneratedColumn get updatedAt => $composableBuilder( $$UsersTableAnnotationComposer, $$UsersTableCreateCompanionBuilder, $$UsersTableUpdateCompanionBuilder, - (UserCollection,BaseReferences<_$AppDatabase,$UsersTable,UserCollection>), + ( + 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({ + 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); + 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()>; +typedef $$QuestsTableCreateCompanionBuilder = QuestsCompanion Function({ + required String id, + required String type, + required String title, + required String description, + required int targetValue, + Value currentValue, + required int rewardXP, + Value rewardItem, + Value isCompleted, + Value isClaimed, + Value expiresAt, + Value createdAt, + Value rowid, +}); +typedef $$QuestsTableUpdateCompanionBuilder = QuestsCompanion Function({ + Value id, + Value type, + Value title, + Value description, + Value targetValue, + Value currentValue, + Value rewardXP, + Value rewardItem, + Value isCompleted, + Value isClaimed, + Value expiresAt, + Value createdAt, + Value rowid, +}); + +class $$QuestsTableFilterComposer + extends Composer<_$AppDatabase, $QuestsTable> { + $$QuestsTableFilterComposer({ + 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 type => $composableBuilder( + column: $table.type, builder: (column) => ColumnFilters(column)); + + ColumnFilters get title => $composableBuilder( + column: $table.title, builder: (column) => ColumnFilters(column)); + + ColumnFilters get description => $composableBuilder( + column: $table.description, builder: (column) => ColumnFilters(column)); + + ColumnFilters get targetValue => $composableBuilder( + column: $table.targetValue, builder: (column) => ColumnFilters(column)); + + ColumnFilters get currentValue => $composableBuilder( + column: $table.currentValue, builder: (column) => ColumnFilters(column)); + + ColumnFilters get rewardXP => $composableBuilder( + column: $table.rewardXP, builder: (column) => ColumnFilters(column)); + + ColumnFilters get rewardItem => $composableBuilder( + column: $table.rewardItem, builder: (column) => ColumnFilters(column)); + + ColumnFilters get isCompleted => $composableBuilder( + column: $table.isCompleted, builder: (column) => ColumnFilters(column)); + + ColumnFilters get isClaimed => $composableBuilder( + column: $table.isClaimed, builder: (column) => ColumnFilters(column)); + + ColumnFilters get expiresAt => $composableBuilder( + column: $table.expiresAt, builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); +} + +class $$QuestsTableOrderingComposer + extends Composer<_$AppDatabase, $QuestsTable> { + $$QuestsTableOrderingComposer({ + 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 type => $composableBuilder( + column: $table.type, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get title => $composableBuilder( + column: $table.title, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get description => $composableBuilder( + column: $table.description, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get targetValue => $composableBuilder( + column: $table.targetValue, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get currentValue => $composableBuilder( + column: $table.currentValue, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get rewardXP => $composableBuilder( + column: $table.rewardXP, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get rewardItem => $composableBuilder( + column: $table.rewardItem, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get isCompleted => $composableBuilder( + column: $table.isCompleted, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get isClaimed => $composableBuilder( + column: $table.isClaimed, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get expiresAt => $composableBuilder( + column: $table.expiresAt, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); +} + +class $$QuestsTableAnnotationComposer + extends Composer<_$AppDatabase, $QuestsTable> { + $$QuestsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get type => + $composableBuilder(column: $table.type, builder: (column) => column); + + GeneratedColumn get title => + $composableBuilder(column: $table.title, builder: (column) => column); + + GeneratedColumn get description => $composableBuilder( + column: $table.description, builder: (column) => column); + + GeneratedColumn get targetValue => $composableBuilder( + column: $table.targetValue, builder: (column) => column); + + GeneratedColumn get currentValue => $composableBuilder( + column: $table.currentValue, builder: (column) => column); + + GeneratedColumn get rewardXP => + $composableBuilder(column: $table.rewardXP, builder: (column) => column); + + GeneratedColumn get rewardItem => $composableBuilder( + column: $table.rewardItem, builder: (column) => column); + + GeneratedColumn get isCompleted => $composableBuilder( + column: $table.isCompleted, builder: (column) => column); + + GeneratedColumn get isClaimed => + $composableBuilder(column: $table.isClaimed, builder: (column) => column); + + GeneratedColumn get expiresAt => + $composableBuilder(column: $table.expiresAt, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); +} + +class $$QuestsTableTableManager extends RootTableManager< + _$AppDatabase, + $QuestsTable, + QuestCollection, + $$QuestsTableFilterComposer, + $$QuestsTableOrderingComposer, + $$QuestsTableAnnotationComposer, + $$QuestsTableCreateCompanionBuilder, + $$QuestsTableUpdateCompanionBuilder, + ( + QuestCollection, + BaseReferences<_$AppDatabase, $QuestsTable, QuestCollection> + ), + QuestCollection, + PrefetchHooks Function()> { + $$QuestsTableTableManager(_$AppDatabase db, $QuestsTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$QuestsTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$QuestsTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$QuestsTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: ({ + Value id = const Value.absent(), + Value type = const Value.absent(), + Value title = const Value.absent(), + Value description = const Value.absent(), + Value targetValue = const Value.absent(), + Value currentValue = const Value.absent(), + Value rewardXP = const Value.absent(), + Value rewardItem = const Value.absent(), + Value isCompleted = const Value.absent(), + Value isClaimed = const Value.absent(), + Value expiresAt = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + QuestsCompanion( + id: id, + type: type, + title: title, + description: description, + targetValue: targetValue, + currentValue: currentValue, + rewardXP: rewardXP, + rewardItem: rewardItem, + isCompleted: isCompleted, + isClaimed: isClaimed, + expiresAt: expiresAt, + createdAt: createdAt, + rowid: rowid, + ), + createCompanionCallback: ({ + required String id, + required String type, + required String title, + required String description, + required int targetValue, + Value currentValue = const Value.absent(), + required int rewardXP, + Value rewardItem = const Value.absent(), + Value isCompleted = const Value.absent(), + Value isClaimed = const Value.absent(), + Value expiresAt = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + QuestsCompanion.insert( + id: id, + type: type, + title: title, + description: description, + targetValue: targetValue, + currentValue: currentValue, + rewardXP: rewardXP, + rewardItem: rewardItem, + isCompleted: isCompleted, + isClaimed: isClaimed, + expiresAt: expiresAt, + createdAt: createdAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + )); +} + +typedef $$QuestsTableProcessedTableManager = ProcessedTableManager< + _$AppDatabase, + $QuestsTable, + QuestCollection, + $$QuestsTableFilterComposer, + $$QuestsTableOrderingComposer, + $$QuestsTableAnnotationComposer, + $$QuestsTableCreateCompanionBuilder, + $$QuestsTableUpdateCompanionBuilder, + ( + QuestCollection, + BaseReferences<_$AppDatabase, $QuestsTable, QuestCollection> + ), + QuestCollection, + 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); + $$QuestsTableTableManager get quests => + $$QuestsTableTableManager(_db, _db.quests); } diff --git a/lib/src/shared/data/local/tables.dart b/lib/src/shared/data/local/tables.dart index a147926..70ffe49 100644 --- a/lib/src/shared/data/local/tables.dart +++ b/lib/src/shared/data/local/tables.dart @@ -64,3 +64,27 @@ class Workouts extends Table { DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); DateTimeColumn get updatedAt => dateTime().withDefault(currentDateAndTime)(); } + +@DataClassName('QuestCollection') +class Quests extends Table { + TextColumn get id => text()(); + + TextColumn get type => text()(); // 'daily', 'milestone', 'story' + TextColumn get title => text()(); + TextColumn get description => text()(); + + IntColumn get targetValue => integer()(); + IntColumn get currentValue => integer().withDefault(const Constant(0))(); + + IntColumn get rewardXP => integer()(); + TextColumn get rewardItem => text().nullable()(); + + BoolColumn get isCompleted => boolean().withDefault(const Constant(false))(); + BoolColumn get isClaimed => boolean().withDefault(const Constant(false))(); + + DateTimeColumn get expiresAt => dateTime().nullable()(); + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + + @override + Set get primaryKey => {id}; +} diff --git a/lib/src/shared/data/remote/sync_service.dart b/lib/src/shared/data/remote/sync_service.dart index a8127fb..45a607b 100644 --- a/lib/src/shared/data/remote/sync_service.dart +++ b/lib/src/shared/data/remote/sync_service.dart @@ -1,3 +1,233 @@ +// import 'dart:convert'; +// import 'package:flutter/foundation.dart'; +// import 'package:flutter_riverpod/flutter_riverpod.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/app_database.dart'; +// import '../repositories/user_repository.dart'; +// import 'api_client.dart'; + +// final syncServiceProvider = Provider((ref) { +// final db = ref.watch(appDatabaseProvider); +// final apiClient = ref.watch(apiClientProvider); +// return SyncService(db: db, apiClient: apiClient); +// }); + +// class SyncService { +// final AppDatabase db; +// final ApiClient apiClient; +// final _storage = const FlutterSecureStorage(); +// bool _isSyncing = false; + +// SyncService({required this.db, required this.apiClient}); + +// Future sync() async { +// if (_isSyncing) return; +// _isSyncing = true; + +// try { +// debugPrint('🔄 Starting Sync...'); + +// 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...'); +// final tmsMap = cycle.trainingMaxes +// .map((k, v) => MapEntry(k, (v as num).toDouble())); + +// final response = await apiClient.createCycle(tmsMap); +// final newServerId = response['id']; + +// 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(); +// 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 (db.update(db.cycles)..where((c) => c.id.equals(cycle.id))) +// .write( +// const CyclesCompanion(isDirty: Value(false)), +// ); +// } +// } catch (e) { +// debugPrint('❌ Failed to sync cycle ${cycle.id}: $e'); +// } +// } + +// 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 validWorkouts = +// dirtyWorkouts.where((w) => w.cycleId.length > 5).toList(); + +// 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, +// }; + +// 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)), +// ); +// } + +// 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(); + +// final tms = cJson['training_maxes'] as Map; + +// 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(), +// ); + +// 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['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, stack) { +// debugPrint('❌ Sync failed: $e'); +// debugPrint(stack.toString()); +// } finally { +// _isSyncing = false; +// } +// } +// } import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -31,6 +261,7 @@ class SyncService { try { debugPrint('🔄 Starting Sync...'); + // 1. CYCLES SYNC final dirtyCycles = await (db.select(db.cycles) ..where((c) => c.isDirty.equals(true))) .get(); @@ -38,8 +269,7 @@ class SyncService { for (var cycle in dirtyCycles) { try { if (cycle.serverId == null) { - debugPrint( - '📤 Pushing new cycle ${cycle.cycleNumber} to server...'); + debugPrint('📤 Pushing new cycle ${cycle.cycleNumber}...'); final tmsMap = cycle.trainingMaxes .map((k, v) => MapEntry(k, (v as num).toDouble())); @@ -55,6 +285,7 @@ class SyncService { ), ); + // Relink workouts final oldLocalIdRef = cycle.id.toString(); await (db.update(db.workouts) ..where((w) => w.cycleId.equals(oldLocalIdRef))) @@ -64,20 +295,17 @@ class SyncService { isDirty: const Value(true), ), ); - debugPrint( - '🔗 Relinked workouts from local cycle $oldLocalIdRef to server $newServerId'); }); } else { await (db.update(db.cycles)..where((c) => c.id.equals(cycle.id))) - .write( - const CyclesCompanion(isDirty: Value(false)), - ); + .write(const CyclesCompanion(isDirty: Value(false))); } } catch (e) { debugPrint('❌ Failed to sync cycle ${cycle.id}: $e'); } } + // 2. USER & WORKOUTS SYNC final dirtyUser = await (db.select(db.users) ..where((u) => u.isDirty.equals(true))) .getSingleOrNull(); @@ -113,112 +341,130 @@ class SyncService { 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)), - ); - } - - 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(); - - final tms = cJson['training_maxes'] as Map; - - 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(), - ); - - 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['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'], + if ((pushData['workouts'] as List).isNotEmpty || + pushData['user_stats'] != null) { + debugPrint('📤 Pushing data...'); + final response = await apiClient.sync( + lastSyncTimestamp: lastSync ?? '', + pushData: pushData, ); - } + await db.transaction(() async { + // Clean dirty flags + 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))); + } + + // PROCESS PULL DATA + if (response['pull_data'] != null) { + // Cycles Pull + 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(); + + final tms = cJson['training_maxes'] as Map; + 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(), + ); + + 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); + } + } + } + + // Workouts Pull - MIT DUPLIKAT-SCHUTZ + if (response['pull_data']['workouts'] != null) { + final pulledWorkouts = response['pull_data']['workouts'] as List; + debugPrint('📥 Pulled ${pulledWorkouts.length} workouts.'); + + for (var wJson in pulledWorkouts) { + final serverId = wJson['id'] as String; + final cycleId = wJson['cycle_id'] as String; + final week = wJson['week'] as int; + final day = wJson['day'] as int; + + // 1. Versuch: Match über Server ID + var existing = await (db.select(db.workouts) + ..where((w) => w.serverId.equals(serverId))) + .getSingleOrNull(); + + // 2. Versuch: Match über Logik (Cycle + Week + Day) + // Das verhindert Duplikate, wenn ServerID lokal noch fehlt + if (existing == null) { + final candidates = await (db.select(db.workouts) + ..where((w) => + w.cycleId.equals(cycleId) & + w.week.equals(week) & + w.day.equals(day))) + .get(); + if (candidates.isNotEmpty) { + existing = candidates.first; + debugPrint( + '🔄 Merging local workout ${existing.id} with server ID $serverId'); + } + } + + final companion = WorkoutsCompanion( + serverId: Value(serverId), + cycleId: Value(cycleId), + userId: Value(wJson['user_id']), + week: Value(week), + day: Value(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, stack) { debugPrint('❌ Sync failed: $e'); diff --git a/lib/src/shared/data/repositories/workout_repository.dart b/lib/src/shared/data/repositories/workout_repository.dart index f1fdbf7..b1cddc3 100644 --- a/lib/src/shared/data/repositories/workout_repository.dart +++ b/lib/src/shared/data/repositories/workout_repository.dart @@ -1,3 +1,109 @@ +// import 'package:flutter_riverpod/flutter_riverpod.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 db = ref.watch(appDatabaseProvider); +// final apiClient = ref.watch(apiClientProvider); +// return WorkoutRepository(db: db, apiClient: apiClient); +// }); + +// class WorkoutRepository { +// final AppDatabase db; +// final ApiClient apiClient; + +// WorkoutRepository({required this.db, required this.apiClient}); + +// Future> getAllWorkouts() async { +// return await db.select(db.workouts).get(); +// } + +// Future> getWorkoutsForCycle(String cycleId) async { +// return await (db.select(db.workouts) +// ..where((w) => w.cycleId.equals(cycleId))) +// .get(); +// } + +// Future> getCompletedWorkouts(String userId) async { +// return await (db.select(db.workouts) +// ..where((w) => w.userId.equals(userId) & w.completedAt.isNotNull())) +// .get(); +// } + +// Future saveWorkout(WorkoutCollection workout) async { +// final companion = workout.toCompanion(true).copyWith( +// updatedAt: Value(DateTime.now()), +// isDirty: const Value(true), +// ); +// await db.into(db.workouts).insertOnConflictUpdate(companion); +// } + +// Future createWorkout({ +// required String userId, +// required String cycleId, +// required int week, +// required int day, +// required List exercises, +// }) async { +// 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()), +// ); + +// 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 { +// 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({ +// required String cycleId, +// String? localCycleId, +// required int week, +// required int day, +// }) async { +// 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(); +// } +// } import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:drift/drift.dart'; import '../local/app_database.dart'; @@ -100,7 +206,8 @@ class WorkoutRepository { } return weekDayCheck & cycleCheck; - })) + }) + ..limit(1)) .getSingleOrNull(); } } diff --git a/lib/src/shared/domain/entities/exercise.freezed.dart b/lib/src/shared/domain/entities/exercise.freezed.dart index db27c4c..924ab22 100644 --- a/lib/src/shared/domain/entities/exercise.freezed.dart +++ b/lib/src/shared/domain/entities/exercise.freezed.dart @@ -25,8 +25,12 @@ mixin _$Exercise { double get bodyweightAtSession => throw _privateConstructorUsedError; List get sets => throw _privateConstructorUsedError; + /// Serializes this Exercise to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of Exercise + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $ExerciseCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -53,6 +57,8 @@ class _$ExerciseCopyWithImpl<$Res, $Val extends Exercise> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of Exercise + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -105,6 +111,8 @@ class __$$ExerciseImplCopyWithImpl<$Res> _$ExerciseImpl _value, $Res Function(_$ExerciseImpl) _then) : super(_value, _then); + /// Create a copy of Exercise + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -182,12 +190,14 @@ class _$ExerciseImpl implements _Exercise { const DeepCollectionEquality().equals(other._sets, _sets)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, exerciseId, exerciseName, bodyweightAtSession, const DeepCollectionEquality().hash(_sets)); - @JsonKey(ignore: true) + /// Create a copy of Exercise + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$ExerciseImplCopyWith<_$ExerciseImpl> get copyWith => @@ -219,8 +229,11 @@ abstract class _Exercise implements Exercise { double get bodyweightAtSession; @override List get sets; + + /// Create a copy of Exercise + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$ExerciseImplCopyWith<_$ExerciseImpl> get copyWith => throw _privateConstructorUsedError; } diff --git a/lib/src/shared/domain/entities/training_maxes.freezed.dart b/lib/src/shared/domain/entities/training_maxes.freezed.dart index 1d92794..19b9f4d 100644 --- a/lib/src/shared/domain/entities/training_maxes.freezed.dart +++ b/lib/src/shared/domain/entities/training_maxes.freezed.dart @@ -24,8 +24,12 @@ mixin _$TrainingMaxes { double get pullup => throw _privateConstructorUsedError; double get dip => throw _privateConstructorUsedError; + /// Serializes this TrainingMaxes to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of TrainingMaxes + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $TrainingMaxesCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -49,6 +53,8 @@ class _$TrainingMaxesCopyWithImpl<$Res, $Val extends TrainingMaxes> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of TrainingMaxes + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -92,6 +98,8 @@ class __$$TrainingMaxesImplCopyWithImpl<$Res> _$TrainingMaxesImpl _value, $Res Function(_$TrainingMaxesImpl) _then) : super(_value, _then); + /// Create a copy of TrainingMaxes + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -150,11 +158,13 @@ class _$TrainingMaxesImpl implements _TrainingMaxes { (identical(other.dip, dip) || other.dip == dip)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, squat, pullup, dip); - @JsonKey(ignore: true) + /// Create a copy of TrainingMaxes + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$TrainingMaxesImplCopyWith<_$TrainingMaxesImpl> get copyWith => @@ -183,8 +193,11 @@ abstract class _TrainingMaxes implements TrainingMaxes { double get pullup; @override double get dip; + + /// Create a copy of TrainingMaxes + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$TrainingMaxesImplCopyWith<_$TrainingMaxesImpl> get copyWith => throw _privateConstructorUsedError; } diff --git a/lib/src/shared/domain/entities/workout_set.freezed.dart b/lib/src/shared/domain/entities/workout_set.freezed.dart index 7040af7..f63d83f 100644 --- a/lib/src/shared/domain/entities/workout_set.freezed.dart +++ b/lib/src/shared/domain/entities/workout_set.freezed.dart @@ -30,8 +30,12 @@ mixin _$WorkoutSet { bool get completed => throw _privateConstructorUsedError; int? get rpe => throw _privateConstructorUsedError; + /// Serializes this WorkoutSet to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of WorkoutSet + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $WorkoutSetCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -64,6 +68,8 @@ class _$WorkoutSetCopyWithImpl<$Res, $Val extends WorkoutSet> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of WorkoutSet + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -146,6 +152,8 @@ class __$$WorkoutSetImplCopyWithImpl<$Res> _$WorkoutSetImpl _value, $Res Function(_$WorkoutSetImpl) _then) : super(_value, _then); + /// Create a copy of WorkoutSet + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -272,7 +280,7 @@ class _$WorkoutSetImpl implements _WorkoutSet { (identical(other.rpe, rpe) || other.rpe == rpe)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash( runtimeType, @@ -286,7 +294,9 @@ class _$WorkoutSetImpl implements _WorkoutSet { completed, rpe); - @JsonKey(ignore: true) + /// Create a copy of WorkoutSet + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$WorkoutSetImplCopyWith<_$WorkoutSetImpl> get copyWith => @@ -333,8 +343,11 @@ abstract class _WorkoutSet implements WorkoutSet { bool get completed; @override int? get rpe; + + /// Create a copy of WorkoutSet + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$WorkoutSetImplCopyWith<_$WorkoutSetImpl> get copyWith => throw _privateConstructorUsedError; } diff --git a/pubspec.lock b/pubspec.lock index 49b4e51..a916baf 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,26 +5,26 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f url: "https://pub.dev" source: hosted - version: "67.0.0" + version: "85.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + sha256: f4ad0fea5f102201015c9aae9d93bc02f75dd9491529a8c21f88d17a8523d44c url: "https://pub.dev" source: hosted - version: "6.4.1" + version: "7.6.0" analyzer_plugin: dependency: transitive description: name: analyzer_plugin - sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161" + sha256: a5ab7590c27b779f3d4de67f31c4109dbe13dd7339f86461a6f2a8ab2594d8ce url: "https://pub.dev" source: hosted - version: "0.11.3" + version: "0.13.4" args: dependency: transitive description: @@ -53,10 +53,10 @@ packages: dependency: transitive description: name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + sha256: "51dc711996cbf609b90cbe5b335bbce83143875a9d58e4b5c6d3c4f684d3dda7" url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.5.4" build_config: dependency: transitive description: @@ -77,26 +77,26 @@ packages: dependency: transitive description: name: build_resolvers - sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + sha256: ee4257b3f20c0c90e72ed2b57ad637f694ccba48839a821e87db762548c22a62 url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.5.4" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d" + sha256: "382a4d649addbfb7ba71a3631df0ec6a45d5ab9b098638144faf27f02778eb53" url: "https://pub.dev" source: hosted - version: "2.4.13" + version: "2.5.4" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0 + sha256: "85fbbb1036d576d966332a3f5ce83f2ce66a40bea1a94ad2d5fc29a19a0d3792" url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "9.1.2" built_collection: dependency: transitive description: @@ -221,18 +221,26 @@ packages: dependency: transitive description: name: custom_lint_core - sha256: a85e8f78f4c52f6c63cdaf8c872eb573db0231dcdf3c3a5906d493c1f8bc20e6 + sha256: "31110af3dde9d29fb10828ca33f1dce24d2798477b167675543ce3d208dee8be" url: "https://pub.dev" source: hosted - version: "0.6.3" + version: "0.7.5" + custom_lint_visitor: + dependency: transitive + description: + name: custom_lint_visitor + sha256: "4a86a0d8415a91fbb8298d6ef03e9034dc8e323a599ddc4120a0e36c433983a2" + url: "https://pub.dev" + source: hosted + version: "1.0.0+7.7.0" dart_style: dependency: transitive description: name: dart_style - sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" + sha256: "8a0e5fba27e8ee025d2ffb4ee820b4e6e2cf5e4246a6b1a477eb66866947e0bb" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "3.1.1" dio: dependency: "direct main" description: @@ -253,18 +261,18 @@ packages: dependency: "direct main" description: name: drift - sha256: df027d168a2985a2e9da900adeba2ab0136f0d84436592cf3cd5135f82c8579c + sha256: "540cf382a3bfa99b76e51514db5b0ebcd81ce3679b7c1c9cb9478ff3735e47a1" url: "https://pub.dev" source: hosted - version: "2.21.0" + version: "2.28.2" drift_dev: dependency: "direct dev" description: name: drift_dev - sha256: "623649abe932fc17bd32e578e7e05f7ac5e7dd0b33e6c8669a0634105d1389bf" + sha256: "68c138e884527d2bd61df2ade276c3a144df84d1adeb0ab8f3196b5afe021bd4" url: "https://pub.dev" source: hosted - version: "2.21.2" + version: "2.28.0" drift_flutter: dependency: "direct main" description: @@ -420,10 +428,10 @@ packages: dependency: "direct dev" description: name: freezed - sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 + sha256: "59a584c24b3acdc5250bb856d0d3e9c0b798ed14a4af1ddb7dc1c7b41df91c9c" url: "https://pub.dev" source: hosted - version: "2.5.2" + version: "2.5.8" freezed_annotation: dependency: "direct main" description: @@ -532,10 +540,10 @@ packages: dependency: "direct dev" description: name: json_serializable - sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b + sha256: c50ef5fc083d5b5e12eef489503ba3bf5ccc899e487d691584699b4bdefeea8c url: "https://pub.dev" source: hosted - version: "6.8.0" + version: "6.9.5" leak_tracker: dependency: transitive description: @@ -772,10 +780,10 @@ packages: dependency: transitive description: name: riverpod_analyzer_utils - sha256: "8b71f03fc47ae27d13769496a1746332df4cec43918aeba9aff1e232783a780f" + sha256: "837a6dc33f490706c7f4632c516bcd10804ee4d9ccc8046124ca56388715fdf3" url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.5.9" riverpod_annotation: dependency: "direct main" description: @@ -788,10 +796,10 @@ packages: dependency: "direct dev" description: name: riverpod_generator - sha256: d451608bf17a372025fc36058863737636625dfdb7e3cbf6142e0dfeb366ab22 + sha256: "120d3310f687f43e7011bb213b90a436f1bbc300f0e4b251a72c39bccb017a4f" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.6.4" rxdart: dependency: transitive description: @@ -868,10 +876,10 @@ packages: dependency: transitive description: name: shelf_web_socket - sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 + sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.0" shimmer: dependency: "direct main" description: @@ -889,18 +897,18 @@ packages: dependency: transitive description: name: source_gen - sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b" url: "https://pub.dev" source: hosted - version: "1.5.0" + version: "2.0.0" source_helper: dependency: transitive description: name: source_helper - sha256: "86d247119aedce8e63f4751bd9626fc9613255935558447569ad42f9f5b48b3c" + sha256: a447acb083d3a5ef17f983dd36201aeea33fedadb3228fa831f2f0c92f0f3aca url: "https://pub.dev" source: hosted - version: "1.3.5" + version: "1.3.7" source_span: dependency: transitive description: @@ -969,10 +977,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: d77749237609784e337ec36c979d41f6f38a7b279df98622ae23929c8eb954a4 + sha256: "57090342af1ce32bb499aa641f4ecdd2d6231b9403cea537ac059e803cc20d67" url: "https://pub.dev" source: hosted - version: "0.39.2" + version: "0.41.2" stack_trace: dependency: transitive description: