이번 과제는 더티코드를 클린코드의 형태로 개선을 하는 과제입니다. 주어진 테스트를 통과하면서 원래 기능과 동일한 동작을 하는 코드를 만들어주세요. basic과제는 제공되는 더티코드를 클린코드와 리팩토링 원칙에 입각해서 더 나은 코드로 만들어보세요. 주어진 테스트를 참고삼아 좋은 이름, 좋은 모양, 좋은 구조를 가지는 코드로 만들어 보세요.
[필수조건]
- Prettier와 ESLint를 설치해서 적용할 것
- 테스트 코드 모두 통과할 것
- = 기존 기능과 동일하게 동작할 것
- = 어플리케이션 요구사항을 모두 만족할 것
- 상품
- 상품1 - 10,000원
- 상품2 - 20,000원
- 상품3 - 30,000원
- 상품 관리
- 상품을 장바구니에 추가할 수 있어야 한다.
- 장바구니에서 상품을 제거할 수 있어야 한다.
- 각 상품의 수량을 변경할 수 있어야 한다.
- 재고가 부족한 상품은 장바구니에 담을 수 없습니다.
- 가격 계산
- 장바구니 내 모든 상품의 총액을 계산해야 한다.
- 개별 상품의 가격과 수량에 따른 소계를 표시해야 한다.
- 상품1 > 10개 이상 구매 시 10% 할인
- 상품2 > 10개 이상 구매 시 15% 할인
- 상품3 > 10개 이상 구매 시 20% 할인
- 상품 종류와 상관 없이, 30개 이상 구매할 경우 25% 할인
- 화요일에는 특별할인 10%
- 임의의 시간마다 깜짝세일 20%, 추천세일 5%
- 기본 기능
- 장바구니에 상품 추가 기능
- 장바구니에서 상품 제거 기능
- 상품 수량 변경 기능
- 장바구니 내역 조회 기능
- 총액 계산 기능
- 상품
심화과제는 기본과제에서 작성한 코드를 기술고도화를 하는 것입니다. 바닐라 자바스크립트로 되어 있는 코드를 유지보수하기에 유리한 기술스택(React + Typescript)으로 고도화 리팩토링을 진행해주세요. 우리의 목표는 앞으로 유지보수를 더 잘할 수 있도록 하기 위함입니다. 최소 React와 Typescript를 이용한 코드로 개선해주세요. 그 밖의 기술선택과 폴더/파일 구조, 테스트 코드등은 자유입니다.
과제를 진행할 떄 AI를 쓰는 것은 자유입니다. 오히려 AI를 활용하는 연습을 해야하는게 시대의 흐름이겠지요. 다만 AI를 쓰더라도 최대한 조금씩 조금씩 이전 코드와 지금 코드를 그대로 유지하면서 리팩토링하는 감각을 기르기 위함이나, AI에게 최대한 조금씩 그러나 구체적으로 요청하며 한번에 많은 코드를 바꾸지 않도록 하는 연습을 해보세요.