Skip to content

Commit 6c0755e

Browse files
committed
role change implemented
1 parent fffb634 commit 6c0755e

File tree

9 files changed

+205
-45
lines changed

9 files changed

+205
-45
lines changed

backend/pom.xml

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@
4949
<version>2.17.2</version> <!-- latest stable -->
5050
</dependency>
5151

52+
53+
<!-- for localdatetime binding-->
54+
<dependency>
55+
<groupId>com.fasterxml.jackson.datatype</groupId>
56+
<artifactId>jackson-datatype-jsr310</artifactId>
57+
<version>2.17.2</version>
58+
</dependency>
59+
60+
5261
<!-- for hashing-->
5362
<dependency>
5463
<groupId>org.mindrot</groupId>
@@ -64,13 +73,13 @@
6473
<groupId>io.jsonwebtoken</groupId>
6574
<artifactId>jjwt-jackson</artifactId>
6675
<version>0.12.6</version>
67-
76+
6877
</dependency>
6978
<dependency>
7079
<groupId>io.jsonwebtoken</groupId>
7180
<artifactId>jjwt-impl</artifactId>
7281
<version>0.12.6</version>
73-
82+
7483
</dependency>
7584

7685

@@ -81,13 +90,13 @@
8190
<version>9.4.51.v20230217</version>
8291
</dependency>
8392

84-
<!-- Jetty Servlet support -->
93+
<!-- Jetty Servlet support -->
8594
<dependency>
8695
<groupId>org.eclipse.jetty</groupId>
8796
<artifactId>jetty-servlet</artifactId>
8897
<version>9.4.51.v20230217</version>
8998
</dependency>
90-
99+
91100

92101
<!-- TEST DEPENDENCIES-->
93102
<!-- TEST DEPENDENCIES-->

backend/src/main/java/daoimplementors/UserImplementor.java

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class UserImplementor implements UserDAO {
1717
@Override
1818
public boolean registerUser(User user) {
1919
// TODO Auto-generated method stub
20-
boolean success ;
20+
boolean success;
2121
Transaction transaction = null;
2222
Session session = null;
2323
try {
@@ -36,7 +36,7 @@ public boolean registerUser(User user) {
3636
System.out.println("User with the same email already exists");
3737
}
3838
} catch (Exception e) {
39-
success= false;
39+
success = false;
4040
if (transaction != null && transaction.isActive()) {
4141
transaction.rollback();
4242
}
@@ -156,7 +156,7 @@ public List<User> findUsersByRole(Role role) {
156156
@Override
157157
public boolean updateProfile(User user) {
158158
// TODO Auto-generated method stub
159-
boolean success ;
159+
boolean success;
160160
Session session = null;
161161
Transaction transaction = null;
162162
try {
@@ -192,7 +192,7 @@ public boolean updateProfile(User user) {
192192
@Override
193193
public boolean deleteUser(Long id) {
194194
// TODO Auto-generated method stub
195-
boolean success ;
195+
boolean success;
196196
Session session = null;
197197
Transaction transaction = null;
198198
try {
@@ -248,4 +248,41 @@ public User getUserById(Long id) {
248248
return user;
249249
}
250250

251+
@Override
252+
public boolean changeRole(Long id, Role role) {
253+
// TODO Auto-generated method stub
254+
boolean success;
255+
Session session = null;
256+
Transaction transaction = null;
257+
try {
258+
session = HibernateUtil.getSession();
259+
transaction = session.beginTransaction();
260+
User existingUser = session.createQuery("FROM User u WHERE u.id = :id", User.class).setParameter("id", id)
261+
.uniqueResult();
262+
263+
if (existingUser != null) {
264+
existingUser.setRole(role);
265+
session.merge(existingUser);
266+
transaction.commit();
267+
success = true;
268+
System.out.println("User data updated successfully");
269+
} else {
270+
success = false;
271+
System.out.println("No user with the provided id exists");
272+
}
273+
274+
} catch (Exception e) {
275+
success = false;
276+
if (transaction != null && transaction.isActive()) {
277+
transaction.rollback();
278+
}
279+
e.printStackTrace();
280+
} finally {
281+
if (session != null && session.isOpen()) {
282+
session.close();
283+
}
284+
}
285+
return success;
286+
}
287+
251288
}

backend/src/main/java/daointerfaces/UserDAO.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@ public interface UserDAO {
2525
public boolean deleteUser(Long id);
2626

2727
public User getUserById(Long id);
28+
29+
public boolean changeRole(Long id, Role role);
2830
}
Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,75 @@
11
package dtos;
22

3-
public class UserDTO {
3+
import java.time.LocalDateTime;
44

5+
public class UserDTO {
56

67
private Long id;
78
private String fullName;
8-
private String email;
9-
private String role;
10-
11-
public UserDTO(Long id, String fullName, String email, String role) {
9+
private String email;
10+
private String role;
11+
private LocalDateTime createdAt;
12+
private LocalDateTime updatedAt;
13+
14+
15+
16+
public UserDTO() {
17+
// TODO Auto-generated constructor stub
18+
}
19+
20+
public UserDTO(Long id, String fullName, String email, String role, LocalDateTime createdAt,
21+
LocalDateTime updatedAt) {
1222
super();
1323
this.id = id;
1424
this.fullName = fullName;
1525
this.email = email;
1626
this.role = role;
17-
}
18-
19-
public UserDTO() {
20-
// TODO Auto-generated constructor stub
27+
this.createdAt = createdAt;
28+
this.updatedAt = updatedAt;
2129
}
2230

2331
public Long getId() {
2432
return id;
2533
}
34+
2635
public void setId(Long id) {
2736
this.id = id;
2837
}
38+
2939
public String getFullName() {
3040
return fullName;
3141
}
42+
3243
public void setFullName(String fullName) {
3344
this.fullName = fullName;
3445
}
46+
3547
public String getEmail() {
3648
return email;
3749
}
50+
3851
public void setEmail(String email) {
3952
this.email = email;
4053
}
54+
4155
public String getRole() {
4256
return role;
4357
}
58+
4459
public void setRole(String role) {
4560
this.role = role;
4661
}
47-
62+
63+
public LocalDateTime getCreatedAt() {
64+
return createdAt;
65+
}
66+
67+
public LocalDateTime getUpdatedAt() {
68+
return updatedAt;
69+
}
70+
71+
public void setUpdatedAt(LocalDateTime updatedAt) {
72+
this.updatedAt = updatedAt;
73+
}
74+
4875
}

backend/src/main/java/filters/CorsFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain
4343

4444
// response.setHeader("Access-Control-Allow-Origin","https://issues-deployment-tracker.vercel.app");
4545
response.setHeader("Access-Control-Allow-Origin","http://localhost:3000");
46-
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
46+
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT,PATCH, DELETE, OPTIONS");
4747
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
4848
response.setHeader("Access-Control-Allow-Credentials", "true"); // if using cookies/auth
4949
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");

backend/src/main/java/servlets/LoginServlet.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
5757
System.out.println("Login Servlet hit for Request Type: "+request.getMethod());
5858
try {
5959
ObjectMapper mapper = new ObjectMapper();
60+
// mapper.registerModule(new JavaTimeModule());
61+
// mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
6062
User logindata = mapper.readValue(request.getInputStream(), User.class);
6163
Optional<User> fetcheduserdata = userdao.findByEmail(logindata.getEmail());
6264

backend/src/main/java/servlets/UserServlet.java

Lines changed: 72 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.IOException;
44
import java.util.List;
5+
import java.util.Map;
56
import java.util.stream.Collectors;
67

78
import javax.servlet.ServletException;
@@ -11,11 +12,14 @@
1112
import javax.servlet.http.HttpServletResponse;
1213

1314
import com.fasterxml.jackson.databind.ObjectMapper;
15+
import com.fasterxml.jackson.databind.SerializationFeature;
16+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
1417

1518
import daoimplementors.UserImplementor;
1619
import daointerfaces.UserDAO;
1720
import dtos.UserDTO;
1821
import models.User;
22+
import models.User.Role;
1923

2024
/**
2125
* Servlet implementation class UserServlet
@@ -32,6 +36,16 @@ public UserServlet() {
3236
super();
3337
// TODO Auto-generated constructor stub
3438
}
39+
40+
@Override
41+
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
42+
if ("PATCH".equalsIgnoreCase(req.getMethod())) {
43+
doPatch(req, resp);
44+
} else {
45+
super.service(req, resp);
46+
}
47+
}
48+
3549

3650
/**
3751
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
@@ -44,20 +58,22 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
4458
System.out.println("UserServlet hit for: " + request.getRequestURI());
4559
System.out.println(path);
4660
ObjectMapper mapper = new ObjectMapper();
61+
mapper.registerModule(new JavaTimeModule());
62+
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
4763

4864
if (path == null || path.equals("/IssuesandDeploymentTracker/api/users")) {
4965
List<User> users = userdao.findAll();
5066
List<UserDTO> userDtos = users.stream()
5167
.map(u -> new UserDTO(u.getId(), u.getFullName(), u.getEmail(),
52-
(u.getRole() != null) ? u.getRole().toString() : "NONE"))
68+
(u.getRole() != null) ? u.getRole().toString() : "NONE", u.getCreatedAt(),
69+
u.getUpdatedAt()))
5370
.collect(Collectors.toList());
5471
response.setContentType("application/json");
5572
mapper.writeValue(response.getWriter(), userDtos);
5673
return;
5774

58-
} else {
59-
6075
}
76+
6177
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
6278
response.getWriter().write("{\"message\":\"Endpoint not found\"}");
6379
}
@@ -72,4 +88,57 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
7288
doGet(request, response);
7389
}
7490

91+
protected void doPatch(HttpServletRequest request, HttpServletResponse response)
92+
throws ServletException, IOException {
93+
// TODO Auto-generated method stub
94+
String path = request.getRequestURI();
95+
System.out.println("UserServlet hit for: " + request.getRequestURI());
96+
System.out.println(path);
97+
ObjectMapper mapper = new ObjectMapper();
98+
mapper.registerModule(new JavaTimeModule());
99+
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
100+
if (path.equals("/IssuesandDeploymentTracker/api/users/changeRole")) {
101+
102+
if ("PATCH".equalsIgnoreCase(request.getMethod())) {
103+
try {
104+
// Read JSON body
105+
106+
Map<String, Object> body = mapper.readValue(request.getReader(), Map.class);
107+
108+
Long id = Long.valueOf(body.get("id").toString());
109+
Object roleObj = body.get("role");
110+
Role role = null;
111+
if (roleObj != null && !"NONE".equals(roleObj.toString())) {
112+
role = Role.valueOf(roleObj.toString());
113+
}
114+
115+
116+
boolean success = userdao.changeRole(id, role);
117+
118+
response.setContentType("application/json");
119+
response.setCharacterEncoding("UTF-8");
120+
121+
if (success) {
122+
response.setStatus(HttpServletResponse.SC_OK);
123+
response.setContentType("application/json");
124+
response.setCharacterEncoding("UTF-8");
125+
response.getWriter().write("{\"message\":\"Role updated successfully\"}");
126+
} else {
127+
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
128+
response.setContentType("application/json");
129+
response.setCharacterEncoding("UTF-8");
130+
response.getWriter().write("{\"message\":\"User not found or some other error\"}");
131+
}
132+
133+
} catch (Exception e) {
134+
e.printStackTrace();
135+
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
136+
response.getWriter().write("{\"error\":\"Server error\"}");
137+
}
138+
} else {
139+
response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
140+
}
141+
}
142+
}
143+
75144
}

0 commit comments

Comments
 (0)