CampaignCommandServiceImpl.java
package com.deveagles.be15_deveagles_be.features.campaigns.command.application.service;
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.campaigns.command.application.dto.request.CreateCampaignRequest;
import com.deveagles.be15_deveagles_be.features.campaigns.command.application.dto.response.CampaignResponse;
import com.deveagles.be15_deveagles_be.features.campaigns.command.domain.aggregate.Campaign;
import com.deveagles.be15_deveagles_be.features.campaigns.command.domain.repository.CampaignRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@RequiredArgsConstructor
@Transactional
public class CampaignCommandServiceImpl implements CampaignCommandService {
private final CampaignRepository campaignRepository;
@Override
public CampaignResponse createCampaign(CreateCampaignRequest request) {
validateCampaignDates(request);
Campaign campaign =
Campaign.builder()
.campaignTitle(request.getCampaignTitle())
.description(request.getDescription())
.startDate(request.getStartDate())
.endDate(request.getEndDate())
.messageSendAt(request.getMessageSendAt())
.staffId(request.getStaffId())
.templateId(request.getTemplateId())
.couponId(request.getCouponId())
.customerGradeId(request.getCustomerGradeId())
.tagId(request.getTagId())
.shopId(request.getShopId())
.build();
Campaign savedCampaign = campaignRepository.save(campaign);
return CampaignResponse.from(savedCampaign);
}
@Override
public void deleteCampaign(Long campaignId) {
Campaign campaign =
campaignRepository
.findById(campaignId)
.orElseThrow(() -> new BusinessException(ErrorCode.CAMPAIGN_NOT_FOUND));
if (campaign.isDeleted()) {
throw new BusinessException(ErrorCode.CAMPAIGN_ALREADY_DELETED);
}
campaign.softDelete();
campaignRepository.save(campaign);
}
private void validateCampaignDates(CreateCampaignRequest request) {
if (request.getEndDate().isBefore(request.getStartDate())) {
throw new BusinessException(ErrorCode.INVALID_CAMPAIGN_DATE_RANGE);
}
}
}