Merge remote-tracking branch 'origin/master'

This commit is contained in:
Stepan Fedyanin 2024-06-21 18:10:09 +05:00
commit b40fe9600b
6 changed files with 81 additions and 13 deletions

View File

@ -12,4 +12,4 @@ class FavoriteSongAdmin(admin.ModelAdmin):
@admin.register(PlayList) @admin.register(PlayList)
class PlayListAdmin(admin.ModelAdmin): class PlayListAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'user', 'art') list_display = ('id', 'name', 'user', 'playlist_art')

View File

@ -43,9 +43,8 @@ class PlayList(models.Model):
name = models.CharField('Название плейлиста', max_length=50, blank=True, null=True) name = models.CharField('Название плейлиста', max_length=50, blank=True, null=True)
song = models.ManyToManyField(Song, blank=True, null=True) song = models.ManyToManyField(Song, blank=True, null=True)
user = models.ForeignKey(MyUser, verbose_name='Пользователь', on_delete=models.CASCADE) user = models.ForeignKey(MyUser, verbose_name='Пользователь', on_delete=models.CASCADE)
art = models.ImageField('Изображение плейлиста', blank=True, null=True, upload_to="playlist_images/") playlist_art = models.FileField('Изображение плейлиста', blank=True, null=True, upload_to="playlist_images/")
class Meta: class Meta:
verbose_name = 'Плейлисты' verbose_name = 'Плейлисты'
verbose_name_plural = 'Плейлисты' verbose_name_plural = 'Плейлисты'

View File

@ -69,10 +69,46 @@ class PlayListSchema(AutoSchema):
required=False, required=False,
schema=coreschema.Integer(description='ID плейлиста') schema=coreschema.Integer(description='ID плейлиста')
), ),
coreapi.Field(
name='playlist_art',
location='form',
required=False,
schema=coreschema.Integer(description='Обложка плейлиста')
),
coreapi.Field( coreapi.Field(
name='azura_id', name='azura_id',
location='form', location='form',
required=False, required=False,
schema=coreschema.String(description='ID трека с азуры') schema=coreschema.String(description='ID трека с Азуры')
),
coreapi.Field(
name='title',
location='form',
required=False,
schema=coreschema.String(description='Название трека')
),
coreapi.Field(
name='artist',
location='form',
required=False,
schema=coreschema.String(description='Исполнитель')
),
coreapi.Field(
name='album',
location='form',
required=False,
schema=coreschema.String(description='Альбом трека')
),
coreapi.Field(
name='genre',
location='form',
required=False,
schema=coreschema.String(description='Жанр трека')
),
coreapi.Field(
name='art',
location='form',
required=False,
schema=coreschema.String(description='Изображение трека')
), ),
] ]

View File

@ -9,7 +9,7 @@ class SongSerializer(serializers.ModelSerializer):
class PlayListSerializer(serializers.ModelSerializer): class PlayListSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = PlayList model = PlayList
fields = ('id', 'name', 'song', 'user') fields = ('id', 'name', 'song', 'user', 'playlist_art')
def to_representation(self, instance): def to_representation(self, instance):
rep = super().to_representation(instance) rep = super().to_representation(instance)

View File

@ -59,6 +59,19 @@ class PlayListViewSet(GenericViewSet):
serializer.save() serializer.save()
return Response(serializer.data) return Response(serializer.data)
@action(detail=False, methods=['post'], schema=PlayListSchema())
def update_playlist(self, request):
try:
instance = PlayList.objects.get(pk=request.data['playlist_id'], user=request.user.pk)
serializer = self.get_serializer(data=request.data, partial=True, instance=instance)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)
except ObjectDoesNotExist:
return Response(
{'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}},
status=status.HTTP_404_NOT_FOUND)
@action(detail=False, methods=['post'], schema=PlayListSchema()) @action(detail=False, methods=['post'], schema=PlayListSchema())
def delete_playlist(self, request): def delete_playlist(self, request):
try: try:
@ -71,14 +84,37 @@ class PlayListViewSet(GenericViewSet):
status=status.HTTP_404_NOT_FOUND) status=status.HTTP_404_NOT_FOUND)
@action(detail=False, methods=['post'], schema=PlayListSchema()) @action(detail=False, methods=['post'], schema=PlayListSchema())
def add_to_playlist(self, request): def delete_song_with_playlist(self, request):
try: try:
song = list(Song.objects.filter(azura_id=request.data.get('azura_id')).values_list('pk', flat=True)) song = Song.objects.get(azura_id=request.data.get('azura_id'))
item = PlayList.objects.get(user=request.user, pk=request.data.get('playlist_id'))
item.song.remove(song)
return Response({'detail': 'Объект удалён'}, status=status.HTTP_200_OK)
except ObjectDoesNotExist: except ObjectDoesNotExist:
return Response( return Response(
{'detail': 'Песни не существует', 'error': {'Song': 'Песни не существует'}}, {'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}},
status=status.HTTP_404_NOT_FOUND) status=status.HTTP_404_NOT_FOUND)
@action(detail=False, methods=['post'], schema=PlayListSchema())
def add_to_playlist(self, request):
song = None
try:
song = Song.objects.get(azura_id=request.data.get('azura_id')).pk
except ObjectDoesNotExist:
file_url = f"http://82.97.242.49:10084/api/station/it-radio/file/{request.data['azura_id']}"
API_KEY = "49226d3488aac3f5:18d88659c6c1c5e131a0ce0a94d55235"
headers = {
"Authorization": f"Bearer {API_KEY}"
}
response = requests.get(file_url, headers=headers)
data = request.data
file_play = f"http://82.97.242.49:10084/api/station/it-radio/file/{response.json()['unique_id']}/play"
data.update(unique_id=file_play)
song_serializer = SongSerializer(data=data)
if song_serializer.is_valid():
song_serializer.save()
song = song_serializer.data.get('id')
try: try:
instance = PlayList.objects.get(pk=request.data.get('playlist_id')) instance = PlayList.objects.get(pk=request.data.get('playlist_id'))
except ObjectDoesNotExist: except ObjectDoesNotExist:
@ -86,7 +122,7 @@ class PlayListViewSet(GenericViewSet):
{'detail': 'Плейлиста не существует', 'error': {'PlayList': 'Плейлиста не существует'}}, {'detail': 'Плейлиста не существует', 'error': {'PlayList': 'Плейлиста не существует'}},
status=status.HTTP_404_NOT_FOUND) status=status.HTTP_404_NOT_FOUND)
songs = list(instance.song.all().values_list('pk', flat=True))+song songs = list(instance.song.all().values_list('pk', flat=True)) + [song]
data = { data = {
'playlist_id': request.data.get('playlist_id'), 'playlist_id': request.data.get('playlist_id'),
'song': songs 'song': songs
@ -204,9 +240,6 @@ class SongViewSet(GenericViewSet):
for i in response.json(): for i in response.json():
i['azura_id'] = i.pop('song_id') i['azura_id'] = i.pop('song_id')
data.append(i) data.append(i)
return Response(data, status=status.HTTP_200_OK) return Response(data, status=status.HTTP_200_OK)

View File

@ -2,7 +2,7 @@ import sys
from .base import * from .base import *
DEBUG = False DEBUG = False
ALLOWED_HOSTS = ['82.97.242.49'] ALLOWED_HOSTS = ['82.97.242.49', 'itradio.team']
# Database # Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases # https://docs.djangoproject.com/en/3.2/ref/settings/#databases