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 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? 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; } }