/t-order-frontend

2021 티오더 프론트엔드 개발자 채용 과제

Primary LanguageTypeScript

t오더 프론트엔드개발자 기술 면접 과제

프로젝트 실행

npm i
npm i json-server
npm run serve
npm start

npm i : 프로젝트 설치
npm i json-server : json-server 설치
npm run serve : mock server 실행(json-server / port:3001) npm start : 프로젝트 실행

폴더 구조

├─ public
│   ├─ assets
│       ├─ icon
│       └─ img
└─ src
   ├─ components
   │   ├─ @share
   │   │   ├─ Button
   │   │   ├─ Layout
   │   │   └─ Toast
   │   ├─ Cart
   │   ├─ Nav
   │   └─ Product
   ├─ constants
   ├─ db
   ├─ features
   └─ types

@share : 공통으로 쓰이는 버튼, 토스트, 헤더, 푸터, 전체 레이아웃 등에 쓰이는 컴포넌트 폴더
Cart : 장바구니 폴더
Nav : 헤더에 있는 카테고리 네비게이션 폴더
Product : 상품 리스트 폴더
constants : palette 처럼 전역 상수로 쓰일 요소들을 모을 폴더
db : mock server 데이터
features : redux-toolkit 전역 상태관리 폴더
types : 공용 타입 지정 폴더

기술 스택

  • build : create-react-app
  • language : typescript
  • SPA framework : react
  • CSS in JS : styled-components, scss
  • global state management : react-redux, redux-toolkit

요구사항

상품 리스트 페이지

  • 상품 리스트를 조회 할 수 있다.
  • 상품은 좌측으로 정렬된다.
  • 단일 상품을 장바구니에 추가 할 수 있다.

장바구니

  • 현재 장바구니에 담긴 상품들을 조회 할 수 있다.
  • 현재 장바구니에 담긴 상품들을 N 개 주문 할 수 있다.
  • 현재 장바구니에 담긴 상품들을 N 개 제거 할 수 있다.
  • 최종 결제 금액을 조회 할 수 있다.
  • 증가한 장바구니 가로 영역만큼 상품 리스트 가로 비율이 감소한다.

주문

  • 장바구니에 담긴 상품들을 제거한다.
  • 장바구니를 닫는다.
  • "주문이 완료되었습니다" 메시지 박스가 나타나며, 3초 후 사라진다.
  • 상품 리스트의 가로 비율이 원상 복구 된다.

가산 사항

  • 카테고리 클릭 시 ScrollSpy 기능을 제공한다.

todos

  • 상품이 품절일 때는 경고메시지를 띄우며 장바구니를 열지 않아야 한다.
  • 장바구니의 모든 상품이 제거되면, 장바구니가 닫혀야 한다.
  • 장바구니가 비어있을 때 주문하기를 누르면, 장바구니가 비어있다는 알림이 뜨고, 주문하기 기능이 작동하지 않아야 한다.