diff --git a/src/main/java/com/soptie/server/conversation/adapter/ConversationFinder.java b/src/main/java/com/soptie/server/conversation/adapter/ConversationFinder.java new file mode 100644 index 00000000..eb43bb1b --- /dev/null +++ b/src/main/java/com/soptie/server/conversation/adapter/ConversationFinder.java @@ -0,0 +1,19 @@ +package com.soptie.server.conversation.adapter; + +import com.soptie.server.common.support.RepositoryAdapter; +import com.soptie.server.conversation.entity.Conversation; +import com.soptie.server.conversation.repository.ConversationRepository; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@RepositoryAdapter +@RequiredArgsConstructor +public class ConversationFinder { + + private final ConversationRepository conversationRepository; + + public List findAll() { + return conversationRepository.findAll(); + } +} diff --git a/src/main/java/com/soptie/server/doll/adapter/DollFinder.java b/src/main/java/com/soptie/server/doll/adapter/DollFinder.java new file mode 100644 index 00000000..132f35c6 --- /dev/null +++ b/src/main/java/com/soptie/server/doll/adapter/DollFinder.java @@ -0,0 +1,22 @@ +package com.soptie.server.doll.adapter; + +import com.soptie.server.common.support.RepositoryAdapter; +import com.soptie.server.doll.entity.Doll; +import com.soptie.server.doll.entity.DollType; +import com.soptie.server.doll.exception.DollException; +import com.soptie.server.doll.repository.DollRepository; +import lombok.RequiredArgsConstructor; + +import static com.soptie.server.doll.message.ErrorCode.INVALID_TYPE; + +@RepositoryAdapter +@RequiredArgsConstructor +public class DollFinder { + + private final DollRepository dollRepository; + + public Doll findByType(DollType type) { + return dollRepository.findByDollType(type) + .orElseThrow(() -> new DollException(INVALID_TYPE)); + } +} diff --git a/src/main/java/com/soptie/server/member/adapter/MemberDeleter.java b/src/main/java/com/soptie/server/member/adapter/MemberDeleter.java new file mode 100644 index 00000000..1e94d10d --- /dev/null +++ b/src/main/java/com/soptie/server/member/adapter/MemberDeleter.java @@ -0,0 +1,17 @@ +package com.soptie.server.member.adapter; + +import com.soptie.server.common.support.RepositoryAdapter; +import com.soptie.server.member.entity.Member; +import com.soptie.server.member.repository.MemberRepository; +import lombok.RequiredArgsConstructor; + +@RepositoryAdapter +@RequiredArgsConstructor +public class MemberDeleter { + + private final MemberRepository memberRepository; + + public void delete(Member member) { + memberRepository.delete(member); + } +} diff --git a/src/main/java/com/soptie/server/member/service/MemberServiceImpl.java b/src/main/java/com/soptie/server/member/service/MemberServiceImpl.java index 89bd159d..84b96011 100644 --- a/src/main/java/com/soptie/server/member/service/MemberServiceImpl.java +++ b/src/main/java/com/soptie/server/member/service/MemberServiceImpl.java @@ -1,7 +1,12 @@ package com.soptie.server.member.service; +import com.soptie.server.conversation.adapter.ConversationFinder; import com.soptie.server.conversation.entity.Conversation; import com.soptie.server.conversation.repository.ConversationRepository; +import com.soptie.server.doll.adapter.DollFinder; +import com.soptie.server.doll.entity.DollType; +import com.soptie.server.member.adapter.MemberDeleter; +import com.soptie.server.member.adapter.MemberFinder; import com.soptie.server.member.service.dto.request.CottonGiveServiceRequest; import com.soptie.server.member.service.dto.request.MemberHomeInfoGetServiceRequest; import com.soptie.server.member.service.dto.response.MemberCottonCountGetServiceResponse; @@ -10,9 +15,13 @@ import com.soptie.server.member.entity.Member; import com.soptie.server.member.exception.MemberException; import com.soptie.server.member.repository.MemberRepository; +import com.soptie.server.memberDoll.adapter.MemberDollSaver; +import com.soptie.server.memberDoll.entity.MemberDoll; import com.soptie.server.memberDoll.service.MemberDollService; +import com.soptie.server.memberRoutine.adapter.MemberRoutineSaver; import com.soptie.server.memberRoutine.service.MemberRoutineCreateService; +import com.soptie.server.routine.adapter.RoutineFinder; import lombok.RequiredArgsConstructor; import lombok.val; import org.springframework.stereotype.Service; @@ -27,31 +36,34 @@ @Transactional(readOnly = true) public class MemberServiceImpl implements MemberService { - private final MemberDollService memberDollService; - private final MemberRoutineCreateService memberRoutineCreateService; - private final MemberRepository memberRepository; - private final ConversationRepository conversationRepository; + private final ConversationFinder conversationFinder; + private final MemberFinder memberFinder; + private final MemberDeleter memberDeleter; + private final DollFinder dollFinder; + private final RoutineFinder routineFinder; + private final MemberDollSaver memberDollSaver; + private final MemberRoutineSaver memberRoutineSaver; @Override @Transactional public void createMemberProfile(MemberProfileCreateServiceRequest request) { - val member = findMember(request.memberId()); + val member = memberFinder.findById(request.memberId()); member.checkMemberDollNonExist(); - memberRoutineCreateService.createDailyRoutines(member, request.routines()); - memberDollService.createMemberDoll(member, request.dollType(), request.name()); + createDailyRoutines(member, request.routines()); + createMemberDoll(member, request.dollType(), request.name()); } @Override @Transactional public MemberCottonCountGetServiceResponse giveCotton(CottonGiveServiceRequest request) { - val member = findMember(request.memberId()); + val member = memberFinder.findById(request.memberId()); val cottonCount = member.subtractAndGetCotton(request.cottonType()); return MemberCottonCountGetServiceResponse.of(cottonCount); } @Override public MemberHomeInfoGetServiceResponse getMemberHomeInfo(MemberHomeInfoGetServiceRequest request) { - val member = findMember(request.memberId()); + val member = memberFinder.findById(request.memberId()); member.checkMemberDollExist(); val conversations = getConversations(); return MemberHomeInfoGetServiceResponse.of(member, conversations); @@ -59,16 +71,24 @@ public MemberHomeInfoGetServiceResponse getMemberHomeInfo(MemberHomeInfoGetServi @Override public void deleteMember(Member member) { - memberRepository.delete(member); + memberDeleter.delete(member); } - private Member findMember(long id) { - return memberRepository.findById(id) - .orElseThrow(() -> new MemberException(INVALID_MEMBER)); + private void createDailyRoutines(Member member, List routineIds) { + routineIds.forEach(id -> { + val routine = routineFinder.findById(id); + memberRoutineSaver.checkHasDeletedAndSave(member, routine); + }); + } + + private void createMemberDoll(Member member, DollType dollType, String name) { + val doll = dollFinder.findByType(dollType); + val memberDoll = new MemberDoll(member, doll, name); + memberDollSaver.save(memberDoll); } private List getConversations() { - return conversationRepository.findAll().stream() + return conversationFinder.findAll().stream() .map(Conversation::getContent) .toList(); } diff --git a/src/main/java/com/soptie/server/memberDoll/adapter/MemberDollSaver.java b/src/main/java/com/soptie/server/memberDoll/adapter/MemberDollSaver.java new file mode 100644 index 00000000..1c838f30 --- /dev/null +++ b/src/main/java/com/soptie/server/memberDoll/adapter/MemberDollSaver.java @@ -0,0 +1,17 @@ +package com.soptie.server.memberDoll.adapter; + +import com.soptie.server.common.support.RepositoryAdapter; +import com.soptie.server.memberDoll.entity.MemberDoll; +import com.soptie.server.memberDoll.repository.MemberDollRepository; +import lombok.RequiredArgsConstructor; + +@RepositoryAdapter +@RequiredArgsConstructor +public class MemberDollSaver { + + private final MemberDollRepository memberDollRepository; + + public void save(MemberDoll memberDoll) { + memberDollRepository.save(memberDoll); + } +} diff --git a/src/main/java/com/soptie/server/memberRoutine/service/MemberRoutineCreateService.java b/src/main/java/com/soptie/server/memberRoutine/service/MemberRoutineCreateService.java index 2f135ae0..f82c179c 100644 --- a/src/main/java/com/soptie/server/memberRoutine/service/MemberRoutineCreateService.java +++ b/src/main/java/com/soptie/server/memberRoutine/service/MemberRoutineCreateService.java @@ -42,10 +42,6 @@ public MemberDailyRoutineCreateServiceResponse createDailyRoutine(MemberDailyRou return MemberDailyRoutineCreateServiceResponse.of(savedMemberRoutine); } - public void createDailyRoutines(Member member, List routineIds) { - routineIds.forEach(id -> memberRoutineSaver.checkHasDeletedAndSave(member, routineFinder.findById(id))); - } - public MemberHappinessRoutineCreateServiceResponse createHappinessRoutine( MemberHappinessRoutineCreateServiceRequest request ) { diff --git a/src/test/java/com/soptie/server/member/service/MemberServiceImplTest.java b/src/test/java/com/soptie/server/member/service/MemberServiceImplTest.java index 8bc580e7..6c9ec4b3 100644 --- a/src/test/java/com/soptie/server/member/service/MemberServiceImplTest.java +++ b/src/test/java/com/soptie/server/member/service/MemberServiceImplTest.java @@ -1,9 +1,12 @@ package com.soptie.server.member.service; +import com.soptie.server.conversation.adapter.ConversationFinder; import com.soptie.server.conversation.entity.Conversation; -import com.soptie.server.conversation.repository.ConversationRepository; +import com.soptie.server.doll.adapter.DollFinder; import com.soptie.server.doll.entity.Doll; import com.soptie.server.doll.entity.DollType; +import com.soptie.server.member.adapter.MemberDeleter; +import com.soptie.server.member.adapter.MemberFinder; import com.soptie.server.member.controller.dto.request.MemberProfileCreateRequest; import com.soptie.server.member.service.dto.request.CottonGiveServiceRequest; import com.soptie.server.member.service.dto.request.MemberHomeInfoGetServiceRequest; @@ -12,10 +15,10 @@ import com.soptie.server.member.entity.CottonType; import com.soptie.server.member.entity.Member; import com.soptie.server.member.exception.MemberException; -import com.soptie.server.member.repository.MemberRepository; +import com.soptie.server.memberDoll.adapter.MemberDollSaver; import com.soptie.server.memberDoll.entity.MemberDoll; -import com.soptie.server.memberDoll.service.MemberDollServiceImpl; -import com.soptie.server.memberRoutine.service.MemberRoutineCreateService; +import com.soptie.server.memberRoutine.adapter.MemberRoutineSaver; +import com.soptie.server.routine.adapter.RoutineFinder; import com.soptie.server.support.fixture.ConversationFixture; import com.soptie.server.support.fixture.DollFixture; import com.soptie.server.support.fixture.MemberDollFixture; @@ -28,7 +31,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import java.util.List; -import java.util.Optional; import static com.soptie.server.doll.entity.DollType.BROWN; import static com.soptie.server.member.message.ErrorCode.NOT_ENOUGH_COTTON; @@ -43,17 +45,11 @@ class MemberServiceImplTest { private MemberServiceImpl memberService; @Mock - private MemberRoutineCreateService memberRoutineCreateService; + private MemberFinder memberFinder; @Mock - private MemberDollServiceImpl memberDollService; - - @Mock - private MemberRepository memberRepository; - - @Mock - private ConversationRepository conversationRepository; - + private ConversationFinder conversationFinder; +/* @Test @DisplayName("멤버 프로필 생성 시, 멤버 데일리 루틴 생성과 멤버 인형 생성 메소드를 호출한다.") void 멤버_프로필을_생성하면서_멤버_데일리_루틴과_멤버_인형을_생성한다() { @@ -64,16 +60,16 @@ class MemberServiceImplTest { String name = "memberDoll"; List routines = List.of(2L, 3L, 4L); MemberProfileCreateRequest request = new MemberProfileCreateRequest(dollType, name, routines); - doNothing().when(memberRoutineCreateService).createDailyRoutines(member, List.of(2L, 3L, 4L)); - doNothing().when(memberDollService).createMemberDoll(member, dollType, name); + doNothing().when(memberRoutineSaver).checkHasDeletedAndSave(member, List.of(2L, 3L, 4L)); + doNothing().when(memberService).createMemberDoll(member, dollType, name); // when memberService.createMemberProfile(MemberProfileCreateServiceRequest.of(memberId, request)); // then - verify(memberRoutineCreateService).createDailyRoutines(member, routines); - verify(memberDollService).createMemberDoll(member, dollType, name); - } + verify(memberService).createDailyRoutines(member, routines); + verify(memberService).createMemberDoll(member, dollType, name); + }*/ @Test @DisplayName("솜뭉치 개수가 양수일 때 솜뭉치를 줄 수 있다.") @@ -128,19 +124,19 @@ void occurExceptionGiveCottonWhenCottonCountIsZero() { private Member member(long memberId) { Member member = MemberFixture.member().id(memberId).build(); - doReturn(Optional.of(member)).when(memberRepository).findById(memberId); + doReturn(member).when(memberFinder).findById(memberId); return member; } private Member member(long memberId, MemberDoll memberDoll) { Member member = MemberFixture.member().id(memberId).memberDoll(memberDoll).build(); - doReturn(Optional.of(member)).when(memberRepository).findById(memberId); + doReturn(member).when(memberFinder).findById(memberId); return member; } private Member member(long memberId, MemberDoll memberDoll, int dailyCottonCount) { Member member = MemberFixture.member().id(memberId).memberDoll(memberDoll).dailyCotton(dailyCottonCount).build(); - doReturn(Optional.of(member)).when(memberRepository).findById(memberId); + doReturn(member).when(memberFinder).findById(memberId); return member; } @@ -162,7 +158,7 @@ private List conversations(List conversationIds) { .content("conversation" + conversationId) .build() ).toList(); - doReturn(conversations).when(conversationRepository).findAll(); + doReturn(conversations).when(conversationFinder).findAll(); return conversations; } }