diff --git a/restful-web-service/src/main/java/com/example/restfulwebservice/user/Post.java b/restful-web-service/src/main/java/com/example/restfulwebservice/user/Post.java new file mode 100644 index 00000000..e2933daf --- /dev/null +++ b/restful-web-service/src/main/java/com/example/restfulwebservice/user/Post.java @@ -0,0 +1,24 @@ +package com.example.restfulwebservice.user; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Entity +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Post { + @Id + @GeneratedValue + private Integer id; + private String description; + + // User : Post -> 1 : (0~N) + @ManyToOne(fetch = FetchType.LAZY) + @JsonIgnore + private User user; +} diff --git a/restful-web-service/src/main/java/com/example/restfulwebservice/user/PostRepository.java b/restful-web-service/src/main/java/com/example/restfulwebservice/user/PostRepository.java new file mode 100644 index 00000000..425d494c --- /dev/null +++ b/restful-web-service/src/main/java/com/example/restfulwebservice/user/PostRepository.java @@ -0,0 +1,8 @@ +package com.example.restfulwebservice.user; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PostRepository extends JpaRepository { +} diff --git a/restful-web-service/src/main/java/com/example/restfulwebservice/user/User.java b/restful-web-service/src/main/java/com/example/restfulwebservice/user/User.java index e158ca67..42e8aa46 100644 --- a/restful-web-service/src/main/java/com/example/restfulwebservice/user/User.java +++ b/restful-web-service/src/main/java/com/example/restfulwebservice/user/User.java @@ -12,9 +12,11 @@ import lombok.NoArgsConstructor; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import javax.persistence.OneToMany; import javax.validation.constraints.Past; import javax.validation.constraints.Size; import java.util.Date; +import java.util.List; @Data @AllArgsConstructor @@ -39,4 +41,15 @@ public class User { @ApiModelProperty(notes = "사용자의 주민번호을 입력해 주세요") private String ssn; + + @OneToMany(mappedBy = "user") + private List posts; + + public User(Integer id, String name, Date joinDate, String password, String ssn) { + this.id = id; + this.name = name; + this.joinDate = joinDate; + this.password = password; + this.ssn = ssn; + } } diff --git a/restful-web-service/src/main/java/com/example/restfulwebservice/user/UserJpaController.java b/restful-web-service/src/main/java/com/example/restfulwebservice/user/UserJpaController.java index 71d03923..e7822332 100644 --- a/restful-web-service/src/main/java/com/example/restfulwebservice/user/UserJpaController.java +++ b/restful-web-service/src/main/java/com/example/restfulwebservice/user/UserJpaController.java @@ -20,6 +20,7 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; @RequestMapping("/jpa") public class UserJpaController { private final UserRepository userRepository; + private final PostRepository postRepository; @GetMapping("/users") public List retrieveAllUsers() { @@ -56,4 +57,32 @@ public class UserJpaController { return ResponseEntity.created(location).build(); } + + @GetMapping("/users/{id}/posts") + public List retrieveAllPostByUser(@PathVariable int id) { + Optional user = userRepository.findById(id); + if(user.isEmpty()){ + throw new UserNotFoundException(String.format("ID[%s] not found", id)); + } + + return user.get().getPosts(); + } + + @PostMapping("/users/{id}/posts") + public ResponseEntity createPost(@PathVariable int id, @RequestBody Post post) { + Optional user = userRepository.findById(id); + if(user.isEmpty()){ + throw new UserNotFoundException(String.format("ID[%s] not found", id)); + } + + post.setUser(user.get()); + Post savedPost = postRepository.save(post); + + URI location = ServletUriComponentsBuilder.fromCurrentRequest() + .path("/{id}") + .buildAndExpand(savedPost.getId()) + .toUri(); + + return ResponseEntity.created(location).build(); + } } diff --git a/restful-web-service/src/main/resources/data.sql b/restful-web-service/src/main/resources/data.sql index 832b516e..db3541df 100644 --- a/restful-web-service/src/main/resources/data.sql +++ b/restful-web-service/src/main/resources/data.sql @@ -1,3 +1,7 @@ -insert into user values(100000, sysdate(), 'user1', 'test1', '700101-1111111'); -insert into user values(100001, sysdate(), 'user2', 'test2', '800101-1231234'); -insert into user values(100002, sysdate(), 'user3', 'test3', '900101-1121123'); \ No newline at end of file +insert into user values(10000, sysdate(), 'user1', 'test1', '700101-1111111'); +insert into user values(10001, sysdate(), 'user2', 'test2', '800101-1231234'); +insert into user values(10002, sysdate(), 'user3', 'test3', '900101-1121123'); + +insert into post values(10000, 'first post', 10000); +insert into post values(10001, 'second post', 10001); +insert into post values(10002, 'third post' , 10002); \ No newline at end of file