포스트 작성하기

Sol's·2023년 1월 11일

프로젝트

목록 보기
9/16

앞서 회원가입과 로그인을 하는 기능을 구현해보았다.
이제 로그인한 회원이 게시글을 작성하는 기능을 만들어 보자.

포스트 작성 기능

Controller

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

Dto

@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

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

Repositoy

public interface PostRepository extends JpaRepository<Post, Long> {
}

이제 게시글을 작성 할 수 있다.
Swagger를 통해 확인해 보자.


profile
배우고, 생각하고, 행동해라

0개의 댓글