create post api

This commit is contained in:
haerong22
2020-11-29 22:36:26 +09:00
parent 360007e417
commit efe786fbd5
5 changed files with 81 additions and 3 deletions

View File

@@ -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;
}

View File

@@ -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<Post, Integer> {
}

View File

@@ -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<Post> 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;
}
}

View File

@@ -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<User> retrieveAllUsers() {
@@ -56,4 +57,32 @@ public class UserJpaController {
return ResponseEntity.created(location).build();
}
@GetMapping("/users/{id}/posts")
public List<Post> retrieveAllPostByUser(@PathVariable int id) {
Optional<User> 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<Post> createPost(@PathVariable int id, @RequestBody Post post) {
Optional<User> 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();
}
}

View File

@@ -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');
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);