Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
b40fe9600b
|
|
@ -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')
|
||||||
|
|
|
||||||
|
|
@ -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 = 'Плейлисты'
|
||||||
|
|
@ -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='Изображение трека')
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue