왜
- dev 와 prod 의 알림 템플릿(notification_templates) 문구·푸시 토글이 어긋나 있다. 두 환경은 같은 Flyway 마이그레이션을 돌려 seed + 마이그레이션 상태는 동일하지만, 백오피스(
/admin/templates)에서 런타임으로 편집한 내용은 코드·마이그레이션에 남지 않아 그만큼 갈라진다.
- prod 가 실제 서비스 형상의 기준이므로, dev 를 prod 와 동일한 템플릿 형상으로 맞춰 개발·검증 환경의 문구가 실제와 일치하게 한다.
무엇을
- prod 의 현재
notification_templates 행(type / title_template / body_template / push_enabled)을 기준으로, dev 를 그 값으로 맞추는 UPDATE 마이그레이션 한 개를 추가한다.
- 컨벤션 준수: Flyway,
${} 리터럴이 placeholder 로 오인되지 않게 JDBC BaseJavaMigration 으로 UPDATE, forward-only, destructive 없음, FK 무관.
push_enabled 가 바뀌면 NotificationPushPolicySeedIntegrationTest 의 기대 맵도 함께 갱신한다(그 테스트가 시드 정본을 단언하므로).
착수 전 준비 (블로커)
prod 의 실제 행 값을 확보해야 한다 - 손 편집분이라 코드에 없다. prod 에서 아래를 뽑아 온다.
SELECT type, title_template, body_template, push_enabled
FROM notification_templates
ORDER BY type;
title/body 는 ${...} 변수 포함 원문 그대로, 빈값 vs 공백 구분까지 확인한다.
참고: 착수 시점 dev 현재 형상 (마이그레이션 재구성)
| type |
title_template |
body_template |
push |
| TOURNAMENT_JOINED |
${actorName}님이 참가했어요 |
(빈값) |
ON |
| TOURNAMENT_ITEM_ADDED |
${actorName}님이 아이템을 추가했어요 |
(빈값) |
OFF |
| TOURNAMENT_ITEM_DELETED |
${actorName}님이 '${itemName}'을(를) 삭제했어요 |
(빈값) |
OFF |
| TOURNAMENT_STARTED |
${actorName}님이 토너먼트를 시작했어요 |
(빈값) |
ON |
| TOURNAMENT_PLAYED_FROM_LINK |
${actorName}님이 회원님 토너먼트를 플레이했어요 |
(빈값) |
ON |
| TOURNAMENT_COMPLETED |
${actorName}님이 회원님 토너먼트를 완료했어요 |
(빈값) |
ON |
| TOURNAMENT_RESULT_READY |
참여하신 ${actorName}님의 토너먼트 결과가 나왔어요 |
(빈값) |
ON |
| ITEM_PARSING_COMPLETED |
${itemName} |
${completionMessage} |
ON |
| ITEM_PARSING_INCOMPLETE |
${itemName} |
일부 정보만 찾았어요. 나머지는 직접 채워주세요. |
ON |
| ITEM_PARSING_FAILED |
상품 정보를 가져오지 못했어요 |
(빈값) |
ON |
| ANNOUNCEMENT |
${title} |
${body} |
ON |
왜
/admin/templates)에서 런타임으로 편집한 내용은 코드·마이그레이션에 남지 않아 그만큼 갈라진다.무엇을
notification_templates행(type / title_template / body_template / push_enabled)을 기준으로, dev 를 그 값으로 맞추는 UPDATE 마이그레이션 한 개를 추가한다.${}리터럴이 placeholder 로 오인되지 않게 JDBC BaseJavaMigration 으로 UPDATE, forward-only, destructive 없음, FK 무관.push_enabled가 바뀌면NotificationPushPolicySeedIntegrationTest의 기대 맵도 함께 갱신한다(그 테스트가 시드 정본을 단언하므로).착수 전 준비 (블로커)
prod 의 실제 행 값을 확보해야 한다 - 손 편집분이라 코드에 없다. prod 에서 아래를 뽑아 온다.
title/body는${...}변수 포함 원문 그대로, 빈값 vs 공백 구분까지 확인한다.참고: 착수 시점 dev 현재 형상 (마이그레이션 재구성)
${actorName}님이 참가했어요${actorName}님이 아이템을 추가했어요${actorName}님이 '${itemName}'을(를) 삭제했어요${actorName}님이 토너먼트를 시작했어요${actorName}님이 회원님 토너먼트를 플레이했어요${actorName}님이 회원님 토너먼트를 완료했어요참여하신 ${actorName}님의 토너먼트 결과가 나왔어요${itemName}${completionMessage}${itemName}일부 정보만 찾았어요. 나머지는 직접 채워주세요.상품 정보를 가져오지 못했어요${title}${body}