1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-07-19 04:49:37 +02:00

feat: enhance AdventureImageSerializer to support Immich integration and improve image URL handling

This commit is contained in:
Sean Morley 2025-06-03 17:16:28 -04:00
parent 45e195a84e
commit b336a24401

View file

@ -16,18 +16,26 @@ class AdventureImageSerializer(CustomModelSerializer):
read_only_fields = ['id', 'user_id']
def to_representation(self, instance):
representation = super().to_representation(instance)
public_url = os.environ.get('PUBLIC_URL', 'http://127.0.0.1:8000').rstrip('/')
public_url = public_url.replace("'", "")
if instance.image:
representation['image'] = f"{public_url}/media/{instance.image.name}"
# If immich_id is set, check for user integration once
integration = None
if instance.immich_id:
integration = ImmichIntegration.objects.filter(user=instance.user_id).first()
if not integration:
return None # Skip if Immich image but no integration
# Base representation
representation = super().to_representation(instance)
# Prepare public URL once
public_url = os.environ.get('PUBLIC_URL', 'http://127.0.0.1:8000').rstrip('/').replace("'", "")
if instance.immich_id:
# Use Immich integration URL
representation['image'] = f"{public_url}/api/integrations/immich/{integration.id}/get/{instance.immich_id}"
elif instance.image:
# Use local image URL
representation['image'] = f"{public_url}/media/{instance.image.name}"
if integration:
representation['image'] = f"{public_url}/api/integrations/immich/{integration.id}/get/{instance.immich_id}"
else:
representation['image'] = None
return representation
class AttachmentSerializer(CustomModelSerializer):
@ -84,7 +92,7 @@ class VisitSerializer(serializers.ModelSerializer):
read_only_fields = ['id']
class AdventureSerializer(CustomModelSerializer):
images = AdventureImageSerializer(many=True, read_only=True)
images = serializers.SerializerMethodField()
visits = VisitSerializer(many=True, read_only=False, required=False)
attachments = AttachmentSerializer(many=True, read_only=True)
category = CategorySerializer(read_only=False, required=False)
@ -103,6 +111,11 @@ class AdventureSerializer(CustomModelSerializer):
]
read_only_fields = ['id', 'created_at', 'updated_at', 'user_id', 'is_visited', 'user']
def get_images(self, obj):
serializer = AdventureImageSerializer(obj.images.all(), many=True, context=self.context)
# Filter out None values from the serialized data
return [image for image in serializer.data if image is not None]
def validate_category(self, category_data):
if isinstance(category_data, Category):
return category_data