Skip to content

설정한 조건을 바탕으로 OTT 작품을 추천해줍니다.

Notifications You must be signed in to change notification settings

f-lab-edu/TodayVideo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 

Repository files navigation

원하는 조건을 설정하여 랜덤하게 작품을 추천해주는 앱.

넷플릭스는 볼 건 많은데 볼 만한게 없어...

  • 주변에서 많이 듣던 농담 같은 진담,

    그래서 만들어 보았습니다.


디자인 레퍼런스

ProtoPie Cloud - movie ticketing app concept

ProtoPie Cloud - Movie rating app

ProtoPie Cloud - Cinema booking app


⚙️ 아키텍처

  • VIPER








    스플래시 화면

    ​ 데이터 없이 일정 시간 후 rootViewController를 선택 화면 1로 변경

    선택 화면 1

    ​ 데이터 없이 선택된 카테고리를 내부 저장하고 선택 화면 2로 이동

    선택 화면 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
      }
    }

💾 API

🧷 Git

브랜치 전략

  • Github-flow 적용
    • 이유
      • 소규모 프로젝트
      • QA 없음
      • 추후 확장성 고려

커밋 메세지 규칙

타입 사용
FEAT 새로운 기능 추가
FIX 오류 및 버그 수정
DOCS 문서 수정
STYLE 기능 외 수정
TEST 테스트 코드 추가 및 수정
RENAME 파일 및 폴더명 수정
REMOVE 파일 및 폴더 삭제

About

설정한 조건을 바탕으로 OTT 작품을 추천해줍니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published