From 646be814baf6bce42dd95cc570d9ac796e2ea1b5 Mon Sep 17 00:00:00 2001
From: Marnuri Nitish <NitishM@cardiff.ac.uk>
Date: Wed, 11 Dec 2024 15:55:08 +0000
Subject: [PATCH] Create api methods for delete and update

---
 .../admin/controllers/AdminApiController.java | 26 +++++++++++++++++++
 .../admin/dao/AdminRepository.java            |  2 ++
 .../admin/dao/AdminRepositoryImpl.java        | 11 ++++++++
 .../admin/models/ManageUser.java              |  1 +
 .../admin/services/AdminService.java          |  2 ++
 .../admin/services/AdminServiceImpl.java      | 14 ++++++++++
 6 files changed, 56 insertions(+)
 create mode 100644 src/main/java/polish_community_group_11/polish_community/admin/controllers/AdminApiController.java

diff --git a/src/main/java/polish_community_group_11/polish_community/admin/controllers/AdminApiController.java b/src/main/java/polish_community_group_11/polish_community/admin/controllers/AdminApiController.java
new file mode 100644
index 0000000..8f8aea4
--- /dev/null
+++ b/src/main/java/polish_community_group_11/polish_community/admin/controllers/AdminApiController.java
@@ -0,0 +1,26 @@
+package polish_community_group_11.polish_community.admin.controllers;
+
+import org.springframework.web.bind.annotation.*;
+import polish_community_group_11.polish_community.admin.models.AdminBoard;
+import polish_community_group_11.polish_community.admin.models.ManageUser;
+import polish_community_group_11.polish_community.admin.services.AdminService;
+
+@RestController
+public class AdminApiController {
+    private final AdminService adminService;
+
+    public AdminApiController(AdminService adminService) {
+        this.adminService = adminService;
+    }
+
+    @PutMapping("admin/edit/role/{role_name}")
+    public void changeUserRole(@PathVariable("role_name") String role_name,
+                               @ModelAttribute ManageUser user){
+        adminService.updateUserRole(user,role_name);
+    }
+
+    @DeleteMapping("admin/delete/{user_id}")
+    public void removeUser(@PathVariable("user_id") int user_id){
+        adminService.deleteUser(user_id);
+    }
+}
diff --git a/src/main/java/polish_community_group_11/polish_community/admin/dao/AdminRepository.java b/src/main/java/polish_community_group_11/polish_community/admin/dao/AdminRepository.java
index 9cad39f..fc773c9 100644
--- a/src/main/java/polish_community_group_11/polish_community/admin/dao/AdminRepository.java
+++ b/src/main/java/polish_community_group_11/polish_community/admin/dao/AdminRepository.java
@@ -9,4 +9,6 @@ import java.util.List;
 public interface AdminRepository {
     List<ManageUser> getUserManagementInfo() throws SQLException;
     AdminBoard getBoardManagementInfo() throws SQLException;
+    int updateUserRole(ManageUser user);
+    void deleteUser(int userId);
 }
diff --git a/src/main/java/polish_community_group_11/polish_community/admin/dao/AdminRepositoryImpl.java b/src/main/java/polish_community_group_11/polish_community/admin/dao/AdminRepositoryImpl.java
index 0f62d3a..3659da4 100644
--- a/src/main/java/polish_community_group_11/polish_community/admin/dao/AdminRepositoryImpl.java
+++ b/src/main/java/polish_community_group_11/polish_community/admin/dao/AdminRepositoryImpl.java
@@ -31,6 +31,7 @@ public class AdminRepositoryImpl implements AdminRepository {
                         rs.getString("fullname"),
                         rs.getString("email"),
                         rs.getBoolean("enabled"),
+                        rs.getInt("role_id"),
                         rs.getString("role_name")
                 );
         };
@@ -93,4 +94,14 @@ public class AdminRepositoryImpl implements AdminRepository {
         }
         return dashboard;
     }
+
+    public int updateUserRole(ManageUser user){
+        String sql="UPDATE users SET role_id=? WHERE id =?";
+        return jdbc.update(sql,user.getRole_id(),user.getId());
+    }
+
+    public void deleteUser(int userId){
+        String sql="DELETE FROM users WHERE id =?";
+        jdbc.update(sql,userId);
+    }
 }
diff --git a/src/main/java/polish_community_group_11/polish_community/admin/models/ManageUser.java b/src/main/java/polish_community_group_11/polish_community/admin/models/ManageUser.java
index 73c638c..154adb4 100644
--- a/src/main/java/polish_community_group_11/polish_community/admin/models/ManageUser.java
+++ b/src/main/java/polish_community_group_11/polish_community/admin/models/ManageUser.java
@@ -12,5 +12,6 @@ public class ManageUser {
     private String fullName;
     private String email;
     private Boolean enabled;
+    private int role_id;
     private String role;
 }
diff --git a/src/main/java/polish_community_group_11/polish_community/admin/services/AdminService.java b/src/main/java/polish_community_group_11/polish_community/admin/services/AdminService.java
index da2d1b9..1534096 100644
--- a/src/main/java/polish_community_group_11/polish_community/admin/services/AdminService.java
+++ b/src/main/java/polish_community_group_11/polish_community/admin/services/AdminService.java
@@ -9,4 +9,6 @@ import java.util.List;
 public interface AdminService {
     List<ManageUser> getUserManagementInfo() throws SQLException;
     AdminBoard getBoardManagementInfo() throws SQLException;
+    void updateUserRole(ManageUser user,String roleName);
+    void deleteUser(int userId);
 }
diff --git a/src/main/java/polish_community_group_11/polish_community/admin/services/AdminServiceImpl.java b/src/main/java/polish_community_group_11/polish_community/admin/services/AdminServiceImpl.java
index b3e9103..2d7d6eb 100644
--- a/src/main/java/polish_community_group_11/polish_community/admin/services/AdminServiceImpl.java
+++ b/src/main/java/polish_community_group_11/polish_community/admin/services/AdminServiceImpl.java
@@ -21,4 +21,18 @@ public class AdminServiceImpl implements AdminService {
     public AdminBoard getBoardManagementInfo() throws SQLException{
         return adminRepository.getBoardManagementInfo();
     }
+
+    public void updateUserRole(ManageUser user, String roleName){
+        boolean needsUpdate=roleName.toLowerCase().equals(user.getRole().toLowerCase())?
+                false:true;
+        if(needsUpdate){
+            int updatedRoleId=roleName.toLowerCase().equals("admin")?1:2;
+            user.setRole_id(updatedRoleId);
+            adminRepository.updateUserRole(user);
+        }
+    }
+
+    public void deleteUser(int userId){
+        adminRepository.deleteUser(userId);
+    }
 }
-- 
GitLab