#342 Рефакторинг сервиса обработки продуктов

Компании:
Сбербанк
Темы:
SpringОсновы SpringКод ревью

Реализовать TODO и в случае необходимости провести рефакторинг:

@Service
@RequiredArgsConstructor
@Sl4j
class ProductServiceImpl implements ProductService {
    private final ProductRepository repository;
    private OtherService otherService;
    private Map<String, String> dictionary;

    @PostConstruct
    @Transactional
    public void postConstruct(){
        dictionary = otherService.getDictionary();
    }

    @Autowired
    public void setOtherService(OtherService otherService) {
        this.otherService = otherService;
    }


    /** Метод возвращает список обработанных Продуктов
     *
     * @param productIds
     * @return
     */
    @Transactional
    public List<ProductProcessResult> processProducts(List<Long> productIds){
        productIds.stream().map(productIds.mapToObject)
        //TODO
    }

    @Transactional
    public Product getProduct(Long id){

        if(id == null){
            throw new UnsupportedOperationException("Не поддерживается");
        }
        return repository.findById(id);
    }

    public ProductProcessResult process(Product product) throws IOException {
        if(product.getProductStatus() == PROCESSED){
            throw new IOException("нельзя обрабатывать продукт в состоянии PROCESSED");
        }
        otherService.process(product);
        product.setProductState(PROCESSED);
        return product;
    }
}

@Getter
@HashcodeAndEquals
public class Product {
    enum ProductStatus{
        NEW, PROCESSED
    }

    private int id;
    private ProductStatus productStatus;
    private String name;
    private Double price;
    private List<String> tags;

    Product(int id, ProductStatus productStatus, String name, Double price, List<String> tags){
        this.id = id;
        this.productStatus = productStatus;
        this.name = name;
        this.price = price;
        this.tags = tags;
    }

}

Разбор вопроса

Ментор
Ответь как на реальном собеседовании. Я задам уточняющие вопросы, а затем сравню твой ответ с эталонным и покажу точность в %.
Войди, чтобы начать диалог Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти