-
주변에서 많이 듣던 농담 같은 진담,
그래서 만들어 보았습니다.
디자인 레퍼런스
ProtoPie Cloud - movie ticketing app concept
ProtoPie Cloud - Movie rating app
ProtoPie Cloud - Cinema booking app
-
VIPER
데이터 없이 일정 시간 후 rootViewController를 선택 화면 1로 변경
데이터 없이 선택된 카테고리를 내부 저장하고 선택 화면 2로 이동
TMDB - Genres - Movie/TV Series 에서 데이터를 받아 장르 카테고리 노출
선택된 장르를 내부 저장하여 추천작 화면으로 이동
struct GenresRequest: Encodable { let language: String = "ko" }
struct GenresResponse: Decodable { let id: Int let name: String }
TMDB - Discover - Movie/TV Series 에서 데이터를 받아 추천작 노출
작품이 선택되면 상세 화면으로 이동
struct RecommendRequest: Encodable { let language: String = "ko-KR" let page: Int let voteCount: Int = 7 let watchRegion: String = "KR" let withGenres: Int let withWatchProviders: Int = 8 }
struct RecommendMovieResponse: Decodable { let results: [Items] struct Items: Decodable { let genreIds: [Int] let id: Int let posterPath: String let title: String let releaseDate: String let totlaPages: Int } } struct RecommendTVResponse: Decodable { let results: [Items] struct Items: Decodable { let genreIds: [Int] let id: Int let posterPath: String let name: String let firstAirDate: String let totlaPages: Int } }
TMDB - Movies/TV Series
Details, Credits, ReleaseDates/ContentRatings, Videos 동시 호출하여 받은 데이터 노출
struct DetailMovieRequest: Encodable { let movieId: Int let language: String = "ko-KR" } struct DetailTVRequest: Encodable { let seriesId: Int let language: String = "ko-KR" }
struct DetailMovieResponse: Decodable { let backDropPath: String let genres:[GenresItems] let id: Int let overview: String let releaseDate: String let title: String let runtime: Int struct GenresItems: Decodable { let id: Int let name: String } } struct DetailTVResponse: Decodable { let backDropPath: String let genres:[GenresItems] let id: Int let overview: String let firstAirDate: String let name: String let lastEpisodeToAirruntime: LastEpisodeToAirruntimeItem struct GenresItems: Decodable { let id: Int let name: String } struct LastEpisodeToAirruntimeItem: Decodable { let runtime: Int } }
출연진 조회
struct CreditsMovieRequest: Encodable { let movieId: Int let language: String = "ko-KR" } struct CreditsTVRequest: Encodable { let seriesId: Int let language: String = "ko-KR" }
struct CreditsResponse: Decodable { let cast: [Items] struct Items: Decodable { let name: String let profielPath: String let character: String } }
시청 연령 조회
struct CertificationMovieRequest: Encodable { let movieId: Int } struct CertificationTVRequest: Encodable { let seriesId: Int }
struct CertificationMovieResponse: Decodable { let results: [Itmes] struct Itmes: Decodable { let iso: String let releaseDates: [ReleaseDates] struct ReleaseDates: Decodable { let certification: String } } } struct CertificationTVResponse: Decodable { let results: [Itmes] struct Itmes: Decodable { let iso: String let rating: String } }
영상 조회
struct VideoMovieRequest: Encodable { let movieId: Int let language: String = "ko-KR" } struct VideoTVRequest: Encodable { let seriesId: Int let language: String = "ko-KR" }
struct VideoMovieResponse: Decodable { let results: [Itmes] struct Itmes: Decodable { let site: String let key: String } }
-
TMDB
-> https://developer.themoviedb.org/reference/intro/getting-started
-
장르 선택 화면
-> https://developer.themoviedb.org/reference/genre-movie-list
-> https://developer.themoviedb.org/reference/genre-tv-list
request
parameter value language ko response
key type genres Array key type id Int name String
-
추천작 화면
-> https://developer.themoviedb.org/reference/discover-movie
-> https://developer.themoviedb.org/reference/discover-tv
request
parameter value language ko-KR page 랜덤 숫자 넣기 vote_count.gte 7 watch_region KR with_genres 장르 필터 값 넣기 with_watch_providers 8 response
key type results Array key type genre_ids [Int] id Int poster_path String https://image.tmdb.org/t/p/w500/{poster_path} title/name String release_date/first_air_date String total_pages Int
-
상세 화면
-> https://developer.themoviedb.org/reference/movie-details
-> https://developer.themoviedb.org/reference/tv-series-details
request
parameter value movie_id/series_id 추천작 화면에서 터치된 작품 ID language ko-KR response
key type backdrop_path String https://image.tmdb.org/t/p/w500/{backdrop_path} genres Array id Int overview String release_date/first_air_date String title/name String runtime Int 영화 상세 화면용 last_episode_to_airruntime Object TV 시리즈 상세 화면용 *genres
key type id Int name String *last_episode_to_airruntime
key type runtime Int
-> https://developer.themoviedb.org/reference/movie-credits
-> https://developer.themoviedb.org/reference/tv-series-credits
출연진
request
parameter value movie_id/series_id 추천작 화면에서 터치된 작품 ID language ko-KR response
key type cast Array key type name String profile_path String https://image.tmdb.org/t/p/w500/{profile_path} character String
-> https://developer.themoviedb.org/reference/movie-release-dates
-> https://developer.themoviedb.org/reference/tv-series-content-ratings
시청 연령
request
parameter value movie_id/series_id 추천작 화면에서 터치된 작품 ID response
key type results Array key type iso_3166_1 String KR인 것만 사용 release_date Array 영화 상세 화면용 rating String TV 시리즈 상세 화면용 *release_date
key type certification String
-> https://developer.themoviedb.org/reference/movie-videos
-> https://developer.themoviedb.org/reference/tv-series-videos
영상
request
parameter value movie_id/series_id 추천작 화면에서 터치된 작품 ID language ko-KR response
key type results Array 비어있으면 view 숨김처리 key type site String YouTube인 것만 사용 key String https://www.youtube.com/watch?v={key}
-
- Github-flow 적용
- 이유
- 소규모 프로젝트
- QA 없음
- 추후 확장성 고려
- 이유
타입 | 사용 |
---|---|
FEAT | 새로운 기능 추가 |
FIX | 오류 및 버그 수정 |
DOCS | 문서 수정 |
STYLE | 기능 외 수정 |
TEST | 테스트 코드 추가 및 수정 |
RENAME | 파일 및 폴더명 수정 |
REMOVE | 파일 및 폴더 삭제 |