diff --git a/app/ebay/api/v1/views.py b/app/ebay/api/v1/views.py index 01d5186..75eb53d 100644 --- a/app/ebay/api/v1/views.py +++ b/app/ebay/api/v1/views.py @@ -64,72 +64,72 @@ def post(self, request): owner_id = None if request.user.is_anonymous else request.user.pk # date_from = datetime.datetime.now() - datetime.timedelta(days=2) - search = Search.objects.filter( + # search = Search.objects.filter( + # keyword=request.data.get('query'), + # brand_types=request.data.get('brand_types', None), + # compatibility=request.data.get('compatibility', None), + # max_delivery_cost=request.data.get('maxDeliveryCost', False), + # # updated_at__gte=date_from + # ).first() + # call_ebay = False + # if not search or not SearchProduct.objects.filter(search=search).all(): + call_ebay = True + search = Search.objects.create( keyword=request.data.get('query'), + owner_id=owner_id, brand_types=request.data.get('brand_types', None), compatibility=request.data.get('compatibility', None), max_delivery_cost=request.data.get('maxDeliveryCost', False), - # updated_at__gte=date_from - ).first() - call_ebay = False - if not search or not SearchProduct.objects.filter(search=search).all(): - call_ebay = True - search = Search.objects.create( - keyword=request.data.get('query'), - owner_id=owner_id, - brand_types=request.data.get('brand_types', None), - compatibility=request.data.get('compatibility', None), - max_delivery_cost=request.data.get('maxDeliveryCost', False), - ) - search_index, created = SearchIndex.objects.get_or_create( - search=search, - keywords=request.data.get('query') - ) + ) + search_index, created = SearchIndex.objects.get_or_create( + search=search, + keywords=request.data.get('query') + ) + try: + ebay = EbayService(auto_save=True) + except EbayServiceError as error: + raise ValidationError({"ebay": error.__str__()}) + data = { + "search_id": search.pk + } + + if search.conditions: + data.update({ + 'conditions': ast.literal_eval(search.conditions) + }) + if request.data.get('query', None) and call_ebay: try: - ebay = EbayService(auto_save=True) + conditions = ebay.search( + keywords=request.data.get('query'), + brand_types=request.data.get('brand_types', None), + compatibility=request.data.get('compatibility', None), + max_delivery_cost=request.data.get('maxDeliveryCost', False), + item_filter=item_filter, + sort_order=request.data.get('sort_order', None), + owner_id=owner_id, + search_id=search.pk, + zipcode=zipcode + ) + if conditions: + data.update({ + 'conditions': conditions + }) + search.conditions = str(conditions) + search.save() except EbayServiceError as error: - raise ValidationError({"ebay": error.__str__()}) - data = { - "search_id": search.pk - } - - if search.conditions: - data.update({ - 'conditions': ast.literal_eval(search.conditions) - }) - if request.data.get('query', None) and call_ebay: - try: - conditions = ebay.search( - keywords=request.data.get('query'), - brand_types=request.data.get('brand_types', None), - compatibility=request.data.get('compatibility', None), - max_delivery_cost=request.data.get('maxDeliveryCost', False), - item_filter=item_filter, - sort_order=request.data.get('sort_order', None), - owner_id=owner_id, - search_id=search.pk, - zipcode=zipcode - ) - if conditions: - data.update({ - 'conditions': conditions - }) - search.conditions = str(conditions) - search.save() - except EbayServiceError as error: - raise ValidationError({"query": error.__str__()}) - try: - parse_partsgeek.apply_async((request.data.get('query'), search.pk), countdown=0.00168) - except: - raise ValidationError({"partsgeek": "Something went wrong during parsing PartsGeek"}) - try: - parse_carid.apply_async((request.data.get('query'), search.pk), countdown=0.00168) - except: - raise ValidationError({"carid": "Something went wrong during parsing CarId"}) - try: - parse_car_parts.apply_async((request.data.get('query'), search.pk), countdown=0.00168) - except: - raise ValidationError({"parse_car_parts": "Something went wrong during parsing CarParts"}) - return Response(data=data, status=status.HTTP_201_CREATED) - else: - return Response(data={"search_id": search.pk}, status=status.HTTP_201_CREATED) + raise ValidationError({"query": error.__str__()}) + try: + parse_partsgeek.apply_async((request.data.get('query'), search.pk), countdown=0.00168) + except: + raise ValidationError({"partsgeek": "Something went wrong during parsing PartsGeek"}) + try: + parse_carid.apply_async((request.data.get('query'), search.pk), countdown=0.00168) + except: + raise ValidationError({"carid": "Something went wrong during parsing CarId"}) + try: + parse_car_parts.apply_async((request.data.get('query'), search.pk), countdown=0.00168) + except: + raise ValidationError({"parse_car_parts": "Something went wrong during parsing CarParts"}) + return Response(data=data, status=status.HTTP_201_CREATED) + # else: + # return Response(data={"search_id": search.pk}, status=status.HTTP_201_CREATED) diff --git a/app/ebay/migrations/0028_auto_20220324_1029.py b/app/ebay/migrations/0028_auto_20220324_1029.py new file mode 100644 index 0000000..4f018df --- /dev/null +++ b/app/ebay/migrations/0028_auto_20220324_1029.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.4 on 2022-03-24 10:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ebay', '0027_auto_20210701_1231'), + ] + + operations = [ + migrations.AlterField( + model_name='searchindex', + name='keywords', + field=models.CharField(help_text='Max. length 255 characters.', max_length=255, verbose_name='Search index keyword'), + ), + ] diff --git a/app/ebay/models.py b/app/ebay/models.py index 6c4a0a1..8a84c30 100644 --- a/app/ebay/models.py +++ b/app/ebay/models.py @@ -287,7 +287,6 @@ class SearchIndex(CoreModel): vendors = models.ManyToManyField(Vendor, blank=True) top_product = models.ManyToManyField(Product, blank=True) keywords = models.CharField( - unique=True, max_length=255, verbose_name=_("Search index keyword"), help_text=_("Max. length 255 characters."),