From f61262efc3910d4e5ad03dc2021d80e1da7126be Mon Sep 17 00:00:00 2001 From: kms Date: Fri, 9 Sep 2022 16:17:23 +0900 Subject: [PATCH] feat : add API user registration --- build.gradle | 1 + .../java/com/io/realworld/DTO/UserResponse.java | 11 ++++++++++- .../com/io/realworld/DTO/UserSignupRequest.java | 4 ++++ .../io/realworld/api/users/UserController.java | 16 +++++++++------- .../java/com/io/realworld/repository/User.java | 6 ++++++ .../io/realworld/repository/UserRepository.java | 3 +-- .../com/io/realworld/service/UserService.java | 6 +++--- src/main/resources/application.properties | 1 + 8 files changed, 35 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index a24f5bc..bcf8bf8 100644 --- a/build.gradle +++ b/build.gradle @@ -19,6 +19,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-jdbc:2.7.3' implementation 'org.projectlombok:lombok:1.18.24' + annotationProcessor 'org.projectlombok:lombok' // https://mvnrepository.com/artifact/org.postgresql/postgresql //implementation group: 'org.postgresql', name: 'postgresql', version: '42.5.0' diff --git a/src/main/java/com/io/realworld/DTO/UserResponse.java b/src/main/java/com/io/realworld/DTO/UserResponse.java index 33355d2..45419f9 100644 --- a/src/main/java/com/io/realworld/DTO/UserResponse.java +++ b/src/main/java/com/io/realworld/DTO/UserResponse.java @@ -1,7 +1,16 @@ package com.io.realworld.DTO; -import javax.validation.constraints.Email; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import lombok.Builder; +import lombok.Getter; +import org.springframework.web.bind.annotation.ResponseBody; + +@Builder +@Getter +@JsonTypeName("user") +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) public class UserResponse { private String email; diff --git a/src/main/java/com/io/realworld/DTO/UserSignupRequest.java b/src/main/java/com/io/realworld/DTO/UserSignupRequest.java index e0cdc9c..e77d381 100644 --- a/src/main/java/com/io/realworld/DTO/UserSignupRequest.java +++ b/src/main/java/com/io/realworld/DTO/UserSignupRequest.java @@ -1,5 +1,7 @@ package com.io.realworld.DTO; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.AllArgsConstructor; import lombok.Getter; @@ -8,6 +10,8 @@ import javax.validation.constraints.NotBlank; @Getter @AllArgsConstructor +@JsonTypeName("user") +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) public class UserSignupRequest { @NotBlank diff --git a/src/main/java/com/io/realworld/api/users/UserController.java b/src/main/java/com/io/realworld/api/users/UserController.java index b74ac14..10d2a4d 100644 --- a/src/main/java/com/io/realworld/api/users/UserController.java +++ b/src/main/java/com/io/realworld/api/users/UserController.java @@ -5,21 +5,23 @@ import com.io.realworld.DTO.UserResponse; import com.io.realworld.repository.User; import com.io.realworld.service.UserService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @RestController -@RequestMapping(path = "/api") public class UserController { @Autowired private UserService userService; @PostMapping("/users") - public User signup(@Valid @RequestBody UserSignupRequest userSignupRequest){ - return userService.signup(userSignupRequest); + public UserResponse signup(@Valid @RequestBody UserSignupRequest userSignupRequest) { + User user = userService.signup(userSignupRequest); + return UserResponse.builder().username(user.getUsername()) + .email(user.getEmail()) + .bio(user.getBio()) + .image(user.getImage()) + .token(user.getToken()).build(); + } } diff --git a/src/main/java/com/io/realworld/repository/User.java b/src/main/java/com/io/realworld/repository/User.java index 4f1a2ba..cc16f5d 100644 --- a/src/main/java/com/io/realworld/repository/User.java +++ b/src/main/java/com/io/realworld/repository/User.java @@ -1,11 +1,13 @@ package com.io.realworld.repository; import lombok.Builder; +import lombok.Getter; import javax.persistence.*; @Table(name = "users") @Entity +@Getter public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -16,6 +18,10 @@ public class User { private String email; private String password; + private String bio; + private String image; + private String token; + @Builder public User(String username, String email, String password){ this.username = username; diff --git a/src/main/java/com/io/realworld/repository/UserRepository.java b/src/main/java/com/io/realworld/repository/UserRepository.java index 5df9d96..7da96d3 100644 --- a/src/main/java/com/io/realworld/repository/UserRepository.java +++ b/src/main/java/com/io/realworld/repository/UserRepository.java @@ -2,7 +2,6 @@ package com.io.realworld.repository; import org.springframework.data.repository.CrudRepository; -public interface UserRepository extends CrudRepository { +public interface UserRepository extends CrudRepository { User save(User user); - } diff --git a/src/main/java/com/io/realworld/service/UserService.java b/src/main/java/com/io/realworld/service/UserService.java index 81d0c6c..59fc2ca 100644 --- a/src/main/java/com/io/realworld/service/UserService.java +++ b/src/main/java/com/io/realworld/service/UserService.java @@ -1,18 +1,18 @@ package com.io.realworld.service; import com.io.realworld.DTO.UserSignupRequest; -import com.io.realworld.DTO.UserResponse; import com.io.realworld.repository.User; import com.io.realworld.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +@Service public class UserService { @Autowired private UserRepository userRepository; - public User signup(UserSignupRequest userSignupRequest){ - System.out.println(userSignupRequest.getUsername()); + public User signup(UserSignupRequest userSignupRequest) { return userRepository.save(User.of(userSignupRequest.getUsername(), userSignupRequest.getEmail(), userSignupRequest.getPassword())); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 79f1502..e9dd9be 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,3 +1,4 @@ +server.servlet.contextPath=/api # H2 spring.h2.console.enabled=true spring.h2.console.path=/h2-console