---
# System prepended metadata

title: 2021.10.14 PR 기록

---



# 2021.10.14 PR 기록

# 작업 목록
- OrderView 및 ProductListView에 필요한 API 구현
- OrderView 구현
- 특정 카테고리의 Product를 보여주는 ProductListView 구현

# 수정할 사항
- 카테고리별 API 요청 함수 통합
  - 기존 음료 정보를 가져오는 API 요청 함수는 음료의 종류별로 다 분리가 되어있었음
  - 음료별로 API주소가 다 다르다보니 함수도 다 별도로 분리하게 되었음
  - API url에서 공통적인 부분을 발견하게 되어서 음료 정보를 가져오는 하나의 함수를 만들어보기로 함
- OrderViewUsecase를 Protocol 기반으로 변형
  - 의존성 역전을 위해 추상화
- HomeUseCase에서 ProductAccessable을 빼내기
  - 공통 사용이 가능한 프로토콜이므로 독립시킴
- HomeView에서 사용하는 DataSource에 DispatchGroup 적용
  - 데이터 순서 유지
  - 필요할 때 1번만 DataSource를 갱신


# 질문 및 고민
- 조건에 따라서 이벤트 관련 화면을 보여주거나, 홈 화면을 보여주어야합니다.
  이때, 어떠한 방식으로 구현하는 방식이 주로 쓰이는지 궁금합니다.
  1. 홈화면을 시작 vc로 두고 viewDidLoad에서 조건을 체크하여 present로 이벤트화면을 출력한다.
    - 장점 : 이벤트 화면을 dismiss하면 바로 사라짐(불필요하게 뒤에 깔리는 vc가 없음)
    - 단점 : 앱을 시작할 때, 기기의 성능에 따라서 홈화면이 잠깐 노출되고 그 위에 이벤트화면이 뜨는 경우가 있다.
  2. 앱이 실행 될 때 rootVC를 이벤트 화면으로 할지, 홈 화면으로 할지를 ScenDelegate 단에서 체크한다.
    - 장점 : 앱 시작 과정이 깔끔하다. 사용자가 입장에서 거슬리는 점이 없다.
    - 단점 : 이벤트 화면이 표시되고나서 사용자가 닫기를 누르면 home vc를 present하기 때문에 이벤트 vc가 앱 구동 중에 항상 깔려있다.

































요구사항에 있는 홈화면에서 적힌 모든 API목록

https://api.codesquad.kr/starbuckst
 https://www.starbucks.co.kr/whats_new/getIngList.do 
  - 이벤트 종류할때? 헤더에 데이터를 넣고 보내서 사용하는듯
 - MENU_CD의 값으로 이걸 요청하면, 

- 화면 순서
  - 추천 메뉴(콜렉션뷰)
    - https://api.codesquad.kr/starbuckst 를 사용한다
  - 메인 이벤트(스택뷰)
  - 이벤트종류(콜렉션뷰)
  - 인기 메뉴(콜렉션뷰)


- Home 진입
    - https://api.codesquad.kr/starbuckst
```
{
    "display-name": "딸기HARRY",
    "your-recommand": {
        "products": [
            "9200000002760",
            "168010",
            "9200000002502",
            "9300000003072"
        ]
    },
    "main-event": {
        "img_UPLOAD_PATH": "https://image.istarbucks.co.kr",
        "mob_THUM": "APP_THUM_20210719090612417.jpg"
    },
    "now-recommand": {
        "products": [
            "106509",
            "9200000000479",
            "9200000000433",
            "9200000002760",
            "9200000002487"
        ]
    }
}
```
- 추천 메뉴 목록
    - HomeJSON/your-recommand/products 배열값
    - 메뉴별 요청 API
        - https://www.starbucks.co.kr/menu/productViewAjax.do
        - body
            - form-data
                - product_cd = {배열값}
```
{
    "view": {
        "content": "부드러운 목넘김의 나이트로 커피와 바닐라 크림의 매력을 한번에 느껴보세요!",
        "product_ENGNM": "Nitro Vanilla Cream",
        "product_CD": "9200000002487",
        "product_NM": "나이트로 바닐라 크림",
        "cate_NAME": "콜드 브루",
        "recommend": "부드러운 목넘김의 나이트로 커피와 바닐라 크림의 매력을 한번에 느껴보세요!",
        "kcal": "75", // 칼로리
        "fat": "2.7", // 지방
        "price": "",
        "standard": "12",
        "unit": "oz",
        "sat_FAT": "2", //포화지방
        "trans_FAT": "0", // 트랜스지방
        "cholesterol": "5", // 콜레스테롤
        "sugars": "10", // 당류
        "chabo": "10", // ?
        "protein": "1", // 단백질
        "sodium": "20", // 나트륨
        "caffeine": "245", // 카페인
        "allergy": "우유"
    }
}
```

- 메인 이벤트
    - 모든 이벤트 가져오기
        - https://www.starbucks.co.kr/whats_new/getIngList.do
            - header
                - Content-Type = application/x-www-form-urlencoded
                - charset = utf-8
            - body
                - form-data
                    - menu_cd = all
    - HomeJSON/main-event 값이랑 동일한 이미지 선택
    - 대표 이벤트 사진
        - https://image.istarbucks.co.kr/upload/promotion/{mob_THUM}
    - 대표 이벤트 내용 표시

```
{
    "list": [
        {
            "img_UPLOAD_PATH": "https://image.istarbucks.co.kr",
            "title": "할로윈 음료 Tri-Star Dash 이벤트",
            "start_DT": "2021-10-11",
            "end_DT": "2021-10-18",
            "view_DATE": "2021-10-12 ~ 2021-10-18",
            "mob_THUM": "APP_THUM_20211007091038328.jpg",
            "sbtitle_NAME": "할로윈 음료 Tri-Star Dash 이벤트"
        }
    ]
}
```
- 시간별 추천 메뉴 목록
    - 메뉴별 요청 API
        - https://www.starbucks.co.kr/menu/productViewAjax.do
            - body
                - form-data
                    - product_cd = {배열값}



