2
respostas

Afinal de contas, onde fica a regra de negócios?

Recebi um teste onde eu precisaria aplicar uma regra de negócios onde posso deletar apenas clientes que não tenham um plano específico e/ou que não sejam de uma cidade específica. Utilizei laravel com algumas camadas como services, providers, repositories, models, controllers, requests, etc. Coloquei a regra no serviço, está correto?

Esta é parte do meu ClienteService

    public function deletar(int $id): void
    {
        if ($this->clientePodeSerDeletado($id)) {
            $this->clienteRepository->deletar($id);
        }
    }

    public function clientePodeSerDeletado(int $id): bool
    {
        $cliente = $this->obterPorId($id);
        if ($cliente->estado === 'São Paulo') {
            throw new Exception('Clientes de São Paulo não são elegíveis para exclusão.');
        }

        $planos = json_decode($cliente->planos);
        foreach ($planos as $plano) {
            if ($plano->nome === 'Free') {
                throw new Exception('Clientes do plano Free não são elegíveis para exclusão.');
            }
        }

        return true;
    }
2 respostas

editei acima com parte do código

Olá, Felipe. Quando falamos de arquitetura, é difícil apontar o que é "certo" ou "errado".

Eu definitivamente não criaria um "service", mas isso não significa que está errado. Eu deixaria isso na camada de domínio do meu sistema. Nos cursos de Clean Architecture e DDD aqui da Alura você pode aprender mais sobre isso.