Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public class FeedLikeService {
ObjectOptimisticLockingFailureException.class,
StaleObjectStateException.class
},
maxAttempts = 15,
maxAttempts = 20,
backoff = @Backoff(delay = 30))
public void feedLike(Long feedId, Long memberId) {
Feed feed =
Expand All @@ -61,7 +61,7 @@ public void feedLike(Long feedId, Long memberId) {
ObjectOptimisticLockingFailureException.class,
StaleObjectStateException.class
},
maxAttempts = 15,
maxAttempts = 20,
backoff = @Backoff(delay = 30))
public void feedUnlike(Long feedId, Long memberId) {
feedRepository
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
import com.sillim.recordit.invite.dto.response.InviteLinkResponse;
import com.sillim.recordit.invite.service.InviteService;
import com.sillim.recordit.member.domain.Member;
import com.sillim.recordit.member.dto.response.MemberListResponse;
import com.sillim.recordit.member.service.MemberQueryService;
import java.io.IOException;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
Expand Down Expand Up @@ -37,6 +39,17 @@ public ResponseEntity<InviteInfoResponse> getInviteInfo(@PathVariable String inv
calendar.getId(), calendar.getTitle(), member.getId(), member.getName()));
}

@GetMapping("/followings")
public ResponseEntity<List<MemberListResponse>> myFollowingList(
@RequestParam Long calendarId, @CurrentMember Member member) {
return ResponseEntity.ok(
inviteService
.searchFollowingsNotInvited(calendarId, member.getPersonalId())
.stream()
.map(MemberListResponse::of)
.toList());
}

@PostMapping("/members/{inviteMemberId}")
public ResponseEntity<Void> inviteMember(
@PathVariable Long inviteMemberId,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.sillim.recordit.invite.service;

import com.sillim.recordit.calendar.domain.Calendar;
import com.sillim.recordit.calendar.dto.response.CalendarMemberResponse;
import com.sillim.recordit.calendar.service.CalendarMemberService;
import com.sillim.recordit.calendar.service.CalendarQueryService;
import com.sillim.recordit.global.exception.ErrorCode;
Expand All @@ -12,10 +13,12 @@
import com.sillim.recordit.invite.repository.InviteLinkRepository;
import com.sillim.recordit.invite.repository.InviteLogRepository;
import com.sillim.recordit.member.domain.Member;
import com.sillim.recordit.member.service.MemberQueryService;
import com.sillim.recordit.pushalarm.dto.PushMessage;
import com.sillim.recordit.pushalarm.service.AlarmService;
import java.time.LocalDateTime;
import java.util.Base64;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
Expand All @@ -32,6 +35,7 @@ public class InviteService {
private final InviteLogRepository inviteLogRepository;
private final AlarmService alarmService;
private final CalendarMemberService calendarMemberService;
private final MemberQueryService memberQueryService;

public String getOrGenerateInviteLink(Long calendarId) {
Optional<InviteLink> inviteLink =
Expand Down Expand Up @@ -74,6 +78,23 @@ public InviteLink searchInviteInfo(String inviteCode) {
new String(Base64.getUrlDecoder().decode(inviteCode)));
}

@Transactional(readOnly = true)
public List<Member> searchFollowingsNotInvited(Long calendarId, String personalId) {
List<CalendarMemberResponse> calendarMembers =
calendarMemberService.searchCalendarMembers(calendarId);
return memberQueryService.searchFollowings(personalId).stream()
.filter(
follow -> {
for (var calendarMember : calendarMembers) {
if (calendarMember.memberId().equals(follow.getId())) {
return false;
}
}
return true;
})
.toList();
}

public void inviteMember(Long calendarId, Long invitedMemberId, Member inviter) {
Calendar calendar = calendarQueryService.searchByCalendarId(calendarId);
calendar.validateAuthenticatedMember(inviter.getId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,6 @@ public ResponseEntity<List<FollowRecommendResponse>> recommendMemberList(
return ResponseEntity.ok(body);
}

@GetMapping("/me/followings")
public ResponseEntity<List<MemberListResponse>> myFollowingList(@CurrentMember Member member) {
return ResponseEntity.ok(
memberQueryService.searchFollowings(member.getPersonalId()).stream()
.map(MemberListResponse::of)
.toList());
}

@PostMapping("/{memberId}/follow")
public ResponseEntity<Void> follow(@PathVariable Long memberId, @CurrentMember Member member)
throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

import com.sillim.recordit.calendar.domain.Calendar;
import com.sillim.recordit.calendar.domain.CalendarCategory;
import com.sillim.recordit.calendar.dto.response.CalendarMemberResponse;
import com.sillim.recordit.calendar.fixture.CalendarCategoryFixture;
import com.sillim.recordit.calendar.fixture.CalendarFixture;
import com.sillim.recordit.calendar.service.CalendarMemberService;
Expand All @@ -23,9 +24,11 @@
import com.sillim.recordit.invite.repository.InviteLogRepository;
import com.sillim.recordit.member.domain.Member;
import com.sillim.recordit.member.fixture.MemberFixture;
import com.sillim.recordit.member.service.MemberQueryService;
import com.sillim.recordit.pushalarm.service.AlarmService;
import java.time.LocalDateTime;
import java.util.Base64;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import org.junit.jupiter.api.DisplayName;
Expand All @@ -43,6 +46,7 @@ class InviteServiceTest {
@Mock InviteLogRepository inviteLogRepository;
@Mock CalendarMemberService calendarMemberService;
@Mock AlarmService alarmService;
@Mock MemberQueryService memberQueryService;
@InjectMocks InviteService inviteService;

@DisplayName("유효한 초대 코드가 있다면 가져온다.")
Expand Down Expand Up @@ -170,4 +174,23 @@ void throwInvalidRequestExceptionIfNotInvitedMemberWhenRejectInvitation() {
.isInstanceOf(InvalidRequestException.class)
.hasMessage(ErrorCode.INVALID_REQUEST.getDescription());
}

@Test
@DisplayName("초대하지 않은 팔로우 목록을 가져온다.")
void searchFollowingsNotInvited() {
long calendarId = 1L;
long memberId = 1L;
String personalId = "test";
CalendarMemberResponse calendarMember = new CalendarMemberResponse(1L, 2L, "name", "url");
Member member = mock(Member.class);
given(calendarMemberService.searchCalendarMembers(eq(calendarId)))
.willReturn(List.of(calendarMember));
given(memberQueryService.searchFollowings(eq(personalId))).willReturn(List.of(member));
given(member.getId()).willReturn(memberId);

List<Member> followings = inviteService.searchFollowingsNotInvited(calendarId, personalId);

assertThat(followings).hasSize(1);
assertThat(followings.get(0).getId()).isEqualTo(1L);
}
}
Loading