• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

wger-project / flutter / 30854254088

03 Aug 2026 09:21PM UTC coverage: 40.895% (-15.0%) from 55.93%
30854254088

Pull #1260

github

web-flow
Merge d93794de5 into e3affdd4f
Pull Request #1260: WIP: health sync

9980 of 24404 relevant lines covered (40.89%)

1.72 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

76.92
/lib/database/powersync/database.dart
1
/*
2
 * This file is part of wger Workout Manager <https://github.com/wger-project>.
3
 * Copyright (c) 2020 - 2026 wger Team
4
 *
5
 * wger Workout Manager is free software: you can redistribute it and/or modify
6
 * it under the terms of the GNU Affero General Public License as published by
7
 * the Free Software Foundation, either version 3 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU Affero General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU Affero General Public License
16
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
 */
18

19
import 'package:drift/drift.dart';
20
import 'package:drift_sqlite_async/drift_sqlite_async.dart';
21
import 'package:flutter/material.dart' show TimeOfDay;
22
import 'package:flutter_riverpod/flutter_riverpod.dart';
23
import 'package:powersync/powersync.dart' as ps;
24
import 'package:wger/core/language.dart';
25
import 'package:wger/core/license.dart';
26
import 'package:wger/database/converters/date_only_text_converter.dart';
27
import 'package:wger/database/converters/exercise_image_style_converter.dart';
28
import 'package:wger/database/converters/json_map_converter.dart';
29
import 'package:wger/database/converters/measurement_chart_type_converter.dart';
30
import 'package:wger/database/converters/measurement_metric_type_converter.dart';
31
import 'package:wger/database/converters/time_of_day_converter.dart';
32
import 'package:wger/database/converters/utc_datetime_converter.dart';
33
import 'package:wger/database/converters/workout_impression_converter.dart';
34
import 'package:wger/features/account/models/user_profile.dart';
35
import 'package:wger/features/exercises/models/alias.dart';
36
import 'package:wger/features/exercises/models/category.dart';
37
import 'package:wger/features/exercises/models/comment.dart';
38
import 'package:wger/features/exercises/models/equipment.dart';
39
import 'package:wger/features/exercises/models/image.dart';
40
import 'package:wger/features/exercises/models/muscle.dart';
41
import 'package:wger/features/exercises/models/video.dart';
42
import 'package:wger/features/gallery/models/image.dart';
43
import 'package:wger/features/measurements/models/measurement_category.dart';
44
import 'package:wger/features/measurements/models/measurement_entry.dart';
45
import 'package:wger/features/nutrition/models/ingredient.dart';
46
import 'package:wger/features/nutrition/models/ingredient_image.dart';
47
import 'package:wger/features/nutrition/models/ingredient_weight_unit.dart';
48
import 'package:wger/features/nutrition/models/log.dart';
49
import 'package:wger/features/nutrition/models/meal.dart';
50
import 'package:wger/features/nutrition/models/meal_item.dart';
51
import 'package:wger/features/nutrition/models/nutritional_plan.dart';
52
import 'package:wger/features/routines/models/log.dart';
53
import 'package:wger/features/routines/models/repetition_unit.dart';
54
import 'package:wger/features/routines/models/routine.dart';
55
import 'package:wger/features/routines/models/session.dart';
56
import 'package:wger/features/routines/models/weight_unit.dart';
57

58
import 'powersync.dart';
59
import 'tables/exercise.dart';
60
import 'tables/gallery.dart';
61
import 'tables/ingredient.dart';
62
import 'tables/language.dart';
63
import 'tables/license.dart';
64
import 'tables/measurements.dart';
65
import 'tables/nutrition.dart';
66
import 'tables/routines.dart';
67
import 'tables/user_profile.dart';
68

69
part 'database.g.dart';
70

71
@DriftDatabase(
72
  tables: [
73
    // Core
74
    LanguageTable,
75
    LicenseTable,
76
    UserProfileTable,
77

78
    // Exercises
79
    ExerciseTable,
80
    ExerciseTranslationTable,
81
    ExerciseAliasTable,
82
    ExerciseCommentTable,
83
    MuscleTable,
84
    ExerciseMuscleM2N,
85
    ExerciseSecondaryMuscleM2N,
86
    EquipmentTable,
87
    ExerciseEquipmentM2N,
88
    ExerciseCategoryTable,
89
    ExerciseImageTable,
90
    ExerciseVideoTable,
91

92
    // Measurements
93
    MeasurementCategoryTable,
94
    MeasurementEntryTable,
95

96
    // Routines
97
    RoutineTable,
98
    WorkoutLogTable,
99
    WorkoutSessionTable,
100
    RoutineRepetitionUnitTable,
101
    RoutineWeightUnitTable,
102

103
    // Nutrition
104
    NutritionalPlanTable,
105
    IngredientTable,
106
    IngredientImageTable,
107
    IngredientWeightUnitTable,
108
    MealTable,
109
    MealItemTable,
110
    LogItemTable,
111

112
    // Gallery
113
    GalleryImageTable,
114
  ],
115
  //include: {'queries.drift'},
116
)
117
class DriftPowersyncDatabase extends _$DriftPowersyncDatabase {
118
  DriftPowersyncDatabase(super.e);
12✔
119

120
  @override
10✔
121
  int get schemaVersion => 1;
122

123
  @override
10✔
124
  MigrationStrategy get migration {
125
    return MigrationStrategy(
10✔
126
      onCreate: (m) async {
10✔
127
        // We don't have to call createAll(), PowerSync instantiates the schema
128
        // for us. We can use the opportunity to create fts5 indexes though.
129
      },
130
      onUpgrade: (m, from, to) async {
×
131
        if (from == 1) {
×
132
          // await createFts5Tables(
133
          //   db: this,
134
          //   tableName: 'todos',
135
          //   columns: ['description', 'list_id'],
136
          // );
137
        }
138
      },
139
    );
140
  }
141
}
142

143
final driftPowerSyncDatabase = Provider((ref) {
8✔
144
  return DriftPowersyncDatabase(
2✔
145
    DatabaseConnection.delayed(
2✔
146
      Future(() async {
4✔
147
        final database = await ref.read(powerSyncInstanceProvider.future);
6✔
148
        return SqliteAsyncDriftConnection(database);
×
149
      }),
150
    ),
151
  );
152
});
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc