diff --git a/pom.xml b/pom.xml
index 2ac8bc4..ed05305 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,6 +71,19 @@
2.6.0
+
+
+ org.mapstruct
+ mapstruct
+ 1.6.0
+
+
+ org.mapstruct
+ mapstruct-processor
+ 1.6.0
+ provided
+
+
org.springframework.boot
spring-boot-starter-test
diff --git a/src/main/java/com/hacktober/blog/user/User.java b/src/main/java/com/hacktober/blog/user/User.java
index 2c66ec0..d3f30b9 100644
--- a/src/main/java/com/hacktober/blog/user/User.java
+++ b/src/main/java/com/hacktober/blog/user/User.java
@@ -1,7 +1,16 @@
package com.hacktober.blog.user;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
import java.util.List;
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Builder
public class User {
private String name;
@@ -9,30 +18,4 @@ public class User {
private String email;
private String password; // will be stored as Base64 encrypted
private List blogs;
-
- public User() {}
-
- public User(String name, String username, String email, String password, List blogs) {
- this.name = name;
- this.username = username;
- this.email = email;
- this.password = password;
- this.blogs = blogs;
- }
-
- // Getters & Setters
- public String getName() { return name; }
- public void setName(String name) { this.name = name; }
-
- public String getUsername() { return username; }
- public void setUsername(String username) { this.username = username; }
-
- public String getEmail() { return email; }
- public void setEmail(String email) { this.email = email; }
-
- public String getPassword() { return password; }
- public void setPassword(String password) { this.password = password; }
-
- public List getBlogs() { return blogs; }
- public void setBlogs(List blogs) { this.blogs = blogs; }
}
diff --git a/src/main/java/com/hacktober/blog/user/UserController.java b/src/main/java/com/hacktober/blog/user/UserController.java
index 21617e0..a7682f7 100644
--- a/src/main/java/com/hacktober/blog/user/UserController.java
+++ b/src/main/java/com/hacktober/blog/user/UserController.java
@@ -4,7 +4,10 @@
import java.util.concurrent.ExecutionException;
import com.hacktober.blog.exceptions.ResourceNotFoundException;
+import com.hacktober.blog.user.dto.UserDto;
+import com.hacktober.blog.user.dto.UserMapper;
import com.hacktober.blog.utils.ApiResponse;
+import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@@ -14,19 +17,18 @@
@RestController
@RequestMapping("/users")
+@RequiredArgsConstructor
@CrossOrigin("*")
@Tag(name = "Users", description = "Endpoints for managing platform users")
public class UserController {
private final UserService userService;
- public UserController(UserService userService) {
- this.userService = userService;
- }
+ private final UserMapper userMapper;
@PostMapping("/create")
@Operation(summary = "Create user", description = "Persist a new user profile in the database.")
- public ResponseEntity> createUser(@RequestBody User user) throws InterruptedException, ExecutionException {
- String result = userService.create(user);
+ public ResponseEntity> createUser(@RequestBody UserDto user) throws InterruptedException, ExecutionException {
+ String result = userService.create(userMapper.fromDtoToEntity(user));
return ResponseEntity.status(HttpStatus.CREATED)
.body(ApiResponse.success(result, "User created successfully"));
}
@@ -43,9 +45,11 @@ public ResponseEntity> getUser(@PathVariable String username)
@GetMapping("/all")
@Operation(summary = "List users", description = "Retrieve all registered users.")
- public ResponseEntity>> getAllUsers() throws InterruptedException, ExecutionException {
- List users = userService.getAll();
- return ResponseEntity.ok(ApiResponse.success(users, "Users retrieved successfully"));
+ public ResponseEntity>> getAllUsers() throws InterruptedException, ExecutionException {
+ List users = userService.getAll().stream()
+ .map(userMapper::fromEntityToDto)
+ .toList();
+ return ResponseEntity.ok(ApiResponse.success(users, "Users retrieved successfully"));
}
@PutMapping("/{username}")
diff --git a/src/main/java/com/hacktober/blog/user/dto/UserDto.java b/src/main/java/com/hacktober/blog/user/dto/UserDto.java
new file mode 100644
index 0000000..5144b51
--- /dev/null
+++ b/src/main/java/com/hacktober/blog/user/dto/UserDto.java
@@ -0,0 +1,6 @@
+package com.hacktober.blog.user.dto;
+
+import java.util.List;
+
+public record UserDto(String name, String username, String email, String password, List blogs) {
+}
diff --git a/src/main/java/com/hacktober/blog/user/dto/UserMapper.java b/src/main/java/com/hacktober/blog/user/dto/UserMapper.java
new file mode 100644
index 0000000..b0ebc7c
--- /dev/null
+++ b/src/main/java/com/hacktober/blog/user/dto/UserMapper.java
@@ -0,0 +1,10 @@
+package com.hacktober.blog.user.dto;
+
+import com.hacktober.blog.user.User;
+import org.mapstruct.Mapper;
+
+@Mapper(componentModel = "spring")
+public interface UserMapper {
+ User fromDtoToEntity(UserDto userDto);
+ UserDto fromEntityToDto(User user);
+}
diff --git a/src/test/java/com/hacktober/blog/BlogApplicationTests.java b/src/test/java/com/hacktober/blog/BlogApplicationTests.java
deleted file mode 100644
index 745f905..0000000
--- a/src/test/java/com/hacktober/blog/BlogApplicationTests.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.hacktober.blog;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class BlogApplicationTests {
-
- @Test
- void contextLoads() {
- }
-
-}