diff --git a/backend/emm-sale/src/main/java/com/emmsale/member/application/MemberActivityService.java b/backend/emm-sale/src/main/java/com/emmsale/member/application/MemberActivityService.java index d5e1947e9..4aeb2e3b9 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/member/application/MemberActivityService.java +++ b/backend/emm-sale/src/main/java/com/emmsale/member/application/MemberActivityService.java @@ -31,6 +31,9 @@ public void registerActivities( final Member member, final MemberActivityInitialRequest memberActivityInitialRequest ) { + if (member.isOnboarded()) { + throw new MemberException(MemberExceptionType.ALREADY_ONBOARDING); + } final List activityIds = memberActivityInitialRequest.getActivityIds(); saveMemberActivities(member, activityIds); @@ -62,11 +65,30 @@ public List addActivity( final MemberActivityAddRequest memberActivityAddRequest ) { final List activityIds = memberActivityAddRequest.getActivityIds(); + final List memberActivities = memberActivityRepository.findAllByMember(member); + if (isAlreadyExistActivity(memberActivities, activityIds) || hasDuplicateId(memberActivities, + activityIds)) { + throw new MemberException(MemberExceptionType.ALREADY_EXIST_ACTIVITY); + } saveMemberActivities(member, activityIds); return MemberActivityResponses.from(memberActivityRepository.findAllByMember(member)); } + private boolean isAlreadyExistActivity(final List memberActivities, + final List activityIds) { + return memberActivities + .stream() + .anyMatch(memberActivity -> + activityIds.contains(memberActivity.getActivity().getId()) + ); + } + + private boolean hasDuplicateId(final List memberActivities, + final List activityIds) { + return activityIds.stream().distinct().count() != memberActivities.size(); + } + public List deleteActivity( final Member member, final MemberActivityDeleteRequest memberActivityDeleteRequest diff --git a/backend/emm-sale/src/main/java/com/emmsale/member/exception/MemberExceptionType.java b/backend/emm-sale/src/main/java/com/emmsale/member/exception/MemberExceptionType.java index 5c61feaa1..9a98bb11a 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/member/exception/MemberExceptionType.java +++ b/backend/emm-sale/src/main/java/com/emmsale/member/exception/MemberExceptionType.java @@ -10,6 +10,11 @@ public enum MemberExceptionType implements BaseExceptionType { "해당 멤버는 존재하지 않습니다." ), + ALREADY_ONBOARDING( + HttpStatus.BAD_REQUEST, + "이미 온보딩을 완료한 사용자입니다." + ), + INVALID_ACTIVITY_IDS( HttpStatus.BAD_REQUEST, "요청한 activity id들 중에 유효하지 않은 값이 존재합니다" diff --git a/backend/emm-sale/src/test/java/com/emmsale/member/application/MemberActivityServiceTest.java b/backend/emm-sale/src/test/java/com/emmsale/member/application/MemberActivityServiceTest.java index b9d445a5a..551ead007 100644 --- a/backend/emm-sale/src/test/java/com/emmsale/member/application/MemberActivityServiceTest.java +++ b/backend/emm-sale/src/test/java/com/emmsale/member/application/MemberActivityServiceTest.java @@ -108,7 +108,6 @@ void addActivity() throws Exception { //when final List actual = memberActivityService.addActivity(member, request); - //then assertThat(expected) .usingRecursiveComparison() @@ -121,7 +120,7 @@ void addActivity() throws Exception { void test_addActivity_invalid_activity_ids_Exception() throws Exception { //given final Member savedMember = memberRepository.findById(1L).get(); - final List activityIds = List.of(1L, 2L, 7L); + final List activityIds = List.of(4L, 5L, 7L); final MemberActivityAddRequest request = new MemberActivityAddRequest(activityIds); //when & then @@ -138,10 +137,7 @@ void test_addActivity_ALREADY_EXIST_ACTIVITY_Exception_duplicate_try() throws Ex final List activityIds = List.of(1L, 2L, 7L); final MemberActivityAddRequest request = new MemberActivityAddRequest(activityIds); - // when - memberActivityService.addActivity(savedMember, request); - - // then + // when, then assertThatThrownBy(() -> memberActivityService.addActivity(savedMember, request)) .isInstanceOf(MemberException.class) .hasMessage(MemberExceptionType.ALREADY_EXIST_ACTIVITY.errorMessage()); @@ -152,7 +148,7 @@ void test_addActivity_ALREADY_EXIST_ACTIVITY_Exception_duplicate_try() throws Ex void test_addActivity_ALREADY_EXIST_ACTIVITY_Exception_duplicate_input() throws Exception { //given final Member savedMember = memberRepository.findById(1L).get(); - final List activityIds = List.of(1L, 2L, 1L); + final List activityIds = List.of(4L, 4L, 5L); final MemberActivityAddRequest request = new MemberActivityAddRequest(activityIds); // when, then diff --git a/backend/emm-sale/src/test/resources/data-test.sql b/backend/emm-sale/src/test/resources/data-test.sql index 22365ae5a..4fa6785ae 100644 --- a/backend/emm-sale/src/test/resources/data-test.sql +++ b/backend/emm-sale/src/test/resources/data-test.sql @@ -28,7 +28,7 @@ insert into activity(id, type, name) values (6, 'JOB', 'Backend'); insert into member(id, name, image_url, open_profile_url, github_id, created_at, updated_at) -values (1, 'member1', 'https://imageurl.com', 'https://openprofileurl.com', 1, CURRENT_TIMESTAMP(), +values (1, null, 'https://imageurl.com', 'https://openprofileurl.com', 1, CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()); insert into member(id, name, image_url, open_profile_url, github_id, created_at, updated_at)