Skip to content

Commit 4e94f7d

Browse files
committed
Refactor favorite movies management to use a unified MoviesRepository
1 parent 8d02ca7 commit 4e94f7d

File tree

5 files changed

+127
-53
lines changed

5 files changed

+127
-53
lines changed

lib/app/cubit/favorite_movies_cubit.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import 'package:flutter_bloc/flutter_bloc.dart';
22
import 'package:tmdb_flutter/app/data/remote/models/movie_responses.dart';
33
import 'package:tmdb_flutter/app/cubit/favorite_movies_state.dart';
4-
import 'package:tmdb_flutter/app/data/repository/favorite_movies_repository.dart';
4+
import 'package:tmdb_flutter/app/data/repository/movies_repository.dart';
55

66
class FavoriteMoviesCubit extends Cubit<FavoriteMoviesState> {
77
FavoriteMoviesCubit(this._repository) : super(FavoriteMoviesInitial());
88

9-
final FavoriteMoviesRepository _repository;
9+
final MoviesRepository _repository;
1010

1111
Future<void> loadFavoriteMovies() async {
1212
try {

lib/app/cubit/home_cubit.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import 'package:flutter_bloc/flutter_bloc.dart';
2-
import 'package:tmdb_flutter/app/data/remote/movie_api.dart';
2+
import 'package:tmdb_flutter/app/data/repository/movies_repository.dart';
33
import 'package:tmdb_flutter/app/cubit/home_state.dart';
44

55
class HomeCubit extends Cubit<HomeState> {
6-
HomeCubit(this._movieAPI) : super(HomeInitial());
7-
final MovieAPI _movieAPI;
6+
HomeCubit(this._repository) : super(HomeInitial());
7+
final MoviesRepository _repository;
88

99
Future<void> loadHomeData() async {
1010
try {
1111
emit(HomeLoading());
1212

13-
final trendingMovies = await _movieAPI.getTrendingTodayMovies();
14-
final popularMovies = await _movieAPI.getPopularMovies();
15-
final upcomingMovies = await _movieAPI.getUpcomingMovies();
16-
final genres = await _movieAPI.getMovieGenres();
13+
final trendingMovies = await _repository.getTrendingTodayMovies();
14+
final popularMovies = await _repository.getPopularMovies();
15+
final upcomingMovies = await _repository.getUpcomingMovies();
16+
final genres = await _repository.getMovieGenres();
1717

1818
emit(
1919
HomeLoaded(

lib/app/data/repository/favorite_movies_repository.dart

Lines changed: 0 additions & 39 deletions
This file was deleted.
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
import 'package:tmdb_flutter/app/data/local/favorite_movies_local_data_source.dart';
2+
import 'package:tmdb_flutter/app/data/remote/models/movie_responses.dart';
3+
import 'package:tmdb_flutter/app/data/remote/movie_api.dart';
4+
5+
class MoviesRepository {
6+
MoviesRepository(this._localDataSource, this._movieAPI);
7+
8+
final FavoriteMoviesLocalDataSource _localDataSource;
9+
final MovieAPI _movieAPI;
10+
11+
// Favorite movies methods
12+
Future<void> addFavoriteMovie(Movie movie) async {
13+
await _localDataSource.addFavoriteMovie({
14+
'movieId': movie.id,
15+
'title': movie.title,
16+
'posterPath': movie.posterPath,
17+
'overview': movie.overview,
18+
'voteAverage': movie.voteAverage,
19+
'releaseDate': movie.releaseDate,
20+
});
21+
}
22+
23+
Future<void> removeFavoriteMovie(int movieId) async {
24+
await _localDataSource.removeFavoriteMovie(movieId);
25+
}
26+
27+
Future<List<Movie>> getFavoriteMovies() async {
28+
final movies = await _localDataSource.getFavoriteMovies();
29+
return movies
30+
.map((movie) => Movie(
31+
id: movie['movieId'] as int,
32+
title: movie['title'] as String,
33+
posterPath: movie['posterPath'] as String?,
34+
overview: movie['overview'] as String,
35+
voteAverage: movie['voteAverage'] as double,
36+
releaseDate: movie['releaseDate'] as String?,
37+
))
38+
.toList();
39+
}
40+
41+
Future<bool> isMovieFavorite(int movieId) async {
42+
return _localDataSource.isMovieFavorite(movieId);
43+
}
44+
45+
// Movie API methods
46+
Future<MoviesResponse> getTrendingTodayMovies({
47+
int page = MovieAPI.STARTING_PAGE_INDEX,
48+
String language = MovieAPI.LANGUAGE,
49+
}) async {
50+
return _movieAPI.getTrendingTodayMovies(page: page, language: language);
51+
}
52+
53+
Future<MoviesResponse> getPopularMovies({int page = 1}) async {
54+
return _movieAPI.getPopularMovies(page: page);
55+
}
56+
57+
Future<MoviesResponse> getUpcomingMovies({
58+
int page = MovieAPI.STARTING_PAGE_INDEX,
59+
String language = MovieAPI.LANGUAGE,
60+
}) async {
61+
return _movieAPI.getUpcomingMovies(page: page, language: language);
62+
}
63+
64+
Future<MoviesResponse> getTopRatedMovies({
65+
int page = MovieAPI.STARTING_PAGE_INDEX,
66+
String language = MovieAPI.LANGUAGE,
67+
}) async {
68+
return _movieAPI.getTopRatedMovies(page: page, language: language);
69+
}
70+
71+
Future<MoviesResponse> getNowPlayingMovies({
72+
int page = MovieAPI.STARTING_PAGE_INDEX,
73+
String language = MovieAPI.LANGUAGE,
74+
}) async {
75+
return _movieAPI.getNowPlayingMovies(page: page, language: language);
76+
}
77+
78+
Future<GenresResponse> getMovieGenres({
79+
String language = MovieAPI.LANGUAGE,
80+
}) async {
81+
return _movieAPI.getMovieGenres(language: language);
82+
}
83+
84+
Future<MovieDetailsResponse> getMovieDetails(int movieId) async {
85+
return _movieAPI.getMovieDetails(movieId);
86+
}
87+
88+
Future<CreditsResponse> getMovieCredits(int movieId) async {
89+
return _movieAPI.getMovieCredits(movieId);
90+
}
91+
92+
Future<MoviesResponse> getRecommendations({
93+
required int movieId,
94+
int page = MovieAPI.STARTING_PAGE_INDEX,
95+
String language = MovieAPI.LANGUAGE,
96+
}) async {
97+
return _movieAPI.getRecommendations(
98+
movieId: movieId,
99+
page: page,
100+
language: language,
101+
);
102+
}
103+
104+
Future<MoviesResponse> searchMovie({
105+
required String query,
106+
int page = MovieAPI.STARTING_PAGE_INDEX,
107+
}) async {
108+
return _movieAPI.searchMovie(query: query, page: page);
109+
}
110+
}

lib/app/injection.dart

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:tmdb_flutter/app/cubit/home_cubit.dart';
55
import 'package:tmdb_flutter/app/data/local/database_helper.dart';
66
import 'package:tmdb_flutter/app/data/local/favorite_movies_local_data_source.dart';
77
import 'package:tmdb_flutter/app/data/remote/movie_api.dart';
8-
import 'package:tmdb_flutter/app/data/repository/favorite_movies_repository.dart';
8+
import 'package:tmdb_flutter/app/data/repository/movies_repository.dart';
99

1010
final getIt = GetIt.instance;
1111

@@ -20,13 +20,16 @@ Future<void> configureDependencies() async {
2020
..registerFactory<FavoriteMoviesLocalDataSource>(
2121
() => FavoriteMoviesLocalDataSource(getIt<DatabaseHelper>()),
2222
)
23-
..registerFactory<FavoriteMoviesRepository>(
24-
() => FavoriteMoviesRepository(getIt<FavoriteMoviesLocalDataSource>()),
23+
..registerFactory<MoviesRepository>(
24+
() => MoviesRepository(
25+
getIt<FavoriteMoviesLocalDataSource>(),
26+
getIt<MovieAPI>(),
27+
),
2528
)
2629
..registerFactory<HomeCubit>(
27-
() => HomeCubit(getIt<MovieAPI>()),
30+
() => HomeCubit(getIt<MoviesRepository>()),
2831
)
2932
..registerFactory<FavoriteMoviesCubit>(
30-
() => FavoriteMoviesCubit(getIt<FavoriteMoviesRepository>()),
33+
() => FavoriteMoviesCubit(getIt<MoviesRepository>()),
3134
);
3235
}

0 commit comments

Comments
 (0)