- POST /v1/in/message/preview 엔드포인트 추가 - MessageService: 메시지 조회 → 변수 치환 → 미리보기 데이터 반환 - IMessageService 인터페이스 정의 (향후 CRUD 확장용) Closes #120
49 lines
1.5 KiB
C#
49 lines
1.5 KiB
C#
using SPMS.Application.DTOs.Message;
|
|
using SPMS.Application.Interfaces;
|
|
using SPMS.Domain.Common;
|
|
using SPMS.Domain.Exceptions;
|
|
using SPMS.Domain.Interfaces;
|
|
|
|
namespace SPMS.Application.Services;
|
|
|
|
public class MessageService : IMessageService
|
|
{
|
|
private readonly IMessageRepository _messageRepository;
|
|
|
|
public MessageService(IMessageRepository messageRepository)
|
|
{
|
|
_messageRepository = messageRepository;
|
|
}
|
|
|
|
public async Task<MessagePreviewResponseDto> PreviewAsync(long serviceId, MessagePreviewRequestDto request)
|
|
{
|
|
var message = await _messageRepository.GetByMessageCodeAndServiceAsync(request.MessageCode, serviceId);
|
|
if (message == null)
|
|
throw new SpmsException(ErrorCodes.MessageNotFound, "존재하지 않는 메시지 코드입니다.", 404);
|
|
|
|
var title = ApplyVariables(message.Title, request.Variables);
|
|
var body = ApplyVariables(message.Body, request.Variables);
|
|
|
|
return new MessagePreviewResponseDto
|
|
{
|
|
Title = title,
|
|
Body = body,
|
|
ImageUrl = message.ImageUrl,
|
|
LinkUrl = message.LinkUrl
|
|
};
|
|
}
|
|
|
|
private static string ApplyVariables(string template, Dictionary<string, string>? variables)
|
|
{
|
|
if (variables == null || variables.Count == 0)
|
|
return template;
|
|
|
|
var result = template;
|
|
foreach (var (key, value) in variables)
|
|
{
|
|
result = result.Replace($"{{{{{key}}}}}", value);
|
|
}
|
|
return result;
|
|
}
|
|
}
|