Skip to content

Commit 8d5250d

Browse files
authored
Merge pull request #79 from BackEndSchoolPlus3th/SMS-89-feature-keyword
fix: ES keyword error
2 parents 5d0cf4f + 2a7d36a commit 8d5250d

2 files changed

Lines changed: 39 additions & 3 deletions

File tree

src/main/java/org/com/stocknote/domain/keyword/controller/KeywordController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public ResponseEntity<KeywordResponse> updateKeywords(
4242
) {
4343
Member member = principalDetails.user();
4444
KeywordResponse response = keywordService.updateKeywords(member, request);
45-
keywordDocService.save(member, request);
45+
keywordDocService.updateKeywords(member, request);
4646
return ResponseEntity.ok(response);
4747
}
4848
}

src/main/java/org/com/stocknote/domain/searchDoc/service/KeywordDocService.java

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
package org.com.stocknote.domain.searchDoc.service;
22

3+
import co.elastic.clients.elasticsearch._types.ElasticsearchException;
4+
import co.elastic.clients.elasticsearch.core.DeleteByQueryRequest;
5+
import jakarta.transaction.Transactional;
36
import lombok.RequiredArgsConstructor;
47
import lombok.extern.slf4j.Slf4j;
58
import org.com.stocknote.domain.keyword.dto.KeywordRequest;
69
import org.com.stocknote.domain.searchDoc.document.KeywordDoc;
10+
import org.com.stocknote.global.error.ErrorCode;
11+
import org.com.stocknote.global.exception.CustomException;
12+
import org.springframework.data.elasticsearch.client.elc.NativeQuery;
713
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
14+
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
15+
import org.springframework.data.elasticsearch.core.query.Criteria;
16+
import org.springframework.data.elasticsearch.core.query.Query;
817
import org.springframework.stereotype.Service;
918
import org.com.stocknote.domain.member.entity.Member;
1019

@@ -17,7 +26,32 @@
1726
public class KeywordDocService {
1827
private final ElasticsearchOperations elasticsearchOperations;
1928

20-
public void save(Member member, KeywordRequest request) {
29+
@Transactional
30+
public void updateKeywords(Member member, KeywordRequest request) {
31+
deleteAllKeywordsByMemberId(member.getId());
32+
saveNewKeywords(member, request);
33+
}
34+
35+
private void deleteAllKeywordsByMemberId(Long memberId) {
36+
try {
37+
Query deleteQuery = NativeQuery.builder()
38+
.withQuery(q -> q
39+
.term(t -> t
40+
.field("member_id")
41+
.value(memberId)
42+
)
43+
)
44+
.build();
45+
46+
elasticsearchOperations.delete(deleteQuery, KeywordDoc.class, IndexCoordinates.of("stocknote_keyword"));
47+
elasticsearchOperations.indexOps(KeywordDoc.class).refresh();
48+
} catch (Exception e) {
49+
log.error("Failed to delete keywords for memberId: {}", memberId, e);
50+
throw new CustomException(ErrorCode.ENTITY_NOT_FOUND);
51+
}
52+
}
53+
54+
private void saveNewKeywords(Member member, KeywordRequest request) {
2155
List<KeywordDoc> keywordDocs = request.getKeywords().stream()
2256
.map(keywordDto -> KeywordDoc.builder()
2357
.memberId(member.getId())
@@ -28,8 +62,10 @@ public void save(Member member, KeywordRequest request) {
2862

2963
try {
3064
elasticsearchOperations.save(keywordDocs);
65+
elasticsearchOperations.indexOps(KeywordDoc.class).refresh();
3166
} catch (Exception e) {
32-
log.error("Failed to save keywords to Elasticsearch", e);
67+
log.error("Failed to save new keywords", e);
68+
throw new RuntimeException("Failed to save new keywords", e);
3369
}
3470
}
3571
}

0 commit comments

Comments
 (0)