MessageTemplateServiceImpl.java
package com.deveagles.be15_deveagles_be.features.messages.command.application.service.impl;
import com.deveagles.be15_deveagles_be.common.exception.BusinessException;
import com.deveagles.be15_deveagles_be.common.exception.ErrorCode;
import com.deveagles.be15_deveagles_be.features.messages.command.application.dto.request.MessageTemplateCreateRequest;
import com.deveagles.be15_deveagles_be.features.messages.command.application.dto.request.MessageTemplateUpdateRequest;
import com.deveagles.be15_deveagles_be.features.messages.command.application.dto.response.MessageTemplateResponse;
import com.deveagles.be15_deveagles_be.features.messages.command.application.service.MessageTemplateService;
import com.deveagles.be15_deveagles_be.features.messages.command.domain.aggregate.MessageTemplate;
import com.deveagles.be15_deveagles_be.features.messages.command.domain.repository.MessageTemplateRepository;
import com.deveagles.be15_deveagles_be.features.messages.query.repository.MessageTemplateQueryRepository;
import com.deveagles.be15_deveagles_be.features.shops.command.application.service.ShopCommandService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@RequiredArgsConstructor
public class MessageTemplateServiceImpl implements MessageTemplateService {
private final MessageTemplateRepository messageTemplateRepository;
private final ShopCommandService shopCommandService;
private final MessageTemplateQueryRepository messageTemplateQueryRepository;
@Override
@Transactional
public MessageTemplateResponse createTemplate(Long shopId, MessageTemplateCreateRequest request) {
shopCommandService.validateShopExists(shopId);
MessageTemplate template =
MessageTemplate.builder()
.templateName(request.getTemplateName())
.templateContent(request.getTemplateContent())
.templateType(request.getTemplateType())
.shopId(shopId)
.customerGradeId(request.getCustomerGradeId())
.tagId(request.getTagId())
.build();
return MessageTemplateResponse.from(messageTemplateRepository.save(template));
}
@Override
@Transactional
public void changeTemplate(Long templateId, Long shopId, MessageTemplateUpdateRequest request) {
MessageTemplate template =
messageTemplateQueryRepository
.findByIdAndNotDeleted(templateId)
.orElseThrow(() -> new BusinessException(ErrorCode.TEMPLATE_NOT_FOUND));
System.out.println(shopId);
if (!template.isUsableForShop(shopId)) {
throw new BusinessException(ErrorCode.TEMPLATE_ACCESS_DENIED);
}
template.update(
request.getTemplateName(),
request.getTemplateContent(),
request.getTemplateType(),
request.getCustomerGradeId(),
request.getTagId());
}
@Transactional
@Override
public void removeTemplate(Long templateId, Long shopId) {
MessageTemplate template =
messageTemplateQueryRepository
.findByIdAndNotDeleted(templateId)
.orElseThrow(() -> new BusinessException(ErrorCode.TEMPLATE_NOT_FOUND));
if (!template.isUsableForShop(shopId)) {
throw new BusinessException(ErrorCode.TEMPLATE_ACCESS_DENIED);
}
template.softDelete();
}
}