diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/packages.sh b/packages.sh old mode 100644 new mode 100755 index 33bbc06..294749a --- a/packages.sh +++ b/packages.sh @@ -1,6 +1,7 @@ pip install django pip install djangorestframework pip install django-filter -pip install django-enumfield +pip install django-rest-enumfield +pip install drf_yasg pip install pyjwt pip install markdown diff --git a/portfolio/__init__.py b/portfolio/__init__.py old mode 100644 new mode 100755 diff --git a/portfolio/__pycache__/__init__.cpython-36.pyc b/portfolio/__pycache__/__init__.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/__pycache__/settings.cpython-36.pyc b/portfolio/__pycache__/settings.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/__pycache__/urls.cpython-36.pyc b/portfolio/__pycache__/urls.cpython-36.pyc index a9c404d..e4fa03c 100644 Binary files a/portfolio/__pycache__/urls.cpython-36.pyc and b/portfolio/__pycache__/urls.cpython-36.pyc differ diff --git a/portfolio/__pycache__/utils.cpython-36.pyc b/portfolio/__pycache__/utils.cpython-36.pyc new file mode 100644 index 0000000..dcdc211 Binary files /dev/null and b/portfolio/__pycache__/utils.cpython-36.pyc differ diff --git a/portfolio/__pycache__/wsgi.cpython-36.pyc b/portfolio/__pycache__/wsgi.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/account/__init__.py b/portfolio/account/__init__.py old mode 100644 new mode 100755 diff --git a/portfolio/account/__pycache__/__init__.cpython-36.pyc b/portfolio/account/__pycache__/__init__.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/account/__pycache__/admin.cpython-36.pyc b/portfolio/account/__pycache__/admin.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/account/__pycache__/models.cpython-36.pyc b/portfolio/account/__pycache__/models.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/account/__pycache__/serializers.cpython-36.pyc b/portfolio/account/__pycache__/serializers.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/account/__pycache__/views.cpython-36.pyc b/portfolio/account/__pycache__/views.cpython-36.pyc old mode 100644 new mode 100755 index ba76877..59c1b79 Binary files a/portfolio/account/__pycache__/views.cpython-36.pyc and b/portfolio/account/__pycache__/views.cpython-36.pyc differ diff --git a/portfolio/account/admin.py b/portfolio/account/admin.py old mode 100644 new mode 100755 diff --git a/portfolio/account/apps.py b/portfolio/account/apps.py old mode 100644 new mode 100755 diff --git a/portfolio/account/migrations/__init__.py b/portfolio/account/migrations/__init__.py old mode 100644 new mode 100755 diff --git a/portfolio/account/models.py b/portfolio/account/models.py old mode 100644 new mode 100755 diff --git a/portfolio/account/serializers.py b/portfolio/account/serializers.py old mode 100644 new mode 100755 diff --git a/portfolio/account/tests.py b/portfolio/account/tests.py old mode 100644 new mode 100755 diff --git a/portfolio/account/views.py b/portfolio/account/views.py old mode 100644 new mode 100755 index 1691898..f7f7501 --- a/portfolio/account/views.py +++ b/portfolio/account/views.py @@ -1,7 +1,6 @@ from rest_framework import viewsets, mixins from rest_framework.response import Response from rest_framework import permissions -from rest_framework.decorators import permission_classes from rest_framework.authtoken.views import ObtainAuthToken from drf_yasg.utils import swagger_auto_schema diff --git a/portfolio/album/__init__.py b/portfolio/album/__init__.py old mode 100644 new mode 100755 diff --git a/portfolio/album/__pycache__/__init__.cpython-36.pyc b/portfolio/album/__pycache__/__init__.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/album/__pycache__/admin.cpython-36.pyc b/portfolio/album/__pycache__/admin.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/album/__pycache__/models.cpython-36.pyc b/portfolio/album/__pycache__/models.cpython-36.pyc index a61b4b0..48e7e01 100644 Binary files a/portfolio/album/__pycache__/models.cpython-36.pyc and b/portfolio/album/__pycache__/models.cpython-36.pyc differ diff --git a/portfolio/album/__pycache__/serializers.cpython-36.pyc b/portfolio/album/__pycache__/serializers.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/album/__pycache__/views.cpython-36.pyc b/portfolio/album/__pycache__/views.cpython-36.pyc index 666b0f1..bb0f537 100644 Binary files a/portfolio/album/__pycache__/views.cpython-36.pyc and b/portfolio/album/__pycache__/views.cpython-36.pyc differ diff --git a/portfolio/album/admin.py b/portfolio/album/admin.py old mode 100644 new mode 100755 diff --git a/portfolio/album/apps.py b/portfolio/album/apps.py old mode 100644 new mode 100755 diff --git a/portfolio/album/migrations/__init__.py b/portfolio/album/migrations/__init__.py old mode 100644 new mode 100755 diff --git a/portfolio/album/models.py b/portfolio/album/models.py old mode 100644 new mode 100755 index f5dc1d6..365b608 --- a/portfolio/album/models.py +++ b/portfolio/album/models.py @@ -1,27 +1,7 @@ from django.db import models from portfolio.account.models import Account - - -class OneToManyModel(models.Model): - - def fromDict(self, dict): - self.__dict__.update(dict) - - def create(self, dict): - new_object = self() - new_object.fromDict(dict) - new_object.save() - return new_object - - def update(self, dict): - self.fromDict(dict) - self.save() - return self - - class Meta: - abstract = True - +from portfolio.utils import OneToManyModel class Album(OneToManyModel): title = models.CharField(max_length=255) diff --git a/portfolio/album/serializers.py b/portfolio/album/serializers.py old mode 100644 new mode 100755 diff --git a/portfolio/album/tests.py b/portfolio/album/tests.py old mode 100644 new mode 100755 diff --git a/portfolio/album/views.py b/portfolio/album/views.py old mode 100644 new mode 100755 index b316147..03e6140 --- a/portfolio/album/views.py +++ b/portfolio/album/views.py @@ -2,22 +2,44 @@ from django.shortcuts import render from rest_framework import viewsets -from drf_yasg.utils import swagger_auto_schema - from .models import * from .serializers import * class TrackViewSet(viewsets.ModelViewSet): + """ + A Tack CRUD (abstract from `viewsets.ModelViewSet`): + `GET`: `list()` + `GET`: `retrieve()` /parameter {id} + `POST`: `create()` + `PUT`&`PATCH`: `update()` /parameter {id} + `DELETE`: `destroy()` /parameter {id} + """ queryset = Track.objects.all() serializer_class = TrackSerializer class TrackRowViewSet(viewsets.ModelViewSet): + """ + A TrackRow CRUD (abstract from `viewsets.ModelViewSet`): + `GET`: `list()` + `GET`: `retrieve()` /parameter {id} + `POST`: `create()` + `PUT`&`PATCH`: `update()` /parameter {id} + `DELETE`: `destroy()` /parameter {id} + """ queryset = TrackRow.objects.all() serializer_class = TrackRowSerializer class AlbumViewSet(viewsets.ModelViewSet): + """ + A Album CRUD (abstract from `viewsets.ModelViewSet`): + `GET`: `list()` + `GET`: `retrieve()` /parameter {id} + `POST`: `create()` + `PUT`&`PATCH`: `update()` /parameter {id} + `DELETE`: `destroy()` /parameter {id} + """ queryset = Album.objects.all() serializer_class = AlbumSerializer diff --git a/portfolio/asgi.py b/portfolio/asgi.py old mode 100644 new mode 100755 diff --git a/portfolio/comment/__init__.py b/portfolio/comment/__init__.py old mode 100644 new mode 100755 diff --git a/portfolio/comment/__pycache__/__init__.cpython-36.pyc b/portfolio/comment/__pycache__/__init__.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/comment/__pycache__/admin.cpython-36.pyc b/portfolio/comment/__pycache__/admin.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/comment/__pycache__/models.cpython-36.pyc b/portfolio/comment/__pycache__/models.cpython-36.pyc index 15e2052..9a2d5ba 100644 Binary files a/portfolio/comment/__pycache__/models.cpython-36.pyc and b/portfolio/comment/__pycache__/models.cpython-36.pyc differ diff --git a/portfolio/comment/admin.py b/portfolio/comment/admin.py old mode 100644 new mode 100755 diff --git a/portfolio/comment/apps.py b/portfolio/comment/apps.py old mode 100644 new mode 100755 diff --git a/portfolio/comment/migrations/__init__.py b/portfolio/comment/migrations/__init__.py old mode 100644 new mode 100755 diff --git a/portfolio/comment/models.py b/portfolio/comment/models.py old mode 100644 new mode 100755 index d925391..01d9424 --- a/portfolio/comment/models.py +++ b/portfolio/comment/models.py @@ -1,6 +1,6 @@ from django.db import models -from account.models import Account, Guest +from portfolio.account.models import Account, Guest class AbstractComment(models.Model): diff --git a/portfolio/comment/tests.py b/portfolio/comment/tests.py old mode 100644 new mode 100755 diff --git a/portfolio/comment/views.py b/portfolio/comment/views.py old mode 100644 new mode 100755 diff --git a/portfolio/migrations/0001_initial.py b/portfolio/migrations/0001_initial.py old mode 100644 new mode 100755 diff --git a/portfolio/migrations/0002_albumrating_commentrating_guestcomment_trackrating_usercomment.py b/portfolio/migrations/0002_albumrating_commentrating_guestcomment_trackrating_usercomment.py new file mode 100644 index 0000000..cb004ef --- /dev/null +++ b/portfolio/migrations/0002_albumrating_commentrating_guestcomment_trackrating_usercomment.py @@ -0,0 +1,69 @@ +# Generated by Django 3.0.8 on 2020-07-03 10:54 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('portfolio', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='UserComment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.CharField(max_length=255)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='portfolio.Account')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='TrackRating', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('track', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='portfolio.Track')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='portfolio.Account')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='GuestComment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.CharField(max_length=255)), + ('guest', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='portfolio.Guest')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='CommentRating', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('comment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='portfolio.UserComment')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='portfolio.Account')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='AlbumRating', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('album', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='portfolio.Album')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='portfolio.Account')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/portfolio/migrations/__init__.py b/portfolio/migrations/__init__.py old mode 100644 new mode 100755 diff --git a/portfolio/migrations/__pycache__/0001_initial.cpython-36.pyc b/portfolio/migrations/__pycache__/0001_initial.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/migrations/__pycache__/0002_album_track_trackrow.cpython-36.pyc b/portfolio/migrations/__pycache__/0002_album_track_trackrow.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/migrations/__pycache__/0002_albumrating_commentrating_guestcomment_trackrating_usercomment.cpython-36.pyc b/portfolio/migrations/__pycache__/0002_albumrating_commentrating_guestcomment_trackrating_usercomment.cpython-36.pyc new file mode 100644 index 0000000..ca3670f Binary files /dev/null and b/portfolio/migrations/__pycache__/0002_albumrating_commentrating_guestcomment_trackrating_usercomment.cpython-36.pyc differ diff --git a/portfolio/migrations/__pycache__/0003_auto_20200620_1850.cpython-36.pyc b/portfolio/migrations/__pycache__/0003_auto_20200620_1850.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/migrations/__pycache__/0004_auto_20200620_1956.cpython-36.pyc b/portfolio/migrations/__pycache__/0004_auto_20200620_1956.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/migrations/__pycache__/0005_auto_20200620_2006.cpython-36.pyc b/portfolio/migrations/__pycache__/0005_auto_20200620_2006.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/migrations/__pycache__/__init__.cpython-36.pyc b/portfolio/migrations/__pycache__/__init__.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/playlist/__init__.py b/portfolio/playlist/__init__.py old mode 100644 new mode 100755 diff --git a/portfolio/playlist/__pycache__/__init__.cpython-36.pyc b/portfolio/playlist/__pycache__/__init__.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/playlist/__pycache__/admin.cpython-36.pyc b/portfolio/playlist/__pycache__/admin.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/playlist/__pycache__/models.cpython-36.pyc b/portfolio/playlist/__pycache__/models.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/playlist/admin.py b/portfolio/playlist/admin.py old mode 100644 new mode 100755 diff --git a/portfolio/playlist/apps.py b/portfolio/playlist/apps.py old mode 100644 new mode 100755 diff --git a/portfolio/playlist/migrations/__init__.py b/portfolio/playlist/migrations/__init__.py old mode 100644 new mode 100755 diff --git a/portfolio/playlist/models.py b/portfolio/playlist/models.py old mode 100644 new mode 100755 diff --git a/portfolio/playlist/tests.py b/portfolio/playlist/tests.py old mode 100644 new mode 100755 diff --git a/portfolio/playlist/views.py b/portfolio/playlist/views.py old mode 100644 new mode 100755 diff --git a/portfolio/rating/__init__.py b/portfolio/rating/__init__.py old mode 100644 new mode 100755 diff --git a/portfolio/rating/__pycache__/__init__.cpython-36.pyc b/portfolio/rating/__pycache__/__init__.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/rating/__pycache__/admin.cpython-36.pyc b/portfolio/rating/__pycache__/admin.cpython-36.pyc old mode 100644 new mode 100755 diff --git a/portfolio/rating/__pycache__/models.cpython-36.pyc b/portfolio/rating/__pycache__/models.cpython-36.pyc index e03f684..2588354 100644 Binary files a/portfolio/rating/__pycache__/models.cpython-36.pyc and b/portfolio/rating/__pycache__/models.cpython-36.pyc differ diff --git a/portfolio/rating/__pycache__/serializers.cpython-36.pyc b/portfolio/rating/__pycache__/serializers.cpython-36.pyc new file mode 100644 index 0000000..baf42e5 Binary files /dev/null and b/portfolio/rating/__pycache__/serializers.cpython-36.pyc differ diff --git a/portfolio/rating/__pycache__/views.cpython-36.pyc b/portfolio/rating/__pycache__/views.cpython-36.pyc new file mode 100644 index 0000000..3b0d6bc Binary files /dev/null and b/portfolio/rating/__pycache__/views.cpython-36.pyc differ diff --git a/portfolio/rating/admin.py b/portfolio/rating/admin.py old mode 100644 new mode 100755 diff --git a/portfolio/rating/apps.py b/portfolio/rating/apps.py old mode 100644 new mode 100755 diff --git a/portfolio/rating/migrations/__init__.py b/portfolio/rating/migrations/__init__.py old mode 100644 new mode 100755 diff --git a/portfolio/rating/models.py b/portfolio/rating/models.py old mode 100644 new mode 100755 index 190cffe..5383d69 --- a/portfolio/rating/models.py +++ b/portfolio/rating/models.py @@ -1,25 +1,26 @@ from django.db import models from django.utils.translation import ugettext_lazy -from django_enumfield import enum +from rest_enumfield import EnumField +import enum -from account.models import Account -from comment.models import UserComment, GuestComment -from album.models import Album -from song.models import Song +from portfolio.account.models import Account +from portfolio.comment.models import UserComment, GuestComment +from portfolio.album.models import Album, Track +from portfolio.utils import OneToManyModel class RatingValue(enum.Enum): POSITIVE = 1 - NEGATIVE = 0 + NEGATIVE = -1 __labels__ = { - POSITIVE: ugettext_lazy('Positive'), - NEGATIVE: ugettext_lazy('Negative'), + POSITIVE: ugettext_lazy('POSITIVE'), + NEGATIVE: ugettext_lazy('NEGATIVE'), } -class AbstractRating(models.Model): - value = enum.EnumField(RatingValue) +class AbstractRating(OneToManyModel): + value = EnumField(choices=RatingValue) user = models.ForeignKey(Account, on_delete=models.CASCADE) class Meta: @@ -29,10 +30,33 @@ class AbstractRating(models.Model): class CommentRating(AbstractRating): comment = models.ForeignKey(UserComment, on_delete=models.CASCADE) + def toDict(self): + return { + "id": self.id, + "user_id": self.user_id, + "value": self.value, + "comment_id": self.comment_id + } + class AlbumRating(AbstractRating): album = models.ForeignKey(Album, on_delete=models.CASCADE) + def toDict(self): + return { + "id": self.id, + "user_id": self.user_id, + "value": self.value, + "album_id": self.album_id + } -class SongRating(AbstractRating): - song = models.ForeignKey(Song, on_delete=models.CASCADE) +class TrackRating(AbstractRating): + track = models.ForeignKey(Track, on_delete=models.CASCADE) + + def toDict(self): + return { + "id": self.id, + "user_id": self.user_id, + "value": self.value, + "track_id": self.track_id + } \ No newline at end of file diff --git a/portfolio/rating/serializers.py b/portfolio/rating/serializers.py new file mode 100644 index 0000000..53f2395 --- /dev/null +++ b/portfolio/rating/serializers.py @@ -0,0 +1,75 @@ +from rest_framework import serializers +from rest_enumfield import EnumField + +from .models import * + +class TrackRatingSerializer(serializers.ModelSerializer): + id = serializers.IntegerField(read_only = True) + user_id = serializers.IntegerField() + value = EnumField( + choices=RatingValue, + to_choice=lambda x:(x.name, x.value), + to_repr=lambda x: x + ) + # track_id = serializers.IntegerField() + + def get_default(track_id): + queryset = TrackRating.objects.filter(track_id=track_id) + return [ x.toDict() for x in queryset ] + + @staticmethod + def create(validated_data, track_id): + validated_data["track_id"] = track_id + return TrackRating.create(TrackRating, validated_data) + + @staticmethod + def delete(track_id, user_id): + return TrackRating.objects.get(track_id=track_id, user_id=user_id).delete() + + class Meta: + model = TrackRating + fields = ['id', 'user_id', 'value'] + + +class CommentRatingSerializer(serializers.ModelSerializer): + id = serializers.IntegerField(read_only = True) + user_id = serializers.IntegerField() + value = EnumField( + choices=RatingValue, + to_choice=lambda x:(x.name, x.value), + to_repr=lambda x: x + ) + # comment_id = serializers.IntegerField() + + def create(self, validated_data): + return CommentRating.create(TrackRating, validated_data) + + def update(self, instance, validated_data): + return instance.update(validated_data) + + class Meta: + model = CommentRating + fields = ['id', 'user_id', 'value'] + + +class AlbumRatingSerializer(serializers.ModelSerializer): + id = serializers.IntegerField(read_only = True) + user_id = serializers.IntegerField() + value = EnumField( + choices=RatingValue, + to_choice=lambda x:(x.name, x.value), + to_repr=lambda x: x + ) + # album_id = serializers.IntegerField() + + def create(self, validated_data): + return AlbumRating.create(TrackRating, validated_data) + + def update(self, instance, validated_data): + return instance.update(validated_data) + + class Meta: + model = AlbumRating + fields = ['id', 'user_id', 'value'] + + \ No newline at end of file diff --git a/portfolio/rating/tests.py b/portfolio/rating/tests.py old mode 100644 new mode 100755 diff --git a/portfolio/rating/views.py b/portfolio/rating/views.py old mode 100644 new mode 100755 index 91ea44a..ae84b89 --- a/portfolio/rating/views.py +++ b/portfolio/rating/views.py @@ -1,3 +1,79 @@ from django.shortcuts import render -# Create your views here. +from rest_framework import viewsets, mixins +from rest_framework.decorators import action +from rest_framework.response import Response +from drf_yasg.utils import swagger_auto_schema + +from django.shortcuts import get_object_or_404 + +from .models import TrackRating, AlbumRating, CommentRating +from .serializers import TrackRatingSerializer, AlbumRatingSerializer, CommentRatingSerializer + +class TrackRatingViewSet( + mixins.ListModelMixin, + mixins.CreateModelMixin, + mixins.DestroyModelMixin, + viewsets.GenericViewSet +): + queryset = TrackRating.objects.all() + serializer_class = TrackRatingSerializer + lookup_url_kwarg = 'user_id' + + def list(self, request, *args, **kwargs): + trackID = self.kwargs.get('track_id') + serializer = self.serializer_class.get_default(trackID) + print(serializer) + return Response(serializer) + + def create(self, request, *args, **kwargs): + trackID = self.kwargs.get('track_id') + checkValidate = self.serializer_class(data = request.data) + if checkValidate and trackID is not None: + serializer = self.serializer_class.create(request.data, track_id=trackID) + return Response(serializer.toDict()) + return Response({ "ID": f"{trackID}" }) + + def destroy(self, request, *args, **kwargs): + trackID = self.kwargs.get('track_id') + userID = self.kwargs.get(self.lookup_url_kwarg) + return Response(self.serializer_class.delete(trackID, userID)) + +class AlbumRatingViewSet( + mixins.ListModelMixin, + mixins.CreateModelMixin, + mixins.DestroyModelMixin, + viewsets.GenericViewSet +): + queryset = AlbumRating.objects.all() + serializer_class = AlbumRatingSerializer + lookup_url_kwarg = 'user_id' + + def get(self, request, *args, **kwargs): + return Response("elo") + + def post(self, request, *args, **kwargs): + return Response("elo") + + def delete(self, request, *args, **kwargs): + return Response("elo") + +class CommentRatingViewSet( + mixins.ListModelMixin, + mixins.CreateModelMixin, + mixins.DestroyModelMixin, + viewsets.GenericViewSet +): + queryset = CommentRating.objects.all() + serializer_class = CommentRatingSerializer + lookup_url_kwarg = 'user_id' + + def get(self, request, *args, **kwargs): + return Response("elo") + + def post(self, request, *args, **kwargs): + return Response("elo") + + def delete(self, request, *args, **kwargs): + return Response("elo") + diff --git a/portfolio/settings.py b/portfolio/settings.py old mode 100644 new mode 100755 diff --git a/portfolio/urls.py b/portfolio/urls.py old mode 100644 new mode 100755 index 0c12cec..3364a9a --- a/portfolio/urls.py +++ b/portfolio/urls.py @@ -24,6 +24,7 @@ from rest_framework.authtoken import views as authViews from portfolio import settings from .account.views import GuestViewSet, AccountViewSet, AccountAuth from .album.views import AlbumViewSet, TrackViewSet, TrackRowViewSet +from .rating.views import TrackRatingViewSet, AlbumRatingViewSet, CommentRatingViewSet schema_view = get_schema_view( openapi.Info( @@ -46,6 +47,10 @@ router.register(r'album', AlbumViewSet, basename='album') router.register(r'track', TrackViewSet, basename='track') router.register(r'track-row', TrackRowViewSet, basename='track row') +router.register(r'track/(?P\w+)/rating', TrackRatingViewSet, basename='track rating') +router.register(r'album/(?P\w+)/rating', AlbumRatingViewSet, basename='album rating') +router.register(r'comment/(?P\w+)/rating', CommentRatingViewSet, basename='comment rating') + urlpatterns = [ path('admin/', admin.site.urls), path('', include(router.urls)), diff --git a/portfolio/utils.py b/portfolio/utils.py new file mode 100644 index 0000000..dc575d2 --- /dev/null +++ b/portfolio/utils.py @@ -0,0 +1,20 @@ +from django.db import models + +class OneToManyModel(models.Model): + + def fromDict(self, dict): + self.__dict__.update(dict) + + def create(self, dict): + new_object = self() + new_object.fromDict(dict) + new_object.save() + return new_object + + def update(self, dict): + self.fromDict(dict) + self.save() + return self + + class Meta: + abstract = True \ No newline at end of file diff --git a/portfolio/wsgi.py b/portfolio/wsgi.py old mode 100644 new mode 100755