56 lines
2.5 KiB
Python
56 lines
2.5 KiB
Python
from rest_framework import serializers
|
|
|
|
from adventrues.models import AdventureOffering
|
|
from equipment.models import EquipmentItem
|
|
|
|
from .models import ListingClick
|
|
|
|
|
|
class ListingClickSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ListingClick
|
|
fields = (
|
|
"id",
|
|
"listing_type",
|
|
"traffic_type",
|
|
"utm_source",
|
|
"utm_medium",
|
|
"utm_campaign",
|
|
"utm_term",
|
|
"utm_content",
|
|
"gclid",
|
|
"fbclid",
|
|
"equipment_item",
|
|
"adventure_offering",
|
|
"created_at",
|
|
)
|
|
read_only_fields = fields
|
|
|
|
|
|
class TrackListingClickSerializer(serializers.Serializer):
|
|
listing_type = serializers.ChoiceField(choices=ListingClick.ListingType.choices)
|
|
public_id = serializers.CharField(max_length=64)
|
|
utm_source = serializers.CharField(required=False, allow_blank=True, default="", max_length=255)
|
|
utm_medium = serializers.CharField(required=False, allow_blank=True, default="", max_length=255)
|
|
utm_campaign = serializers.CharField(required=False, allow_blank=True, default="", max_length=255)
|
|
utm_term = serializers.CharField(required=False, allow_blank=True, default="", max_length=255)
|
|
utm_content = serializers.CharField(required=False, allow_blank=True, default="", max_length=255)
|
|
gclid = serializers.CharField(required=False, allow_blank=True, default="", max_length=255)
|
|
fbclid = serializers.CharField(required=False, allow_blank=True, default="", max_length=255)
|
|
referrer = serializers.CharField(required=False, allow_blank=True, default="", max_length=2048)
|
|
|
|
def validate(self, attrs):
|
|
listing_type = attrs["listing_type"]
|
|
public_id = attrs["public_id"]
|
|
if listing_type == ListingClick.ListingType.EQUIPMENT:
|
|
item = EquipmentItem.objects.filter(public_id=public_id, is_active=True).select_related("vendor").first()
|
|
if not item:
|
|
raise serializers.ValidationError({"public_id": "No active equipment listing with this public_id."})
|
|
attrs["_equipment_item"] = item
|
|
else:
|
|
offering = AdventureOffering.objects.filter(public_id=public_id, is_active=True).select_related("vendor").first()
|
|
if not offering:
|
|
raise serializers.ValidationError({"public_id": "No active adventure offering with this public_id."})
|
|
attrs["_adventure_offering"] = offering
|
|
return attrs
|