Esempio n. 1
0
    def get(self):
        if not auth_user(request):
            return return_dict(
                "É necessário autenticar com usuário e senha validos"), 401

        customer_email = request.args.get("customer_email")

        if not customer_email:
            return return_dict(
                'É necessário passar o parâmetro customer_email'), 400

        try:
            email_already_exists = db_session.query(Customer).filter_by(
                email=customer_email).first()
            if not email_already_exists:
                return return_dict(f"Email '{customer_email}' não existe"), 404

            query_result = db_session.query(FavoriteListItem, Customer) \
                .filter(Customer.customer_id == FavoriteListItem.customer_id) \
                .filter(Customer.email == customer_email) \
                .all()

            if not query_result:
                return return_dict("Lista de favoritos não encontrada"), 404

            product_favorite_list = [{
                'customer_email': item[1].email,
                'product_id': item[0].product_id
            } for item in query_result]

            return product_favorite_list, 200
        except Exception as e:
            return return_dict(e), 500
Esempio n. 2
0
    def post(self):
        if not auth_user(request):
            return return_dict(
                "É necessário autenticar com usuário e senha validos"), 401

        product_body = request.json

        customer_email = product_body['customer_email']
        product_id = product_body['product_id']

        try:
            customer = db_session.query(Customer).filter_by(
                email=customer_email).first()
            if not customer:
                return return_dict(
                    f"Email '{customer_email}' inexistente"), 404

            status_code, product_response = ProductAPI.get_product_by_id_api(
                product_id)

            if status_code == 404:
                return return_dict(f'ID produto inexistente {product_id}'), 404
            elif status_code != 200:
                return \
                    return_dict(f'Erro ao consultar produto na api de produtos, {product_response}'), \
                    status_code

            product = json.loads(product_response)
            product_id = product['id'] if 'id' in product else None

            if not product_id:
                return \
                    return_dict(f'Erro ao consultar produto na api de produtos, {product_response}'), \
                    status_code

            product_already_in_list = db_session.query(FavoriteListItem, Customer) \
                .filter(FavoriteListItem.customer_id == Customer.customer_id) \
                .filter(Customer.email == customer_email) \
                .filter(FavoriteListItem.product_id == product_id) \
                .first()

            if product_already_in_list:
                return return_dict(
                    f'Produto já cadastrado na lista do cliente {customer_email}'
                ), 406

            favorite_list_item_handler = FavoriteListItem(
                customer_id=customer.customer_id, product_id=product_id)

            db_session.add(favorite_list_item_handler)
            db_session.commit()

            return return_dict("Item adicionado com sucesso"), 200

        except Exception as e:
            return return_dict(e), 500
Esempio n. 3
0
    def put(self):
        if not auth_user(request):
            return return_dict(
                "É necessário autenticar com usuário e senha validos"), 401
        customer_body = request.json

        customer_name = customer_body['customer_name']
        customer_email = customer_body['customer_email']

        try:
            email_already_exists = db_session.query(CustomerModel).filter_by(
                email=customer_email).first()
            if not email_already_exists:
                return return_dict(f"Email '{customer_email}' não existe"), 404

            statement = update(CustomerModel).where(CustomerModel.email == customer_email).values(name=customer_name). \
                execution_options(synchronize_session="fetch")

            result = db_session.execute(statement)
            num_rows_matched = result.rowcount
            db_session.commit()

            if num_rows_matched == 0:
                return return_dict("Não foi possível atualizar o cliente"), 500

            return return_dict(
                f'Cliente com e-mail {customer_email} atualizado com sucesso'
            ), 200
        except Exception as e:
            return return_dict(e), 500
Esempio n. 4
0
    def delete(self, ):
        if not auth_user(request):
            return return_dict(
                "É necessário autenticar com usuário e senha validos"), 401

        product_body = request.json

        customer_email = product_body['customer_email']
        product_id = product_body['product_id']

        try:
            customer = db_session.query(Customer).filter_by(
                email=customer_email).first()
            if not customer:
                return return_dict(
                    f"Email '{customer_email}' inexistente"), 404

            favorite_list_item = db_session.query(Customer, FavoriteListItem) \
                .filter(Customer.customer_id == FavoriteListItem.customer_id) \
                .filter(FavoriteListItem.product_id == product_id) \
                .filter(Customer.email == customer_email) \
                .first()

            if not favorite_list_item:
                return return_dict(
                    f"Item inexistente na lista do cliente {customer_email}"
                ), 404

            favorite_list_item_id = favorite_list_item[1].favorite_list_item_id

            statement = delete(FavoriteListItem).where(FavoriteListItem.favorite_list_item_id == favorite_list_item_id) \
                .execution_options(synchronize_session='fetch')

            result = db_session.execute(statement)
            num_rows_matched = result.rowcount
            db_session.commit()

            if num_rows_matched == 1:
                return return_dict("Item deletado com sucesso"), 200
            else:
                return return_dict("Houve algum erro ao deletar o item"), 500
        except Exception as e:
            return return_dict(e), 500
Esempio n. 5
0
    def get(self):
        if not auth_user(request):
            return return_dict(
                "É necessário autenticar com usuário e senha validos"), 401

        customer_email = request.args.get("customer_email")

        if not customer_email:
            return return_dict(
                'É necessário passar o parâmetro customer_email'), 400

        try:
            results = db_session.query(CustomerModel).filter_by(
                email=customer_email).first()
            if not results:
                return return_dict("Email not found"), 404

            results = str(results)
            results = json.loads(results)

            return results, 200
        except Exception as e:
            return return_dict(e), 500
Esempio n. 6
0
    def post(self):
        if not auth_user(request):
            return return_dict(
                "É necessário autenticar com usuário e senha validos"), 401

        customer_body = request.json

        customer_name = customer_body['customer_name']
        customer_email = customer_body['customer_email']

        try:
            email_already_exists = db_session.query(CustomerModel).filter_by(
                email=customer_email).first()
            if email_already_exists:
                return return_dict(
                    f"Email '{customer_email}' já cadastrado"), 406

            customer_handler = CustomerModel(customer_name, customer_email)
            db_session.add(customer_handler)
            db_session.commit()
            return return_dict(
                f'Cliente {customer_name} cadastrado com sucesso'), 200
        except Exception as e:
            return return_dict(e), 500