88 lines
2.7 KiB
Dart
88 lines
2.7 KiB
Dart
import 'dart:convert';
|
|
import 'package:drift/drift.dart';
|
|
import 'package:trainhub_flutter/data/database/app_database.dart';
|
|
import 'package:trainhub_flutter/domain/entities/training_plan.dart';
|
|
import 'package:trainhub_flutter/domain/entities/training_section.dart';
|
|
import 'package:trainhub_flutter/domain/entities/training_exercise.dart';
|
|
|
|
class TrainingPlanMapper {
|
|
TrainingPlanMapper._();
|
|
|
|
static TrainingPlanEntity toEntity(TrainingPlan row) {
|
|
final List<dynamic> sectionsJson =
|
|
row.sections != null && row.sections!.isNotEmpty
|
|
? jsonDecode(row.sections!) as List
|
|
: [];
|
|
return TrainingPlanEntity(
|
|
id: row.id,
|
|
name: row.name,
|
|
sections: sectionsJson
|
|
.map((s) => _mapSection(s as Map<String, dynamic>))
|
|
.toList(),
|
|
);
|
|
}
|
|
|
|
static TrainingSectionEntity _mapSection(Map<String, dynamic> json) {
|
|
final exercisesJson = json['exercises'] as List<dynamic>? ?? [];
|
|
return TrainingSectionEntity(
|
|
id: json['id'] as String? ?? '',
|
|
name: json['name'] as String? ?? '',
|
|
exercises: exercisesJson
|
|
.map((e) => _mapExercise(e as Map<String, dynamic>))
|
|
.toList(),
|
|
);
|
|
}
|
|
|
|
static TrainingExerciseEntity _mapExercise(Map<String, dynamic> json) {
|
|
return TrainingExerciseEntity(
|
|
instanceId: json['instanceId'] as String? ?? '',
|
|
exerciseId: json['exerciseId'] as String? ?? '',
|
|
name: json['name'] as String? ?? '',
|
|
sets: json['sets'] as int? ?? 3,
|
|
value: json['value'] as int? ?? 10,
|
|
isTime: json['isTime'] as bool? ?? false,
|
|
rest: json['rest'] as int? ?? 60,
|
|
);
|
|
}
|
|
|
|
static String sectionsToJson(List<TrainingSectionEntity> sections) {
|
|
return jsonEncode(sections.map((s) => _sectionToMap(s)).toList());
|
|
}
|
|
|
|
static Map<String, dynamic> _sectionToMap(TrainingSectionEntity section) {
|
|
return {
|
|
'id': section.id,
|
|
'name': section.name,
|
|
'exercises': section.exercises.map((e) => _exerciseToMap(e)).toList(),
|
|
};
|
|
}
|
|
|
|
static Map<String, dynamic> _exerciseToMap(TrainingExerciseEntity exercise) {
|
|
return {
|
|
'instanceId': exercise.instanceId,
|
|
'exerciseId': exercise.exerciseId,
|
|
'name': exercise.name,
|
|
'sets': exercise.sets,
|
|
'value': exercise.value,
|
|
'isTime': exercise.isTime,
|
|
'rest': exercise.rest,
|
|
};
|
|
}
|
|
|
|
static TrainingPlansCompanion toInsertCompanion(
|
|
String id, String name) {
|
|
return TrainingPlansCompanion.insert(
|
|
id: id,
|
|
name: name,
|
|
sections: const Value('[]'),
|
|
);
|
|
}
|
|
|
|
static TrainingPlansCompanion toUpdateCompanion(TrainingPlanEntity entity) {
|
|
return TrainingPlansCompanion(
|
|
name: Value(entity.name),
|
|
sections: Value(sectionsToJson(entity.sections)),
|
|
);
|
|
}
|
|
}
|