TACO 프로젝트 회고록(2023-05-30)

윤현우·2023년 5월 30일
0

TACO 프로젝트 회고록

목록 보기
22/31
post-thumbnail

오늘은 댓글 기능을 구현해 보았다.

가장 먼저 댓글이 보여지는 화면은 게시글 상세페이지에 들어가면 보이기 때문에 postController에 replyService 메서드를 기입했다.


PostController

	// 게시글 상세보기
    @GetMapping("/post/{postId}")
    public ResponseEntity<Integer> read(HttpSession session, @PathVariable(name = "postId") Long postId, Model model) {
        Long userIndex = (Long) session.getAttribute("userIndex");
        
        // 게시글 model
        Optional<PostEntity> post = postService.read(postId);
        model.addAttribute("post", post);

        // 댓글 model
        List<ReplyEntity> replyList = replyService.read(postId);
        model.addAttribute("reply", replyList);
        
        
        // 세션을 가져와서 만약 게시글, 댓글 userIndex와 같다면, 1을 출력해 수정 및 삭제 버튼 활성화 / 다르면 0 or 2 출력
        // 수정 필요
        Integer checkedUserIndex = 0;
        if(userIndex != null){
            if(userIndex == post.get().getUserIndex()){
                // 게시글, 댓글, 세션이 같으면
                checkedUserIndex = 1;
                model.addAttribute("checkIndex", checkedUserIndex);
            } else if(userIndex != post.get().getUserIndex()){
                checkedUserIndex = 2;
                model.addAttribute("checkIndex", checkedUserIndex);
            } else {
                model.addAttribute("checkIndex", checkedUserIndex);
            }
        }
        
        
        return new ResponseEntity<>(checkedUserIndex, HttpStatus.OK);
        // return "post_detail";
    }

해당 게시글의 index를 가져와서 댓글들을 가져오게 만들었다.

여기서 댓글도 만약 로그인한 유저가 단 댓글일 때, 수정 및 삭제 버튼이 생성되어야 한다.

만약 게시글 userIndex가 같다면, 게시글이 자신의 것이기 때문에 댓글도 자신의 것일 것이다.

그래서 댓글에 대한 수정 및 삭제 버튼도 게시글 수정 및 삭제 버튼과 같이 조건문으로 값을 가져와 버튼 display를 활성화/비활성화 시키면 된다.

ReplyService

@Service
public class ReplyService {

    @Autowired
    private ReplyRepository replyRepository;

    // 댓글 저장
    @Transactional
    public ReplyEntity save(ReplyDto replyDto, Long userIndex, Long postIndex) {
        ReplyEntity replyEntity = replyDto.toEntity(userIndex, postIndex);

        replyRepository.save(replyEntity);

        return replyEntity;
    }

    // 게시글 읽어올 때 해당 게시글 댓글 불러오기
    public List<ReplyEntity> read(Long postIndex) {
        List<ReplyEntity> replyList = replyRepository.findByReplyPostIndex(postIndex);

        return replyList;
    }

    // 댓글 수정
    @Transactional
    public Optional<ReplyEntity> edit(Long replyIndex, ReplyDto replyDto) {
        Optional<ReplyEntity> reply = replyRepository.findById(replyIndex);

        return reply.map(r -> {
            reply.get().setReplyDescription(replyDto.getReplyDescription());
            
            return r;
        })

            .map(r -> replyRepository.save(r));
    }

    // 댓글 삭제
    public void delete(Long replyIndex) {
        replyRepository.deleteById(replyIndex);
    }
}

해당 메서드들은 게시글 메서드와 거의 비슷한 형태를 띄고있다.


이제 백엔드는 거의 마무리 단계에 돌입했다.

이제 내가 짠 코드를 검토해보고, 메모리 최적화, return 값 변경, thymeleaf 설정등이 남았다.

아직 성능 최적화, 메모리 최적화를 해본적이 없어서 좀 더 구글링 해보고 찾아봐야한다.

아직 프로젝트가 완성된 것은 아니지만, 무언가 내가 생각해낸 것을 만들어 냈다는 생각에 기분이 좋아진다.

아직 부족한 부분이 많지만, 좀 더 성능 개선에 힘쓰고, 공부를 더 해야겠다.

얼른 프론트 부분이 마무리 지어져 내가 만든 것들을 postman이 아닌 화면으로 테스트 해보고 싶다.

얼마 안남은 프로젝트 확실하게 마무리 하고 싶은 마음이 더 커지는 것 같다.

profile
개발자가 되는 그날까지

0개의 댓글