forked from eatvio/eatvio_app
69 lines
2.3 KiB
Dart
69 lines
2.3 KiB
Dart
import 'dart:async';
|
|
import 'package:eatvio_app/features/diets/repositories/diet_repository.dart';
|
|
import 'package:eatvio_app/features/feed/models/plan_pagination_model.dart';
|
|
import 'package:eatvio_app/features/plans/models/chosen_plan_model.dart';
|
|
import 'package:eatvio_app/features/plans/services/plan_service.dart';
|
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
|
|
|
class PlanRepository {
|
|
final PlanService planService;
|
|
|
|
PlanRepository({required this.planService});
|
|
|
|
final _planLikeStateStreamController = StreamController<LikesState>.broadcast();
|
|
final _planFavoriteStateStreamController = StreamController<FavoriteState>.broadcast();
|
|
final _planCommentsStateStreamController = StreamController<CommentsState>.broadcast();
|
|
Stream get planLikeState => _planLikeStateStreamController.stream;
|
|
Stream get planFavoriteState => _planFavoriteStateStreamController.stream;
|
|
Stream get planCommentsState => _planCommentsStateStreamController.stream;
|
|
|
|
Future<PlanModel> getPlan(String slug) async {
|
|
try {
|
|
return planService.getPlan(slug);
|
|
} catch (e, s) {
|
|
await Sentry.captureException(e, stackTrace: s);
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<void> likePlan(String slug) async {
|
|
try {
|
|
await planService.likePlan(slug: slug);
|
|
} catch (e, s) {
|
|
await Sentry.captureException(e, stackTrace: s);
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<void> addToFavorite(String slug) async {
|
|
try {
|
|
await planService.addToFavorite(slug: slug);
|
|
} catch (e, s) {
|
|
await Sentry.captureException(e, stackTrace: s);
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<void> removeFromFavorite(String slug) async {
|
|
try {
|
|
await planService.removeFromFavorite(slug: slug);
|
|
} catch (e, s) {
|
|
await Sentry.captureException(e, stackTrace: s);
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<ChosenPlanModel> chosePlan(String slug, Map<String, dynamic> option ) async {
|
|
try {
|
|
return await planService.chosePlan(slug: slug, option: option);
|
|
} catch (e, s) {
|
|
await Sentry.captureException(e, stackTrace: s);
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
void emitLikesStateToFeed(LikesState state) => _planLikeStateStreamController.add(state);
|
|
void emitFavoriteStateToFeed(FavoriteState state) => _planFavoriteStateStreamController.add(state);
|
|
void emitCommentsStateToFeed(CommentsState state) => _planCommentsStateStreamController.add(state);
|
|
}
|