From c288dba6e8e356d13a0b220c8b3191ac604efe82 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 12 Apr 2026 03:07:09 +0530 Subject: [PATCH] feat: enable media file handling and allow manual assignment of letter public_id --- backend/config/settings.py | 2 ++ backend/config/urls.py | 5 +++++ backend/letters/models.py | 2 +- backend/letters/serializers.py | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/backend/config/settings.py b/backend/config/settings.py index ae69440..ac3f7a0 100644 --- a/backend/config/settings.py +++ b/backend/config/settings.py @@ -168,3 +168,5 @@ USE_TZ = True # https://docs.djangoproject.com/en/6.0/howto/static-files/ STATIC_URL = "static/" +MEDIA_URL = "/media/" +MEDIA_ROOT = BASE_DIR / "media" diff --git a/backend/config/urls.py b/backend/config/urls.py index d353e73..691bf5f 100644 --- a/backend/config/urls.py +++ b/backend/config/urls.py @@ -15,6 +15,8 @@ Including another URLconf 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ +from django.conf import settings +from django.conf.urls.static import static from django.contrib import admin from django.urls import include, path @@ -23,3 +25,6 @@ urlpatterns = [ path("api/auth/", include("users.urls")), # user related operations path("api/letters/", include("letters.urls")), # letter related operations ] + +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/backend/letters/models.py b/backend/letters/models.py index 1a55666..1beb82f 100644 --- a/backend/letters/models.py +++ b/backend/letters/models.py @@ -16,7 +16,7 @@ class Letter(models.Model): SEALED = "SEALED", "Sealed" BURNED = "BURNED", "Burned" - public_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + public_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True) user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="letters") type = models.CharField(max_length=10, choices=Type.choices, default=Type.KEPT) status = models.CharField(max_length=10, choices=Status.choices, default=Status.DRAFT) diff --git a/backend/letters/serializers.py b/backend/letters/serializers.py index 4cf0afc..4ed67f7 100644 --- a/backend/letters/serializers.py +++ b/backend/letters/serializers.py @@ -30,7 +30,7 @@ class LetterSerializer(serializers.ModelSerializer): "updated_at", "images", ] # user to be fetched from request - read_only_fields = ["public_id", "created_at", "updated_at"] + read_only_fields = ["created_at", "updated_at"] def validate(self, data): if (data.get("encrypted_content") or data.get("encrypted_metadata")) and not data.get("encrypted_dek"):