first backend frontend split
with docker compose file nextjs something something also includes migrations
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
from .track import *
|
||||
from .artist import *
|
||||
from .user import *
|
||||
from .album import *
|
||||
from .profile import *
|
||||
from .vote import *
|
||||
@@ -0,0 +1,12 @@
|
||||
from django.db.models.functions import Extract
|
||||
from playlist.models import Album
|
||||
from rest_framework import serializers
|
||||
|
||||
class AlbumSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = Album
|
||||
fields = '__all__'
|
||||
extra_kwargs = {
|
||||
'url': {'view_name': 'api-album', 'lookup_field': 'id'},
|
||||
'artists': {'view_name': 'api-artist', 'lookup_field': 'id'},
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
from playlist.models import Artist
|
||||
from rest_framework import serializers
|
||||
|
||||
class ArtistSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = Artist
|
||||
fields = ['id', 'name', 'url']
|
||||
extra_kwargs = {
|
||||
'url': {'view_name': 'api-artist', 'lookup_field': 'id'},
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
from playlist.models import Profile, Background
|
||||
from rest_framework import serializers
|
||||
|
||||
class BackgroundSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Background
|
||||
fields = '__all__'
|
||||
|
||||
class ProfileSerializer(serializers.ModelSerializer):
|
||||
background = BackgroundSerializer()
|
||||
|
||||
class Meta:
|
||||
model = Profile
|
||||
fields = '__all__'
|
||||
|
||||
class ProfileUpdateSerializer(serializers.ModelSerializer):
|
||||
background = serializers.PrimaryKeyRelatedField(many=False, queryset=Background.objects.all())
|
||||
class Meta:
|
||||
model = Profile
|
||||
fields = ['background']
|
||||
@@ -0,0 +1,13 @@
|
||||
from playlist.models import Track
|
||||
from rest_framework import serializers
|
||||
|
||||
class TrackSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = Track
|
||||
fields = '__all__'
|
||||
extra_kwargs = {
|
||||
'url': {'view_name': 'api-track', 'lookup_field': 'id'},
|
||||
'artists': {'view_name': 'api-artist', 'lookup_field': 'id'},
|
||||
'album': {'view_name': 'api-album', 'lookup_field': 'id'},
|
||||
'nominated_by': {'view_name': 'api-user', 'lookup_field': 'id'}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
from django.contrib.auth.models import User
|
||||
from rest_framework import serializers
|
||||
|
||||
class UserSerializer(serializers.HyperlinkedModelSerializer):
|
||||
# Add explicit reverse lookup to profile
|
||||
profile = serializers.HyperlinkedRelatedField(
|
||||
view_name='api-profile',
|
||||
lookup_field='id',
|
||||
read_only=True
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['url', 'id', 'username', 'email', 'profile']
|
||||
extra_kwargs = {
|
||||
'url': {'view_name': 'api-user', 'lookup_field': 'id'}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
from rest_framework import serializers
|
||||
from playlist.models import Vote, Track
|
||||
|
||||
class VoteSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = Vote
|
||||
fields = '__all__'
|
||||
extra_kwargs = {
|
||||
'url': {'view_name': 'api-vote', 'lookup_field': 'id'},
|
||||
'track': {'view_name': 'api-track', 'lookup_field': 'id'},
|
||||
'user': {'view_name': 'api-user', 'lookup_field': 'id'}
|
||||
}
|
||||
|
||||
class VoteSaveSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Vote
|
||||
fields = ['track', 'points', 'skipped']
|
||||
|
||||
def create(self, validated_data):
|
||||
"""
|
||||
Create a new vote. Deletes a previous skipped vote if it exists.
|
||||
"""
|
||||
user = self.context['request'].user
|
||||
track = validated_data['track']
|
||||
previous_vote = Vote.objects.filter(user=user, track=track).first()
|
||||
if previous_vote and previous_vote.skipped:
|
||||
previous_vote.delete()
|
||||
return Vote.objects.create(**validated_data)
|
||||
Reference in New Issue
Block a user