def get_action_dict(self, connection):
        """셀러 상태에 따른 마스터 액션 목록 생성

        Author:
            김현영

        Args:
            connection (객체): pymysql 객체 

        Returns:
            dict: {
                셀러 상태 아이디 : [{"action_id": 마스터 액션 번호, "action": 마스터 액션}]
                }
        """
        master_dao = MasterDao()
        actions = master_dao.get_master_action_list(connection)

        actions_dict = {}
        for action in actions:
            if action["action_status_id"] not in actions_dict:
                actions_dict[action["action_status_id"]] = []
            actions_dict[action["action_status_id"]].append({
                "action_id":
                action["master_action_id"],
                "action":
                action["action"]
            })

        return actions_dict
    def account_init(self, connection):
        """ [어드민] 샐러 계정 관리(마스터) - 초기값
      Author: 
        Sung joun Jang
      Args:    

      Returns:
        sellerType: 샐러의 타입 값
        sellerStatus: 샐러의 상태 값
        sellerAttribue: 샐러의 속성 값
    """
        master_dao = MasterDao()

        # 초기값에 필요한 타입들을 반환하는 로직
        seller_type = master_dao.seller_type(connection)
        seller_status = master_dao.seller_status(connection)
        seller_attribute = master_dao.seller_attribute(connection)

        return {
            'data': {
                'sellerType': seller_type,
                'sellerStatus': seller_status,
                'sellerAttribute': seller_attribute
            }
        }
    def order_ready_init(self, connection):
        """ [어드민] 주문관리(마스터) - 상품준비(초기값)
      Author: 
        Sung joun Jang
      Args:    

      Returns:
        data: 전달하는 데이터 값
    """
        master_dao = MasterDao()

        # 초기값에 필요한 샐러 카테고리를 반환
        categories = master_dao.seller_category(connection)

        return {'data': {'sellerAttribute': categories}}
    def seller_edit_service(self, user, seller_edit_info, connection):
        """ [어드민] seller의 본인 상세 정보수정 페이지 입장 시 확인되는 정보
        Author: 
            Chae hyun Kim
        Args:
            connection : 커넥션
            user_id : 로그인 유저의 user_id
            seller_edit_info : 새로 입력될 내용들
        Note
            1. 회원가입 후 첫 수정 : first_update 실행
            2. 첫번째 수정 이후 두번째 수정 : seconde_update 실행
            3. manager는 한번에 여러개의 정보를 입력할 수 있도록 "배열"로 받은 뒤 for loop 진행
        """
        seller_dao = SellerDao()
        master_dao = MasterDao()

        # 로그인한 seller의 추가정보 내용 확인 (첫번째 수정이라면 회원가입시 입력했던 정보 외에 null과 빈 string으로 처리되어 있음)
        find_information = seller_dao.find_seller_info(user, connection)
        
        managers = None
        if 'managers' in seller_edit_info:
            managers = seller_edit_info.pop('managers')
            # 들어온 manager들의 객체가 담긴 배열 managers의 길이가 3 초과면 에러 반환
            if managers is not None:
                if len(managers) > 3:
                    raise ApiException(400, MAX_LIMIT_MANAGER)
            SellerService().manager_service(user, {'managers': managers}, connection)
        # 필수입력 정보중 None이 있다면 첫 수정으로 간주. first_update로 보내지며 필수 parameter들이 요구된다.
        if None in find_information.values():
            SellerService().first_update(user, seller_edit_info, connection)
        # 필수입력 정보중 None이 없다면 이미 필수정보 입력 후 두번째 일부수정 가능 상태로 간주. seconde_update로 보내진다.
        else:
            SellerService().seconde_update(user, seller_edit_info, connection)
    def order_ready(self, connection, filters):
        """ [어드민] 주문관리(마스터) - 상품준비(검색값)
      Author: 
        Sung joun Jang
      Args:    
        - filters: 필터에 대한 값들
        - page_condition: 페이지에 대한 값들
      Returns:
        data: 전달하는 데이터 값
        totalCount: 전체 데이터 개수
    """
        master_dao = MasterDao()

        # 주문 리스트를 반환
        data = master_dao.order_ready(connection, filters)
        # 주문 리스트의 count를 반환
        order_count = master_dao.order_ready_count(connection, filters)
        total_count = order_count['totalCount']

        return {'data': data, 'totalCount': total_count}
    def account_level(self, connection, data):
        """ [어드민] 샐러 계정 관리(마스터) - level 값 변경하기
      Author: 
        Sung joun Jang
      Args:    
        - sellerId: 샐러의 pk 값
        - actionId: 액션의 pk 값
      Returns:
        custom_message: 개인화 메세지
        data: method 종류
    """
        master_dao = MasterDao()
        action_id = data['action_id']
        update_action = ''

        # 액션의 pk값을 name으로 반환하는 로직
        check_action = master_dao.check_action_id(connection, action_id)

        # 액션에 따른 레벨의 name 값을 매칭
        if check_action['name'] in ['입점 승인', '휴점 해제', '퇴점 철회 처리']:
            update_action = '입점'
        if check_action['name'] in ['입점 거절']:
            update_action = '입점 거절'
        if check_action['name'] in ['휴점 신청']:
            update_action = '휴점'
        if check_action['name'] in ['퇴점 신청처리']:
            update_action = '퇴점 대기'
        if check_action['name'] in ['퇴점 확정 처리']:
            update_action = '퇴점'
            # 퇴점일때 soft delete 실행
            master_dao.seller_delete(connection, data)

        # 레벨에 따른 name 값을 id로 변경
        update_level = master_dao.check_action_name(connection, update_action)
        data['update_level'] = update_level['id']

        # 해당 샐러의 레벨 값을 변경하는 함수(+ 내역 추가)
        master_dao.account_level(connection, data)
        master_dao.account_level_log(connection, data)

        return {'custom_message': 'updated', 'data': 'PATCH'}
    def order_detail(self, connection, cart_number):
        """ [어드민] 주문 상세 관리(마스터)
      Author: 
        Sung joun Jang
      Args:    
        - product_id: 조회하는 상품의 pk 값
        - cart_number: 조회하는 카트의 외부 고유 값
      Returns:
        orderDetails: 주문 상세의 필요한 값
        orderLogs: 해당 주문의 로그 값
    """
        master_dao = MasterDao()

        # 주문 상세를 반환
        order_detail = master_dao.order_detail(connection, cart_number)
        # 할인율을 없앤 원래의 가격
        order_detail['originalPrice'] = order_detail[
            'unitOriginalPrice'] * order_detail['quantity']

        # 주문 상세에서 필요한 변경 이력의 데이터를 반환
        order_log = master_dao.order_detail_get_log(connection, cart_number)

        data = {'orderDetails': order_detail, 'orderLogs': order_log}
        return {'data': data}
    def order_ready_update(self, connection, data):
        """ [어드민] 주문관리(마스터) - 상품준비(주문 상태 변경)
      Author: 
        Sung joun Jang
      Args:    

      Returns:
        custom_message: 개인화 메세지
        data: method 종류
    """
        master_dao = MasterDao()

        # 배송 상태를 배송중으로 변경(+ 내역 추가)
        master_dao.order_ready_update(connection, data)
        master_dao.order_ready_update_log(connection, data)

        return {'custom_message': 'updated', 'data': 'PATCH'}
    def account(self, connection, filters):
        """ [어드민] 샐러 계정 관리(마스터)
      Author: 
        Sung joun Jang
      Args:    
        - limit: 페이지당 보여질 데이터 갯수
        - offset: 현재 페이지
        - no: 샐러의 no
        - username: 샐러 id
        - english: 브랜드의 영어 이름
        - korean: 브랜드의 한글 이름
        - sellerType: 샐러의 타입(일반, 헬피)
        - sellerStatus: 샐러의 상태(입점, 입점대기 등등)
        - sellerAttribute: 샐러의 속성(쇼핑몰, 뷰티 등등)
        - managerName: 매니저의 이름
        - managerPhone: 매니저의 핸드폰 번호
        - managerEmail: 매니저의 이메일
        - startDate: 샐러 생성된 날짜의 시작 값
        - endDate: 샐러 생성된 날짜의 끝 값
      Returns:
        message: 반환되는 메세지
        result: {
            data: 전달하는 데이터 값
            totalCount: 전체 데이터 개수
        }
    """

        master_dao = MasterDao()

        # 샐러 계정 리스트 반환
        account = master_dao.account(connection, filters)
        # totalCount 수 반환
        account_count = master_dao.account_count(connection, filters)
        total_count = account_count['totalCount']

        result = []
        action_map = {}
        for row in account:
            data = {
                'no': row['no'],
                'username': row['username'],
                'english': row['english'],
                'korean': row['korean'],
                'sellerType': row['seller_type'],
                'managerName': row['manager'],
                'sellerStatus': row['seller_status'],
                'managerPhone': row['phone'],
                'managerEmail': row['email'],
                'attribute': row['attribute'],
                'createdAt': row['created']
            }

            # 해당 샐러의 level에 따른 action 리스트를 반환
            if row['seller_status'] not in action_map:
                action_map[row['seller_status']] = master_dao.action(
                    connection, row['seller_status'])

            data['actions'] = action_map[row['seller_status']]
            result.append(data)

        return {'data': result, 'totalCount': total_count}