FE 레벨1 영화관 미션
// 빌드
npm run build
// 서버 열기
npm run start
// cypress
npm run test-e2e
1단계
- api 데이터 받아오기
- 더보기 버튼 숨길지 보일지 결정
- 데이터 관리
- 스택으로 관리
- 이전 데이터와 합쳐짐
- DataStateStore의 데이터를 받아와서 영화 리스트를 보여줌
- 스크롤: 스롤링 기능
- enter 키, 검색 아이콘 클릭 시 검색 진행
- 검색 결과에 따라 영화 리스트와 타이틀 변경
- api를 통해 데이터를 불어올때, 다음 검색 대상이 존재하는지 여부에 따라 더보기 버튼을 숨기거나 보여줌
2단계
- 모달창
- 모달 창 닫기
- UX 고려
- ex: esc키,백그라운드 클릭 시
- 정보 목록
- 포스터
- 제목
- 장르
- 별점
- 설명
- 내 별점 (별점 , 점수)
- http 오류 또는 정보 없을 경우 오류 화면
- 위치: 영화 상세 정보 모달창
- 새로 고침 하더라도, 유저가 남긴 별점 유지 (로컬 스토리시 사용)
- 별점 클릭 해서 별점 반영
- 별점은 5개로 구성
- 별점 별, 영화 평 보여주기
- 2점: 최악이예요
- 4점: 별로예요
- 6점: 보통이에요
- 8점: 재미있어요
- 10점: 명작이에요
- 더 보기 버튼이 아닌 스크롤로 영화 데이터를 불러와 리스트에 추가
- 더 이상 불러올 데이터가 없을 경우 이에 대한 컴포넌트 추가
- 더 이상 블러올 데이터가 없을 경우 api 요청 하지 않기
-
영화 목록
- 데스크탑: 한 줄에 4개
- 태블릿 : 한 줄에 3개
- 폰: 한 줄에 2개
-
검색 입력창
폴더 | 설명 |
---|---|
components | 컴포넌트 관리 |
component이름/controller | 해당 컴포넌트에 대한 컨트롤러 관리 |
constants | 반복적으로 사용하는 상수 관리 |
images | 이미지 파일 관리 |
styles | css 파일 관리 |
type | 타입 관리 |
utils | 유틸 관리 |
📂 폴더 구조 보기
📦src
┣ 📂components
┃ ┣ 📂error
┃ ┃ ┣ 📂controller
┃ ┃ ┃ ┗ 📜ErrorViewController.ts
┃ ┃ ┣ 📜ErrorBox.ts
┃ ┃ ┣ 📜ErrorImg.ts
┃ ┃ ┣ 📜ErrorMessage.ts
┃ ┃ ┣ 📜ErrorView.ts
┃ ┃ ┣ 📜index.ts
┃ ┃ ┗ 📜NullElementError.ts
┃ ┣ 📂modal
┃ ┃ ┣ 📂controller
┃ ┃ ┃ ┗ 📜ModalContainerController.ts
┃ ┃ ┣ 📜AlertModal.ts
┃ ┃ ┣ 📜index.ts
┃ ┃ ┣ 📜ModalCloseButton.ts
┃ ┃ ┣ 📜ModalContainer.ts
┃ ┃ ┣ 📜MovieInfoModal.ts
┃ ┃ ┗ 📜ToastModal.ts
┃ ┣ 📂movie
┃ ┃ ┣ 📂controller
┃ ┃ ┃ ┗ 📜ChangedMovieListRenderer.ts
┃ ┃ ┣ 📜index.ts
┃ ┃ ┣ 📜MovieCard.ts
┃ ┃ ┣ 📜MovieImg.ts
┃ ┃ ┣ 📜MovieItem.ts
┃ ┃ ┣ 📜MovieList.ts
┃ ┃ ┣ 📜MovieListContainer.ts
┃ ┃ ┣ 📜MovieListLastItem.ts
┃ ┃ ┣ 📜MovieListTitle.ts
┃ ┃ ┣ 📜MovieScore.ts
┃ ┃ ┣ 📜MovieTitle.ts
┃ ┃ ┣ 📜NoMoreMovieDataItem.ts
┃ ┃ ┗ 📜NoneMovieItem.ts
┃ ┣ 📂searching
┃ ┃ ┣ 📜index.ts
┃ ┃ ┣ 📜SearchBox.ts
┃ ┃ ┗ 📜SearchBoxResponsiveHandler.ts
┃ ┣ 📂skeleton
┃ ┃ ┣ 📂controller
┃ ┃ ┃ ┗ 📜SkeletonController.ts
┃ ┃ ┣ 📜index.ts
┃ ┃ ┣ 📜SkeletonCard.ts
┃ ┃ ┣ 📜SkeletonInfo.ts
┃ ┃ ┣ 📜SkeletonList.ts
┃ ┃ ┣ 📜SkeletonListContainer.ts
┃ ┃ ┣ 📜SkeletonMovieImg.ts
┃ ┃ ┣ 📜SkeletonMovieTitle.ts
┃ ┃ ┗ 📜SkeletonTextBox.ts
┃ ┣ 📂userScore
┃ ┣ 📜Header.ts
┃ ┣ 📜index.ts
┃ ┣ 📜Label.ts
┃ ┣ 📜RefreshButton.ts
┃ ┗ 📜UserScore.ts
┣ 📂constants
┃ ┣ 📜component.ts
┃ ┣ 📜errorMessage.ts
┃ ┣ 📜index.ts
┃ ┗ 📜system.ts
┣ 📂images
┃ ┣ 📜circle-exclamation.svg
┃ ┣ 📜logo.png
┃ ┣ 📜logo_small.png
┃ ┣ 📜no_image.svg
┃ ┣ 📜no_movie.svg
┃ ┣ 📜search_button.png
┃ ┣ 📜star_empty.png
┃ ┣ 📜star_filled.png
┃ ┣ 📜tape.svg
┃ ┣ 📜trash.svg
┃ ┣ 📜triangle_exclamation.svg
┃ ┗ 📜xmark.svg
┣ 📂model
┃ ┣ 📜APIClient.ts
┃ ┣ 📜APIHandlerForScroll.ts
┃ ┣ 📜DataFetcher.ts
┃ ┣ 📜DataStateStore.ts
┃ ┣ 📜index.ts
┃ ┗ 📜LocalStorageHandlerForUserScore.ts
┣ 📂styles
┃ ┣ 📜common.css
┃ ┣ 📜error.css
┃ ┣ 📜header.css
┃ ┣ 📜modal.css
┃ ┣ 📜movie-info-modal.css
┃ ┣ 📜movie-list.css
┃ ┣ 📜refresh-button.css
┃ ┣ 📜reset.css
┃ ┣ 📜search-box.css
┃ ┣ 📜skeleton.css
┃ ┗ 📜style-constants.css
┣ 📂type
┃ ┣ 📜global.d.ts
┃ ┗ 📜movie.ts
┣ 📂utils
┃ ┣ 📜changeElementClass.ts
┃ ┣ 📜createElementWithAttribute.ts
┃ ┣ 📜debouneFunc.ts
┃ ┣ 📜ElementFinder.ts
┃ ┣ 📜handleFetchData.ts
┃ ┣ 📜index.ts
┃ ┣ 📜ScrollController.ts
┃ ┣ 📜ScrollObserver.ts
┃ ┗ 📜WindowResponsiveHandler.ts
┣ 📜app.ts
┣ 📜config.ts
┗ 📜index.js