Files
eatvio_app/lib/features/diets/repositories/diet_repository.dart
2024-12-16 20:31:23 +07:00

107 lines
2.6 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;
}
}
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,
];
}