CustomerSessionPassCommandServiceImpl.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.CustomerSessionPassRegistRequest;
import com.deveagles.be15_deveagles_be.features.membership.command.application.dto.request.CustomerSessionPassUpdateRequest;
import com.deveagles.be15_deveagles_be.features.membership.command.application.service.CustomerSessionPassCommandService;
import com.deveagles.be15_deveagles_be.features.membership.command.domain.aggregate.CustomerSessionPass;
import com.deveagles.be15_deveagles_be.features.membership.command.domain.repository.CustomerSessionPassRepository;
import java.time.LocalDateTime;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class CustomerSessionPassCommandServiceImpl implements CustomerSessionPassCommandService {

  private final CustomerSessionPassRepository customerSessionPassRepository;

  @Override
  public void registCustomerSessionPass(CustomerSessionPassRegistRequest request) {

    CustomerSessionPass customerSessionPass =
        CustomerSessionPass.builder()
            .customerId(request.getCustomerId())
            .sessionPassId(request.getSessionPassId())
            .remainingCount(request.getRemainingCount())
            .expirationDate(request.getExpirationDate())
            .build();

    customerSessionPassRepository.save(customerSessionPass);
  }

  @Override
  public void updateCustomerSessionPass(CustomerSessionPassUpdateRequest request) {
    CustomerSessionPass pass =
        customerSessionPassRepository
            .findById(request.getCustomerSessionPassId())
            .orElseThrow(() -> new BusinessException(ErrorCode.CUSTOMERSESSIONPASS_NOT_FOUND));

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

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

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

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