2025-04-20 16:49:52 -05:00
|
|
|
from django.utils import timezone
|
2025-04-08 17:04:32 -05:00
|
|
|
from gunicorn.config import User
|
2025-04-07 00:30:11 -05:00
|
|
|
from rest_framework import serializers
|
2025-04-08 17:04:32 -05:00
|
|
|
from movie_manager.models import Movie, MovieList, Schedule, Showing
|
|
|
|
|
2025-04-07 00:30:11 -05:00
|
|
|
|
|
|
|
class MovieSerializer(serializers.ModelSerializer):
|
2025-05-29 13:58:00 -05:00
|
|
|
has_been_scheduled = serializers.SerializerMethodField()
|
|
|
|
|
2025-04-07 00:30:11 -05:00
|
|
|
class Meta:
|
|
|
|
model = Movie
|
2025-05-29 13:58:00 -05:00
|
|
|
fields = [
|
|
|
|
"id",
|
|
|
|
"title",
|
|
|
|
"imdb_id",
|
|
|
|
"year",
|
|
|
|
"director",
|
|
|
|
"actors",
|
|
|
|
"plot",
|
|
|
|
"genre",
|
|
|
|
"mpaa_rating",
|
|
|
|
"critic_scores",
|
|
|
|
"poster",
|
|
|
|
"added_by_id",
|
|
|
|
"has_been_scheduled",
|
|
|
|
]
|
|
|
|
|
|
|
|
def get_has_been_scheduled(self, obj):
|
2025-06-30 17:08:47 -05:00
|
|
|
return Showing.objects.filter(movie_id=obj.id).exists()
|
2025-04-07 00:30:11 -05:00
|
|
|
|
2025-06-30 17:30:41 -05:00
|
|
|
class MovieListListSerializer(serializers.ModelSerializer):
|
|
|
|
movie_count = serializers.SerializerMethodField()
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = MovieList
|
|
|
|
fields = ["id", "name", "owner", "public", "movie_count"]
|
|
|
|
|
|
|
|
def get_movie_count(self, obj):
|
|
|
|
return obj.movies.count()
|
|
|
|
|
2025-04-07 00:30:11 -05:00
|
|
|
|
|
|
|
class MovieListSerializer(serializers.ModelSerializer):
|
2025-04-07 21:05:05 -05:00
|
|
|
movies = MovieSerializer(read_only=True, many=True)
|
2025-06-30 17:08:47 -05:00
|
|
|
serializer_class = MovieSerializer
|
2025-06-30 18:15:56 -05:00
|
|
|
owner = serializers.PrimaryKeyRelatedField(read_only=True)
|
2025-06-30 17:08:47 -05:00
|
|
|
|
|
|
|
def get_queryset(self):
|
|
|
|
return MovieList.objects.prefetch_related(
|
|
|
|
"movies",
|
|
|
|
"movies__showing_set"
|
|
|
|
)
|
2025-04-07 00:30:11 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = MovieList
|
2025-06-30 17:30:41 -05:00
|
|
|
fields = ["id", "name", "owner", "public", "movies"]
|
2025-04-07 00:30:11 -05:00
|
|
|
|
2025-04-08 17:04:32 -05:00
|
|
|
|
2025-04-13 01:47:22 -05:00
|
|
|
|
2025-04-08 17:04:32 -05:00
|
|
|
class UserSerializer(serializers.Serializer):
|
|
|
|
class Meta:
|
|
|
|
model = User
|
|
|
|
fields = ["id", "username"]
|
|
|
|
|
|
|
|
|
|
|
|
class ShowingSerializer(serializers.ModelSerializer):
|
|
|
|
movie = MovieSerializer(read_only=True)
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Showing
|
2025-04-20 16:49:52 -05:00
|
|
|
fields = ["id", "public", "showtime", "movie", "owner"]
|
|
|
|
|
|
|
|
def to_internal_value(self, data):
|
|
|
|
validated_data = super().to_internal_value(data)
|
|
|
|
|
|
|
|
if "showtime" in validated_data and timezone.is_naive(
|
|
|
|
validated_data["showtime"]
|
|
|
|
):
|
|
|
|
validated_data["showtime"] = timezone.make_aware(validated_data["showtime"])
|
|
|
|
|
|
|
|
return validated_data
|
2025-04-08 17:04:32 -05:00
|
|
|
|
|
|
|
|
|
|
|
class ScheduleSerializer(serializers.ModelSerializer):
|
|
|
|
name = serializers.CharField(read_only=True)
|
2025-04-20 22:29:55 -05:00
|
|
|
showings = ShowingSerializer(source="showing_set", read_only=True, many=True)
|
2025-04-08 17:04:32 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Schedule
|
2025-04-13 01:47:22 -05:00
|
|
|
fields = ["name", "owner", "public", "slug", "showings"]
|