JpaPriceCatalog.java

package com.example.orderplatform.pricing.infrastructure;

import com.example.orderplatform.Money;
import com.example.orderplatform.pricing.application.CatalogPrice;
import com.example.orderplatform.pricing.application.PriceCatalog;
import java.util.Optional;
import org.springframework.stereotype.Service;

@Service
class JpaPriceCatalog implements PriceCatalog {

    private final PriceCatalogRepository catalog;

    JpaPriceCatalog(PriceCatalogRepository catalog) {
        this.catalog = catalog;
    }

    @Override
    public Optional<CatalogPrice> findActivePrice(String productCode) {
        return catalog.findById(productCode)
                .filter(PriceCatalogItemEntity::active)
                .map(item -> new CatalogPrice(item.productCode(), Money.of(item.unitAmount(), item.currency())));
    }
}