Skip to content

Commit 16be774

Browse files
committed
feat: 이벤트 일자에 대한 검증 추가
1 parent 736f345 commit 16be774

2 files changed

Lines changed: 35 additions & 6 deletions

File tree

app/admin_api/serializers/event/event.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,16 @@ class Meta:
1818
"stats_end_date",
1919
)
2020

21+
DATE_ORDER_PAIRS = (
22+
("event_start_at", "event_end_at", "event의 종료 날짜는 시작 날짜보다 이전일 수 없습니다."),
23+
("stats_start_date", "stats_end_date", "통계 종료일은 시작일보다 이전일 수 없습니다."),
24+
)
25+
2126
def validate(self, attrs: dict) -> dict:
2227
merged = {**attrs}
23-
for field in ("stats_start_date", "stats_end_date"):
24-
merged.setdefault(field, getattr(self.instance, field, None))
25-
start, end = merged["stats_start_date"], merged["stats_end_date"]
26-
if start and end and start > end:
27-
raise serializers.ValidationError({"stats_end_date": "통계 종료일은 시작일보다 이전일 수 없습니다."})
28+
for start_field, end_field, msg in self.DATE_ORDER_PAIRS:
29+
start = merged.setdefault(start_field, getattr(self.instance, start_field, None))
30+
end = merged.setdefault(end_field, getattr(self.instance, end_field, None))
31+
if start and end and start > end:
32+
raise serializers.ValidationError({end_field: msg})
2833
return attrs

app/admin_api/test/event/event_test.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
from datetime import date
1+
from datetime import date, datetime
22

33
from admin_api.serializers.event.event import EventAdminSerializer
4+
from core.const.datetime import KST
45
from model_bakery import baker
56

67

@@ -27,3 +28,26 @@ def test_admin_serializer_rejects_inverted_stats_period(db):
2728
)
2829
assert not serializer.is_valid()
2930
assert "stats_end_date" in serializer.errors
31+
32+
33+
def test_admin_serializer_rejects_inverted_event_dates(db):
34+
event = baker.make("event.Event")
35+
serializer = EventAdminSerializer(
36+
instance=event,
37+
data={"event_start_at": "2026-08-16T00:00:00+09:00", "event_end_at": "2026-08-14T00:00:00+09:00"},
38+
partial=True,
39+
)
40+
assert not serializer.is_valid()
41+
assert "event_end_at" in serializer.errors
42+
43+
44+
def test_admin_serializer_rejects_event_end_before_existing_start(db):
45+
"""partial update: 기존 instance 의 시작일과 비교해 역전 감지."""
46+
event = baker.make("event.Event", event_start_at=datetime(2026, 8, 16, tzinfo=KST))
47+
serializer = EventAdminSerializer(
48+
instance=event,
49+
data={"event_end_at": "2026-08-14T00:00:00+09:00"},
50+
partial=True,
51+
)
52+
assert not serializer.is_valid()
53+
assert "event_end_at" in serializer.errors

0 commit comments

Comments
 (0)