ToDoVel [Parte 24] Refatorando as Tasks

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

Agora precisamos refatorar as tasks.
O que aconteceu na evolução do nosso aplicativo foi o seguinte: nasceram as tasks.
Depois nasceram as listas.
As listas viraram pai (ou mãe) das tasks.
E ai nasceu o usuário.
O usuário passou a ser pai das listas e, no sentido da coisa, avô das tasks.

Já refatoramos as listas para que o usuário só possa ver e alterar as listas que são suas.
Agora vamos refatorar as tasks para os usuários só poderem ver e alterar as tasks que são suas (ou o mais difícil, tasks que são das listas que são suas).

Controller

No TaskController temos 3 métodos muito importantes: getAdd para mostrar a página com o formulário para criarmos uma task, postAdd para receber o formulário e criar a task e check para marcar a task como concluída.
Os dois primeiros métodos são os mais simples de resolver e daremos a mesma solução para os dois.
Farei a alteração, tomando como exemplo o getAdd, e fica como dever de casa para vocês alterar o postAdd.

public function getAdd($lista_id) {
    //verifica se a lista existe
    if ( Lista::findOrFail($lista_id)->usuario->id != Auth::user()->id )
        return Redirect::to('list');
    
    return View::make('add_task')->with('lista_id', $lista_id);
}

O que eu fiz foi o seguinte: onde tinhamos Lista::findOrFail($lista_id), que verifica se a lista passada existe, coloquei o if com o redirect que está ai no código.
O novo if ainda verifica se a lista existe.
Ele também aproveita, se a lista existir, pega o usuário que é dono da lista e verifica se o id dele é o mesmo do usuário logado.

No postAdd é só fazer a mesma coisa.

Atualizando o Model

Vamos fazer algo bem legal agora.
Imagine que você quer pegar o id do usuário que é dono da task.
O comando é (mais ou menos) Task::lista->usuario->id.

Facinho.

Mas se quisessemos deixar nosso código mais legível ainda, e assim mais legalzudo?
#comofas?

Vamos criar um método dentro do model/Task.php:

public function getUsuarioId() {
    return $this->lista->usuario->id;
}

Agora, para pegarmos o id do usuário que é “dono” da task basta fazermos Task::getUsuarioId().
Quer ver em prática?

Refatorando o Método Check

Vamos refatorar o método Check para verificar se o dono da task é o usuário logado.
Para isso, vamos alterar o bloco try/catch da linha 57.

try {
    $task = Task::findOrFail(Input::get('task_id'));
    
    if ($task->getUsuarioId() != Auth::user()->id)
        throw new Exception("você não é o dono dessa task");
    
    $task->status = TRUE;
    $task->save();
    
    return Response::json( array("status" => TRUE, "titulo" => $task->titulo) );
}

O nosso novo getUserId está lá, bem legal, na linha 60.
Ficou legal, né?

Refatoramos bem boladamente nosso código!

O código fonte do projeto encontra-se no GitHub:
https://github.com/frenetic/todovel

Deixe um comentário

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