2ª Avaliação

  1. Crie uma aplicação de lista de tarefas que tenha os seguintes recursos:

    1. Adicionar tarefas a fazer.
    2. Marcar tarefas como concluídas.
    3. Visualizar todas as tarefas, mas as concluídas aparecem com visual diferente.
    4. 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 e TarefaDao 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:

    1. [-50%] Você deverá implementar usando o framework MVC discutido em sala de aula.
    2. [-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.

    1. [até +10%] Aplicação totalmente desenvolvida usando AJAX.
    2. [até +10%] Criatividade da interface da aplicação.
    3. [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.

J. R. R. Tolkien