앞서 회원가입과 로그인을 하는 기능을 구현해보았다.
이제 로그인한 회원이 게시글을 작성하는 기능을 만들어 보자.
@RequestMapping("/api/v1/posts")
@RestController
@Api(tags = {"Post API"})
public class PostRestController {
private final PostService postService;
public PostRestController(PostService postService) {
this.postService = postService;
}
//등록
@ApiOperation(value = "게시글 작성기능",notes = "로그인 한 사용자가 title,body 값으로 게시글 작성")
@PostMapping("")
public Response<PostResponse> writePost(@RequestBody PostRequest dto, Authentication authentication) {
return Response.success(postService.write(dto, authentication.getName()));
}
}
@AllArgsConstructor
@Getter
public class PostRequest {
private String title;
private String body;
public Post toEntity(User user) {
return Post.builder()
.title(this.title)
.body(this.body)
.user(user)
.build();
}
}
@Getter
@AllArgsConstructor
public class PostResponse {
private String message;
private Long postId;
public static PostResponse of(String message, Long postId) {
return new PostResponse(message, postId);
}
@Service
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
private final UserRepository userRepository;
/**
*게시글 등록
*/
public PostResponse write(PostRequest dto, String userName) {
//유저가 존재하지 않을 때 등록 실패
User user = userRepository.findByUserName(userName)
.orElseThrow(()-> new AppException(ErrorCode.USERNAME_NOT_FOUND, userName + "이 없습니다."));
//등록
Post savedPost = postRepository.save(dto.toEntity(user));
return PostResponse.of("포스트 등록 완료 ",savedPost.getId());
}
}
public interface PostRepository extends JpaRepository<Post, Long> {
}
이제 게시글을 작성 할 수 있다.
Swagger를 통해 확인해 보자.

