Initial commit
This commit is contained in:
87
lib/data/mappers/training_plan_mapper.dart
Normal file
87
lib/data/mappers/training_plan_mapper.dart
Normal file
@@ -0,0 +1,87 @@
|
||||
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)),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user