diff --git a/server/proj/audio/models.py b/server/proj/audio/models.py index 5a52c91..9d41e47 100644 --- a/server/proj/audio/models.py +++ b/server/proj/audio/models.py @@ -40,5 +40,5 @@ class FavoriteSong(models.Model): class PlayList(models.Model): name = models.CharField('Название плейлиста', max_length=50) - song = models.ManyToManyField(Song) + song = models.ManyToManyField(Song, blank=True, null=True) user = models.ForeignKey(MyUser, verbose_name='Пользователь', on_delete=models.CASCADE, blank=True, null=True) \ No newline at end of file diff --git a/server/proj/audio/schemas.py b/server/proj/audio/schemas.py index eea2ba5..cf823f4 100644 --- a/server/proj/audio/schemas.py +++ b/server/proj/audio/schemas.py @@ -52,4 +52,21 @@ class DeleteSongSchema(AutoSchema): required=False, schema=coreschema.String(description='ID трека с Азуры') ), + ] + +class PlayListSchema(AutoSchema): + def get_serializer_fields(self, path, method): + return [ + coreapi.Field( + name='playlist_id', + location='form', + required=False, + schema=coreschema.Integer(description='ID плейлиста') + ), + coreapi.Field( + name='songs_id', + location='form', + required=False, + schema=coreschema.Array(description='ID треков') + ), ] \ No newline at end of file diff --git a/server/proj/audio/views.py b/server/proj/audio/views.py index 0e2d551..b8023ba 100644 --- a/server/proj/audio/views.py +++ b/server/proj/audio/views.py @@ -5,11 +5,11 @@ from rest_framework.decorators import action from rest_framework import status from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned from django.shortcuts import get_object_or_404, get_list_or_404 -from rest_framework.permissions import IsAuthenticated +from rest_framework.permissions import IsAuthenticated, AllowAny import requests from django.http import HttpResponse -from .schemas import SongSchema, DeleteSongSchema +from .schemas import SongSchema, DeleteSongSchema, PlayListSchema from .models import Song, FavoriteSong, PlayList from .serializers import SongSerializer, FavoriteSongSerializer, PlayListSerializer @@ -29,10 +29,8 @@ class PlayListViewSet(GenericViewSet): return Response(serializer.data, status=status.HTTP_200_OK) except ObjectDoesNotExist: return Response({"error": 'Объекта не существует'}, status=status.HTTP_404_NOT_FOUND) - - - + class SongViewSet(GenericViewSet): queryset = Song.objects.all() serializer_class = SongSerializer diff --git a/server/proj/conf/__pycache__/__init__.cpython-310.pyc b/server/proj/conf/__pycache__/__init__.cpython-310.pyc index a8cc239..d53f354 100644 Binary files a/server/proj/conf/__pycache__/__init__.cpython-310.pyc and b/server/proj/conf/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/conf/__pycache__/urls.cpython-310.pyc b/server/proj/conf/__pycache__/urls.cpython-310.pyc index 087f3a1..7d8c935 100644 Binary files a/server/proj/conf/__pycache__/urls.cpython-310.pyc and b/server/proj/conf/__pycache__/urls.cpython-310.pyc differ diff --git a/server/proj/conf/__pycache__/wsgi.cpython-310.pyc b/server/proj/conf/__pycache__/wsgi.cpython-310.pyc index 522b0b5..c38fff5 100644 Binary files a/server/proj/conf/__pycache__/wsgi.cpython-310.pyc and b/server/proj/conf/__pycache__/wsgi.cpython-310.pyc differ diff --git a/server/proj/conf/settings/__init__.local.py b/server/proj/conf/settings/__init__.local.py new file mode 100644 index 0000000..8f607e4 --- /dev/null +++ b/server/proj/conf/settings/__init__.local.py @@ -0,0 +1 @@ +from .local import * diff --git a/server/proj/conf/settings/__init__.py b/server/proj/conf/settings/__init__.py index 298e070..af012d0 100644 --- a/server/proj/conf/settings/__init__.py +++ b/server/proj/conf/settings/__init__.py @@ -1,5 +1,5 @@ -from .production import * +from .local import * diff --git a/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc b/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc index c272da1..e00d729 100644 Binary files a/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc and b/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/conf/settings/__pycache__/base.cpython-310.pyc b/server/proj/conf/settings/__pycache__/base.cpython-310.pyc index b4d19aa..f9d6ad8 100644 Binary files a/server/proj/conf/settings/__pycache__/base.cpython-310.pyc and b/server/proj/conf/settings/__pycache__/base.cpython-310.pyc differ diff --git a/server/proj/conf/settings/local.py b/server/proj/conf/settings/local.py new file mode 100644 index 0000000..c540fd7 --- /dev/null +++ b/server/proj/conf/settings/local.py @@ -0,0 +1,21 @@ +import sys +from .base import * + +DEBUG = True +ALLOWED_HOSTS = ['*'] + +# Database +# https://docs.djangoproject.com/en/3.2/ref/settings/#databases +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} +REST_FRAMEWORK['DEFAULT_PERMISSION_CLASSES'] = ('rest_framework.permissions.AllowAny',) + +if len(sys.argv) >= 2 and not sys.argv[0].endswith('manage.py'): + from conf.sentry import sentry_start, SENTRY_CONFIG + + SENTRY_CONFIG['environment'] = 'local' + sentry_start(SENTRY_CONFIG) diff --git a/server/proj/loginApi/__pycache__/__init__.cpython-310.pyc b/server/proj/loginApi/__pycache__/__init__.cpython-310.pyc index 702abf6..3d30807 100644 Binary files a/server/proj/loginApi/__pycache__/__init__.cpython-310.pyc and b/server/proj/loginApi/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/loginApi/__pycache__/admin.cpython-310.pyc b/server/proj/loginApi/__pycache__/admin.cpython-310.pyc index ff072f8..32e226a 100644 Binary files a/server/proj/loginApi/__pycache__/admin.cpython-310.pyc and b/server/proj/loginApi/__pycache__/admin.cpython-310.pyc differ diff --git a/server/proj/loginApi/__pycache__/apps.cpython-310.pyc b/server/proj/loginApi/__pycache__/apps.cpython-310.pyc index c65b06e..d47564d 100644 Binary files a/server/proj/loginApi/__pycache__/apps.cpython-310.pyc and b/server/proj/loginApi/__pycache__/apps.cpython-310.pyc differ diff --git a/server/proj/loginApi/__pycache__/models.cpython-310.pyc b/server/proj/loginApi/__pycache__/models.cpython-310.pyc index ed5835f..247b231 100644 Binary files a/server/proj/loginApi/__pycache__/models.cpython-310.pyc and b/server/proj/loginApi/__pycache__/models.cpython-310.pyc differ diff --git a/server/proj/loginApi/migrations/__pycache__/__init__.cpython-310.pyc b/server/proj/loginApi/migrations/__pycache__/__init__.cpython-310.pyc index a369094..6dae44d 100644 Binary files a/server/proj/loginApi/migrations/__pycache__/__init__.cpython-310.pyc and b/server/proj/loginApi/migrations/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/news/__pycache__/__init__.cpython-310.pyc b/server/proj/news/__pycache__/__init__.cpython-310.pyc index 8d9c649..2df7509 100644 Binary files a/server/proj/news/__pycache__/__init__.cpython-310.pyc and b/server/proj/news/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/news/__pycache__/admin.cpython-310.pyc b/server/proj/news/__pycache__/admin.cpython-310.pyc index 332b920..b50d265 100644 Binary files a/server/proj/news/__pycache__/admin.cpython-310.pyc and b/server/proj/news/__pycache__/admin.cpython-310.pyc differ diff --git a/server/proj/news/__pycache__/apps.cpython-310.pyc b/server/proj/news/__pycache__/apps.cpython-310.pyc index 86d2b9c..b5a95af 100644 Binary files a/server/proj/news/__pycache__/apps.cpython-310.pyc and b/server/proj/news/__pycache__/apps.cpython-310.pyc differ diff --git a/server/proj/news/__pycache__/models.cpython-310.pyc b/server/proj/news/__pycache__/models.cpython-310.pyc index b9018f0..8a3968e 100644 Binary files a/server/proj/news/__pycache__/models.cpython-310.pyc and b/server/proj/news/__pycache__/models.cpython-310.pyc differ diff --git a/server/proj/news/migrations/__pycache__/0001_initial.cpython-310.pyc b/server/proj/news/migrations/__pycache__/0001_initial.cpython-310.pyc index 44ca0d9..d544853 100644 Binary files a/server/proj/news/migrations/__pycache__/0001_initial.cpython-310.pyc and b/server/proj/news/migrations/__pycache__/0001_initial.cpython-310.pyc differ diff --git a/server/proj/news/migrations/__pycache__/__init__.cpython-310.pyc b/server/proj/news/migrations/__pycache__/__init__.cpython-310.pyc index f0dd9c9..4f346bb 100644 Binary files a/server/proj/news/migrations/__pycache__/__init__.cpython-310.pyc and b/server/proj/news/migrations/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/rubricks/__pycache__/__init__.cpython-310.pyc b/server/proj/rubricks/__pycache__/__init__.cpython-310.pyc index 3ff2fc6..7af52fd 100644 Binary files a/server/proj/rubricks/__pycache__/__init__.cpython-310.pyc and b/server/proj/rubricks/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/rubricks/__pycache__/admin.cpython-310.pyc b/server/proj/rubricks/__pycache__/admin.cpython-310.pyc index 219e961..69d33a2 100644 Binary files a/server/proj/rubricks/__pycache__/admin.cpython-310.pyc and b/server/proj/rubricks/__pycache__/admin.cpython-310.pyc differ diff --git a/server/proj/rubricks/__pycache__/apps.cpython-310.pyc b/server/proj/rubricks/__pycache__/apps.cpython-310.pyc index b04edd3..ed74ba4 100644 Binary files a/server/proj/rubricks/__pycache__/apps.cpython-310.pyc and b/server/proj/rubricks/__pycache__/apps.cpython-310.pyc differ diff --git a/server/proj/rubricks/__pycache__/models.cpython-310.pyc b/server/proj/rubricks/__pycache__/models.cpython-310.pyc index e76dff3..afd0449 100644 Binary files a/server/proj/rubricks/__pycache__/models.cpython-310.pyc and b/server/proj/rubricks/__pycache__/models.cpython-310.pyc differ diff --git a/server/proj/rubricks/migrations/__pycache__/0001_initial.cpython-310.pyc b/server/proj/rubricks/migrations/__pycache__/0001_initial.cpython-310.pyc index d9a9d9d..1edbec6 100644 Binary files a/server/proj/rubricks/migrations/__pycache__/0001_initial.cpython-310.pyc and b/server/proj/rubricks/migrations/__pycache__/0001_initial.cpython-310.pyc differ diff --git a/server/proj/rubricks/migrations/__pycache__/__init__.cpython-310.pyc b/server/proj/rubricks/migrations/__pycache__/__init__.cpython-310.pyc index ae68d5e..818ee0c 100644 Binary files a/server/proj/rubricks/migrations/__pycache__/__init__.cpython-310.pyc and b/server/proj/rubricks/migrations/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/userProfile/__pycache__/__init__.cpython-310.pyc b/server/proj/userProfile/__pycache__/__init__.cpython-310.pyc index 522c76a..115d566 100644 Binary files a/server/proj/userProfile/__pycache__/__init__.cpython-310.pyc and b/server/proj/userProfile/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/userProfile/__pycache__/admin.cpython-310.pyc b/server/proj/userProfile/__pycache__/admin.cpython-310.pyc index 5f26136..917d8e3 100644 Binary files a/server/proj/userProfile/__pycache__/admin.cpython-310.pyc and b/server/proj/userProfile/__pycache__/admin.cpython-310.pyc differ diff --git a/server/proj/userProfile/__pycache__/apps.cpython-310.pyc b/server/proj/userProfile/__pycache__/apps.cpython-310.pyc index 03d8c35..cbf7dbe 100644 Binary files a/server/proj/userProfile/__pycache__/apps.cpython-310.pyc and b/server/proj/userProfile/__pycache__/apps.cpython-310.pyc differ diff --git a/server/proj/userProfile/__pycache__/models.cpython-310.pyc b/server/proj/userProfile/__pycache__/models.cpython-310.pyc index cc60358..58f92d9 100644 Binary files a/server/proj/userProfile/__pycache__/models.cpython-310.pyc and b/server/proj/userProfile/__pycache__/models.cpython-310.pyc differ diff --git a/server/proj/userProfile/__pycache__/serializers.cpython-310.pyc b/server/proj/userProfile/__pycache__/serializers.cpython-310.pyc index 75b8fb8..af1cb6a 100644 Binary files a/server/proj/userProfile/__pycache__/serializers.cpython-310.pyc and b/server/proj/userProfile/__pycache__/serializers.cpython-310.pyc differ diff --git a/server/proj/userProfile/__pycache__/views.cpython-310.pyc b/server/proj/userProfile/__pycache__/views.cpython-310.pyc index 79d95e7..79e0a8c 100644 Binary files a/server/proj/userProfile/__pycache__/views.cpython-310.pyc and b/server/proj/userProfile/__pycache__/views.cpython-310.pyc differ diff --git a/server/proj/userProfile/admin.py b/server/proj/userProfile/admin.py index 72b223f..86b745d 100644 --- a/server/proj/userProfile/admin.py +++ b/server/proj/userProfile/admin.py @@ -1,13 +1,9 @@ from django.contrib import admin - from rest_framework.authtoken.admin import TokenAdmin from .models import Team - - TokenAdmin.raw_id_fields = ['user'] - @admin.register(Team) class TeamAdmin(admin.ModelAdmin): list_display = ('id', 'name', 'last_name', 'position', 'img_person') diff --git a/server/proj/userProfile/migrations/__pycache__/0001_initial.cpython-310.pyc b/server/proj/userProfile/migrations/__pycache__/0001_initial.cpython-310.pyc index 23574b5..f4b7d3a 100644 Binary files a/server/proj/userProfile/migrations/__pycache__/0001_initial.cpython-310.pyc and b/server/proj/userProfile/migrations/__pycache__/0001_initial.cpython-310.pyc differ diff --git a/server/proj/userProfile/migrations/__pycache__/__init__.cpython-310.pyc b/server/proj/userProfile/migrations/__pycache__/__init__.cpython-310.pyc index 4824d08..c5de2f2 100644 Binary files a/server/proj/userProfile/migrations/__pycache__/__init__.cpython-310.pyc and b/server/proj/userProfile/migrations/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/userProfile/models.py b/server/proj/userProfile/models.py index 3555a46..b84852f 100644 --- a/server/proj/userProfile/models.py +++ b/server/proj/userProfile/models.py @@ -2,34 +2,6 @@ from django.contrib.auth.models import User from django.db import models from django.db.models import JSONField -""" class Profile(models.Model): - user = models.OneToOneField(User, on_delete=models.CASCADE) - - likedSongs = JSONField(blank=True, null=True) - """ - - # likedSongs = models.ManyToManyField(Song) - # likedSongs = models.TextField() - # podcasts = models.ManyToManyField(Podcast) - # playlists = models.ManyToManyField(Playlist) - - -# #JWT -# from django.contrib.auth.models import User -# from rest_framework.authtoken.models import Token - -# for user in User.objects.all(): -# Token.objects.get_or_create(user=user) - -# from django.conf import settings -# from django.db.models.signals import post_save -# from django.dispatch import receiver - -# @receiver(post_save, sender=settings.AUTH_USER_MODEL) -# def create_auth_token(sender, instance=None, created=False, **kwargs): -# if created: -# Token.objects.create(user=instance) - class Team(models.Model): name = models.CharField('Имя участника', max_length=50) last_name = models.CharField('Фамилия участника', max_length=50) diff --git a/server/proj/userProfile/serializers.py b/server/proj/userProfile/serializers.py index 1b8a4f3..f69881f 100644 --- a/server/proj/userProfile/serializers.py +++ b/server/proj/userProfile/serializers.py @@ -2,25 +2,6 @@ from rest_framework import serializers, views, status from rest_framework.response import Response from .models import Team -""" class ProfileSerializer(serializers.ModelSerializer): - class Meta: - model = Profile - fields = ['user', 'likedSongs'] - - def update(self, instance, validated_data): - new_song = validated_data.get('likedSongs') - if new_song: - current_songs = instance.likedSongs or [] - # Check if the song ID already exists in the current songs - if not any(song['id'] == new_song['id'] for song in current_songs): - current_songs.append(new_song) - instance.likedSongs = current_songs - instance.save() - return instance - def create(self, validated_data): - validated_data['likedSongs'] = [] - return Profile.objects.create(**validated_data) """ - class TeamSerializer(serializers.ModelSerializer): class Meta: model = Team diff --git a/server/proj/userProfile/views.py b/server/proj/userProfile/views.py index 33435a2..90bf8bc 100644 --- a/server/proj/userProfile/views.py +++ b/server/proj/userProfile/views.py @@ -8,61 +8,9 @@ from rest_framework.decorators import api_view, permission_classes, action from django.contrib.auth.models import User from rest_framework_simplejwt.authentication import JWTAuthentication from rest_framework_simplejwt.exceptions import InvalidToken, AuthenticationFailed - -""" from .models import Profile, Team -from .serializers import ProfileSerializer, TeamSerializer """ - from .models import Team from .serializers import TeamSerializer -""" class ProfileViewSet(viewsets.ViewSet): - queryset = Profile.objects.all() - def list(self, request): - queryset = Profile.objects.all() - serializer = ProfileSerializer(queryset, many=True) - return Response(serializer.data) - - - @action(detail=False, methods=['post']) - def AddSong(self, request): - if request.method == 'POST': - user = request.user.pk - new_song = request.data.get('new_song') # new_song should be a dict - profile = get_object_or_404(Profile, user=user) - serializer = ProfileSerializer(profile, data={'likedSongs': new_song}, partial=True) - if serializer.is_valid(): - serializer.save() - return Response(serializer.data, status=status.HTTP_201_CREATED) - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - @action(detail=False, methods=['post']) - def DeleteSong(self, request): - user = request.user.pk - song_id = request.data.get('id') # Assuming each song has a unique 'id' field - if not song_id: - return Response({'error': 'Song ID is required'}, status=status.HTTP_400_BAD_REQUEST) - profile = get_object_or_404(Profile, user=user) - if profile.likedSongs: - # Filter out the song with the given ID - updated_songs = [song for song in profile.likedSongs if song.get('id') != song_id] - profile.likedSongs = updated_songs - profile.save() - return Response({'message': 'Song deleted'}, status=status.HTTP_204_NO_CONTENT) - else: - return Response({'error': 'No songs to delete'}, status=status.HTTP_404_NOT_FOUND) - - @action( - detail=False, - methods=['get'], - url_path='getlikedsongs/', - url_name='liked_songs', - ) - def GetLikedSongs(request): - if request.method == 'GET': - user = request.user.pk - profile = get_object_or_404(Profile, user=user) - serializer = ProfileSerializer(profile) - return Response(serializer.data['likedSongs'], status=status.HTTP_200_OK) """ class TeamViewSet(ViewSet): def list(self, request):