diff --git a/SETUP.md b/SETUP.md index e762021..6f20de8 100644 --- a/SETUP.md +++ b/SETUP.md @@ -72,7 +72,12 @@ POST http://localhost:8080/graphql })\n }" } +### +GRAPHQL http://localhost:8080/graphql +mutation { + deleteById(id: 14) +} ### ``` 3. Useful end-points: diff --git a/src/main/java/br/com/pedr0limpio/resources/TaskResource.java b/src/main/java/br/com/pedr0limpio/resources/TaskResource.java index 104c6f1..d82932d 100644 --- a/src/main/java/br/com/pedr0limpio/resources/TaskResource.java +++ b/src/main/java/br/com/pedr0limpio/resources/TaskResource.java @@ -64,9 +64,14 @@ public Task editById(int id, Task taskFor) { //TODO[#4]: Implement the editById( @Mutation @Transactional - public void deleteById(int id) { //TODO[#5]: Implement the deleteById(int id) method to delete a task. + public String deleteById(int id) { try { + Task existing = taskBaseDAO.getById(id); + if (existing == null) { + return "task id " + id + " not found"; + } taskBaseDAO.removeById(id); + return "task id " + id + " deleted"; } catch (Exception e) { LOG.error("Error deleting task", e); throw new RuntimeException("Error deleting task", e); diff --git a/src/main/java/br/com/pedr0limpio/services/MySQLDAO.java b/src/main/java/br/com/pedr0limpio/services/MySQLDAO.java index 2280c66..d67c9fa 100644 --- a/src/main/java/br/com/pedr0limpio/services/MySQLDAO.java +++ b/src/main/java/br/com/pedr0limpio/services/MySQLDAO.java @@ -182,8 +182,29 @@ public void update(int idFrom, Task taskFor) { //TODO[#11]: Implement update(int } @Override - public void removeById(int id) { //TODO[#12]: Implement removeById(int id) to delete a task by id in DB. - + public boolean removeById(int id) { + String deleteTaskTagsSql = "DELETE FROM TASK_TAGS WHERE task_id = ?"; + String deleteTaskSql = "DELETE FROM TASKS WHERE task_id = ?"; + int affectedRows = 0; + try (Connection conn = DriverManager.getConnection(url, username, password)) { + conn.setAutoCommit(false); + try (PreparedStatement stmt1 = conn.prepareStatement(deleteTaskTagsSql)) { + stmt1.setInt(1, id); + stmt1.executeUpdate(); + } + try (PreparedStatement stmt2 = conn.prepareStatement(deleteTaskSql)) { + stmt2.setInt(1, id); + affectedRows = stmt2.executeUpdate(); + } + conn.commit(); + } catch (SQLException e) { + LOGGER.error(e.getMessage()); + try (Connection conn = DriverManager.getConnection(url, username, password)) { + conn.rollback(); + } catch (SQLException rollbackException) { + LOGGER.error(rollbackException.getMessage()); + } + } + return affectedRows > 0; } } - diff --git a/src/main/java/br/com/pedr0limpio/services/TaskBaseDAO.java b/src/main/java/br/com/pedr0limpio/services/TaskBaseDAO.java index e5dc876..a7b1c28 100644 --- a/src/main/java/br/com/pedr0limpio/services/TaskBaseDAO.java +++ b/src/main/java/br/com/pedr0limpio/services/TaskBaseDAO.java @@ -9,6 +9,6 @@ public abstract class TaskBaseDAO { public abstract List getAllTasks(); public abstract Task getById(int id); public abstract void update(int idFrom, Task taskFor); - public abstract void removeById(int id); + public abstract boolean removeById(int id); }