45 lines
2.3 KiB
Markdown
45 lines
2.3 KiB
Markdown
# Migration guide
|
|
|
|
## From the R0 routing seam
|
|
|
|
The pre-existing `dev.caskeleton.adapter.outbound.notification` router (`RoutingNotifier`,
|
|
`FailOpenNotificationProvider`, the Google email and Slack webhook seams) stays untouched. The
|
|
delivery platform lives beside it under `…notification.platform` and does not modify or delete any
|
|
R0 class.
|
|
|
|
Migration order per capability:
|
|
|
|
1. Register the contact points behind `ContactPointStorePort` so the platform owns protected values.
|
|
2. Publish the template version, and pin the template id, version and locale at every call site.
|
|
3. Move the call site from the router to the N1 typed facade for the channel.
|
|
4. Verify evidence in the snapshot rather than in the caller's return value: `submit()` is durable
|
|
acceptance and nothing more.
|
|
5. Remove the R0 route only after the platform route has produced provider evidence in the target
|
|
environment.
|
|
|
|
## Return-value semantics change
|
|
|
|
The R0 seam returned a send-shaped result. `NotificationReceipt` returns `notificationId`, a request
|
|
status and an acceptance time. Callers that treated the old return value as proof of delivery must be
|
|
changed; there is no compatibility shim, because a shim would have to invent the delivery claim this
|
|
platform exists to avoid.
|
|
|
|
## FCM target migration
|
|
|
|
Registration tokens keep working through `LegacyFcmRegistrationToken`. New registrations should use
|
|
`FcmInstallationId`. The two are distinct types, so a migration is a compile-time task rather than a
|
|
runtime guess.
|
|
|
|
## R1의 처분 (NOTIF-ADR-005)
|
|
|
|
이 문서는 R0 router → platform 이행만 설명해 왔고, `dev.caskeleton.application.notification` 직속의
|
|
R1 public type 100개를 어떻게 할 것인지 다루지 않았다. 그래서 새 consumer가 어느 API를 써야 하는지
|
|
문서 어디에도 답이 없었다.
|
|
|
|
- **canonical은 `..notification.platform..`이다.** NOTIF-ADR-005가 근거와 함께 정한다.
|
|
- **R1은 남지만 새 production consumer를 받지 않는다.** 삭제 계획은 별개이며, R0 삭제와 함께
|
|
사라지지 않는다.
|
|
- **전수 분류표는 `docs/notification/module-mapping.md`에 있다** (replace / bridge / retain / delete).
|
|
- **두 namespace 간 production dependency는 0건이며 ArchUnit이 강제한다.** 변환이 필요하면
|
|
`dev.caskeleton.application.notification.compatibility.r1` 한 곳에만 둔다.
|