#342 Рефакторинг сервиса обработки продуктов
Реализовать 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;
}
}
Разбор вопроса
Войди, чтобы начать диалог
Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти
Доступно с Premium
Это лишь одно из решений, доступных с Premium. А ещё:
- 250+ продвинутых лекций
- 1300+ практических заданий
- 500+ решений задач с реальных собеседований
- Именные сертификаты Java Hub
- Расширенный доступ к AI-ментору