From 0f3cae6e1ddcbb424f7dd407b2e7bd13b0f16773 Mon Sep 17 00:00:00 2001 From: NyorJa Date: Sat, 25 Oct 2025 20:32:57 +0800 Subject: [PATCH] Add user dto --- pom.xml | 13 +++++++ .../java/com/hacktober/blog/user/User.java | 35 +++++-------------- .../hacktober/blog/user/UserController.java | 20 ++++++----- .../com/hacktober/blog/user/dto/UserDto.java | 6 ++++ .../hacktober/blog/user/dto/UserMapper.java | 10 ++++++ .../hacktober/blog/BlogApplicationTests.java | 13 ------- 6 files changed, 50 insertions(+), 47 deletions(-) create mode 100644 src/main/java/com/hacktober/blog/user/dto/UserDto.java create mode 100644 src/main/java/com/hacktober/blog/user/dto/UserMapper.java delete mode 100644 src/test/java/com/hacktober/blog/BlogApplicationTests.java 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() { - } - -}