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