본문 바로가기

프로젝트/멋사 개인 프로젝트 (mutsa-SNS)

(26)
[25] mutsa-SNS-2 6일차 - (2) Swagger api 정보 추가 swagger api에 대한 정보를 추가해 보았다. endpoint에 설명 추가 Api 이름과 설명 추가 Configuration SwaggerConfig @Configuration @RequiredArgsConstructor public class SwaggerConfig { private final TypeResolver typeResolver; @Bean public Docket api() { return new Docket(DocumentationType.OAS_30) //문서 설명 .apiInfo(new ApiInfoBuilder() .title("MutsaSNS Swagger") .description("로그인, 포스트, 댓글, 좋아요, 알림 기능") .version("1.0.0") .buil..
[24] mutsa-SNS-2 6일차 - (1) 알람 기능 test code 알람 기능의 controller의 test code를 추가하였다. 해당 test는 아래 두가지로 진행하였다. 알람 목록 조회 성공 알람 목록 조회 실패 - 로그인하지 않은 경우 AlarmControllerTest @WebMvcTest(AlarmController.class) class AlarmControllerTest { @Autowired MockMvc mockMvc; @MockBean AlarmService alarmService; @Test @DisplayName("알람 목록 조회 성공") @WithMockUser void alarm_get_success() throws Exception { when(alarmService.getAlarm(any(), any())) .thenReturn(Page...
[23] mutsa-SNS-2 5일차 - 알람 기능 추가 알람 기능을 추가해 보았다. 로그인 한 유저에게 달린 모든 댓글과 좋아요를 page형태로 return 자신이 자신의 글에 댓글과 좋아요를 달 시 알람 x 좋아요 취소후 재등록시 알람 x 1. Domain Alarm (Entity) @Builder @AllArgsConstructor @NoArgsConstructor @Getter @Setter @Table(name = "alarm") @Entity @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class Alarm extends BaseEntity{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id..
[22] mutsa-SNS-2 4일차 - 마이 피드 기능 test code 마이 피드 기능 test code를 추가하였다. 아래의 case를 테스트 해보았다. 마이피드 조회 성공 마이피드 조회 실패 - 로그인 하지 않은 경우 PostControllerTest @WebMvcTest(PostController.class) class PostControllerTest { @Autowired MockMvc mockMvc; @MockBean PostService postService; @Autowired ObjectMapper objectMapper; ... @Test @DisplayName("마이피드 조회 성공") @WithMockUser void myFeed_get_success() throws Exception { when(postService.getMyFeed(any(), any..
[21] mutsa-SNS-2 3일차 - (2) 마이 피드 기능 구현 내가 쓴 글 리스트를 보여주는 마이피드 기능을 구현했다. 내가 작성한 글만 보이는 기능 제목, 글쓴이, 내용, 작성날짜가 표시 목록 기능은 페이징 기능이 포함 (Post 조회와 동일) 단지 Post 전체 조회와 다른 것이 user로 post를 검색하는 로직 추가 밖에 없어 간단히 구현했다. 1. Repository PostRepository public interface PostRepository extends JpaRepository { Page findAllByUser(User user, Pageable pageable); } 해당 User로 post를 검색하여 page에 담아 return하는 method를 추가했다. 2. Service PostService @Service @RequiredArgsC..
[20] mutsa-SNS-2 3일차 - (1) soft delete 관련 리펙토링 (@Transactional 이슈) post가 delete될 때, 그와 관련되어 있는 comment와 like도 soft delete처리를 추가해 주었다. 이 과정에서 생겼던 Transactional 관련 이슈와 그로 인해 jpql method를 줄이고 jpa를 사용하기 위해 리펙토링 한 과정을 적어보았다... 1. @Transactional jpa의 경우 더티체킹을 지원한다. 이는 상태 변경에 대한 검사라 생각하면 된다. JPA로 엔티티를 조회하게 되면, 엔티티 조회 상태 그대로 스냅샷을 만들게 되고, 엔티티를 수정하여 트랜젝션을 커밋 할 때, flush가 일어나게 되는데, 그 때 초기 조회 상태의 스냅샷과 비교하여 변화가 발생하면, update query를 날리게 된다. 이로 인해 따로 save를 해주지 않아도 update query가..
[19] mutsa-SNS-2 2일차 - (2) 좋아요 기능 test code 앞서 만든 좋아요 기능이 제대로 작동하는지 test code를 통해 검증해보았다. 좋아요 누르기 성공 좋아요 누르기 실패 - 로그인 하지 않은 경우 좋아요 누르기 실패 - 해당 Post가 없는 경우 1. PostControllerTest @WebMvcTest(PostController.class) class PostControllerTest { @Autowired MockMvc mockMvc; @MockBean PostService postService; @Autowired ObjectMapper objectMapper; ... @Test @DisplayName("좋아요 누르기 성공") @WithMockUser void like_do_success() throws Exception { when(postS..
[18] mutsa-SNS-2 2일차 - (1) 좋아요 기능 구현 (soft delete 복구) 좋아요 기능을 구현해 보았다. 로그인 한 유저만 좋아요 누르기 가능 이미 좋아요 상태에서 한번 더 누르면 좋아요 취소 (soft delete로 구현) 글에 달린 좋아요 수는 모두 열람 가능 기능 구현 중, SQL naming Error 이슈 발생하여 시간을 꽤나 잡아먹었다. 아래에세 좀 더 이야기를 풀어보겠다... 1. Domain Like (Entity) @Builder @AllArgsConstructor @NoArgsConstructor @Getter @Setter @Table(name = "likes") @Entity @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) //soft delete @SQLDelete(sql = "UPDAT..