33import com .rest .api .advice .exception .CNotOwnerException ;
44import com .rest .api .advice .exception .CResourceNotExistException ;
55import com .rest .api .advice .exception .CUserNotFoundException ;
6+ import com .rest .api .common .CacheKey ;
67import com .rest .api .entity .User ;
78import com .rest .api .entity .board .Board ;
89import com .rest .api .entity .board .Post ;
910import com .rest .api .model .board .ParamsPost ;
1011import com .rest .api .repo .UserJpaRepo ;
1112import com .rest .api .repo .board .BoardJpaRepo ;
1213import com .rest .api .repo .board .PostJpaRepo ;
14+ import com .rest .api .service .cache .CacheSevice ;
1315import lombok .RequiredArgsConstructor ;
16+ import lombok .extern .slf4j .Slf4j ;
17+ import org .springframework .cache .annotation .CacheEvict ;
18+ import org .springframework .cache .annotation .CachePut ;
19+ import org .springframework .cache .annotation .Cacheable ;
1420import org .springframework .stereotype .Service ;
1521
1622import javax .transaction .Transactional ;
1723import java .util .List ;
1824import java .util .Optional ;
1925
26+ @ Slf4j
2027@ Service
2128@ Transactional
2229@ RequiredArgsConstructor
@@ -25,30 +32,36 @@ public class BoardService {
2532 private final BoardJpaRepo boardJpaRepo ;
2633 private final PostJpaRepo postJpaRepo ;
2734 private final UserJpaRepo userJpaRepo ;
35+ private final CacheSevice cacheSevice ;
2836
2937 // 게시판 이름으로 게시판을 조회. 없을경우 CResourceNotExistException 처리
38+ @ Cacheable (value = CacheKey .BOARD , key = "#boardName" , unless = "#result == null" )
3039 public Board findBoard (String boardName ) {
3140 return Optional .ofNullable (boardJpaRepo .findByName (boardName )).orElseThrow (CResourceNotExistException ::new );
3241 }
3342
34- // 게시판 이름으로 게시물 리스트 조회.
43+ // 게시판 이름으로 게시글 리스트 조회.
44+ @ Cacheable (value = CacheKey .POSTS , key = "#boardName" , unless = "#result == null" )
3545 public List <Post > findPosts (String boardName ) {
3646 return postJpaRepo .findByBoard (findBoard (boardName ));
3747 }
3848
39- // 게시물ID로 게시물 단건 조회. 없을경우 CResourceNotExistException 처리
49+ // 게시글ID로 게시글 단건 조회. 없을경우 CResourceNotExistException 처리
50+ @ Cacheable (value = CacheKey .POST , key = "#postId" , unless = "#result == null" )
4051 public Post getPost (long postId ) {
4152 return postJpaRepo .findById (postId ).orElseThrow (CResourceNotExistException ::new );
4253 }
4354
44- // 게시물을 등록합니다. 게시물의 회원UID가 조회되지 않으면 CUserNotFoundException 처리합니다.
55+ // 게시글을 등록합니다. 게시글의 회원UID가 조회되지 않으면 CUserNotFoundException 처리합니다.
56+ @ CacheEvict (value = CacheKey .POSTS , key = "#boardName" )
4557 public Post writePost (String uid , String boardName , ParamsPost paramsPost ) {
4658 Board board = findBoard (boardName );
4759 Post post = new Post (userJpaRepo .findByUid (uid ).orElseThrow (CUserNotFoundException ::new ), board , paramsPost .getAuthor (), paramsPost .getTitle (), paramsPost .getContent ());
4860 return postJpaRepo .save (post );
4961 }
5062
51- // 게시물을 수정합니다. 게시물 등록자와 로그인 회원정보가 틀리면 CNotOwnerException 처리합니다.
63+ // 게시글을 수정합니다. 게시글 등록자와 로그인 회원정보가 틀리면 CNotOwnerException 처리합니다.
64+ //@CachePut(value = CacheKey.POST, key = "#postId") 갱신된 정보만 캐시할경우에만 사용!
5265 public Post updatePost (long postId , String uid , ParamsPost paramsPost ) {
5366 Post post = getPost (postId );
5467 User user = post .getUser ();
@@ -57,16 +70,18 @@ public Post updatePost(long postId, String uid, ParamsPost paramsPost) {
5770
5871 // 영속성 컨텍스트의 변경감지(dirty checking) 기능에 의해 조회한 Post내용을 변경만 해도 Update쿼리가 실행됩니다.
5972 post .setUpdate (paramsPost .getAuthor (), paramsPost .getTitle (), paramsPost .getContent ());
73+ cacheSevice .deleteBoardCache (post .getPostId (), post .getBoard ().getName ());
6074 return post ;
6175 }
6276
63- // 게시물을 삭제합니다. 게시물 등록자와 로그인 회원정보가 틀리면 CNotOwnerException 처리합니다.
77+ // 게시글을 삭제합니다. 게시글 등록자와 로그인 회원정보가 틀리면 CNotOwnerException 처리합니다.
6478 public boolean deletePost (long postId , String uid ) {
6579 Post post = getPost (postId );
6680 User user = post .getUser ();
6781 if (!uid .equals (user .getUid ()))
6882 throw new CNotOwnerException ();
6983 postJpaRepo .delete (post );
84+ cacheSevice .deleteBoardCache (post .getPostId (), post .getBoard ().getName ());
7085 return true ;
7186 }
7287}
0 commit comments