@Service
@Slf4j
public class SmsAgentService {
@Autowired
private RestTemplate restTemplate;
@Autowired
private SmsRepository smsRepo;
@Value("${sms.api.url}")
private String smsApiUrl;
@Value("${sms.api.key}")
private String apiKey;
// 단일 문자 발송
public SmsResponse sendSms(
String phone,
String message
) {
log.info(
"SMS 발송 시작: {}",
phone
);
HttpHeaders headers =
createHeaders();
Map<String, Object> body =
createRequestBody(
phone,
message
);
HttpEntity<Map<String, Object>>
request = new HttpEntity<>(
body,
headers
);
ResponseEntity<String> response =
restTemplate.postForEntity(
smsApiUrl,
request,
String.class
);
saveSmsLog(phone, message);
return SmsResponse.success();
}
// 대량 문자 발송
public void sendBulkSms(
List<String> phones,
String message
) {
phones.forEach(phone ->
sendSms(phone, message)
);
}
// 헤더 생성
private HttpHeaders createHeaders() {
HttpHeaders headers =
new HttpHeaders();
headers.setContentType(
MediaType.APPLICATION_JSON
);
headers.set(
"Authorization",
"Bearer " + apiKey
);
return headers;
}
// 요청 바디 생성
private Map<String, Object>
createRequestBody(
String phone,
String message
) {
Map<String, Object> body =
new HashMap<>();
body.put("phone", phone);
body.put("message", message);
body.put(
"sendTime",
LocalDateTime.now()
);
return body;
}
// SMS 로그 저장
private void saveSmsLog(
String phone,
String message
) {
SmsLog log = SmsLog
.builder()
.phone(phone)
.message(message)
.sendTime(
LocalDateTime.now()
)
.build();
smsRepo.save(log);
}
}
@Service
@Slf4j
public class SmsAgentService {
@Autowired
private RestTemplate restTemplate;
@Autowired
private SmsRepository smsRepo;
@Value("${sms.api.url}")
private String smsApiUrl;
@Value("${sms.api.key}")
private String apiKey;
// 단일 문자 발송
public SmsResponse sendSms(
String phone,
String message
) {
log.info(
"SMS 발송 시작: {}",
phone
);
HttpHeaders headers =
createHeaders();
Map<String, Object> body =
createRequestBody(
phone,
message
);
HttpEntity<Map<String, Object>>
request = new HttpEntity<>(
body,
headers
);
ResponseEntity<String> response =
restTemplate.postForEntity(
smsApiUrl,
request,
String.class
);
saveSmsLog(phone, message);
return SmsResponse.success();
}
// 대량 문자 발송
public void sendBulkSms(
List<String> phones,
String message
) {
phones.forEach(phone ->
sendSms(phone, message)
);
}
// 헤더 생성
private HttpHeaders createHeaders() {
HttpHeaders headers =
new HttpHeaders();
headers.setContentType(
MediaType.APPLICATION_JSON
);
headers.set(
"Authorization",
"Bearer " + apiKey
);
return headers;
}
// 요청 바디 생성
private Map<String, Object>
createRequestBody(
String phone,
String message
) {
Map<String, Object> body =
new HashMap<>();
body.put("phone", phone);
body.put("message", message);
body.put(
"sendTime",
LocalDateTime.now()
);
return body;
}
// SMS 로그 저장
private void saveSmsLog(
String phone,
String message
) {
SmsLog log = SmsLog
.builder()
.phone(phone)
.message(message)
.sendTime(
LocalDateTime.now()
)
.build();
smsRepo.save(log);
}
}