이 페이지는 발송 요청, 발송 이력, 반 단위 수신자 확장, 재사용 가능한 SMS
템플릿을 담당하는 tenant 범위 SMS 모듈
lumie-backend/modules/notification의 레퍼런스입니다.
소스 경로
| Path | 역할 |
|---|
lumie-backend/modules/notification/src/main/java/com/lumie/notification/adapter/in/web/{SmsController,SmsTemplateController}.java | 공개 HTTP surface |
lumie-backend/modules/notification/src/main/java/com/lumie/notification/application/service/{SmsCommandService,SmsQueryService}.java | 발송, 목록, 이력, 템플릿 로직 |
lumie-backend/modules/notification/src/main/java/com/lumie/notification/domain/entity/{SmsMessage,SmsTemplate}.java | 주요 notification aggregate |
lumie-backend/app/src/main/resources/db/migration/public/V18__rls_baseline.sql | sms_messages, sms_templates의 source-of-truth table 생성과 RLS |
공개 인터페이스
| Endpoint | 목적 |
|---|
POST /v1/sms/send | 명시적인 수신자 목록으로 SMS 발송 |
GET /v1/sms/history, GET /v1/sms/history/{id} | 페이지네이션된 SMS 이력과 개별 발송 조회 |
POST /v1/sms/send/class/{classId} | class enrollment에서 수신자를 확장한 뒤 한 번에 발송 |
GET /v1/sms-templates, POST /v1/sms-templates, PATCH /v1/sms-templates/{id}, DELETE /v1/sms-templates/{id} | SMS 템플릿 CRUD |
두 발송 endpoint에서는 Idempotency-Key가 선택 사항입니다. 값이 있으면
컨트롤러가 IdempotencyService.executeOnce(...)로 요청을 감쌉니다.
내부 인터페이스와 의존성
| Dependency | 역할 |
|---|
StaffService | 직접 발송과 class 대상 발송 모두에서 sender를 검증 |
ClassService | class 존재 여부를 검증하고 등록된 student ID를 해석 |
StudentService | student ID를 이름과 전화번호로 확장 |
현재 코드베이스에는 공개된 libs/internal-api notification 계약이 없습니다.
집계와 테이블
| Aggregate | 참고 |
|---|
SmsMessage | sender, recipient type, JSON recipient list, 내용, 상태, 성공/실패 수를 저장 |
SmsTemplate | 재사용 가능한 템플릿 이름, 내용, 카테고리를 저장 |
런타임 흐름
계약 참고 사항