65 lines
1.8 KiB
Dart
65 lines
1.8 KiB
Dart
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
import 'package:trainhub_flutter/injection.dart';
|
|
import 'package:trainhub_flutter/domain/entities/exercise.dart';
|
|
import 'package:trainhub_flutter/domain/entities/training_plan.dart';
|
|
import 'package:trainhub_flutter/domain/repositories/exercise_repository.dart';
|
|
import 'package:trainhub_flutter/domain/repositories/training_plan_repository.dart';
|
|
import 'package:trainhub_flutter/presentation/trainings/trainings_state.dart';
|
|
|
|
part 'trainings_controller.g.dart';
|
|
|
|
@riverpod
|
|
class TrainingsController extends _$TrainingsController {
|
|
late TrainingPlanRepository _planRepo;
|
|
late ExerciseRepository _exerciseRepo;
|
|
|
|
@override
|
|
Future<TrainingsState> build() async {
|
|
_planRepo = getIt<TrainingPlanRepository>();
|
|
_exerciseRepo = getIt<ExerciseRepository>();
|
|
final plans = await _planRepo.getAll();
|
|
final exercises = await _exerciseRepo.getAll();
|
|
return TrainingsState(plans: plans, exercises: exercises);
|
|
}
|
|
|
|
Future<TrainingPlanEntity> createPlan(String name) async {
|
|
final plan = await _planRepo.create(name);
|
|
await _reload();
|
|
return plan;
|
|
}
|
|
|
|
Future<void> deletePlan(String id) async {
|
|
await _planRepo.delete(id);
|
|
await _reload();
|
|
}
|
|
|
|
Future<void> addExercise({
|
|
required String name,
|
|
String? instructions,
|
|
String? tags,
|
|
String? videoUrl,
|
|
}) async {
|
|
await _exerciseRepo.create(
|
|
name: name,
|
|
instructions: instructions,
|
|
tags: tags,
|
|
videoUrl: videoUrl,
|
|
);
|
|
await _reload();
|
|
}
|
|
|
|
Future<void> updateExercise(ExerciseEntity exercise) async {
|
|
await _exerciseRepo.update(exercise);
|
|
await _reload();
|
|
}
|
|
|
|
Future<void> deleteExercise(String id) async {
|
|
await _exerciseRepo.delete(id);
|
|
await _reload();
|
|
}
|
|
|
|
Future<void> _reload() async {
|
|
state = await AsyncValue.guard(() => build());
|
|
}
|
|
}
|