feat: Add createdAt and ownership to upload groups
This commit is contained in:
parent
0e439b4c6e
commit
a2570bc608
|
@ -193,6 +193,7 @@ class TrackFactory(
|
|||
@registry.register
|
||||
class UploadGroupFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
||||
name = factory.Faker("name")
|
||||
owner = factory.SubFactory(federation_factories.ActorFactory)
|
||||
|
||||
class Meta:
|
||||
model = "music.UploadGroup"
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
# Generated by Django 3.2.23 on 2024-01-22 13:58
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("federation", "0028_auto_20221027_1141"),
|
||||
("music", "0062_alter_upload_upload_group"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="uploadgroup",
|
||||
name="created_at",
|
||||
field=models.DateTimeField(default=django.utils.timezone.now),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="uploadgroup",
|
||||
name="owner",
|
||||
field=models.ForeignKey(
|
||||
default=1,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="upload_groups",
|
||||
to="federation.actor",
|
||||
),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
|
@ -1578,6 +1578,10 @@ class UploadGroup(models.Model):
|
|||
|
||||
name = models.CharField(max_length=255, default=datetime.datetime.now)
|
||||
guid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
owner = models.ForeignKey(
|
||||
"federation.Actor", on_delete=models.CASCADE, related_name="upload_groups"
|
||||
)
|
||||
created_at = models.DateTimeField(default=timezone.now)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
|
|
@ -893,10 +893,11 @@ class SearchResultSerializer(serializers.Serializer):
|
|||
class UploadGroupSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.UploadGroup
|
||||
fields = "__all__"
|
||||
fields = ["guid", "name", "createdAt", "uploadUrl"]
|
||||
|
||||
name = serializers.CharField(required=False)
|
||||
uploadUrl = serializers.SerializerMethodField(read_only=True)
|
||||
createdAt = serializers.DateTimeField(read_only=True, source="created_at")
|
||||
|
||||
def get_uploadUrl(self, value):
|
||||
return f"{settings.FUNKWHALE_URL}/api/v2/upload-groups/{value.guid}/uploads"
|
||||
|
|
|
@ -846,7 +846,9 @@ class UploadViewSet(
|
|||
group_name = serializer.validated_data.get("import_reference") or str(
|
||||
datetime.datetime.date(datetime.datetime.now())
|
||||
)
|
||||
upload_group, _ = models.UploadGroup.objects.get_or_create(name=group_name)
|
||||
upload_group, _ = models.UploadGroup.objects.get_or_create(
|
||||
name=group_name, owner=self.request.user.actor
|
||||
)
|
||||
upload = serializer.save(upload_group=upload_group)
|
||||
if upload.import_status == "pending":
|
||||
common_utils.on_commit(tasks.process_upload.delay, upload_id=upload.pk)
|
||||
|
@ -1000,5 +1002,10 @@ class OembedView(views.APIView):
|
|||
class UploadGroupViewSet(viewsets.ModelViewSet):
|
||||
permission_classes = [oauth_permissions.ScopePermission]
|
||||
required_scope = "libraries"
|
||||
queryset = models.UploadGroup.objects.all()
|
||||
serializer_class = serializers.UploadGroupSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return models.UploadGroup.objects.filter(owner__user__id=self.request.user.id)
|
||||
|
||||
def perform_create(self, serializer):
|
||||
serializer.save(owner=self.request.user.actor)
|
||||
|
|
|
@ -1668,6 +1668,7 @@ def test_album_create_artist_credit(factories, logged_in_api_client):
|
|||
|
||||
|
||||
def test_can_create_upload_group_without_name(logged_in_api_client):
|
||||
logged_in_api_client.user.create_actor()
|
||||
count = models.UploadGroup.objects.count()
|
||||
|
||||
url = reverse("api:v2:upload-groups-list")
|
||||
|
@ -1683,6 +1684,7 @@ def test_can_create_upload_group_without_name(logged_in_api_client):
|
|||
|
||||
|
||||
def test_can_create_upload_group_with_name(logged_in_api_client):
|
||||
logged_in_api_client.user.create_actor()
|
||||
count = models.UploadGroup.objects.count()
|
||||
|
||||
url = reverse("api:v2:upload-groups-list")
|
||||
|
|
Loading…
Reference in New Issue