diff --git a/api/funkwhale_api/music/factories.py b/api/funkwhale_api/music/factories.py index 2f169a72c..ec2d06910 100644 --- a/api/funkwhale_api/music/factories.py +++ b/api/funkwhale_api/music/factories.py @@ -167,6 +167,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" diff --git a/api/funkwhale_api/music/migrations/0063_auto_20240122_1358.py b/api/funkwhale_api/music/migrations/0063_auto_20240122_1358.py new file mode 100644 index 000000000..dc79b44e0 --- /dev/null +++ b/api/funkwhale_api/music/migrations/0063_auto_20240122_1358.py @@ -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, + ), + ] diff --git a/api/funkwhale_api/music/models.py b/api/funkwhale_api/music/models.py index 6c0f8296e..5ea65bbea 100644 --- a/api/funkwhale_api/music/models.py +++ b/api/funkwhale_api/music/models.py @@ -1449,6 +1449,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 diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py index 2dbd65336..a250033d5 100644 --- a/api/funkwhale_api/music/serializers.py +++ b/api/funkwhale_api/music/serializers.py @@ -855,10 +855,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" diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index cc1f02037..ab7c56bec 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -793,7 +793,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) @@ -937,5 +939,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) diff --git a/api/tests/music/test_views.py b/api/tests/music/test_views.py index bdcd98ed2..f607ec442 100644 --- a/api/tests/music/test_views.py +++ b/api/tests/music/test_views.py @@ -1643,6 +1643,7 @@ def test_fs_import_cancel_already_running( 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") @@ -1658,6 +1659,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")