[클론 코딩] 네이버 카페 - (통합게시판) 게시글 삭제

2024. 6. 4. 16:51Project/Naver Cafe

  생성한 일반 게시판의 게시글을 삭제하는 기능을 구현하고자 한다. 게시글 삭제 요청이 오면 요청 정보를 확인해 요청한 사용자가 해당 게시글의 작성자인지 확인하고 일치한다면 해당 게시글을 DB에서 삭제 후 결과 메시지를 반환하도록 작성할 것이다.


NormalController

package CloneCoding.NaverCafe.domain.article.normal.controller;

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/cafe/{cafe_url}")
public class NormalController {

    private final NormalService normalService;

    @DeleteMapping("/delete/{normal_id}")
    public String delArticle(@PathVariable("cafe_url") String url,
                             @PathVariable("normal_id") Long id,
                             @RequestHeader("Authorization") String token) {
        log.info("게시글 삭제 요청");
        return normalService.delNormal(url, id, token);
    }

}

 

  • delArticle() : 카페 url, 게시글 id, 토큰 정보로 NormalService의 delArticle()을 호출하고 결과 메시지를 반환

NormalServiceImpl

package CloneCoding.NaverCafe.domain.article.normal.service;

import static CloneCoding.NaverCafe.message.SystemMessage.DELETE_ARTICLE_COMPLETE;

@Service
@RequiredArgsConstructor
public class NormalServiceImpl implements NormalService {

    private final NormalRepository normalRepository;
    private final CafeRepository cafeRepository;
    private final CafeMemberRepository cafeMemberRepository;
    private final IntegrateRepository integrateRepository;
    private final AesUtil aesUtil;

    @Override
    public String delNormal(String url, Long id, String token) {

        CafeMember user = checkAuth(url, token);

        Normal article = normalRepository.findById(id)
                .orElseThrow(() -> new NoSuchElementException("게시글 정보를 찾을 수 없습니다."));

        if (!user.getAccountId().equals(article.getAccountId())) {
            throw new RuntimeException("작성자일 경우 해당 게시글을 삭제할 수 있습니다.");
        }

        normalRepository.delete(article);

        return DELETE_ARTICLE_COMPLETE.getMessage();

    }

    private CafeMember checkAuth(String url, String token) {
        Cafe cafe = cafeRepository.findByUrl(url);
        String accountId = aesUtil.aesDecode(token);

        return cafeMemberRepository.findByAccountId(cafe, accountId);
    }

}

 

  • delNormal() : Normal 엔티티를 삭제하고 결과 메시지를 반환

API TEST

DB - 일반 게시글 삭제 전

 

API TEST - 일반 게시글 삭제 요청

 

DB - 일반 게시글 삭제 후

 

  일반 게시글을 하나 추가한 상태에서 해당 게시글의 삭제 요청을 보내고 그 결과 기존 게시글 정보가 DB에서 삭제 된 것을 확인할 수 있다.