Skip to content

Commit eeac761

Browse files
authored
️refactor: 검색 api, 검색어 저장 api 분리 (#323)
* refactor: 검색어 저장 api 분리 * feat: 검색어 전체 삭제 구현 * refactor: 중복 검색어 처리 변경
1 parent a6104b9 commit eeac761

File tree

3 files changed

+48
-11
lines changed

3 files changed

+48
-11
lines changed

api/src/main/java/com/sponus/sponusbe/domain/organization/controller/OrganizationController.java

+17-3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.sponus.sponusbe.domain.organization.company.dto.OrganizationGetResponse;
2424
import com.sponus.sponusbe.domain.organization.dto.OrganizationCreateRequest;
2525
import com.sponus.sponusbe.domain.organization.dto.OrganizationImageUploadResponse;
26+
import com.sponus.sponusbe.domain.organization.dto.OrganizationSearchRequest;
2627
import com.sponus.sponusbe.domain.organization.dto.OrganizationSearchResponse;
2728
import com.sponus.sponusbe.domain.organization.service.OrganizationService;
2829

@@ -68,13 +69,26 @@ public ApiResponse<Void> deleteOrganization(@PathVariable Long organizationId) {
6869
@GetMapping("/search")
6970
public ApiResponse<PageResponse<OrganizationSearchResponse>> searchOrganization(
7071
@ModelAttribute @Valid PageCondition pageCondition,
71-
@RequestParam("search") String keyword,
72+
@RequestParam("keyword") String keyword,
7273
@AuthOrganization Organization organization
7374
) {
7475
return ApiResponse.onSuccess(
7576
organizationService.searchOrganizations(pageCondition, keyword, organization.getId()));
7677
}
7778

79+
@DeleteMapping("/search")
80+
public ApiResponse<Void> deleteAllSearchKeyword(@AuthOrganization Organization organization) {
81+
organizationService.deleteAllSearchKeyword(organization.getId());
82+
return ApiResponse.onSuccess(null);
83+
}
84+
85+
@PostMapping("/search/keywords")
86+
public ApiResponse<Void> createSearchHistory(@AuthOrganization Organization organization,
87+
@RequestBody @Valid OrganizationSearchRequest request) {
88+
organizationService.createSearchHistory(organization.getId(), request.keyword());
89+
return ApiResponse.onSuccess(null);
90+
}
91+
7892
@GetMapping("/search/keywords")
7993
public ApiResponse<List<String>> getSearchHistory(@AuthOrganization Organization organization) {
8094
return ApiResponse.onSuccess(organizationService.getSearchHistory(organization.getId()));
@@ -83,9 +97,9 @@ public ApiResponse<List<String>> getSearchHistory(@AuthOrganization Organization
8397
@DeleteMapping("/search/keywords")
8498
public ApiResponse<Void> deleteSearchKeyword(
8599
@AuthOrganization Organization organization,
86-
@RequestParam("keyword") String keyword
100+
@RequestBody @Valid OrganizationSearchRequest request
87101
) {
88-
organizationService.deleteSearchKeyword(organization.getId(), keyword);
102+
organizationService.deleteSearchKeyword(organization.getId(), request.keyword());
89103
return ApiResponse.onSuccess(null);
90104
}
91105
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.sponus.sponusbe.domain.organization.dto;
2+
3+
import jakarta.validation.constraints.NotBlank;
4+
5+
public record OrganizationSearchRequest(
6+
7+
@NotBlank(message = "[ERROR] 검색어 입력은 필수 입니다.")
8+
String keyword
9+
) {
10+
}

api/src/main/java/com/sponus/sponusbe/domain/organization/service/OrganizationService.java

+21-8
Original file line numberDiff line numberDiff line change
@@ -89,15 +89,12 @@ public PageResponse<OrganizationGetResponse> getOrganizations(
8989
public PageResponse<OrganizationSearchResponse> searchOrganizations(PageCondition pageCondition, String keyword,
9090
Long organizationId) {
9191

92-
SearchHistory searchHistory = findSearchHistory(organizationId);
93-
searchHistory.getKeywords().add(keyword);
94-
searchHistoryRepository.save(searchHistory);
95-
9692
Pageable pageable = PageRequest.of(pageCondition.getPage() - 1, pageCondition.getSize());
9793
List<OrganizationSearchResponse> organizations = organizationRepository.findByNameContains(
9894
keyword, pageable)
9995
.stream()
10096
.filter(organization -> organization.getProfileStatus().equals(ProfileStatus.ACTIVE))
97+
.filter(organization -> !organization.getId().equals(organizationId))
10198
.map(OrganizationSearchResponse::of)
10299
.toList();
103100

@@ -106,11 +103,21 @@ public PageResponse<OrganizationSearchResponse> searchOrganizations(PageConditio
106103
() -> organizationRepository.countByNameContains(keyword)));
107104
}
108105

106+
public void createSearchHistory(Long organizationId, String keyword) {
107+
SearchHistory searchHistory = findSearchHistory(organizationId);
108+
109+
// 기존 값이 존재할 경우 제거 후 추가
110+
if (searchHistory.getKeywords().contains(keyword)) {
111+
searchHistory.getKeywords().remove(keyword);
112+
}
113+
114+
searchHistory.getKeywords().add(keyword);
115+
searchHistoryRepository.save(searchHistory);
116+
}
117+
109118
public List<String> getSearchHistory(Long organizationId) {
110119
Set<String> searchHistory = findSearchHistory(organizationId).getKeywords();
111120

112-
log.info("{} : ", searchHistory);
113-
114121
List<String> searchHistoryList = new ArrayList<>(searchHistory);
115122
searchHistoryList.removeIf(String::isEmpty);
116123

@@ -131,11 +138,17 @@ public SearchHistory findSearchHistory(Long organizationId) {
131138
}
132139

133140
public void deleteSearchKeyword(Long organizationId, String keyword) {
134-
135141
// TODO 검색어 에러 처리
136142
SearchHistory searchHistory = searchHistoryRepository.findById(organizationId)
137143
.orElseThrow(() -> new OrganizationException(OrganizationErrorCode.ORGANIZATION_ERROR));
138-
139144
searchHistory.getKeywords().remove(keyword);
145+
searchHistoryRepository.save(searchHistory);
146+
}
147+
148+
public void deleteAllSearchKeyword(Long organizationId) {
149+
SearchHistory searchHistory = searchHistoryRepository.findById(organizationId)
150+
.orElseThrow(() -> new OrganizationException(OrganizationErrorCode.ORGANIZATION_ERROR));
151+
searchHistory.getKeywords().clear();
152+
searchHistoryRepository.save(searchHistory);
140153
}
141154
}

0 commit comments

Comments
 (0)