2ª Avaliação
-
Crie uma aplicação de lista de tarefas que tenha os seguintes recursos:
- Adicionar tarefas a fazer.
- Marcar tarefas como concluídas.
- Visualizar todas as tarefas, mas as concluídas aparecem com visual diferente.
- Excluir tarefas, sejam concluídas ou não.
Banco de dados
Você pode utilizar a tabela Tarefas abaixo para guardar as tarefas:
CREATE TABLE Tarefas ( id INT PRIMARY KEY IDENTITY, descricao VARCHAR(30) NOT NULL, concluida BIT DEFAULT 0 NOT NULL )
As classes de acesso a dados
Tarefa
eTarefaDao
já estão criadas e prontas para uso.Tarefa.java
package model; public class Tarefa { private Integer id; private String descricao; private boolean concluida; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } public boolean isConcluida() { return concluida; } public void setConcluida(boolean concluida) { this.concluida = concluida; } }
TarefaDao.java
package dao; import fanese.web.model.Tarefa; import org.sql2o.Connection; import java.util.List; public class TarefaDao { /** * Referência da fábrica de conexões */ private static final Database db = Database.getInstance(); public List<Tarefa> obterLista() { String query = "SELECT id, descricao, concluida " + "FROM Tarefas " + "ORDER BY concluida"; try (Connection con = db.open()) { return con.createQuery(query) .executeAndFetch(Tarefa.class); } } public boolean adicionar(Tarefa tarefa) { String query = "INSERT INTO Tarefas (descricao) " + "VALUES (:descricao)"; try (Connection con = db.open()) { con.createQuery(query) .addParameter("descricao", tarefa.getDescricao()) .executeUpdate(); // Obtém id gerado automaticamente pelo SGBD Integer id = con.getKey(Integer.class); tarefa.setId(id); return con.getResult() > 0; } } public boolean concluir(int tarefaId) { String query = "UPDATE Tarefas " + "SET concluida = 1" + "WHERE id = :id"; try (Connection con = db.open()) { con.createQuery(query) .addParameter("id", tarefaId) .executeUpdate(); return con.getResult() > 0; } } public boolean excluir(int id) { String query = "DELETE Tarefas WHERE id = :id"; try (Connection con = db.open()) { con.createQuery(query) .addParameter("id", id) .executeUpdate(); return con.getResult() > 0; } } }
Penalidades
A aplicação deve ser desenvolvida conforme as seguintes diretrizes, sob pena de redução percentual na nota:
- [-50%] Você deverá implementar usando o framework MVC discutido em sala de aula.
- [-20%] Pelo menos um dos recursos deverá utilizar AJAX.
Bônus
Esforço extra será recompensado. As seguintes características agregarão ao valor da nota.
- [até +10%] Aplicação totalmente desenvolvida usando AJAX.
- [até +10%] Criatividade da interface da aplicação.
- [até +10%] Personalização da camada model, inclusive o esquema da tabela.
Citação
Ações não valerão menos porque não foram elogiadas.