Skip to content

Commit 115e24b

Browse files
authored
refactor: 관심 기관 리팩토링 (#359)
* refactor(interest-center): 관심기관 추가 삭제 리팩토링 * test(interest-center): 관심기관 추가 삭제 리팩토링 테스트 * refactor(interest-center): 관심기관 조회 리팩토링 * test(interest-center): 관심기관 조회 리팩토링 테스트 * refactor(center): 사용하지 않는 기존 Center 기능 제거 * refactor(center): 사용하지 않는 기존 Center 기능 제거
1 parent ed0bec5 commit 115e24b

23 files changed

+424
-386
lines changed

src/main/java/com/somemore/center/repository/NEWCenterRepository.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package com.somemore.center.repository;
22

33
import com.somemore.center.domain.NEWCenter;
4+
import com.somemore.center.repository.record.CenterOverviewInfo;
45
import com.somemore.center.repository.record.CenterProfileDto;
5-
6+
import java.util.List;
67
import java.util.Optional;
78
import java.util.UUID;
89

@@ -15,4 +16,12 @@ public interface NEWCenterRepository {
1516
Optional<NEWCenter> findByUserId(UUID userId);
1617

1718
Optional<CenterProfileDto> findCenterProfileById(UUID centerId);
19+
20+
boolean existsById(UUID id);
21+
22+
default boolean doesNotExistById(UUID id) {
23+
return !existsById(id);
24+
}
25+
26+
List<CenterOverviewInfo> findOverviewInfosByIds(List<UUID> ids);
1827
}

src/main/java/com/somemore/center/repository/NEWCenterRepositoryImpl.java

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
import com.querydsl.jpa.impl.JPAQueryFactory;
66
import com.somemore.center.domain.NEWCenter;
77
import com.somemore.center.domain.QNEWCenter;
8+
import com.somemore.center.repository.record.CenterOverviewInfo;
89
import com.somemore.center.repository.record.CenterProfileDto;
9-
import lombok.RequiredArgsConstructor;
10-
import org.springframework.stereotype.Repository;
11-
10+
import com.somemore.user.domain.QUserCommonAttribute;
11+
import java.util.List;
1212
import java.util.Optional;
1313
import java.util.UUID;
14+
import lombok.RequiredArgsConstructor;
15+
import org.springframework.stereotype.Repository;
1416

1517
@Repository("newCenterRepository")
1618
@RequiredArgsConstructor
@@ -20,6 +22,7 @@ public class NEWCenterRepositoryImpl implements NEWCenterRepository {
2022
private final JPAQueryFactory queryFactory;
2123

2224
private static final QNEWCenter center = QNEWCenter.nEWCenter;
25+
private static final QUserCommonAttribute userCommonAttribute = QUserCommonAttribute.userCommonAttribute;
2326

2427
@Override
2528
public NEWCenter save(NEWCenter center) {
@@ -31,7 +34,7 @@ public Optional<NEWCenter> findById(UUID id) {
3134
return Optional.ofNullable(
3235
queryFactory.selectFrom(center)
3336
.where(
34-
center.id.eq(id),
37+
idEq(id),
3538
isNotDeleted()
3639
)
3740
.fetchOne()
@@ -60,13 +63,52 @@ public Optional<CenterProfileDto> findCenterProfileById(UUID centerId) {
6063
center.homepageUrl))
6164
.from(center)
6265
.where(
63-
center.id.eq(centerId),
66+
idEq(centerId),
6467
isNotDeleted()
6568
)
6669
.fetchOne()
6770
);
6871
}
6972

73+
@Override
74+
public boolean existsById(UUID id) {
75+
return queryFactory
76+
.selectOne()
77+
.from(center)
78+
.where(
79+
idEq(id),
80+
isNotDeleted()
81+
)
82+
.fetchFirst() != null;
83+
}
84+
85+
@Override
86+
public List<CenterOverviewInfo> findOverviewInfosByIds(List<UUID> ids) {
87+
return queryFactory
88+
.select(Projections.constructor(
89+
CenterOverviewInfo.class,
90+
center.id,
91+
userCommonAttribute.name,
92+
userCommonAttribute.imgUrl
93+
))
94+
.from(center)
95+
.join(userCommonAttribute)
96+
.on(userCommonAttribute.userId.eq(center.userId))
97+
.where(
98+
idIn(ids),
99+
isNotDeleted()
100+
)
101+
.fetch();
102+
}
103+
104+
private static BooleanExpression idIn(List<UUID> ids) {
105+
return center.id.in(ids);
106+
}
107+
108+
private BooleanExpression idEq(UUID id) {
109+
return center.id.eq(id);
110+
}
111+
70112
private BooleanExpression isNotDeleted() {
71113
return center.deleted.isFalse();
72114
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.somemore.domains.center.repository.mapper;
1+
package com.somemore.center.repository.record;
22

33

44
import java.util.UUID;

src/main/java/com/somemore/center/service/NEWCenterQueryService.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.somemore.center.service;
22

3+
import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_CENTER;
4+
35
import com.somemore.center.domain.NEWCenter;
46
import com.somemore.center.dto.response.CenterProfileResponseDto;
57
import com.somemore.center.repository.NEWCenterRepository;
8+
import com.somemore.center.repository.record.CenterOverviewInfo;
69
import com.somemore.center.repository.record.CenterProfileDto;
710
import com.somemore.center.usecase.NEWCenterQueryUseCase;
811
import com.somemore.domains.center.dto.response.PreferItemResponseDto;
@@ -11,13 +14,12 @@
1114
import com.somemore.global.exception.NoSuchElementException;
1215
import com.somemore.user.repository.usercommonattribute.record.UserProfileDto;
1316
import com.somemore.user.usecase.UserQueryUseCase;
17+
import java.util.List;
18+
import java.util.UUID;
1419
import lombok.RequiredArgsConstructor;
1520
import org.springframework.stereotype.Service;
1621
import org.springframework.transaction.annotation.Transactional;
1722

18-
import java.util.List;
19-
import java.util.UUID;
20-
2123
@Service
2224
@RequiredArgsConstructor
2325
@Transactional(readOnly = true)
@@ -44,12 +46,25 @@ public CenterProfileResponseDto getCenterProfileById(UUID centerId) {
4446
CenterProfileDto centerProfileDto = centerRepository.findCenterProfileById(centerId)
4547
.orElseThrow(() -> new NoSuchElementException(ExceptionMessage.NOT_EXISTS_CENTER));
4648

47-
UserProfileDto userProfileDto = userQueryUseCase.getUserProfileByUserId(centerProfileDto.userId());
49+
UserProfileDto userProfileDto = userQueryUseCase.getUserProfileByUserId(
50+
centerProfileDto.userId());
4851

49-
List<PreferItemResponseDto> preferItems = preferItemQueryUseCase.getPreferItemDtosByCenterId(centerProfileDto.id());
52+
List<PreferItemResponseDto> preferItems = preferItemQueryUseCase.getPreferItemDtosByCenterId(
53+
centerProfileDto.id());
5054

5155
return CenterProfileResponseDto.of(centerProfileDto, userProfileDto, preferItems);
5256
}
5357

58+
@Override
59+
public void validateCenterExists(UUID id) {
60+
if (centerRepository.doesNotExistById(id)) {
61+
throw new NoSuchElementException(NOT_EXISTS_CENTER);
62+
}
63+
}
64+
65+
@Override
66+
public List<CenterOverviewInfo> getCenterOverviewsByIds(List<UUID> ids) {
67+
return centerRepository.findOverviewInfosByIds(ids);
68+
}
5469

5570
}

src/main/java/com/somemore/center/usecase/NEWCenterQueryUseCase.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import com.somemore.center.domain.NEWCenter;
44
import com.somemore.center.dto.response.CenterProfileResponseDto;
5-
5+
import com.somemore.center.repository.record.CenterOverviewInfo;
6+
import java.util.List;
67
import java.util.UUID;
78

89
public interface NEWCenterQueryUseCase {
@@ -12,4 +13,8 @@ public interface NEWCenterQueryUseCase {
1213
UUID getIdByUserId(UUID userId);
1314

1415
CenterProfileResponseDto getCenterProfileById(UUID centerId);
16+
17+
void validateCenterExists(UUID id);
18+
19+
List<CenterOverviewInfo> getCenterOverviewsByIds(List<UUID> ids);
1520
}

src/main/java/com/somemore/domains/center/repository/center/CenterRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.somemore.domains.center.repository.center;
22

3+
import com.somemore.center.repository.record.CenterOverviewInfo;
34
import com.somemore.domains.center.domain.Center;
4-
import com.somemore.domains.center.repository.mapper.CenterOverviewInfo;
5-
65
import java.util.List;
76
import java.util.Optional;
87
import java.util.UUID;
98

109
public interface CenterRepository {
10+
1111
Center save(Center center);
1212

1313
boolean existsById(UUID id);

src/main/java/com/somemore/domains/center/repository/center/CenterRepositoryImpl.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@
44
import com.querydsl.core.types.Projections;
55
import com.querydsl.core.types.dsl.BooleanExpression;
66
import com.querydsl.jpa.impl.JPAQueryFactory;
7+
import com.somemore.center.repository.record.CenterOverviewInfo;
78
import com.somemore.domains.center.domain.Center;
89
import com.somemore.domains.center.domain.QCenter;
9-
import com.somemore.domains.center.repository.mapper.CenterOverviewInfo;
10-
import lombok.RequiredArgsConstructor;
11-
import org.springframework.stereotype.Repository;
12-
1310
import java.util.List;
1411
import java.util.Optional;
1512
import java.util.UUID;
13+
import lombok.RequiredArgsConstructor;
14+
import org.springframework.stereotype.Repository;
1615

1716
@RequiredArgsConstructor
1817
@Repository("centerRepository")
Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,22 @@
11
package com.somemore.domains.center.service.query;
22

3-
import com.somemore.domains.center.domain.Center;
4-
import com.somemore.domains.center.dto.response.CenterProfileResponseDto;
5-
import com.somemore.domains.center.dto.response.PreferItemResponseDto;
3+
import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_CENTER;
4+
65
import com.somemore.domains.center.repository.center.CenterRepository;
7-
import com.somemore.domains.center.repository.mapper.CenterOverviewInfo;
86
import com.somemore.domains.center.usecase.query.CenterQueryUseCase;
9-
import com.somemore.domains.center.usecase.query.PreferItemQueryUseCase;
107
import com.somemore.global.exception.BadRequestException;
8+
import java.util.UUID;
119
import lombok.RequiredArgsConstructor;
1210
import org.springframework.stereotype.Service;
1311
import org.springframework.transaction.annotation.Transactional;
1412

15-
import java.util.List;
16-
import java.util.UUID;
17-
18-
import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_CENTER;
19-
2013
@RequiredArgsConstructor
2114
@Transactional(readOnly = true)
2215
@Service
2316
public class CenterQueryService implements CenterQueryUseCase {
2417

25-
private final PreferItemQueryUseCase preferItemQueryUseCase;
2618
private final CenterRepository centerRepository;
2719

28-
@Override
29-
public CenterProfileResponseDto getCenterProfileByCenterId(UUID centerId) {
30-
31-
Center center = getCenterById(centerId);
32-
List<PreferItemResponseDto> preferItemDtos = preferItemQueryUseCase.getPreferItemDtosByCenterId(centerId);
33-
34-
return CenterProfileResponseDto.of(center, preferItemDtos);
35-
}
36-
37-
@Override
38-
public List<CenterOverviewInfo> getCenterOverviewsByIds(List<UUID> centerIds) {
39-
return centerRepository.findCenterOverviewsByIds(centerIds);
40-
}
41-
4220
@Override
4321
public void validateCenterExists(UUID id) {
4422
if (centerRepository.doesNotExistById(id)) {
@@ -57,8 +35,4 @@ public String getNameById(UUID id) {
5735
return name;
5836
}
5937

60-
private Center getCenterById(UUID centerId) {
61-
return centerRepository.findCenterById(centerId)
62-
.orElseThrow(() -> new BadRequestException(NOT_EXISTS_CENTER.getMessage()));
63-
}
6438
}
Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
11
package com.somemore.domains.center.usecase.query;
22

3-
import com.somemore.domains.center.dto.response.CenterProfileResponseDto;
4-
import com.somemore.domains.center.repository.mapper.CenterOverviewInfo;
5-
6-
import java.util.List;
73
import java.util.UUID;
84

95
public interface CenterQueryUseCase {
10-
CenterProfileResponseDto getCenterProfileByCenterId(UUID centerId);
11-
12-
List<CenterOverviewInfo> getCenterOverviewsByIds(List<UUID> centerIds);
136

147
void validateCenterExists(UUID centerId);
8+
159
String getNameById(UUID id);
1610
}

src/main/java/com/somemore/domains/interestcenter/controller/InterestCenterCommandApiController.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44
import com.somemore.domains.interestcenter.dto.response.RegisterInterestCenterResponseDto;
55
import com.somemore.domains.interestcenter.usecase.CancelInterestCenterUseCase;
66
import com.somemore.domains.interestcenter.usecase.RegisterInterestCenterUseCase;
7-
import com.somemore.global.auth.annotation.CurrentUser;
7+
import com.somemore.global.auth.annotation.RoleId;
88
import com.somemore.global.common.response.ApiResponse;
99
import io.swagger.v3.oas.annotations.Operation;
1010
import io.swagger.v3.oas.annotations.tags.Tag;
1111
import jakarta.validation.Valid;
12+
import java.util.UUID;
1213
import lombok.RequiredArgsConstructor;
1314
import org.springframework.security.access.annotation.Secured;
1415
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -17,8 +18,6 @@
1718
import org.springframework.web.bind.annotation.RequestBody;
1819
import org.springframework.web.bind.annotation.RestController;
1920

20-
import java.util.UUID;
21-
2221
@RequiredArgsConstructor
2322
@RestController
2423
@Tag(name = "Interest Center Command API", description = "관심 기관의 등록과 취소 API를 제공합니다")
@@ -31,10 +30,11 @@ public class InterestCenterCommandApiController {
3130
@Operation(summary = "관심기관 등록 API")
3231
@PostMapping("/api/interest-center")
3332
public ApiResponse<RegisterInterestCenterResponseDto> registerInterestCenter(
34-
@CurrentUser UUID volunteerId,
33+
@RoleId UUID volunteerId,
3534
@Valid @RequestBody RegisterInterestCenterRequestDto requestDto) {
3635

37-
RegisterInterestCenterResponseDto responseDto = registerInterestCenterUseCase.registerInterestCenter(volunteerId, requestDto);
36+
RegisterInterestCenterResponseDto responseDto = registerInterestCenterUseCase.registerInterestCenter(
37+
volunteerId, requestDto);
3838

3939
return ApiResponse.ok(200, responseDto, "관심 기관 등록 성공");
4040
}
@@ -43,7 +43,7 @@ public ApiResponse<RegisterInterestCenterResponseDto> registerInterestCenter(
4343
@Operation(summary = "관심기관 취소 API")
4444
@DeleteMapping("/api/interest-center/{centerId}")
4545
public ApiResponse<String> deleteInterestCenter(
46-
@CurrentUser UUID volunteerId,
46+
@RoleId UUID volunteerId,
4747
@PathVariable UUID centerId) {
4848

4949
cancelInterestCenterUseCase.cancelInterestCenter(volunteerId, centerId);

0 commit comments

Comments
 (0)