Exemplo n.º 1
0
    def get_account_id(self, connection, data):
        """ 유저 account_id 조회

                    Args:
                        connection : 데이터베이스 연결 객체
                        data       : 서비스에서 넘겨 받은 dict 객체

                    Author: 김민구

                    Returns:
                        1 (account_id)

                    Raises:
                        500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

                    History:
                        2021-01-05(김민구): 초기 생성
                """

        sql = """
            SELECT 
                account_id
            FROM
                users
            WHERE
                email = %(email)s
        """

        try:
            with connection.cursor() as cursor:
                cursor.execute(sql, data)
                return cursor.fetchone()[0]

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 2
0
    def get_enquiry_reply_list(self, connection, data):
        """ 답변 리스트를 조회

        Args:
            connection: 데이터베이스 연결 객체
            data: 서비스에서 넘겨 받은 dict
                enquiry_ids = 질문 아이디들이 담긴 튜플

        Returns: 답변이 담긴 리스트 반환
            [
                {
                    "account_id": 2,
                    "content": "답변드릴게요",
                    "created_at": "2021-01-04 12:38:12",
                    "enquiry_id": 102,
                    "id": 52,
                    "seller_name": "나는셀러2"
                }
            ]

        Raises:
            500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러
            400, {'message': 'key_error', 'error_message': format(e)}                           : 잘못 입력된 키값

        History:
                2021-01-04(김민구): 초기 생성
        """

        sql = """
            SELECT
                enquiry_reply.id
                , enquiry_reply.content
                , enquiry_reply.account_id
                , seller.`name` AS seller_name
                , enquiry_reply.created_at
                , enquiry_reply.enquiry_id
            FROM
                enquiry_replies AS enquiry_reply
                INNER JOIN sellers AS seller
                    ON seller.account_id = enquiry_reply.account_id
            WHERE
                enquiry_reply.is_deleted = 0
                AND enquiry_reply.enquiry_id IN %(enquiry_ids)s

        """

        try:
            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                cursor.execute(sql, data)
                result = {row['enquiry_id']: row for row in cursor.fetchall()}
                return result

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 3
0
    def get_user_information(self, connection, data):
        """ 유저 account_id, 로그인아이디, 비밀번호, permission_type 조회

            Args:
                connection : 데이터베이스 연결 객체
                data       : 서비스에서 넘겨 받은 dict 객체

            Author: 김민구

            Returns:
                {'account_id': 1, 'username': '******', 'password': '******', permission_type_id: 3}

            Raises:
                500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

            History:
                2020-12-29(김민구): 초기 생성
                2020-12-31(김민구): 에러 문구 변경
        """

        sql = """
            SELECT 
                id
                , username 
                , password
                , permission_type_id
            FROM 
                accounts
            WHERE 
                is_deleted=0
        """

        try:
            if 'account_id' in data:
                sql += """
                AND id = %(account_id)s
                """
            elif 'username' in data:
                sql += """
                AND username = %(username)s
                """

            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                cursor.execute(sql, data)
                return cursor.fetchone()

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
    def get_product_size_dao(self, connection, data):
        """ 상품 사이즈를 조회한다.

            상품이 여러 사이즈들을 가질 수 있게 되고
            사이즈도 여러 상품들을 가질 수 있게 됨으로
            중복이 발생한다. 그래서 DISTINCT 를 사용

            Args:
                connection : 데이터베이스 연결 객체
                data     : 서비스에서 넘겨 받은 data

            Author: 김기용

            Returns:
                {
                    size_id: 1,
                    size_name: black
                }

            Raises:
                500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'}

            History:
                2020-01-00(김기용): 초기 생성
        """
        
        sql = """
            SELECT DISTINCT
                size.id AS size_id
                ,size.name AS size_name
            FROM
                stocks
            INNER JOIN sizes as size
                ON stocks.size_id = size.id
            WHERE product_id = %(product_id)s
            ;
        """

        try:
            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                cursor.execute(sql, data)
                sizes = cursor.fetchall()
                return sizes

        except Exception:
            traceback.print_exc()
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
    def get_product_color_dao(self, connection, data):
        """ 상품 컬러들을 조회한다.

            상품이 여러 컬러들을 가질 수 있게 되고
            컬러도 여러 상품들을 가질 수 있게 됨으로
            중복이 발생한다. 그래서 DISTINCT를 사용

            Args:
                connection : 데이터베이스 연결 객체
                data     : 서비스에서 넘겨 받은 data

            Author: 김기용

            Returns:
                {
                    color_id: 1,
                    color_name: black
                }

            Raises:
                500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

            History:
                2020-01-00(김기용): 초기 생성
        """

        sql = """
            SELECT DISTINCT
                color.name AS color_name
                , color.id AS color_id
            FROM
                stocks
            INNER JOIN colors as color
                ON stocks.color_id = color.id
            WHERE product_id = %(product_id)s
            ;
        """
        try:
            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                cursor.execute(sql, data)
                color = cursor.fetchall()
                return color

        except Exception:
            traceback.print_exc()
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 6
0
    def get_event(self, connection, data):
        """ 상품 리스트 조회

            Args:
                connection : 데이터베이스 연결 객체
                data     : 서비스에서 넘겨 받은 dict

            Author: 김민구

            Returns:
                {
                    event_id: 1,
                    event_banner_image: 'url'
                }

            Raises:
                500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

            History:
                2020-12-30(김민구): 초기 생성
                2020-12-31(김민구): 에러 문구 변경 / 1개의 이벤트 배너 반환하는 작업으로 수정
        """

        sql = """
            SELECT 
                id AS event_id
                , banner_image AS event_banner_image
            FROM 
                events
            WHERE 
                end_date > now()
                AND is_display = 1
                AND is_deleted = 0
            ORDER BY 
                id ASC
            LIMIT %(offset)s, 1
        """

        try:
            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                cursor.execute(sql, data)
                result = cursor.fetchone()
                return result

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 7
0
    def create_user(self, connection, data):
        """ 유저 생성

            Args:
                connection : 데이터베이스 연결 객체
                data       : 서비스에서 넘겨 받은 dict 객체

            Author: 김민구

            Returns:
                0 : 유저 생성 실패
                1 : 유저 생성 성공

            Raises:
                500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러
                500, {'message': 'data_manipulation_fail', 'error_message': '유저 등록을 실패하였습니다.'} : 데이터 조작 에러

            History:
                2020-12-28(김민구): 초기 생성
                2020-12-31(김민구): 에러 문구 변경
                2021-01-02(김민구): 데이터 조작 에러 추가
        """

        sql = """
            INSERT INTO users (
                account_id
                , phone
                , email
            ) VALUES (
                %(account_id)s 
                , %(phone)s
                , %(email)s
            );
        """

        try:
            with connection.cursor() as cursor:
                result = cursor.execute(sql, data)
                if not result:
                    raise DataManipulationFail('유저 등록을 실패하였습니다.')

        except DataManipulationFail as e:
            raise e

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 8
0
    def create_account(self, connection, data):
        """ account 생성

            Args:
                connection : 데이터베이스 연결 객체
                data       : 서비스에서 넘겨 받은 dict 객체

            Author: 김민구

            Returns:
                account_id : account 생성 후 아이디 반환

            Raises:
                500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러,
                500, {'message': 'data_manipulation_fail', 'error_message': '유저 등록을 실패하였습니다.'} : 데이터 조작 에러

            History:
                2020-12-28(김민구): 초기 생성
                2020-12-31(김민구): 에러 문구 변경
                2021-01-02(김민구): 데이터 조작 에러 추가
        """

        sql = """
            INSERT INTO accounts (
                username 
                , password 
                , permission_type_id
            ) VALUES (
                %(username)s 
                , %(password)s 
                , %(permission_type_id)s
            );
        """

        try:
            with connection.cursor() as cursor:
                result = cursor.execute(sql, data)
                if not result:
                    raise DataManipulationFail('유저 등록을 실패하였습니다.')
                return cursor.lastrowid

        except DataManipulationFail as e:
            raise e

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 9
0
    def get_second_category_list(self, connection):
        """ main 카테고리 리스트 조회

            Args:
                connection : 데이터베이스 연결 객체

            Author: 김민구

            Returns:
                result (main_categories)
                [
                    {
                    'id' : 1,
                    'name' : '상의',
                    'menu_id' : 6
                    }
                ]

            Raises:
                500, {'message': 'database_error', 'errorMessage': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

            History:
                2020-12-30(김민구): 초기 생성
                2020-12-31(김민구): 에러 문구 변경
        """

        sql = """
            SELECT 
                id 
                , `name`
                , menu_id 
            FROM 
                main_categories
            WHERE     
                is_deleted = 0;
        """

        try:
            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                cursor.execute(sql)
                result = cursor.fetchall()
                return result

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 10
0
    def update_bookmark_volume_count(self, connection, data):
        """ 상품 북마크 수 업데이트

        Args:
            connection : 데이터베이스 연결 객체
            data       : 서비스에서 넘겨 받은 dict ( product_id, account_id, count )

        Returns:
            None

        Raises:
            500, {'message': 'database_error', 'errorMessage': '서버에 알 수 없는 에러가 발생했습니다.'}           : 데이터베이스 에러
            500, {'message': 'data_manipulation_fail', 'error_message': '북마크 추가 혹은 삭제를 실패하였습니다.'} : 데이터 조작 에러

        History:
            2021-01-02(김민구): 초기 생성

        Notes:
            bookmark_count는 unsigned가 걸려있음
            만약 0인 상태에서 -1이 연산된다면 데이터 입력이 실패하게 된다.
            이 때 에러를 발생시키지 않고 success로 넘긴다.
            데이터베이스의 unsigned error 번호는 1690이므로 1690에 대한 에러가 뜬다면 None을 리턴시킨다.
        """

        sql = """
            UPDATE
                bookmark_volumes
            SET 
                bookmark_count = bookmark_count + %(count)s
            WHERE
                product_id = %(product_id)s
        """

        try:
            with connection.cursor() as cursor:
                cursor.execute(sql, data)

        except Exception as e:
            if '1690' in e.__str__():
                return None
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 11
0
    def get_product_image_dao(self, connection, data):
        """ 상품 이미지들을 조회한다.

            Args:
                connection : 데이터베이스 연결 객체
                offset     : 서비스에서 넘겨 받은 int

            Author: 김기용

            Returns:
                {
                    image_id: 1,
                    images_url: www.example.com
                }

            Raises:
                500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

            History:
                2020-01-00(김기용): 초기 생성
        """

        sql = """
        SELECT DISTINCT
            product_image.id AS image_id
            , product_image.image_url AS image_url
        FROM
            product_images AS product_image
        WHERE
            product_id = %(product_id)s

        """
        try:
            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                cursor.execute(sql, data)
                images = cursor.fetchall()
                return images 

        except Exception:
            traceback.print_exc()
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 12
0
    def get_bookmark_exist(self, connection, data):
        """ 해당 유저가 상품을 북마크 했는지 확인

        Args:
            connection : 데이터베이스 연결 객체
            data       : 서비스에서 넘겨 받은 dict ( product_id, account_id )

        Returns: 북마크 존재 유무를 반환
            1 : 해당 북마크가 존재
            0 : 해당 북마크가 존재하지 않음

        Raises:
            500, {'message': 'database_error', 'errorMessage': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

        History:
            2021-01-02(김민구): 초기 생성
        """

        sql = """
            SELECT
                EXISTS
                    (
                        SELECT 
                            id 
                        FROM 
                            bookmarks 
                        WHERE 
                            account_id = %(account_id)s 
                            AND product_id = %(product_id)s 
                            AND is_deleted = 0
                    );
        """

        try:
            with connection.cursor() as cursor:
                cursor.execute(sql, data)
                result = cursor.fetchone()[0]
                return result

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 13
0
    def create_bookmark(self, connection, data):
        """ 상품 북마크 추가

        Args:
            connection : 데이터베이스 연결 객체
            data       : 서비스에서 넘겨 받은 dict ( product_id, account_id )

        Returns:
            None

        Raises:
            500, {'message': 'database_error', 'errorMessage': '서버에 알 수 없는 에러가 발생했습니다.'}   : 데이터베이스 에러
            500, {'message': 'data_manipulation_fail', 'error_message': '북마크 추가를 실패하였습니다.'} : 데이터 조작 에러

        History:
            2021-01-02(김민구): 초기 생성
        """

        sql = """
            INSERT INTO bookmarks (
                account_id,
                product_id
            ) VALUES (
                %(account_id)s,
                %(product_id)s
            );
        """

        try:
            with connection.cursor() as cursor:
                result = cursor.execute(sql, data)
                if not result:
                    raise DataManipulationFail('북마크 추가를 실패하였습니다.')

        except DataManipulationFail as e:
            raise e

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 14
0
    def get_enquiry_type_list(self, connection):
        """ 질문 유형 리스트를 조회

        Args:
            connection: 데이터베이스 연결 객체

        Returns: 질문 유형이 담긴 리스트 반환
            [
                {
                    "id": 1,
                    "name": "상품 문의"
                }
            ]

        Raises:
            500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

        History:
                2021-01-04(김민구): 초기 생성
        """

        sql = """
            SELECT
                id,
                name
            FROM
                enquiry_types
            WHERE
                is_deleted = 0;
        """

        try:
            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                cursor.execute(sql)
                result = cursor.fetchall()
                return result

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 15
0
    def delete_bookmark(self, connection, data):
        """ 상품 북마크 삭제

        Args:
            connection : 데이터베이스 연결 객체
            data       : 서비스에서 넘겨 받은 dict ( product_id, account_id )

        Returns:
            None

        Raises:
            500, {'message': 'database_error', 'errorMessage': '서버에 알 수 없는 에러가 발생했습니다.'}   : 데이터베이스 에러
            500, {'message': 'data_manipulation_fail', 'error_message': '북마크 삭제를 실패하였습니다.'} : 데이터 조작 에러

        History:
            2021-01-02(김민구): 초기 생성
        """

        sql = """
            UPDATE 
                bookmarks
            SET
                is_deleted = 1
            WHERE
                account_id = %(account_id)s
                AND product_id = %(product_id)s 
        """

        try:
            with connection.cursor() as cursor:
                result = cursor.execute(sql, data)
                if not result:
                    raise DataManipulationFail('북마크 삭제를 실패하였습니다.')

        except DataManipulationFail as e:
            raise e

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 16
0
    def email_exist_check(self, connection, data):
        """ 유저 이메일 중복 검사

            Args:
                connection : 데이터베이스 연결 객체
                data       : 서비스에서 넘겨 받은 dict 객체

            Author: 김민구

            Returns:
                0 : 해당 유저 없음
                1 : 해당 유저 존재

            Raises:
                500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

            History:
                2020-12-28(김민구): 초기 생성
                2020-12-31(김민구): 에러 문구 변경
        """

        sql = """
            SELECT 
                EXISTS 
                    (SELECT account_id FROM users WHERE email = %(email)s)
                AS user_exist;
        """

        try:
            with connection.cursor() as cursor:
                cursor.execute(sql, data)
                result = cursor.fetchone()[0]
                return result

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 17
0
    def get_product_list(self, connection, data):

        """ 상품 리스트 조회

            Args:
                connection : 데이터베이스 연결 객체
                data   : 서비스에서 넘겨 받은 dict

            Author: 김민구

            Returns: 30개의 상품정보
                [
                    {
                        'image': 'url',
                        'seller_id': 1,
                        'seller_name': '둘리',
                        'product_id': 1,
                        'product_name': '성보의 하루',
                        'origin_price': 10000.0,
                        'discount_rate': 0.1,
                        'discounted_price': 9000.0,
                        'sales_count': 30
                    },
                ]

            Raises:
                500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

            History:
                2020-12-30(김민구): 초기 생성
                2020-12-31(김민구): 에러 문구 변경 / 이벤트에 대한 상품을 반환하는 작업으로 수정
        """

        sql = """
            SELECT 
                product_image.image_url
                , product.seller_id AS seller_id
                , seller.`name` AS seller_name
                , product.id AS product_id
                , product.`name` AS product_name
                , product.origin_price
                , product.discount_rate
                , product.discounted_price 
                , product_sales_volume.sales_count
            FROM
            events_products AS event_product
            INNER JOIN products AS product
                ON event_product.product_id = product.id
            INNER JOIN product_images AS product_image
                ON product_image.product_id = product.id
                AND product_image.order_index = 1
                AND product_image.is_deleted = 0
            INNER JOIN sellers AS seller
                ON seller.account_id = product.seller_id
            INNER JOIN product_sales_volumes AS product_sales_volume
                ON product_sales_volume.product_id = product.id
            WHERE
                event_id = %(event_id)s
                AND product.is_deleted = 0
                AND product.is_display = 1
            ORDER BY
                product.id DESC
            LIMIT %(limit)s
        """

        try:
            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                cursor.execute(sql, data)
                result = cursor.fetchall()
                return result

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 18
0
    def get_product_detail_dao(self, connection, data):
        """ 상품 상세정보

            Args:
                connection : 데이터베이스 연결 객체
                data       : 서비스에서 넘겨 받은 data

            Author: 김기용
            
            Returns: 
                {
                "bookmark_count": 0,
                "detail_information": "html====================",
                "discount_rate": 0.1,
                "discounted_price": 9000.0,
                "id": 1,
                "name": "성보의하루1",
                "origin_price": 10000.0,
                "sales_count": 40,
                "seller_id": 7,
                "seller_name": "나는셀러7"
                }

            Raises:
                500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

            History:
                2020-12-31(김기용): 초기 생성
                2021-01-01(김기용): 1차 수정: 구현 완료
                2021-01-02(김기용): 2차 수정: 북마크 개수 추가
                2021-01-03(김기용): 3차 수정: 유저별 북마크 확인기능 추가
                2021-01-05(김기용): 4차 수정: 비회원 로그인 북마크 반환값 추가
        """

        sql = """
            SELECT
                product.id AS product_id
                , product.name AS product_name
                , product.detail_information
                , product.seller_id AS seller_id
                , seller.name AS seller_name
                , product.origin_price
                , product.discount_rate
                , product.discounted_price
                , product_sales_volume.sales_count
                , bookmark.bookmark_count
                                        
        """

        sql_with_account = """
                , EXISTS(
                            SELECT
                                id
                            FROM
                                bookmarks
                            WHERE
                                account_id = %(account_id)s
                                AND product_id= %(product_id)s
                                AND is_deleted =0
                            ) AS is_bookmarked
                """

        sql_without_account = """
                    FROM
                        products AS product
                    INNER JOIN stocks AS stock
                        ON stock.product_id = product.id
                    INNER JOIN sellers AS seller
                        ON product.seller_id = seller.account_id
                    INNER JOIN product_sales_volumes AS product_sales_volume
                        ON product_sales_volume.product_id = product.id
                    INNER JOIN bookmark_volumes AS bookmark
                        ON bookmark.product_id = product.id
                    WHERE
                        product.id = %(product_id)s
                        AND product.is_deleted = 0
                        ;
        """
        try:
            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                if 'account_id' not in data:
                    sql += sql_without_account
                    cursor.execute(sql, data)
                    result = cursor.fetchone()
                    result['is_bookmarked'] = 0
                    return result
                sql += sql_with_account + sql_without_account
                cursor.execute(sql, data)
                result = cursor.fetchone()
                return result

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 19
0
    def get_search_products_dao(self, connection, data):
        """ 상품 검색 및 정렬

            검색키워드로 상품이름과 셀러이름을 검색하고
            검색 결과를 추천순, 판매순, 최신순으로 정렬한다.

            Args:
                connection : 데이터베이스 연결 객체
                data       : 서비스에서 넘겨 받은 data

            Author: 김기용
            
            Returns: {
                        "bookmark_count": 0,
                        "discounted_price": 9000.0,
                        "image": "https://img.freepik.com",
                        "name": "성보의하루999",
                        "origin_price": 10000.0,
                        "product_id": 999,
                        "sales_count": 32,
                        "seller_id": 4,
                        "seller_name": "나는셀러4"
                        }

            Raises:
                500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

            History:
                2020-12-31(김기용): 초기 생성
                2021-01-01(김기용): 1차 수정: 정렬기능추가
                2021-01-02(김기용): 2차 수정: 북마크 정렬기능 추가
        """

        sql = """
        SELECT
            product_image.image_url AS image
            , product.name AS product_name
            , product.seller_id AS seller_id
            , seller.name AS seller_name
            , product.id AS product_id
            , product.origin_price
            , product.discounted_price
            , product_sales_volume.sales_count
            , bookmark.bookmark_count
        FROM
            products AS product
        INNER JOIN product_images AS product_image
            ON product_id = product_image.product_id
            AND product_image.order_index = 1
        INNER JOIN sellers AS seller
            ON seller.account_id = product.seller_id
        INNER JOIN product_sales_volumes AS product_sales_volume
            ON product_sales_volume.product_id = product.id
        INNER JOIN bookmark_volumes AS bookmark
            ON bookmark.product_id = product.id
        WHERE
            product.name LIKE %(search)s
            AND product.is_deleted=0
        ORDER BY
             (CASE WHEN %(sort_type)s=1 THEN bookmark_count END) DESC
            , (CASE WHEN %(sort_type)s=2 THEN sales_count END) DESC
            , (CASE WHEN %(sort_type)s=3 THEN product.id END) DESC
        LIMIT %(limit)s;

        """

        try:
            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                data['search'] = '%%' + data['search'] + '%%' 
                cursor.execute(sql, data)
                result = cursor.fetchall()
                return result
        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')
Exemplo n.º 20
0
    def get_product_enquiry_list(self, connection, data):
        """ 상품 질문 리스트를 조회

        Args:
            connection: 데이터베이스 연결 객체
            data: 서비스에서 넘겨 받은 dict (type, offset, limit)
                type = self 혹은 all
                offset = 0부터 시작(5단위)

        Returns: 질문이 담긴 리스트 반환
            [
                {
                    "content": "임시질문인데요2(답변감사합니다)",
                    "created_at": "2021-01-04 11:31:26",
                    "enquiry_id": 102,
                    "enquiry_type_id": 1,
                    "enquiry_type_name": "상품 문의",
                    "is_completed": 1,
                    "is_secret": 0,
                    "product_id": 1,
                    "user_id": 152
                }
            ]

        Raises:
            500, {'message': 'database_error', 'error_message': '서버에 알 수 없는 에러가 발생했습니다.'} : 데이터베이스 에러

        History:
                2021-01-04(김민구): 초기 생성
        """

        sql = """
            SELECT 
                enquiry.id 
                , enquiry.product_id
                , enquiry.user_id
                , enquiry.content
                , enquiry.enquiry_type_id
                , enquiry_type.`name` AS enquiry_type_name
                , enquiry.is_secret
                , enquiry.is_completed
                , enquiry.created_at
            FROM
                enquiries AS enquiry
                INNER JOIN enquiry_types AS enquiry_type
                    ON enquiry_type.id = enquiry.enquiry_type_id
            WHERE 
                enquiry.product_id = %(product_id)s
                AND enquiry.is_deleted = 0
        """

        try:
            if 'user_id' in data:
                sql += '''
                AND enquiry.user_id = %(user_id)s
                '''

            sql += '''
            ORDER BY 
                enquiry.id DESC
            LIMIT %(offset)s, %(limit)s
            '''

            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                cursor.execute(sql, data)
                result = cursor.fetchall()
                return result

        except Exception:
            raise DatabaseError('서버에 알 수 없는 에러가 발생했습니다.')