Skip to content

Commit d1508fe

Browse files
authored
Merge pull request #10 from alwinsimon/v1
V1 - Updating with All major changes included and tested.
2 parents 4dd0d1b + 079e62c commit d1508fe

File tree

12 files changed

+342
-190
lines changed

12 files changed

+342
-190
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.alwinsimon.UserManagementJavaSpringBoot.Controller;
2+
3+
import com.alwinsimon.UserManagementJavaSpringBoot.Model.User;
4+
import com.alwinsimon.UserManagementJavaSpringBoot.Service.AdminService;
5+
import com.alwinsimon.UserManagementJavaSpringBoot.Service.UserService;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.http.HttpStatus;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.security.access.prepost.PreAuthorize;
10+
import org.springframework.web.bind.annotation.*;
11+
12+
import java.util.List;
13+
14+
@RestController
15+
@RequestMapping("/api/v1/admin")
16+
@RequiredArgsConstructor
17+
@CrossOrigin("*")
18+
public class AdminController {
19+
20+
private final AdminService adminService;
21+
@GetMapping("/get-users")
22+
public ResponseEntity<List<User>> getAllUsers() {
23+
24+
// API Endpoint to get the LoggedIn User Details using Token received in the Request Header.
25+
List<User> users = adminService.getAllUsers();
26+
return ResponseEntity.ok(users);
27+
28+
}
29+
30+
@DeleteMapping("/delete-user/{email}")
31+
public ResponseEntity<String> deleteUser(@PathVariable("email")String email){
32+
try {
33+
adminService.deleteUserByEmail(email);
34+
return ResponseEntity.ok("User deleted.");
35+
}catch (Exception e){
36+
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("User deletion Failed.");
37+
}
38+
}
39+
}

src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/GeneralController.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.alwinsimon.UserManagementJavaSpringBoot.Controller;
22

3+
import org.springframework.http.ResponseEntity;
34
import org.springframework.web.bind.annotation.CrossOrigin;
45
import org.springframework.web.bind.annotation.GetMapping;
56
import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,18 +18,19 @@
1718
public class GeneralController {
1819

1920
@GetMapping("/")
20-
public Map<String, String> getServerStatus() {
21-
22-
// Get the current date and time in UTC
21+
public ResponseEntity<Map<String, Object>> getServerStatus() {
2322
ZonedDateTime currentDateTimeUtc = ZonedDateTime.now(ZoneOffset.UTC);
2423
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy, hh:mm:ss a");
2524
String formattedDateTime = currentDateTimeUtc.format(formatter);
2625

27-
// Create a Map for the response
28-
Map<String, String> response = new HashMap<>();
29-
response.put("status", "SERVER and Systems are Up & Running.");
30-
response.put("dateTime", formattedDateTime);
26+
Map<String, Object> data = new HashMap<>();
27+
data.put("status", "SERVER and Systems are Up & Running.");
28+
data.put("dateTime", formattedDateTime);
29+
30+
Map<String, Object> response = new HashMap<>();
31+
response.put("data", data);
3132

32-
return response;
33+
return ResponseEntity.ok(response);
3334
}
35+
3436
}

src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/UserController.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.alwinsimon.UserManagementJavaSpringBoot.Model.User;
44
import com.alwinsimon.UserManagementJavaSpringBoot.Service.UserService;
55
import lombok.RequiredArgsConstructor;
6+
import org.springframework.http.ResponseEntity;
7+
import org.springframework.security.core.userdetails.UsernameNotFoundException;
68
import org.springframework.web.bind.annotation.CrossOrigin;
79
import org.springframework.web.bind.annotation.GetMapping;
810
import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,10 +19,13 @@ public class UserController {
1719
private final UserService userService;
1820

1921
@GetMapping("/current-user")
20-
public User getCurrentUser() {
21-
22-
// API Endpoint to get the LoggedIn User Details using Token received in the Request Header.
23-
return userService.currentUserDetails();
24-
22+
public ResponseEntity<User> getCurrentUser() throws Exception {
23+
try {
24+
// API Endpoint to get the LoggedIn User Details using Token received in the Request Header.
25+
User user = userService.currentUserDetails();
26+
return ResponseEntity.ok(user);
27+
} catch (Exception e) {
28+
throw new UsernameNotFoundException("User not found.");
29+
}
2530
}
2631
}

src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Repository/UserRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,7 @@
88
public interface UserRepository extends JpaRepository <User, Long> {
99
Optional<User> findByEmail(String email);
1010

11+
@Override
12+
void deleteById(Long id);
13+
1114
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.alwinsimon.UserManagementJavaSpringBoot.Service;
2+
3+
import com.alwinsimon.UserManagementJavaSpringBoot.Model.User;
4+
import java.util.List;
5+
6+
public interface AdminService {
7+
8+
List<User> getAllUsers();
9+
10+
void deleteUserByEmail(String email);
11+
12+
}

src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Service/AuthenticationService.java

Lines changed: 3 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -3,73 +3,11 @@
33
import com.alwinsimon.UserManagementJavaSpringBoot.Config.Auth.AuthenticationRequest;
44
import com.alwinsimon.UserManagementJavaSpringBoot.Config.Auth.AuthenticationResponse;
55
import com.alwinsimon.UserManagementJavaSpringBoot.Config.Auth.RegisterRequest;
6-
import com.alwinsimon.UserManagementJavaSpringBoot.Model.Role;
7-
import com.alwinsimon.UserManagementJavaSpringBoot.Model.User;
8-
import com.alwinsimon.UserManagementJavaSpringBoot.Repository.UserRepository;
9-
import lombok.RequiredArgsConstructor;
10-
import org.springframework.security.authentication.AuthenticationManager;
11-
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
12-
import org.springframework.security.core.userdetails.UsernameNotFoundException;
13-
import org.springframework.security.crypto.password.PasswordEncoder;
14-
import org.springframework.stereotype.Service;
156

16-
@Service
17-
@RequiredArgsConstructor
18-
public class AuthenticationService {
7+
public interface AuthenticationService {
198

20-
private final UserRepository userRepository;
21-
private final PasswordEncoder passwordEncoder;
22-
private final JwtService jwtService;
23-
private final AuthenticationManager authenticationManager;
9+
AuthenticationResponse register(RegisterRequest request);
2410

25-
public AuthenticationResponse register(RegisterRequest request) {
11+
AuthenticationResponse authenticate(AuthenticationRequest request);
2612

27-
// Build a user using builder in user model.
28-
var user = User.builder()
29-
.name(request.getName())
30-
.gender(request.getGender())
31-
.email(request.getEmail())
32-
.password(passwordEncoder.encode(request.getPassword()))
33-
.role(Role.USER)
34-
.build();
35-
36-
// Save User to DB using UserRepository
37-
userRepository.save(user);
38-
39-
// Generate a JWT Token to return along with Response.
40-
var jwtToken = jwtService.generateJwtToken(user);
41-
42-
return AuthenticationResponse.builder()
43-
.token(jwtToken)
44-
.build();
45-
46-
}
47-
48-
public AuthenticationResponse authenticate(AuthenticationRequest request) {
49-
50-
// Try Authenticating user with Authentication Manager
51-
authenticationManager.authenticate(
52-
new UsernamePasswordAuthenticationToken(
53-
request.getEmail(),
54-
request.getPassword()
55-
)
56-
);
57-
58-
/**
59-
* If the authentication manager authenticated user without throwing any exception
60-
* Find user and generate auth token
61-
* Send auth token back to user.
62-
*/
63-
64-
var user = userRepository.findByEmail(request.getEmail())
65-
.orElseThrow(() -> new UsernameNotFoundException("User not found."));
66-
67-
// Generate a JWT Token to return along with Response.
68-
var jwtToken = jwtService.generateJwtToken(user);
69-
70-
return AuthenticationResponse.builder()
71-
.token(jwtToken)
72-
.build();
73-
74-
}
7513
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.alwinsimon.UserManagementJavaSpringBoot.Service.Implementation;
2+
3+
import com.alwinsimon.UserManagementJavaSpringBoot.Model.User;
4+
import com.alwinsimon.UserManagementJavaSpringBoot.Repository.UserRepository;
5+
import com.alwinsimon.UserManagementJavaSpringBoot.Service.AdminService;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.dao.EmptyResultDataAccessException;
8+
import org.springframework.security.core.userdetails.UsernameNotFoundException;
9+
import org.springframework.stereotype.Service;
10+
11+
import java.util.List;
12+
13+
@Service
14+
@RequiredArgsConstructor
15+
public class AdminServiceImplementation implements AdminService {
16+
17+
private final UserRepository userRepository;
18+
19+
20+
public List<User> getAllUsers() {
21+
22+
// Fetch and Returns All users from DB
23+
return userRepository.findAll();
24+
25+
}
26+
27+
public void deleteUserByEmail(String email) {
28+
29+
User userToDelete = userRepository.findByEmail(email)
30+
.orElseThrow(() -> new UsernameNotFoundException("User not found."));
31+
32+
try {
33+
34+
userRepository.deleteById(userToDelete.getId());
35+
36+
} catch (EmptyResultDataAccessException e) {
37+
38+
throw new UsernameNotFoundException("User Deletion FAILED.", e);
39+
40+
}
41+
42+
}
43+
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.alwinsimon.UserManagementJavaSpringBoot.Service.Implementation;
2+
3+
import com.alwinsimon.UserManagementJavaSpringBoot.Config.Auth.AuthenticationRequest;
4+
import com.alwinsimon.UserManagementJavaSpringBoot.Config.Auth.AuthenticationResponse;
5+
import com.alwinsimon.UserManagementJavaSpringBoot.Config.Auth.RegisterRequest;
6+
import com.alwinsimon.UserManagementJavaSpringBoot.Model.Role;
7+
import com.alwinsimon.UserManagementJavaSpringBoot.Model.User;
8+
import com.alwinsimon.UserManagementJavaSpringBoot.Repository.UserRepository;
9+
import com.alwinsimon.UserManagementJavaSpringBoot.Service.AuthenticationService;
10+
import lombok.RequiredArgsConstructor;
11+
import org.springframework.security.authentication.AuthenticationManager;
12+
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
13+
import org.springframework.security.core.userdetails.UsernameNotFoundException;
14+
import org.springframework.security.crypto.password.PasswordEncoder;
15+
import org.springframework.stereotype.Service;
16+
17+
@Service
18+
@RequiredArgsConstructor
19+
public class AuthenticationServiceImplementation implements AuthenticationService {
20+
21+
private final UserRepository userRepository;
22+
private final PasswordEncoder passwordEncoder;
23+
private final JwtServiceImplementation jwtService;
24+
private final AuthenticationManager authenticationManager;
25+
26+
public AuthenticationResponse register(RegisterRequest request) {
27+
28+
// Build a user using builder in user model.
29+
var user = User.builder()
30+
.name(request.getName())
31+
.gender(request.getGender())
32+
.email(request.getEmail())
33+
.password(passwordEncoder.encode(request.getPassword()))
34+
.role(Role.USER)
35+
.build();
36+
37+
// Save User to DB using UserRepository
38+
userRepository.save(user);
39+
40+
// Generate a JWT Token to return along with Response.
41+
var jwtToken = jwtService.generateJwtToken(user);
42+
43+
return AuthenticationResponse.builder()
44+
.token(jwtToken)
45+
.build();
46+
47+
}
48+
49+
public AuthenticationResponse authenticate(AuthenticationRequest request) {
50+
51+
// Try Authenticating user with Authentication Manager
52+
authenticationManager.authenticate(
53+
new UsernamePasswordAuthenticationToken(
54+
request.getEmail(),
55+
request.getPassword()
56+
)
57+
);
58+
59+
/**
60+
* If the authentication manager authenticated user without throwing any exception
61+
* Find user and generate auth token
62+
* Send auth token back to user.
63+
*/
64+
65+
var user = userRepository.findByEmail(request.getEmail())
66+
.orElseThrow(() -> new UsernameNotFoundException("User not found."));
67+
68+
// Generate a JWT Token to return along with Response.
69+
var jwtToken = jwtService.generateJwtToken(user);
70+
71+
return AuthenticationResponse.builder()
72+
.token(jwtToken)
73+
.build();
74+
75+
}
76+
}

0 commit comments

Comments
 (0)