forked from eatvio/eatvio_app
123 lines
2.9 KiB
Dart
123 lines
2.9 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:eatvio_app/features/diets/models/diet_likes_model.dart';
|
|
import 'package:eatvio_app/features/diets/services/diet_service.dart';
|
|
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
|
|
import 'package:equatable/equatable.dart';
|
|
|
|
class DietRepository {
|
|
DietRepository({required this.dietsService});
|
|
final DietService dietsService;
|
|
|
|
final _dietLikeStateStreamController = StreamController<LikesState>.broadcast();
|
|
final _dietFavoriteStateStreamController = StreamController<FavoriteState>.broadcast();
|
|
final _dietCommentsStateStreamController = StreamController<CommentsState>.broadcast();
|
|
Stream get dietLikeState => _dietLikeStateStreamController.stream;
|
|
Stream get dietFavoriteState => _dietFavoriteStateStreamController.stream;
|
|
Stream get dietCommentsState => _dietCommentsStateStreamController.stream;
|
|
|
|
Future<DietLikesModel> likeDiet(int id) async {
|
|
try {
|
|
return await dietsService.likeDiet(id: id);
|
|
} catch (e) {
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<Diet> getDiet(int id) async {
|
|
try {
|
|
final diet = await dietsService.getDiet(id: id);
|
|
return diet;
|
|
} catch (e) {
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<Diet> addToFavorite(int id) async {
|
|
try {
|
|
return await dietsService.addToFavorite(id: id);
|
|
} catch (e) {
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<Diet> removeFromFavorite(int id) async {
|
|
try {
|
|
return await dietsService.removeFromFavorite(id: id);
|
|
} catch (e) {
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<void> startDiet(int id, String date) async {
|
|
try {
|
|
return await dietsService.startDiet(id: id, body: {'date': date});
|
|
} catch (e) {
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<void> cancelDiet(int id) async{
|
|
try {
|
|
return await dietsService.cancelDiet(id: id);
|
|
} catch (e) {
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
void emitLikesStateToFeed(LikesState state) => _dietLikeStateStreamController.add(state);
|
|
void emitFavoriteStateToFeed(FavoriteState state) => _dietFavoriteStateStreamController.add(state);
|
|
void emitCommentsStateToFeed(CommentsState state) => _dietCommentsStateStreamController.add(state);
|
|
}
|
|
|
|
class LikesState extends Equatable {
|
|
final bool wasLikedByMe;
|
|
final int totalLikes;
|
|
final int index;
|
|
|
|
LikesState({
|
|
required this.wasLikedByMe,
|
|
required this.totalLikes,
|
|
required this.index,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [
|
|
wasLikedByMe,
|
|
totalLikes,
|
|
index,
|
|
];
|
|
}
|
|
|
|
class FavoriteState extends Equatable {
|
|
final bool isFavorite;
|
|
final int index;
|
|
|
|
FavoriteState({
|
|
required this.isFavorite,
|
|
required this.index,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [
|
|
isFavorite,
|
|
index,
|
|
];
|
|
}
|
|
|
|
class CommentsState extends Equatable {
|
|
final int index;
|
|
final int totalComments;
|
|
|
|
CommentsState({
|
|
required this.index,
|
|
required this.totalComments,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [
|
|
index,
|
|
totalComments,
|
|
];
|
|
}
|