From d3c58fd6de47ce49de5ef9262d25e2f5a87d09d0 Mon Sep 17 00:00:00 2001 From: abdu <abdukiran@gmail.com> Date: Sun, 13 Oct 2024 15:47:17 +0200 Subject: [PATCH] add delete button (frontend), add delete endpoint (controller), add delete method (service) --- frontend/src/components/MainPage.vue | 24 ++++++++++++++++--- .../todo/controller/UserController.java | 12 ++++++++++ .../com/cloudcomputing/todo/dto/TodoDTO.java | 1 + .../com/cloudcomputing/todo/entity/Todo.java | 3 +++ .../todo/mapper/TodoMapper.java | 2 ++ .../todo/service/UserService.java | 21 +++++++++++++++- 6 files changed, 59 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/MainPage.vue b/frontend/src/components/MainPage.vue index 10c800c..0e29fe4 100644 --- a/frontend/src/components/MainPage.vue +++ b/frontend/src/components/MainPage.vue @@ -26,6 +26,7 @@ export default { password: '' }, todo: { + todoId: '', title: '', description: '', userId: '', @@ -70,7 +71,24 @@ export default { }); if(response.status === 201) { - this.items = await response.json() + const items = await response.json() + this.items = items.filter(item => item.completed === false) + this.completedItems = items.filter(item => item.completed === true) + } + }, + async deleteTodo(todoId){ + let url = `http://localhost:9876/user/deleteTodo?userId=${localStorage.getItem('userId')}&todoId=${todoId}` + + const response = await fetch(url, { + method: 'DELETE', + headers: { + "Content-Type": "application/json" + }, + credentials: 'include', // Ensure credentials are included + }) + + if(response.status === 204) { + await this.getAllTodos() } }, async signout(){ @@ -127,7 +145,7 @@ export default { <div class="badge-container"> <div class="custom-badge-not-completed">running</div> </div> - <b-button variant="danger" @click.stop="deleteItem(index)">Delete</b-button> + <b-button variant="danger" @click.stop="deleteTodo(item.todoId)">Delete</b-button> </div> </li> </ul> @@ -143,7 +161,7 @@ export default { <div class="badge-container"> <div class="custom-badge-completed">completed</div> </div> - <b-button variant="danger" @click.stop="deleteItem(index)">Delete</b-button> + <b-button variant="danger" @click.stop="deleteTodo(item.todoId)">Delete</b-button> </div> </li> </ul> diff --git a/src/main/java/com/cloudcomputing/todo/controller/UserController.java b/src/main/java/com/cloudcomputing/todo/controller/UserController.java index e05a8d7..146f252 100644 --- a/src/main/java/com/cloudcomputing/todo/controller/UserController.java +++ b/src/main/java/com/cloudcomputing/todo/controller/UserController.java @@ -60,6 +60,18 @@ public class UserController { return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED); } + @DeleteMapping("/deleteTodo") + public ResponseEntity<List<TodoDTO>> deleteTodo(HttpServletRequest request, @RequestParam String userId, @RequestParam String todoId) { + System.out.println("controller here"); + if(userService.validateSession(request)){ + System.out.println("controller here - session valid"); + List<TodoDTO> todos = userService.deleteTodo(userId, todoId); + return new ResponseEntity<>(todos, HttpStatus.NO_CONTENT); + } + + return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED); + } + @GetMapping("/getAllTodos") public ResponseEntity<List<TodoDTO>> getAllTodos(HttpServletRequest request, @RequestParam String userId) { if(userService.validateSession(request)){ diff --git a/src/main/java/com/cloudcomputing/todo/dto/TodoDTO.java b/src/main/java/com/cloudcomputing/todo/dto/TodoDTO.java index aa5034a..35e33ab 100644 --- a/src/main/java/com/cloudcomputing/todo/dto/TodoDTO.java +++ b/src/main/java/com/cloudcomputing/todo/dto/TodoDTO.java @@ -6,6 +6,7 @@ import lombok.Setter; @Getter @Setter public class TodoDTO { + private String todoId; private String title; private String description; private String userId; diff --git a/src/main/java/com/cloudcomputing/todo/entity/Todo.java b/src/main/java/com/cloudcomputing/todo/entity/Todo.java index aecff56..11bf3ba 100644 --- a/src/main/java/com/cloudcomputing/todo/entity/Todo.java +++ b/src/main/java/com/cloudcomputing/todo/entity/Todo.java @@ -2,12 +2,15 @@ package com.cloudcomputing.todo.entity; import lombok.Getter; import lombok.Setter; +import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Getter @Setter @Document public class Todo { + @Id + private String todoId; private String title; private String description; private String userId; diff --git a/src/main/java/com/cloudcomputing/todo/mapper/TodoMapper.java b/src/main/java/com/cloudcomputing/todo/mapper/TodoMapper.java index 1ef3a4f..647f263 100644 --- a/src/main/java/com/cloudcomputing/todo/mapper/TodoMapper.java +++ b/src/main/java/com/cloudcomputing/todo/mapper/TodoMapper.java @@ -9,6 +9,7 @@ public class TodoMapper { public TodoDTO entityToDto(Todo todo) { TodoDTO todoDTO = new TodoDTO(); + todoDTO.setTodoId(todo.getTodoId()); todoDTO.setTitle(todo.getTitle()); todoDTO.setDescription(todo.getDescription()); todoDTO.setUserId(todo.getUserId()); @@ -19,6 +20,7 @@ public class TodoMapper { public Todo dtoToEntity(TodoDTO dto){ Todo todo = new Todo(); + todo.setTodoId(dto.getTodoId()); todo.setTitle(dto.getTitle()); todo.setDescription(dto.getDescription()); todo.setUserId(dto.getUserId()); diff --git a/src/main/java/com/cloudcomputing/todo/service/UserService.java b/src/main/java/com/cloudcomputing/todo/service/UserService.java index 72def1a..853fd62 100644 --- a/src/main/java/com/cloudcomputing/todo/service/UserService.java +++ b/src/main/java/com/cloudcomputing/todo/service/UserService.java @@ -84,15 +84,34 @@ public class UserService { public List<TodoDTO> addTodo(TodoDTO todoDTO){ Todo todo = todoMapper.dtoToEntity(todoDTO); todoRepository.save(todo); - List <Todo> todoList = todoRepository.findAllByUserId(todo.getUserId()); + List<Todo> todoList = todoRepository.findAllByUserId(todo.getUserId()); List<TodoDTO> todoDTOList = new ArrayList<>(); todoList.forEach((todoItem) -> { todoDTOList.add(todoMapper.entityToDto(todoItem)); }); + + return todoDTOList; + } + + + public List<TodoDTO> deleteTodo(String userId, String todoId) { + System.out.println("service here"); + if(todoRepository.existsById(todoId)){ + todoRepository.deleteById(todoId); + } + + List<Todo> todoList = todoRepository.findAllByUserId(userId); + List<TodoDTO> todoDTOList = new ArrayList<>(); + + todoList.forEach((todoItem) -> { + todoDTOList.add(todoMapper.entityToDto(todoItem)); + }); + return todoDTOList; } + //helper methods public boolean validateSession(HttpServletRequest request) { HttpSession session = request.getSession(false); System.out.println("Session ID: " + (session != null ? session.getId() : "null")); -- GitLab