CustomerPrepaidPassCommandServiceImpl.java

package com.deveagles.be15_deveagles_be.features.membership.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.membership.command.application.dto.request.CustomerPrepaidPassRegistRequest;
import com.deveagles.be15_deveagles_be.features.membership.command.application.dto.request.CustomerPrepaidPassUpdateRequest;
import com.deveagles.be15_deveagles_be.features.membership.command.application.service.CustomerPrepaidPassCommandService;
import com.deveagles.be15_deveagles_be.features.membership.command.domain.aggregate.CustomerPrepaidPass;
import com.deveagles.be15_deveagles_be.features.membership.command.domain.repository.CustomerPrepaidPassRepository;
import java.time.LocalDateTime;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class CustomerPrepaidPassCommandServiceImpl implements CustomerPrepaidPassCommandService {

  private final CustomerPrepaidPassRepository customerPrepaidPassRepository;

  @Override
  public void registCustomerPrepaidPass(CustomerPrepaidPassRegistRequest request) {

    CustomerPrepaidPass customerPrepaidPass =
        CustomerPrepaidPass.builder()
            .customerId(request.getCustomerId())
            .prepaidPassId(request.getPrepaidPassId())
            .remainingAmount(request.getRemainingAmount())
            .expirationDate(request.getExpirationDate())
            .build();

    customerPrepaidPassRepository.save(customerPrepaidPass);
  }

  @Override
  public void updateCustomerPrepaidPass(CustomerPrepaidPassUpdateRequest request) {
    CustomerPrepaidPass pass =
        customerPrepaidPassRepository
            .findById(request.getCustomerPrepaidPassId())
            .orElseThrow(() -> new BusinessException(ErrorCode.CUSTOMERPREPAIDPASS_NOT_FOUND));

    // 3. 값 유효성 체크 및 필드 수정
    if (request.getRemainingAmount() != null) {
      pass.setRemainingAmount(request.getRemainingAmount());
    }

    if (request.getExpirationDate() != null) {
      pass.setExpirationDate(request.getExpirationDate());
    }

    // 4. 수정 시간 갱신
    pass.setModifiedAt(LocalDateTime.now());

    // 5. 저장
    customerPrepaidPassRepository.save(pass);
  }
}