Refactor: creators api to use the proper DRF classes

This commit is contained in:
Aroy-Art 2025-02-17 22:14:07 +01:00
parent 1b184bb8c6
commit 27c7fee6ad
Signed by: Aroy
GPG key ID: 583642324A1D2070

View file

@ -1,3 +1,4 @@
from typing import Dict, List, Optional
from rest_framework import serializers
from django.utils.timezone import localtime
@ -18,23 +19,24 @@ class CreatorListSerializer(serializers.ModelSerializer):
"source_site",
"slug",
"name",
"mature",
"date",
"description",
"avatar_url",
"banner_url",
]
def get_source_site(self, obj):
def get_source_site(self, obj) -> str:
return obj.source_site.slug
def get_date(self, obj):
def get_date(self, obj) -> Dict[str, str]:
return {
"created": localtime(obj.date_created).isoformat(),
"imported": localtime(obj.date_imported).isoformat(),
"last_import": localtime(obj.date_last_import).isoformat(),
}
def get_description(self, obj):
def get_description(self, obj) -> Optional[str]:
# Get the most recent CreatorDescription entry
creator_desc = (
CreatorDescription.objects.filter(creator=obj)
@ -47,13 +49,13 @@ class CreatorListSerializer(serializers.ModelSerializer):
return None # Return None if no descriptions exist
def get_avatar_url(self, obj):
def get_avatar_url(self, obj) -> str:
if obj.avatar:
return obj.avatar.file.url
else:
return None
def get_banner_url(self, obj):
def get_banner_url(self, obj) -> str:
if obj.banner:
return obj.banner.file.url
else:
@ -73,6 +75,7 @@ class CreatorDetailsSerializer(serializers.ModelSerializer):
"creator_id",
"slug",
"name",
"mature",
"avatar_url",
"banner_url",
"description",
@ -80,7 +83,7 @@ class CreatorDetailsSerializer(serializers.ModelSerializer):
"categories",
]
def get_description(self, obj):
def get_description(self, obj) -> List[Dict[str, str]]:
data = []
# Fetch descriptions ordered by date_imported from the through model
@ -99,26 +102,26 @@ class CreatorDetailsSerializer(serializers.ModelSerializer):
return data
def get_avatar_url(self, obj):
def get_avatar_url(self, obj) -> Optional[str]:
if obj.avatar:
return obj.avatar.file.url
else:
return None
def get_banner_url(self, obj):
def get_banner_url(self, obj) -> Optional[str]:
if obj.banner:
return obj.banner.file.url
else:
return None
def get_date(self, obj):
def get_date(self, obj) -> Dict[str, str]:
return {
"created": localtime(obj.date_created).isoformat(),
"imported": localtime(obj.date_imported).isoformat(),
"last_import": localtime(obj.date_last_import).isoformat(),
}
def get_categories(self, obj):
def get_categories(self, obj) -> List[Dict[str, str]]:
data = []
for cat in obj.categories.all():
data.append({"name": cat.name, "slug": cat.slug})