From 40cc234b83f8a3dd800165300e07b7045a59ef18 Mon Sep 17 00:00:00 2001 From: Rohan Sircar Date: Thu, 30 Jul 2020 23:22:57 +0530 Subject: [PATCH] Added delete user handler in admin #13 --- pom.xml | 5 +++++ .../frontend/admin/pages/user/ViewUsers.ts | 14 +++++++++++++- .../chatto/controller/AdminRESTController.java | 18 ++++++++++++++++-- .../org/ros/chatto/service/AdminService.java | 15 ++++++++++++++- .../org/ros/chatto/service/UserService.java | 1 + .../ros/chatto/service/UserServiceImpl.java | 10 ++++++++++ 6 files changed, 59 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 0627f58..dd14219 100644 --- a/pom.xml +++ b/pom.xml @@ -103,6 +103,11 @@ flyway-core compile + + com.spencerwi + Either.java + 2.2.0 + diff --git a/src/main/frontend/admin/pages/user/ViewUsers.ts b/src/main/frontend/admin/pages/user/ViewUsers.ts index d16fe6c..d377bee 100644 --- a/src/main/frontend/admin/pages/user/ViewUsers.ts +++ b/src/main/frontend/admin/pages/user/ViewUsers.ts @@ -2,6 +2,7 @@ import moment from "moment"; import { capitalize } from "../../../common/util/Util"; import { AdminUserDTO } from "../../../common/dto/AdminUserDTO"; import log from "loglevel"; +import { createApiHeaders } from "../../../common/ajax/util"; export async function viewUsers(authToken: string) { // const users = await getOtherUsers(authToken); @@ -46,7 +47,18 @@ export async function viewUsers(authToken: string) { extend: "selectedSingle", text: "Delete User", action: (e, dt, button, config) => { - log.error("Not implemented yet"); + const selectedRow = dt.row({ selected: true }); + const username = (selectedRow.data() as AdminUserDTO).userName; + fetch(`/api/admin/delete/users/${username}`, { + headers: createApiHeaders(authToken), + method: "DELETE", + }).then((resp) => { + if (resp.status === 200) { + selectedRow.remove(); + log.info("User deleted successfully"); + dt.draw(); + } + }); }, }, { diff --git a/src/main/java/org/ros/chatto/controller/AdminRESTController.java b/src/main/java/org/ros/chatto/controller/AdminRESTController.java index 04e915b..6b98ace 100644 --- a/src/main/java/org/ros/chatto/controller/AdminRESTController.java +++ b/src/main/java/org/ros/chatto/controller/AdminRESTController.java @@ -2,20 +2,21 @@ package org.ros.chatto.controller; import java.security.Principal; import java.time.Instant; -import java.util.Date; import java.util.List; import javax.validation.Valid; +import com.spencerwi.either.Result; + import org.ros.chatto.dto.AdminUserDTO; import org.ros.chatto.dto.ChatMessageDTO; import org.ros.chatto.dto.ReencryptionDTO; import org.ros.chatto.service.AdminService; import org.ros.chatto.service.ChatService; import org.ros.chatto.service.UserService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -70,4 +71,17 @@ public class AdminRESTController { public List getAllOtherUsers(Principal principal) { return adminService.getOtherUsers(principal.getName()); } + + @DeleteMapping("/delete/users/{userName}") + public ResponseEntity deleteUser(@PathVariable String userName) { + Result res = adminService.deleteUser(userName); + if (res.isOk()) { + return ResponseEntity.ok() + .body("Deleted User with name - " + userName); + } else { + return ResponseEntity.badRequest().body( + "An error occured while trying to delete user with name - " + + userName); + } + } } diff --git a/src/main/java/org/ros/chatto/service/AdminService.java b/src/main/java/org/ros/chatto/service/AdminService.java index ababd91..bd29928 100644 --- a/src/main/java/org/ros/chatto/service/AdminService.java +++ b/src/main/java/org/ros/chatto/service/AdminService.java @@ -1,20 +1,33 @@ package org.ros.chatto.service; -import java.security.Principal; import java.util.List; +import java.util.Optional; + +import com.spencerwi.either.Result; import org.ros.chatto.dto.AdminUserDTO; +import org.ros.chatto.model.ChatUser; import org.ros.chatto.repository.UserRepository; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; @Service @RequiredArgsConstructor +@Slf4j public class AdminService { private final UserRepository userRepository; public List getOtherUsers(String principal) { return userRepository.getOtherUsers(principal); } + + public Result deleteUser(String userName) { + Optional user = userRepository.findByUserName(userName); + return Result.attempt(() -> user.get()).map((u) -> { + userRepository.delete(u); + return (Void) null; + }); + } } \ No newline at end of file diff --git a/src/main/java/org/ros/chatto/service/UserService.java b/src/main/java/org/ros/chatto/service/UserService.java index 931aec9..a8abb2f 100644 --- a/src/main/java/org/ros/chatto/service/UserService.java +++ b/src/main/java/org/ros/chatto/service/UserService.java @@ -28,4 +28,5 @@ public interface UserService { public void incrementUserSession(String userName); public UserSession decrementUserSession(String userName); + } diff --git a/src/main/java/org/ros/chatto/service/UserServiceImpl.java b/src/main/java/org/ros/chatto/service/UserServiceImpl.java index 99e5737..bc469f6 100644 --- a/src/main/java/org/ros/chatto/service/UserServiceImpl.java +++ b/src/main/java/org/ros/chatto/service/UserServiceImpl.java @@ -194,4 +194,14 @@ public class UserServiceImpl implements UserService { return user.getUserRoles().stream().map(ur -> ur.getRole()) .collect(Collectors.toSet()); } + + public void deleteUser(String userName) { + // + Optional user = userRepository.findByUserName(userName); + user.ifPresentOrElse(u -> { + userRepository.delete(u); + }, () -> { + log.error("User with name {} not found for deletion", userName); + }); + } }