SalesCommandServiceImpl.java

package com.deveagles.be15_deveagles_be.features.sales.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.sales.command.application.service.SalesCommandService;
import com.deveagles.be15_deveagles_be.features.sales.command.domain.aggregate.Sales;
import com.deveagles.be15_deveagles_be.features.sales.command.domain.repository.SalesRepository;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class SalesCommandServiceImpl implements SalesCommandService {

  private final SalesRepository salesRepository;

  @Transactional
  @Override
  public void refundSales(Long salesId) {
    Sales sales =
        salesRepository
            .findById(salesId)
            .orElseThrow(() -> new BusinessException(ErrorCode.SALES_NOT_FOUND));

    if (sales.isRefunded()) {
      throw new BusinessException(ErrorCode.SALES_ALREADY_REFUNDED);
    }

    sales.setRefunded(true);
  }

  @Transactional
  @Override
  public void deleteSales(Long salesId) {
    Sales sales =
        salesRepository
            .findById(salesId)
            .orElseThrow(() -> new BusinessException(ErrorCode.SALES_NOT_FOUND));

    if (sales.getDeletedAt() != null) {
      throw new BusinessException(ErrorCode.SALES_ALREADY_DELETED);
    }

    sales.delete(); // deletedAt = now()
  }
}