Skip to content

Commit

Permalink
Merge pull request #33 from 90lucasgabriel/feature/WJ-18
Browse files Browse the repository at this point in the history
WJ-18 - Create and connect TMDB API
  • Loading branch information
90lucasgabriel committed Aug 24, 2020
2 parents a5ae5bf + 7440f98 commit 1453694
Show file tree
Hide file tree
Showing 10 changed files with 139 additions and 0 deletions.
1 change: 1 addition & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
REACT_APP_IS_PRODUCTION=
REACT_APP_API_URL=
REACT_APP_TMDB_API_URL=https://api.themoviedb.org/3
REACT_APP_TMDB_API_KEY=
REACT_APP_TMDB_IMAGE_URL=https://image.tmdb.org/t/p
15 changes: 15 additions & 0 deletions src/domains/Movie/api/Popular/RawResponse.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
export default interface RawResponse {
poster_path?: string;
overview: string;
release_date: string;
genre_ids: number[];
id: number;
original_title: string;
original_language: string;
title: string;
backdrop_path?: string;
popularity: number;
vote_count: number;
video: boolean;
vote_average: number;
}
13 changes: 13 additions & 0 deletions src/domains/Movie/api/Popular/Response.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export default interface Response {
poster?: string;
backdrop?: string;
overview: string;
releaseDate: string;
genreIds: number[];
id: number;
originalTitle: string;
title: string;
popularity: number;
voteCount: number;
voteAverage: number;
}
45 changes: 45 additions & 0 deletions src/domains/Movie/api/Popular/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import tmdb from 'services/api/tmdb';

import RawResponse from 'domains/Movie/api/Popular/RawResponse';
import Response from 'domains/Movie/api/Popular/Response';
import formatDate from 'shared/utils/formatDate';
import formatTmdbImage from 'shared/utils/formatTmdbImage';

const Popular = async (): Promise<Response[]> => {
const response = await rawPopular();

return parseResponse(response);
};

export const rawPopular = async (): Promise<RawResponse[]> => {
const response = await tmdb.get('/movie/popular');

return response.data.results;
};

const parseResponse = (rawResponse: RawResponse[]): Response[] => {
let response = [] as Response[];

rawResponse.forEach(movie => {
const parsedMovie = {
overview: movie.overview,
genreIds: movie.genre_ids,
id: movie.id,
originalTitle: movie.original_title,
title: movie.title,
popularity: movie.popularity,
voteCount: movie.vote_count,
voteAverage: movie.vote_average,

releaseDate: formatDate({ value: movie.release_date }),
poster: formatTmdbImage({ value: movie.poster_path }),
backdrop: formatTmdbImage({ value: movie.backdrop_path }),
} as Response;

response = [...response, parsedMovie];
});

return response;
};

export default Popular;
17 changes: 17 additions & 0 deletions src/services/api/tmdb.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import axios from 'axios';

const tmdb = axios.create({
baseURL: process.env.REACT_APP_TMDB_API_URL,
});

tmdb.interceptors.request.use(config => {
const params = config.params || {};

params.api_key = process.env.REACT_APP_TMDB_API_KEY;
params.language = 'pt-BR';
params.region = 'BR';

return { ...config, params };
});

export default tmdb;
3 changes: 3 additions & 0 deletions src/shared/utils/dtos/FormatDate.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default interface FormatDate {
value?: string;
}
6 changes: 6 additions & 0 deletions src/shared/utils/dtos/FormatTmdbImage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import TmdbImageSize from 'shared/utils/enums/TmdbImageSize';

export default interface FormatTmdbImage {
value?: string;
size?: TmdbImageSize;
}
8 changes: 8 additions & 0 deletions src/shared/utils/enums/TmdbImageSize.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
enum TmdbImageSize {
SMALL = 'w300',
MEDIUM = 'w780',
LARGE = 'w1280',
ORIGINAL = 'original',
}

export default TmdbImageSize;
16 changes: 16 additions & 0 deletions src/shared/utils/formatDate.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import FormatDate from 'shared/utils/dtos/FormatDate';

const formatDate = ({ value }: FormatDate): string => {
if (!value) {
return '-';
}

const date = new Date(value);
date.setDate(date.getDate() + 1);

const formattedDate = Intl.DateTimeFormat('pt-BR').format(date);

return formattedDate;
};

export default formatDate;
15 changes: 15 additions & 0 deletions src/shared/utils/formatTmdbImage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import FormatTmdbImage from 'shared/utils/dtos/FormatTmdbImage';
import TmdbImageSize from 'shared/utils/enums/TmdbImageSize';

const formatTmdbImage = ({
value,
size = TmdbImageSize.MEDIUM,
}: FormatTmdbImage): string | null => {
if (!value) {
return null;
}

return `${process.env.REACT_APP_TMDB_IMAGE_URL}/${size}${value}`;
};

export default formatTmdbImage;

0 comments on commit 1453694

Please sign in to comment.