From b6f8412373e0b7d2011063b122dcb7897988d567 Mon Sep 17 00:00:00 2001 From: MUsoftware Date: Sat, 16 May 2026 19:09:54 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20notification=20=ED=85=9C=ED=94=8C?= =?UTF-8?q?=EB=A6=BF=EC=97=90=20editor=5Fsource=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EA=B4=80=EB=A0=A8=20=EB=A7=88?= =?UTF-8?q?=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin_api/serializers/notification.py | 10 ++++++++- ...ficationtemplate_editor_source_and_more.py | 22 +++++++++++++++++++ app/notification/models/base.py | 4 ++++ envfile/.env.local | 3 ++- 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 app/notification/migrations/0003_emailnotificationtemplate_editor_source_and_more.py diff --git a/app/admin_api/serializers/notification.py b/app/admin_api/serializers/notification.py index 0a69f86..3d7062f 100644 --- a/app/admin_api/serializers/notification.py +++ b/app/admin_api/serializers/notification.py @@ -142,7 +142,15 @@ class _NotiTemplateAdminSerializerBase(BaseAbstractSerializer, JsonSchemaSeriali template_variables = serializers.SerializerMethodField() class Meta: - fields = COMMON_ADMIN_FIELDS + ("code", "title", "description", "data", "sent_from", "template_variables") + fields = COMMON_ADMIN_FIELDS + ( + "code", + "title", + "description", + "data", + "editor_source", + "sent_from", + "template_variables", + ) def get_template_variables(self, obj: NotificationTemplateBase) -> list[str]: return sorted(obj.template_variables) diff --git a/app/notification/migrations/0003_emailnotificationtemplate_editor_source_and_more.py b/app/notification/migrations/0003_emailnotificationtemplate_editor_source_and_more.py new file mode 100644 index 0000000..373b85c --- /dev/null +++ b/app/notification/migrations/0003_emailnotificationtemplate_editor_source_and_more.py @@ -0,0 +1,22 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [("notification", "0002_emailnotificationhistorysentto_failure_reason_and_more")] + operations = [ + migrations.AddField( + model_name="emailnotificationtemplate", + name="editor_source", + field=models.TextField(blank=True, null=True), + ), + migrations.AddField( + model_name="nhncloudkakaoalimtalknotificationtemplate", + name="editor_source", + field=models.TextField(blank=True, null=True), + ), + migrations.AddField( + model_name="nhncloudsmsnotificationtemplate", + name="editor_source", + field=models.TextField(blank=True, null=True), + ), + ] diff --git a/app/notification/models/base.py b/app/notification/models/base.py index 8cad6d9..9836e12 100644 --- a/app/notification/models/base.py +++ b/app/notification/models/base.py @@ -58,6 +58,10 @@ class NotificationTemplateBase(BaseAbstractModel): description = models.TextField(null=True, blank=True) data = models.TextField() + # 에디터(예: @react-email/renderer)가 다루는 source-of-truth. + # 발송 경로는 data만 사용하며, 에디터가 저장 시점에 컴파일된 결과를 data에 기록. + editor_source = models.TextField(null=True, blank=True) + # Email: from address, SMS: 발신번호, Kakao: sender key sent_from = models.CharField(max_length=256) diff --git a/envfile/.env.local b/envfile/.env.local index b01b8c1..ae6b324 100644 --- a/envfile/.env.local +++ b/envfile/.env.local @@ -1,7 +1,8 @@ DJANGO_DEFAULT_STORAGE_BACKEND=django.core.files.storage.FileSystemStorage DJANGO_STATIC_STORAGE_BACKEND=django.contrib.staticfiles.storage.StaticFilesStorage DATABASE_ENGINE=django.db.backends.postgresql -DATABASE_NAME=pyconkr-backend-db +DATABASE_NAME=pyconkr_2025_test_db +LEGACY_DATABASE_NAME=pyconkr_purchase_test_db DATABASE_HOST=127.0.0.1 DATABASE_PORT=45432 DATABASE_USER=user