Skip to content

Commit

Permalink
Try to generate ExerciseApiData objects only within the exercises model
Browse files Browse the repository at this point in the history
  • Loading branch information
rolandgeider committed Dec 28, 2023
1 parent c4577ca commit f951b61
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 20 deletions.
6 changes: 6 additions & 0 deletions lib/models/exercises/exercise.dart
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,12 @@ class Exercise extends Equatable {
this.authorsGlobal = authorsGlobal ?? [];
}

Exercise.fromApiDataString(String baseData, List<Language> languages)
: this.fromApiData(ExerciseApiData.fromString(baseData), languages);

Exercise.fromApiDataJson(Map<String, dynamic> baseData, List<Language> languages)
: this.fromApiData(ExerciseApiData.fromJson(baseData), languages);

Exercise.fromApiData(ExerciseApiData baseData, List<Language> languages) {
final List<Translation> translations = [];
for (final translationData in baseData.translations) {
Expand Down
21 changes: 7 additions & 14 deletions lib/providers/exercises.dart
Original file line number Diff line number Diff line change
Expand Up @@ -309,8 +309,7 @@ class ExercisesProvider with ChangeNotifier {
// Exercise is already known locally
if (exerciseDb != null) {
final nextFetch = exerciseDb.lastFetched.add(const Duration(hours: EXERCISE_FETCH_HOURS));
final exerciseDbData = ExerciseApiData.fromString(exerciseDb.data);
exercise = Exercise.fromApiData(exerciseDbData, _languages);
exercise = Exercise.fromApiDataString(exerciseDb.data, _languages);

// Fetch and update
if (nextFetch.isBefore(DateTime.now())) {
Expand All @@ -326,7 +325,7 @@ class ExercisesProvider with ChangeNotifier {
await (database.update(database.exercises)..where((e) => e.id.equals(exerciseId))).write(
ExercisesCompanion(
data: Value(jsonEncode(apiData)),
lastUpdate: Value(exerciseApiData.lastUpdateGlobal),
lastUpdate: Value(exercise.lastUpdateGlobal!),
lastFetched: Value(DateTime.now()),
),
);
Expand All @@ -342,16 +341,14 @@ class ExercisesProvider with ChangeNotifier {
final baseData = await baseProvider.fetch(
baseProvider.makeUrl(exerciseInfoUrlPath, id: exerciseId),
);

final exerciseData = ExerciseApiData.fromJson(baseData);
exercise = Exercise.fromApiData(exerciseData, _languages);
exercise = Exercise.fromApiDataJson(baseData, _languages);

if (exerciseDb == null) {
await database.into(database.exercises).insert(
ExercisesCompanion.insert(
id: exerciseData.id,
id: exercise.id!,
data: jsonEncode(baseData),
lastUpdate: exerciseData.lastUpdateGlobal,
lastUpdate: exercise.lastUpdateGlobal!,
lastFetched: DateTime.now()),
);
}
Expand Down Expand Up @@ -464,9 +461,7 @@ class ExercisesProvider with ChangeNotifier {
final exercisesDb = await database.select(database.exercises).get();
log('Loaded ${exercisesDb.length} exercises from cache');

exercises = exercisesDb
.map((e) => Exercise.fromApiData(ExerciseApiData.fromJson(json.decode(e.data)), _languages))
.toList();
exercises = exercisesDb.map((e) => Exercise.fromApiDataString(e.data, _languages)).toList();

// updateExerciseCache(database);
}
Expand All @@ -480,9 +475,7 @@ class ExercisesProvider with ChangeNotifier {
]);

final List<dynamic> exercisesData = data[0]['results'];
exercises = exercisesData
.map((e) => Exercise.fromApiData(ExerciseApiData.fromJson(e), _languages))
.toList();
exercises = exercisesData.map((e) => Exercise.fromApiDataJson(e, _languages)).toList();

// Insert new entries and update ones that have been edited
Future.forEach(exercisesData, (exerciseData) async {
Expand Down
5 changes: 2 additions & 3 deletions test/exercises/exercise_provider_load_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import 'dart:convert';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:wger/models/exercises/exercise.dart';
import 'package:wger/models/exercises/exercise_api.dart';
import 'package:wger/providers/exercises.dart';

import '../../test_data/exercises.dart';
Expand Down Expand Up @@ -63,8 +62,8 @@ void main() {
// arrange

// arrange and act
final exercise = Exercise.fromApiData(
ExerciseApiData.fromJson(tExerciseInfoMap),
final exercise = Exercise.fromApiDataJson(
tExerciseInfoMap,
const [tLanguage1, tLanguage2, tLanguage3],
);

Expand Down
5 changes: 2 additions & 3 deletions test/exercises/model_exercise_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import 'dart:convert';

import 'package:flutter_test/flutter_test.dart';
import 'package:wger/models/exercises/exercise.dart';
import 'package:wger/models/exercises/exercise_api.dart';

import '../../test_data/exercises.dart';
import '../fixtures/fixture_reader.dart';
Expand Down Expand Up @@ -31,8 +30,8 @@ void main() {
// arrange

// arrange and act
final exercise = Exercise.fromApiData(
ExerciseApiData.fromJson(tExerciseInfoMap),
final exercise = Exercise.fromApiDataJson(
tExerciseInfoMap,
const [tLanguage1, tLanguage2, tLanguage3],
);

Expand Down

0 comments on commit f951b61

Please sign in to comment.