Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Muitas verificações iniciais

Eu estou sentindo que posso melhorar meu código. Eu tenho feito muitos códigos de verificação no início de alguns métodos pra prevenir e tratar os erros possíveis, mas estou sentindo que estou colocando muitos ifs pra disparar os erros a serem capturados.

Eu poderia extrair essas verificações iniciais pra um método, mas a quantidade de ifs não diminuiria, tem algum jeito de fazer isso melhor?

P.S.: o código está em php 7.3 para magento 2.

public function execute(): Json
    {
    ...
        try {
            $params = $this->getRequest()->getParams();

            if (empty($params)) {
                throw new AuthorizationException(
                    __('You must pass an order id and a product id to save tracking item.')
                );
            }

            if (
                $this->getRequest()->getMethod() !== 'POST' ||
                !$this->getRequest()->isXmlHttpRequest()
            ) {
                throw new AuthorizationException(__('Invalid request.'));
            }

            if (is_null($params['product_id'])) {
                throw new NoSuchEntityException(__('This product has been deleted.'));
            }

            $productFactory = $this->productFactory->create()
                ->load($params['product_id']);

            if (is_null($productFactory->getId())) {
                throw new NoSuchEntityException(__('You must pass a product ID.'));
            }
            ...
        } catch (\Exception | NoSuchEntityException $exception) {
            $this->messageManager->addErrorMessage(__($exception->getMessage()));
            $this->logger->error($exception->getMessage());
            $resultJson->setHttpResponseCode($httpBadRequestCode);
            $response = [
                'errors' => true,
                'message' => $exception->getMessage(),
            ];
        }

        return $resultJson->setData($response);
2 respostas
solução!

Opa, Lucas. Estudando arquitetura você pode acabar pensando em um local melhor para adicionar essas validações.

Talvez antes de instanciar o objeto dessa classe em questão você já pudesse ter os dados validados. :-D

É que esse controller de um ajax, aí não teria como validar antes.

Acabei o curso de Refatoração em PHP, e gostei da sua ideia de remover as validações pra uma classe e utilizar uma biblioteca Maybe, posso adaptar algo nesse sentido.