ToDoVel [Parte 23] Refatorando as Listas

Observação: Este tutorial refere-se ao Laravel-4-BETA, estando totalmente DESATUALIZADO para a versão atual. Muita coisa mudou no framework…

No começo, quando tudo era task, criamos a lista.
Refatoramos as tasks.
Agora, tudo é lista e criamos os usuários.
Precisamos refatorar as listas.
E também as tasks (depois).

Agora as listas pertencem a um usuário.
Quando o usuário autenticado no sistema vai para a página de listas, ele só pode ver as listas dele e não todas as listas do sistema, como está ocorrendo.

Refatorando Models

Precisamos declarar o relacionamento entre os usuários e as listas.
declaramos relacionamentos uma vez, lembra?
app/models/User.php

app/models/Lista.php

Refatorando o Controller

Com carinho, vamos refatorar o ListController.php.
Para ninguém se perder, vou fazer por etapas.
Primeiro, vamos refatorar o método postCreate(), que cria novas listas, para criar listas que recebam um ID de usuário.

O que eu fiz foi, dentro do else, que começa na linha 21 do método postCreate(), inseri a linha 24, que pega da sessão o id do usuário logado.

Agora, facilmente, pode-se entender como refatorar o método listar(), que está listando todas as listas do sistema, mas que desejamos que liste apenas as listas do usuário.

OMGWTFBBQ?!
Ficou complicado de entender?
Simples, o que User::find(Auth::user()->id)->listas está fazendo é:

  1. Procurando um usuário (User::find()) onde o id do usuário é Auth::user()->id.
  2. A busca retorna um objeto do tipo User.
  3. Pega as listas do usuário, objeto_user->listas.

Vamos refatorar o método listarTasks, que lista as tasks de uma lista específica.
Novamente, qualquer usuário está podendo ver qualquer lista.
Mas agora NÃO MAIS!

E ai, ficou tenso?
Se você ler da esquerda para a direita, com carinho, vai conseguir entender sem problemas.
Mas, se ficar na dúvida, recorra a documentação sobre relacionamento.

  1. Procurando um usuário (User::find()) onde o id do usuário é Auth::user()->id.
  2. A busca retorna um objeto do tipo User.
  3. Pega as listas do usuário, objeto_user->listas().
  4. Refina a busca das listas com uma cláusla where.
  5. Pega o primeiro resultado da busca.

Tá ficando da hora o nosso aplicativo 😀

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *