#30 Рефакторинг stateful сервиса в stateless

Компании:
Альфа-Банк
Темы:
SpringSpring BootПрактика

Сделать рефакторинг кода:

@RestController
@RequestMapping(path = "/contract")
public class ContractController {

    private final ContractRepository repository;
    private final ContractService contractService;

    public ContractController(ContractRepository repository, ContractService contractService) {
        this.repository = repository;
        this.contractService = contractService;
    }

    @PostMapping(path = "/{contractId}/price")
    public void updatePrice(@PathVariable Long contractId) {
        Contract contract = repository.findById(contractId).orElseThrow();
        contractService.setContract(contract);
        contractService.updatePrice();
}
}

@Service
public class ContractService {

    private final PriceService priceService;
    private Contract contract;

    public ContractService(PriceService priceService) {
        this.priceService = priceService;
    }

    public void setContract(Contract contract) {
        this.contract = contract;
    }

    public void updatePrice() {
        if (contract != null) {
            BigDecimal price = priceService.calcPrice(contract);
            contract.setPrice(price);
        }
    }
}

class Contract {

    private BigDecimal price;

    public BigDecimal getPrice() {
        return this.price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }
}

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

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