Skip to content

Commit 6641efd

Browse files
committed
Fix: 엘라스틱 수정
1 parent 8dcb221 commit 6641efd

17 files changed

Lines changed: 560 additions & 15 deletions

File tree

src/main/java/org/com/stocknote/domain/portfolio/note/controller/NoteController.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,17 @@ public GlobalResponse<List<NoteResponse>> getNote(@PathVariable("portfolio_no")
2626
}
2727

2828
@GetMapping("/allNote")
29-
public GlobalResponse<List<NoteResponse>> getNoteList() {
29+
public GlobalResponse<List<NoteResponse>> getNoteList(
30+
31+
) {
32+
List<Note> noteList = noteService.getNoteList();
33+
List<NoteResponse> response = noteList.stream().map(NoteResponse::from).collect(Collectors.toList());
34+
return GlobalResponse.success(response);
35+
}
36+
37+
@GetMapping("/allNote/forTest")
38+
public GlobalResponse<List<NoteResponse>> getAllNoteList(
39+
) {
3040
List<Note> noteList = noteService.getNoteList();
3141
List<NoteResponse> response = noteList.stream().map(NoteResponse::from).collect(Collectors.toList());
3242
return GlobalResponse.success(response);

src/main/java/org/com/stocknote/domain/portfolio/portfolioStock/controller/PfStockController.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
public class PfStockController {
1515
private final PfStockService pfStockService;
1616

17-
18-
1917
@PostMapping("/AddStock")
2018
public GlobalResponse<String> addPortfolioStock(@PathVariable("portfolio_no") Long portfolioNo,
2119
@RequestBody PfStockRequest pfStockRequest) {

src/main/java/org/com/stocknote/domain/post/repository/PostSearchRepositoryImpl.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,16 @@
88
import org.com.stocknote.domain.member.entity.QMember;
99
import org.com.stocknote.domain.post.dto.PostSearchConditionDto;
1010
import org.com.stocknote.domain.post.entity.Post;
11+
import org.com.stocknote.domain.post.entity.PostCategory;
1112
import org.com.stocknote.domain.post.entity.QPost;
1213
import org.springframework.data.domain.Page;
1314
import org.springframework.data.domain.PageImpl;
1415
import org.springframework.data.domain.Pageable;
1516
import org.springframework.stereotype.Repository;
1617
import org.springframework.util.StringUtils;
1718

19+
import java.util.Locale;
20+
1821
@Repository
1922
@RequiredArgsConstructor
2023
public class PostSearchRepositoryImpl implements PostSearchRepository {
@@ -28,9 +31,17 @@ public Page<Post> search(PostSearchConditionDto condition, Pageable pageable) {
2831

2932
BooleanBuilder builder = new BooleanBuilder();
3033

31-
// if (condition.getCategory() != null) {
32-
// builder.and(post.category.eq(condition.getCategory()));
33-
// }
34+
if (condition.getCategory() != null) {
35+
try {
36+
PostCategory categoryEnum = PostCategory.valueOf(condition.getCategory());
37+
builder.and(post.category.eq(categoryEnum));
38+
} catch (IllegalArgumentException e) {
39+
// 잘못된 카테고리 문자열이 들어온 경우의 처리
40+
// 1. 무시하고 지나가거나
41+
// 2. 예외를 던지거나
42+
// 3. 기본 카테고리로 설정하는 등의 처리가 가능
43+
}
44+
}
3445

3546
if (StringUtils.hasText(condition.getKeyword())) {
3647
switch (condition.getSearchType()) {

src/main/java/org/com/stocknote/domain/searchDoc/document/PostDoc.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
import jakarta.persistence.Id;
66
import lombok.*;
77
import org.com.stocknote.domain.post.entity.PostCategory;
8-
import org.springframework.data.elasticsearch.annotations.Document;
9-
import org.springframework.data.elasticsearch.annotations.Field;
10-
import org.springframework.data.elasticsearch.annotations.FieldType;
8+
import org.springframework.data.elasticsearch.annotations.*;
119

1210
import java.time.LocalDateTime;
1311
import java.util.List;
1412

1513
@Document(indexName = "stocknote_post", createIndex = true)
14+
@Setting(settingPath = "/elasticsearch/settings.json")
15+
@Mapping(mappingPath = "/elasticsearch/mappings.json")
1616
@Getter
1717
@Setter
1818
@Builder

src/main/java/org/com/stocknote/domain/stock/entity/Stock.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
public class Stock {
2121
@Id
2222
private String code;
23+
24+
@Column(name = "stock_index")
25+
private Long stockIndex; // AUTO_INCREMENT는 DB에서 관리
26+
2327
private String name;
2428
private String market;
2529

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
input {
2+
jdbc {
3+
jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/mysql-connector-j-9.2.0.jar"
4+
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
5+
jdbc_connection_string => "jdbc:mysql://43.203.126.129:3306/default_db"
6+
jdbc_user => "root"
7+
jdbc_password => "1234"
8+
schedule => "* * * * *"
9+
sql_log_level => "debug"
10+
tracking_column => "id"
11+
use_column_value => true
12+
record_last_run => true
13+
last_run_metadata_path => "/usr/share/logstash/metadata/keyword_last_run"
14+
statement => "SELECT id, member_id, keyword, post_category FROM keyword"
15+
type => "keyword"
16+
clean_run => false
17+
jdbc_validate_connection => true
18+
}
19+
}
20+
21+
filter {
22+
if [type] == "keyword" {
23+
mutate {
24+
remove_field => ["@version", "@timestamp", "jdbc_connection_string", "jdbc_user", "jdbc_password"]
25+
26+
# Convert post_category to uppercase to match enum
27+
convert => {
28+
"post_category" => "uppercase"
29+
}
30+
}
31+
}
32+
}
33+
34+
output {
35+
elasticsearch {
36+
hosts => ["elasticsearch:9200"]
37+
index => "stocknote_keyword"
38+
document_id => "%{id}"
39+
retry_on_conflict => 3
40+
}
41+
42+
stdout {
43+
codec => rubydebug {
44+
metadata => true
45+
}
46+
}
47+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
input {
2+
jdbc {
3+
jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/mysql-connector-j-9.2.0.jar"
4+
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
5+
jdbc_connection_string => "jdbc:mysql://43.203.126.129:3306/default_db"
6+
jdbc_user => "root"
7+
jdbc_password => "1234"
8+
schedule => "*/10 * * * * *"
9+
sql_log_level => "debug"
10+
tracking_column => "id"
11+
use_column_value => true
12+
record_last_run => true
13+
last_run_metadata_path => "/usr/share/logstash/metadata/member_last_run"
14+
statement => "SELECT id, email, name, profile, provider, provider_id FROM member"
15+
type => "member"
16+
clean_run => false
17+
jdbc_validate_connection => true
18+
}
19+
}
20+
21+
filter {
22+
if [type] == "member" {
23+
mutate {
24+
remove_field => ["@version", "@timestamp","jdbc_connection_string", "jdbc_user", "jdbc_password"]
25+
}
26+
}
27+
}
28+
29+
output {
30+
elasticsearch {
31+
hosts => ["elasticsearch:9200"]
32+
index => "stocknote_member"
33+
document_id => "%{id}"
34+
retry_on_conflict => 3
35+
}
36+
37+
stdout {
38+
codec => rubydebug { metadata => true }
39+
}
40+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
input {
2+
jdbc {
3+
jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/mysql-connector-j-9.2.0.jar"
4+
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
5+
jdbc_connection_string => "jdbc:mysql://43.203.126.129:3306/default_db"
6+
jdbc_user => "root"
7+
jdbc_password => "1234"
8+
schedule => "*/10 * * * * *"
9+
sql_log_level => "debug"
10+
tracking_column => "id"
11+
use_column_value => true
12+
record_last_run => true
13+
last_run_metadata_path => "/usr/share/logstash/metadata/pfstock_last_run"
14+
statement => "
15+
SELECT
16+
pfs.id,
17+
pfs.pfstock_count,
18+
pfs.pfstock_price,
19+
pfs.pfstock_total_price,
20+
pfs.current_price,
21+
pfs.idx_bztp_scls_cd_name,
22+
p.member_id,
23+
JSON_OBJECT(
24+
'code', s.code,
25+
'name', s.name,
26+
'market', s.market
27+
) as stock_doc
28+
FROM pf_stock pfs
29+
JOIN portfolio p ON pfs.portfolio_id = p.id
30+
JOIN stock s ON pfs.stock_code = s.code"
31+
type => "pfstock"
32+
clean_run => false
33+
jdbc_validate_connection => true
34+
}
35+
}
36+
37+
filter {
38+
if [type] == "pfstock" {
39+
mutate {
40+
remove_field => ["@version", "@timestamp", "jdbc_connection_string", "jdbc_user", "jdbc_password"]
41+
42+
convert => {
43+
"pfstock_count" => "integer"
44+
"pfstock_price" => "integer"
45+
"pfstock_total_price" => "integer"
46+
"current_price" => "integer"
47+
}
48+
}
49+
50+
json {
51+
source => "stockDoc"
52+
target => "stockDoc"
53+
}
54+
}
55+
}
56+
57+
output {
58+
elasticsearch {
59+
hosts => ["elasticsearch:9200"]
60+
index => "stocknote_pfstock"
61+
document_id => "%{id}"
62+
retry_on_conflict => 3
63+
}
64+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
input {
2+
jdbc {
3+
jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/mysql-connector-j-9.2.0.jar"
4+
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
5+
jdbc_connection_string => "jdbc:mysql://43.203.126.129:3306/default_db"
6+
jdbc_user => "root"
7+
jdbc_password => "1234"
8+
schedule => "*/10 * * * * *"
9+
sql_log_level => "debug"
10+
tracking_column => "member_id"
11+
use_column_value => true
12+
record_last_run => true
13+
last_run_metadata_path => "/usr/share/logstash/metadata/portfolio_last_run"
14+
statement => "
15+
SELECT
16+
p.member_id,
17+
SUM(p.total_asset) as total_asset,
18+
SUM(p.cash) as total_cash,
19+
SUM(p.total_profit) as total_profit,
20+
SUM(p.total_stock) as total_stock
21+
FROM portfolio p
22+
GROUP BY p.member_id
23+
"
24+
type => "portfolio"
25+
clean_run => false
26+
jdbc_validate_connection => true
27+
}
28+
}
29+
30+
filter {
31+
if [type] == "portfolio" {
32+
mutate {
33+
remove_field => ["@version", "@timestamp","jdbc_connection_string", "jdbc_user", "jdbc_password"]
34+
35+
convert => {
36+
"total_asset" => "integer"
37+
"total_cash" => "integer"
38+
"total_profit" => "integer"
39+
"total_stock" => "integer"
40+
}
41+
}
42+
}
43+
}
44+
45+
output {
46+
elasticsearch {
47+
hosts => ["elasticsearch:9200"]
48+
index => "stocknote_portfolio"
49+
document_id => "%{member_id}"
50+
retry_on_conflict => 3
51+
}
52+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
input {
2+
jdbc {
3+
jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/mysql-connector-j-9.2.0.jar"
4+
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
5+
jdbc_connection_string => "jdbc:mysql://43.203.126.129:3306/default_db"
6+
jdbc_user => "root"
7+
jdbc_password => "1234"
8+
schedule => "*/10 * * * * *"
9+
sql_log_level => "debug"
10+
tracking_column => "id"
11+
use_column_value => true
12+
record_last_run => true
13+
last_run_metadata_path => "/usr/share/logstash/metadata/post_last_run"
14+
statement => "
15+
Select
16+
p.id,
17+
p.created_at,
18+
p.modified_at,
19+
p.body,
20+
p.category,
21+
p.title,
22+
Json_object(
23+
'id', m.id,
24+
'email', m.email,
25+
'name', m.name,
26+
'provider', m.provider,
27+
'provider_id', m.provider_id,
28+
'profile', m.profile
29+
) as member_doc,
30+
(SELECT JSON_ARRAYAGG(h.name)
31+
FROM hashtags h
32+
WHERE h.post_id = p.id) as hashtags,
33+
(SELECT COUNT(*) FROM comment WHERE post_id = p.id) as comment_count,
34+
(SELECT COUNT(*) FROM likes WHERE post_id = p.id) as like_count
35+
From posts p
36+
JOIN member m ON p.user_id = m.id"
37+
type => "post"
38+
clean_run => false
39+
jdbc_validate_connection => true
40+
}
41+
}
42+
43+
filter {
44+
if [type] == "post" {
45+
mutate {
46+
remove_field => ["@version", "@timestamp","jdbc_connection_string", "jdbc_user", "jdbc_password"]
47+
}
48+
}
49+
}
50+
51+
output {
52+
elasticsearch {
53+
hosts => ["elasticsearch:9200"]
54+
index => "stocknote_post"
55+
document_id => "%{id}"
56+
retry_on_conflict => 3
57+
}
58+
59+
stdout {
60+
codec => rubydebug { metadata => true }
61+
}
62+
}

0 commit comments

Comments
 (0)