AcquisitionChannelQueryServiceImpl.java
package com.deveagles.be15_deveagles_be.features.customers.query.infrastructure.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.customers.command.application.dto.response.AcquisitionChannelResponse;
import com.deveagles.be15_deveagles_be.features.customers.command.domain.aggregate.AcquisitionChannel;
import com.deveagles.be15_deveagles_be.features.customers.command.domain.repository.AcquisitionChannelRepository;
import com.deveagles.be15_deveagles_be.features.customers.query.service.AcquisitionChannelQueryService;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
@Slf4j
public class AcquisitionChannelQueryServiceImpl implements AcquisitionChannelQueryService {
private final AcquisitionChannelRepository acquisitionChannelRepository;
@Override
public AcquisitionChannelResponse getAcquisitionChannel(Long channelId) {
log.info("유입경로 단건 조회 요청 - ID: {}", channelId);
AcquisitionChannel acquisitionChannel =
acquisitionChannelRepository
.findById(channelId)
.orElseThrow(
() -> {
log.error("유입경로를 찾을 수 없음 - ID: {}", channelId);
return new BusinessException(ErrorCode.RESOURCE_NOT_FOUND, "유입경로를 찾을 수 없습니다.");
});
AcquisitionChannelResponse response = mapToResponse(acquisitionChannel);
log.info("유입경로 조회 완료 - ID: {}, 채널명: {}", channelId, response.getChannelName());
return response;
}
@Override
public List<AcquisitionChannelResponse> getAllAcquisitionChannels() {
log.info("전체 유입경로 목록 조회 요청");
List<AcquisitionChannel> acquisitionChannels = acquisitionChannelRepository.findAll();
List<AcquisitionChannelResponse> responses =
acquisitionChannels.stream().map(this::mapToResponse).toList();
log.info("전체 유입경로 목록 조회 완료 - 총 {}개", responses.size());
return responses;
}
@Override
public Page<AcquisitionChannelResponse> getAcquisitionChannels(Pageable pageable) {
log.info("유입경로 페이징 조회 요청 - 페이지: {}, 크기: {}", pageable.getPageNumber(), pageable.getPageSize());
Page<AcquisitionChannel> acquisitionChannels = acquisitionChannelRepository.findAll(pageable);
Page<AcquisitionChannelResponse> responses = acquisitionChannels.map(this::mapToResponse);
log.info(
"유입경로 페이징 조회 완료 - 현재페이지: {}, 전체페이지: {}, 전체개수: {}",
responses.getNumber(),
responses.getTotalPages(),
responses.getTotalElements());
return responses;
}
private AcquisitionChannelResponse mapToResponse(AcquisitionChannel acquisitionChannel) {
return AcquisitionChannelResponse.builder()
.id(acquisitionChannel.getId())
.channelName(acquisitionChannel.getChannelName())
.createdAt(acquisitionChannel.getCreatedAt())
.modifiedAt(acquisitionChannel.getModifiedAt())
.build();
}
}