Compare commits

..

2 Commits

Author SHA1 Message Date
5bc8cd523a updated music and files api 2023-12-08 17:17:18 +03:00
63311d1d26 updated serializer 2023-12-08 16:35:32 +03:00
3 changed files with 48 additions and 23 deletions

View File

@ -1,5 +1,6 @@
import os
import elastic_transport
import structlog
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.exceptions import PermissionDenied
@ -91,7 +92,9 @@ def get_queryset(self):
):
return self.filter(BaseFileItem.objects.none())
return self.filter(
BaseFileItem.objects.filter(user=self.request.user, parent__isnull=True)
BaseFileItem.objects.cache().filter(
user=self.request.user, parent__isnull=True
)
)
@ -313,18 +316,25 @@ def on_completion(self, uploaded_file, request):
}
prepared = False
if prepared and uploaded_file.size <= request.user.left_file_upload:
f = File.objects.create(
user=request.user,
file_obj=uploaded_file,
name=uploaded_file.name,
parent=folder,
)
request.user.left_file_upload -= uploaded_file.size
request.user.save()
self.message = {
"message": f"File {f.file.name.split('/')[-1]} successfully uploaded",
"status": True,
}
try:
f = File.objects.create(
user=request.user,
file_obj=uploaded_file,
name=uploaded_file.name,
parent=folder,
)
request.user.left_file_upload -= uploaded_file.size
request.user.save()
self.message = {
"message": f"File {f.file.name.split('/')[-1]} successfully uploaded",
"status": True,
}
except elastic_transport.ConnectionError:
self.message = {
"message": "Service is down, please try again later or contact support",
"status": False,
}
logger.error("Elasticsearch is down")
elif prepared:
self.message = {
"message": "File is too large, please increase disk space",

View File

@ -16,13 +16,13 @@
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = Author
fields = ["name", "slug", "link", "image_cropped"]
fields = ["name", "slug", "image_cropped"]
class AlbumSerializer(serializers.ModelSerializer):
class Meta:
model = Album
fields = ["name", "slug", "link", "image_cropped"]
fields = ["name", "slug", "image_cropped"]
class SongSerializer(serializers.ModelSerializer):
@ -32,10 +32,12 @@ class SongSerializer(serializers.ModelSerializer):
@extend_schema_field(serializers.BooleanField)
def get_liked(self, obj):
if self.context["request"].user.is_authenticated:
return SongUserRating.objects.filter(
song=obj, user=self.context["request"].user, like=True
).exists()
if "request" in self.context:
if self.context["request"].user.is_authenticated:
return SongUserRating.objects.filter(
song=obj, user=self.context["request"].user, like=True
).exists()
return None
class Meta:
model = Song
@ -59,18 +61,30 @@ class Meta:
class ListSongSerializer(SetUserModelSerializer):
album = serializers.CharField(source="album.name", read_only=True)
album = AlbumSerializer(read_only=True)
authors = AuthorSerializer(many=True, read_only=True)
liked = serializers.SerializerMethodField(method_name="get_liked")
@extend_schema_field(serializers.BooleanField)
def get_liked(self, obj):
if "likes" in self.context:
return self.context["likes"]
return obj.id in self.context["likes_ids"]
if "likes_ids" in self.context:
return obj.id in self.context["likes_ids"]
return None
class Meta:
model = Song
fields = ["name", "slug", "file", "image_cropped", "length", "album", "liked"]
fields = [
"name",
"slug",
"file",
"image_cropped",
"length",
"album",
"authors",
"liked",
]
extra_kwargs = {
"slug": {"read_only": True},
"image_cropped": {"read_only": True},

View File

@ -48,7 +48,8 @@ def process_file(path, user_id):
@shared_task
def load_ym_file_meta(track, user_id):
return yandex.load_file_meta(track, user_id)
yb = yandex.load_file_meta(track, user_id)
return yb
@shared_task()