mirror of
https://github.com/seanmorley15/AdventureLog.git
synced 2025-07-24 23:39:37 +02:00
Refactor user ID handling to use UUIDs; update related components and serializers for consistency
This commit is contained in:
parent
129c76078e
commit
86d213bb8b
18 changed files with 78 additions and 46 deletions
|
@ -2,8 +2,10 @@ from django.utils import timezone
|
|||
import os
|
||||
from .models import Adventure, AdventureImage, ChecklistItem, Collection, Note, Transportation, Checklist, Visit, Category
|
||||
from rest_framework import serializers
|
||||
from main.utils import CustomModelSerializer
|
||||
|
||||
class AdventureImageSerializer(serializers.ModelSerializer):
|
||||
|
||||
class AdventureImageSerializer(CustomModelSerializer):
|
||||
class Meta:
|
||||
model = AdventureImage
|
||||
fields = ['id', 'image', 'adventure']
|
||||
|
@ -19,11 +21,12 @@ class AdventureImageSerializer(serializers.ModelSerializer):
|
|||
representation['image'] = f"{public_url}/media/{instance.image.name}"
|
||||
return representation
|
||||
|
||||
class CategorySerializer(serializers.ModelSerializer):
|
||||
class CategorySerializer(CustomModelSerializer):
|
||||
num_adventures = serializers.SerializerMethodField()
|
||||
class Meta:
|
||||
model = Category
|
||||
fields = ['id', 'name', 'display_name', 'icon', 'user_id']
|
||||
read_only_fields = ['id', 'user_id']
|
||||
fields = ['id', 'name', 'display_name', 'icon', 'user_id', 'num_adventures']
|
||||
read_only_fields = ['id', 'user_id', 'num_adventures']
|
||||
|
||||
def validate_name(self, value):
|
||||
if Category.objects.filter(name=value).exists():
|
||||
|
@ -31,14 +34,17 @@ class CategorySerializer(serializers.ModelSerializer):
|
|||
|
||||
return value
|
||||
|
||||
class VisitSerializer(serializers.ModelSerializer):
|
||||
def get_num_adventures(self, obj):
|
||||
return Adventure.objects.filter(category=obj, user_id=obj.user_id).count()
|
||||
|
||||
class VisitSerializer(CustomModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Visit
|
||||
fields = ['id', 'start_date', 'end_date', 'notes']
|
||||
read_only_fields = ['id']
|
||||
|
||||
class AdventureSerializer(serializers.ModelSerializer):
|
||||
class AdventureSerializer(CustomModelSerializer):
|
||||
images = AdventureImageSerializer(many=True, read_only=True)
|
||||
visits = VisitSerializer(many=True, read_only=False)
|
||||
category = CategorySerializer(read_only=True)
|
||||
|
@ -102,7 +108,7 @@ class AdventureSerializer(serializers.ModelSerializer):
|
|||
|
||||
return instance
|
||||
|
||||
class TransportationSerializer(serializers.ModelSerializer):
|
||||
class TransportationSerializer(CustomModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Transportation
|
||||
|
@ -113,7 +119,7 @@ class TransportationSerializer(serializers.ModelSerializer):
|
|||
]
|
||||
read_only_fields = ['id', 'created_at', 'updated_at', 'user_id']
|
||||
|
||||
class NoteSerializer(serializers.ModelSerializer):
|
||||
class NoteSerializer(CustomModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Note
|
||||
|
@ -123,7 +129,7 @@ class NoteSerializer(serializers.ModelSerializer):
|
|||
]
|
||||
read_only_fields = ['id', 'created_at', 'updated_at', 'user_id']
|
||||
|
||||
class ChecklistItemSerializer(serializers.ModelSerializer):
|
||||
class ChecklistItemSerializer(CustomModelSerializer):
|
||||
class Meta:
|
||||
model = ChecklistItem
|
||||
fields = [
|
||||
|
@ -131,7 +137,7 @@ class ChecklistItemSerializer(serializers.ModelSerializer):
|
|||
]
|
||||
read_only_fields = ['id', 'created_at', 'updated_at', 'user_id', 'checklist']
|
||||
|
||||
class ChecklistSerializer(serializers.ModelSerializer):
|
||||
class ChecklistSerializer(CustomModelSerializer):
|
||||
items = ChecklistItemSerializer(many=True, source='checklistitem_set')
|
||||
class Meta:
|
||||
model = Checklist
|
||||
|
@ -194,7 +200,7 @@ class ChecklistSerializer(serializers.ModelSerializer):
|
|||
|
||||
return data
|
||||
|
||||
class CollectionSerializer(serializers.ModelSerializer):
|
||||
class CollectionSerializer(CustomModelSerializer):
|
||||
adventures = AdventureSerializer(many=True, read_only=True, source='adventure_set')
|
||||
transportations = TransportationSerializer(many=True, read_only=True, source='transportation_set')
|
||||
notes = NoteSerializer(many=True, read_only=True, source='note_set')
|
||||
|
|
10
backend/server/main/utils.py
Normal file
10
backend/server/main/utils.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from rest_framework import serializers
|
||||
|
||||
def get_user_uuid(user):
|
||||
return str(user.uuid)
|
||||
|
||||
class CustomModelSerializer(serializers.ModelSerializer):
|
||||
def to_representation(self, instance):
|
||||
representation = super().to_representation(instance)
|
||||
representation['user_id'] = get_user_uuid(instance.user_id)
|
||||
return representation
|
|
@ -196,6 +196,7 @@ class CustomUserDetailsSerializer(UserDetailsSerializer):
|
|||
# remove any ' from the url
|
||||
public_url = public_url.replace("'", "")
|
||||
representation['profile_pic'] = f"{public_url}/media/{instance.profile_pic.name}"
|
||||
del representation['pk'] # remove the pk field from the response
|
||||
return representation
|
||||
|
||||
class MyPasswordResetSerializer(PasswordResetSerializer):
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import os
|
||||
from .models import Country, Region, VisitedRegion
|
||||
from rest_framework import serializers
|
||||
from main.utils import CustomModelSerializer
|
||||
|
||||
|
||||
class CountrySerializer(serializers.ModelSerializer):
|
||||
def get_public_url(self, obj):
|
||||
|
@ -36,7 +38,7 @@ class RegionSerializer(serializers.ModelSerializer):
|
|||
fields = '__all__'
|
||||
read_only_fields = ['id', 'name', 'country', 'longitude', 'latitude']
|
||||
|
||||
class VisitedRegionSerializer(serializers.ModelSerializer):
|
||||
class VisitedRegionSerializer(CustomModelSerializer):
|
||||
longitude = serializers.DecimalField(source='region.longitude', max_digits=9, decimal_places=6, read_only=True)
|
||||
latitude = serializers.DecimalField(source='region.latitude', max_digits=9, decimal_places=6, read_only=True)
|
||||
name = serializers.CharField(source='region.name', read_only=True)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue