Skip to content

Commit 8489d65

Browse files
refactor: QueryDSL Repository를 CommandRepository와 QueryRepository로 분리(#110)
* feat: MemberCommandRepository, MemberCommandRepositoryAdapter 구현 * feat: TripCommandRepository, TripCommandRepositoryAdapter 구현 * feat: StampCommandRepository, StampCommandRepositoryAdapter 구현 * feat: MissionCommandRepository, MissionCommandRepositoryAdapter 구현 * feat: DailyMissionCommandRepository, DailyMissionCommandRepositoryAdapter 구현 * feat: StudyLogCommandRepository, StudyLogCommandRepositoryAdapter 구현 * feat: StudyLogDailyMissionCommandRepository, StudyLogDailyMissionCommandRepositoryAdapter 구현 * feat: PomodoroCommandRepository, PomodoroCommandRepositoryAdapter 구현 * feat: TripReportQueryRepository, TripReportQueryRepositoryAdapter 구현 * feat: StampQueryRepository, StampQueryRepositoryAdapter에 findNextStampOrderByTripId 메서드 추가 * feat: StampQueryService에 getNextStampOrderByTrip 메서드 추가 * feat: StampQueryService에 getStampsToShiftAfterDeleted 메서드 추가 * feat: StampCommandService에 shiftStampOrders 메서드 추가 * refactor: TripQueryRepositoryAdapter에서 Q 클래스 static import 적용으로 QueryDSL 가독성 향상 * refactor: StampQueryRepositoryAdapter에서 Q 클래스 static import 적용으로 QueryDSL 가독성 향상 * refactor: MissionQueryRepositoryAdapter에서 Q 클래스 static import 적용으로 QueryDSL 가독성 향상 * refactor: DailyMissionQueryRepositoryAdapter에서 Q 클래스 static import 적용으로 QueryDSL 가독성 향상 * refactor: StudyLogQueryRepositoryAdapter에서 Q 클래스 static import 적용으로 QueryDSL 가독성 향상 * refactor: StudyLogDailyMissionQueryRepositoryAdapter에서 Q 클래스 static import 적용으로 QueryDSL 가독성 향상 * refactor: PomodoroQueryRepositoryAdapter에서 Q 클래스 static import 적용으로 QueryDSL 가독성 향상 * refactor: DailyGoalQueryRepositoryAdapter에서 Q 클래스 static import 적용으로 QueryDSL 가독성 향상 * refactor: TripReportQueryRepositoryAdapter에서 Q 클래스 static import 적용으로 QueryDSL 가독성 향상 * refactor: TripReportStudyLogQueryRepositoryAdapter에서 Q 클래스 static import 적용으로 QueryDSL 가독성 향상 * refactor: DailyGoalQueryRepository -> DailyGoalCommandRepository 이름 변경 * refactor: DailyGoalQueryRepositoryAdapter -> DailyGoalCommandRepositoryAdapter 이름 변경 * refactor: TripReportQueryRepository -> TripReportCommandRepository 이름 변경 * refactor: TripReportQueryRepositoryAdapter -> TripReportCommandRepositoryAdapter 이름 변경 * refactor: TripReportStudyLogQueryRepository -> TripReportStudyLogCommandRepository 이름 변경 * refactor: TripReportStudyLogQueryRepositoryAdapter -> TripReportStudyLogCommandRepositoryAdapter 이름 변경 * refactor: StampQueryRepository, StampQueryRepositoryAdapter에서 findMaxStampOrderByTripId 메서드 삭제 * refactor: StampCommandService에서 computeNextStampOrder 메서드 삭제 * refactor: StampCommandService에서 createStamp, createStamps 메서드 int nextOrder 매개변수 추가 * refactor: StampCommandService에서 createStamp, createStamps 메서드 비즈니스 로직 개선 * refactor: StampCommandService에서 deleteStamp 메서드 비즈니스 로직 개선 * refactor: TripFacade에서 createTrip 메서드 비즈니스 로직 개선 * refactor: StampFacade에서 createStamp 메서드 비즈니스 로직 개선 * refactor: StampFacade에서 deleteStamp 메서드 비즈니스 로직 개선 * test: MemberCommandServiceTest 단위 테스트 수정 * test: TripCommandServiceTest 단위 테스트 수정 * test: StampCommandServiceTest 단위 테스트 수정 * test: MissionCommandServiceTest 단위 테스트 수정 * test: DailyMissionCommandServiceTest 단위 테스트 수정 * test: StudyLogCommandServiceTest 단위 테스트 수정 * test: StudyLogDailyMissionCommandServiceTest 단위 테스트 수정 * test: PomodoroCommandServiceTest 단위 테스트 수정 * test: DailyGoalCommandServiceTest 단위 테스트 수정 * test: TripReportCommandServiceTest 단위 테스트 수정 * test: TripReportStudyLogCommandServiceTest 단위 테스트 수정 * test: StampQueryServiceTest에 GetNextStampOrderByTrip 단위 테스트 추가 * test: StampQueryServiceTest에 GetStampsToShiftAfterDeleted 단위 테스트 추가 * test: StampCommandServiceTest에 ShiftStampOrders 단위 테스트 추가 * test: StampFixture에 createStampWithName 메서드 추가
1 parent f390c1a commit 8489d65

67 files changed

Lines changed: 960 additions & 717 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/main/java/com/ject/studytrip/member/application/service/MemberCommandService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import com.ject.studytrip.member.domain.model.MemberCategory;
99
import com.ject.studytrip.member.domain.model.SocialProvider;
1010
import com.ject.studytrip.member.domain.policy.MemberPolicy;
11-
import com.ject.studytrip.member.domain.repository.MemberQueryRepository;
11+
import com.ject.studytrip.member.domain.repository.MemberCommandRepository;
1212
import com.ject.studytrip.member.domain.repository.MemberRepository;
1313
import com.ject.studytrip.member.presentation.dto.request.UpdateMemberRequest;
1414
import lombok.RequiredArgsConstructor;
@@ -18,7 +18,7 @@
1818
@RequiredArgsConstructor
1919
public class MemberCommandService {
2020
private final MemberRepository memberRepository;
21-
private final MemberQueryRepository memberQueryRepository;
21+
private final MemberCommandRepository memberCommandRepository;
2222

2323
public Member createMemberFromKakao(CreateMemberCommand command) {
2424
validateMemberIsUnique(SocialProvider.KAKAO, command.socialId());
@@ -52,7 +52,7 @@ public void deleteMember(Member member) {
5252
}
5353

5454
public long hardDeleteMembers() {
55-
return memberQueryRepository.deleteAllByDeletedAtIsNotNull();
55+
return memberCommandRepository.deleteAllByDeletedAtIsNotNull();
5656
}
5757

5858
public void hardDeleteMemberById(Long memberId) {
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.ject.studytrip.member.domain.repository;
2+
3+
public interface MemberCommandRepository {
4+
long deleteAllByDeletedAtIsNotNull();
5+
}

src/main/java/com/ject/studytrip/member/domain/repository/MemberQueryRepository.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,4 @@
55

66
public interface MemberQueryRepository {
77
Optional<MemberRole> findMemberRoleById(Long memberId);
8-
9-
long deleteAllByDeletedAtIsNotNull();
108
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.ject.studytrip.member.infra.querydsl;
2+
3+
import static com.ject.studytrip.member.domain.model.QMember.member;
4+
5+
import com.ject.studytrip.member.domain.repository.MemberCommandRepository;
6+
import com.querydsl.jpa.impl.JPAQueryFactory;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.stereotype.Repository;
9+
10+
@Repository
11+
@RequiredArgsConstructor
12+
public class MemberCommandRepositoryAdapter implements MemberCommandRepository {
13+
private final JPAQueryFactory queryFactory;
14+
15+
@Override
16+
public long deleteAllByDeletedAtIsNotNull() {
17+
return queryFactory.delete(member).where(member.deletedAt.isNotNull()).execute();
18+
}
19+
}

src/main/java/com/ject/studytrip/member/infra/querydsl/MemberQueryRepositoryAdapter.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,4 @@ public Optional<MemberRole> findMemberRoleById(Long memberId) {
2525

2626
return Optional.ofNullable(memberRole);
2727
}
28-
29-
@Override
30-
public long deleteAllByDeletedAtIsNotNull() {
31-
return queryFactory.delete(member).where(member.deletedAt.isNotNull()).execute();
32-
}
3328
}

src/main/java/com/ject/studytrip/mission/application/service/DailyMissionCommandService.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.ject.studytrip.mission.domain.factory.DailyMissionFactory;
44
import com.ject.studytrip.mission.domain.model.DailyMission;
55
import com.ject.studytrip.mission.domain.model.Mission;
6-
import com.ject.studytrip.mission.domain.repository.DailyMissionQueryRepository;
6+
import com.ject.studytrip.mission.domain.repository.DailyMissionCommandRepository;
77
import com.ject.studytrip.mission.domain.repository.DailyMissionRepository;
88
import com.ject.studytrip.trip.domain.model.DailyGoal;
99
import java.util.List;
@@ -14,7 +14,7 @@
1414
@RequiredArgsConstructor
1515
public class DailyMissionCommandService {
1616
private final DailyMissionRepository dailyMissionRepository;
17-
private final DailyMissionQueryRepository dailyMissionQueryRepository;
17+
private final DailyMissionCommandRepository dailyMissionCommandRepository;
1818

1919
public List<DailyMission> createDailyMissions(DailyGoal dailyGoal, List<Mission> missions) {
2020
List<DailyMission> dailyMissions =
@@ -30,18 +30,18 @@ public void deleteDailyMission(DailyMission dailyMission) {
3030
}
3131

3232
public long hardDeleteDailyMissions() {
33-
return dailyMissionQueryRepository.deleteAllByDeletedAtIsNotNull();
33+
return dailyMissionCommandRepository.deleteAllByDeletedAtIsNotNull();
3434
}
3535

3636
public long hardDeleteDailyMissionsOwnedByDeletedMission() {
37-
return dailyMissionQueryRepository.deleteAllByDeletedMissionOwner();
37+
return dailyMissionCommandRepository.deleteAllByDeletedMissionOwner();
3838
}
3939

4040
public long hardDeleteDailyMissionsOwnedByDeletedDailyGoal() {
41-
return dailyMissionQueryRepository.deleteAllByDeletedDailyGoalOwner();
41+
return dailyMissionCommandRepository.deleteAllByDeletedDailyGoalOwner();
4242
}
4343

4444
public long hardDeleteDailyMissionsByMember(Long memberId) {
45-
return dailyMissionQueryRepository.deleteAllByMemberId(memberId);
45+
return dailyMissionCommandRepository.deleteAllByMemberId(memberId);
4646
}
4747
}

src/main/java/com/ject/studytrip/mission/application/service/MissionCommandService.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.ject.studytrip.mission.domain.factory.MissionFactory;
44
import com.ject.studytrip.mission.domain.model.Mission;
55
import com.ject.studytrip.mission.domain.policy.MissionPolicy;
6-
import com.ject.studytrip.mission.domain.repository.MissionQueryRepository;
6+
import com.ject.studytrip.mission.domain.repository.MissionCommandRepository;
77
import com.ject.studytrip.mission.domain.repository.MissionRepository;
88
import com.ject.studytrip.mission.presentation.dto.request.CreateMissionRequest;
99
import com.ject.studytrip.mission.presentation.dto.request.UpdateMissionRequest;
@@ -16,7 +16,7 @@
1616
@RequiredArgsConstructor
1717
public class MissionCommandService {
1818
private final MissionRepository missionRepository;
19-
private final MissionQueryRepository missionQueryRepository;
19+
private final MissionCommandRepository missionCommandRepository;
2020

2121
public Mission createMission(Stamp stamp, CreateMissionRequest request) {
2222
Mission mission = MissionFactory.create(stamp, request.missionName());
@@ -47,20 +47,20 @@ public void validateMissionsBelongsToStamp(Long stampId, List<Mission> missions)
4747

4848
public void validateAllMissionsCompletedByStampId(Long stampId) {
4949
boolean exists =
50-
missionQueryRepository.existsByStampIdAndCompletedIsFalseAndDeletedAtIsNull(
50+
missionCommandRepository.existsByStampIdAndCompletedIsFalseAndDeletedAtIsNull(
5151
stampId);
5252
MissionPolicy.validateAllCompleted(exists);
5353
}
5454

5555
public long hardDeleteMissions() {
56-
return missionQueryRepository.deleteAllByDeletedAtIsNotNull();
56+
return missionCommandRepository.deleteAllByDeletedAtIsNotNull();
5757
}
5858

5959
public long hardDeleteMissionsOwnedByDeletedStamp() {
60-
return missionQueryRepository.deleteAllByDeletedStampOwner();
60+
return missionCommandRepository.deleteAllByDeletedStampOwner();
6161
}
6262

6363
public long hardDeleteMissionsByMember(Long memberId) {
64-
return missionQueryRepository.deleteAllByMemberId(memberId);
64+
return missionCommandRepository.deleteAllByMemberId(memberId);
6565
}
6666
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.ject.studytrip.mission.domain.repository;
2+
3+
public interface DailyMissionCommandRepository {
4+
long deleteAllByDeletedAtIsNotNull();
5+
6+
long deleteAllByDeletedMissionOwner();
7+
8+
long deleteAllByDeletedDailyGoalOwner();
9+
10+
long deleteAllByMemberId(Long memberId);
11+
}

src/main/java/com/ject/studytrip/mission/domain/repository/DailyMissionQueryRepository.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,4 @@ public interface DailyMissionQueryRepository {
77
List<DailyMission> findAllByDailyGoalIdFetchJoinMission(Long dailyGoalId);
88

99
List<DailyMission> findAllWithMissionAndStampByIds(List<Long> ids);
10-
11-
long deleteAllByDeletedAtIsNotNull();
12-
13-
long deleteAllByDeletedMissionOwner();
14-
15-
long deleteAllByDeletedDailyGoalOwner();
16-
17-
long deleteAllByMemberId(Long memberId);
1810
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.ject.studytrip.mission.domain.repository;
2+
3+
public interface MissionCommandRepository {
4+
boolean existsByStampIdAndCompletedIsFalseAndDeletedAtIsNull(Long stampId);
5+
6+
long deleteAllByDeletedAtIsNotNull();
7+
8+
long deleteAllByDeletedStampOwner();
9+
10+
long deleteAllByMemberId(Long memberId);
11+
}

0 commit comments

Comments
 (0)