From 151851321a4a9296469c634a33f7d5fe257d56f3 Mon Sep 17 00:00:00 2001 From: Pyohwan Date: Mon, 26 Sep 2016 00:17:56 +0900 Subject: [PATCH] =?UTF-8?q?=EC=82=AC=EC=A7=84=EC=B2=A9=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20=EC=B6=94=EA=B0=80=20=EC=8B=9C,=20=EA=B2=8C?= =?UTF-8?q?=EC=8B=9C=EB=AC=BC=20=EA=B2=80=EC=83=89=20=EC=98=81=ED=96=A5=20?= =?UTF-8?q?=EB=AF=B8=EC=B9=98=EB=8A=94=20=ED=98=84=EC=83=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/BoardRestController.java | 2 +- .../search/SearchRestController.java | 2 +- .../model/elasticsearch/BoardFreeOnES.java | 28 ++++- .../core/model/elasticsearch/CommentOnES.java | 23 +++- .../core/model/elasticsearch/GalleryOnES.java | 39 ++----- .../jakduk/core/service/BoardFreeService.java | 82 +++----------- .../jakduk/core/service/SearchService.java | 106 ++++++++++-------- .../properties/core-local.properties | 1 + .../properties/core-production.properties | 1 + .../properties/core-staging.properties | 1 + 10 files changed, 138 insertions(+), 147 deletions(-) diff --git a/jakduk-api/src/main/java/com/jakduk/api/restcontroller/board/BoardRestController.java b/jakduk-api/src/main/java/com/jakduk/api/restcontroller/board/BoardRestController.java index 80086404..c3d04837 100644 --- a/jakduk-api/src/main/java/com/jakduk/api/restcontroller/board/BoardRestController.java +++ b/jakduk-api/src/main/java/com/jakduk/api/restcontroller/board/BoardRestController.java @@ -50,7 +50,7 @@ */ @Slf4j -@Api(tags = "게시판", description = "게시판 관련") +@Api(tags = "BoardFree", description = "자유게시판 API") @RestController @RequestMapping("/api/board") public class BoardRestController { diff --git a/jakduk-api/src/main/java/com/jakduk/api/restcontroller/search/SearchRestController.java b/jakduk-api/src/main/java/com/jakduk/api/restcontroller/search/SearchRestController.java index bac616fb..dd02f38f 100644 --- a/jakduk-api/src/main/java/com/jakduk/api/restcontroller/search/SearchRestController.java +++ b/jakduk-api/src/main/java/com/jakduk/api/restcontroller/search/SearchRestController.java @@ -102,7 +102,7 @@ public SearchResultResponse getSearch( SearchResult result = searchService.searchDocumentGallery(q, from, tempSize); if (result.isSucceeded()) - response.setPosts(objectMapper.readValue(result.getJsonString(), Map.class)); + response.setGalleries(objectMapper.readValue(result.getJsonString(), Map.class)); } } catch (IOException e) { diff --git a/jakduk-core/src/main/java/com/jakduk/core/model/elasticsearch/BoardFreeOnES.java b/jakduk-core/src/main/java/com/jakduk/core/model/elasticsearch/BoardFreeOnES.java index f4d323aa..e348002d 100644 --- a/jakduk-core/src/main/java/com/jakduk/core/model/elasticsearch/BoardFreeOnES.java +++ b/jakduk-core/src/main/java/com/jakduk/core/model/elasticsearch/BoardFreeOnES.java @@ -1,8 +1,15 @@ package com.jakduk.core.model.elasticsearch; +import com.jakduk.core.common.CommonConst; +import com.jakduk.core.model.db.BoardFree; import com.jakduk.core.model.embedded.CommonWriter; import io.searchbox.annotations.JestId; import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.StringUtils; + +import java.util.Optional; /** * @author Jang,Pyohwan @@ -11,7 +18,8 @@ * @desc : */ -@Data +@Getter +@Setter public class BoardFreeOnES { @JestId @@ -26,4 +34,22 @@ public class BoardFreeOnES { private int seq; private String categoryName; + + public BoardFreeOnES(BoardFree boardFree) { + + String subjectEL = Optional.ofNullable(boardFree.getSubject()).orElse(""); + subjectEL = StringUtils.replacePattern(subjectEL, CommonConst.REGEX_FIND_HTML_TAG, ""); + subjectEL = StringUtils.replacePattern(subjectEL, CommonConst.REGEX_FIND_HTML_WHITESPACE, ""); + + String contentEL = Optional.ofNullable(boardFree.getContent()).orElse(""); + contentEL = StringUtils.replacePattern(contentEL, CommonConst.REGEX_FIND_HTML_TAG, ""); + contentEL = StringUtils.replacePattern(contentEL, CommonConst.REGEX_FIND_HTML_WHITESPACE, ""); + + this.id = boardFree.getId(); + this.writer = boardFree.getWriter(); + this.subject = subjectEL; + this.content = contentEL; + this.seq = boardFree.getSeq(); + this.categoryName = boardFree.getCategory().name(); + } } diff --git a/jakduk-core/src/main/java/com/jakduk/core/model/elasticsearch/CommentOnES.java b/jakduk-core/src/main/java/com/jakduk/core/model/elasticsearch/CommentOnES.java index 69fd216e..eda069c6 100644 --- a/jakduk-core/src/main/java/com/jakduk/core/model/elasticsearch/CommentOnES.java +++ b/jakduk-core/src/main/java/com/jakduk/core/model/elasticsearch/CommentOnES.java @@ -1,9 +1,15 @@ package com.jakduk.core.model.elasticsearch; +import com.jakduk.core.common.CommonConst; +import com.jakduk.core.model.db.BoardFreeComment; import com.jakduk.core.model.embedded.BoardItem; import com.jakduk.core.model.embedded.CommonWriter; import io.searchbox.annotations.JestId; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.StringUtils; + +import java.util.Optional; /** * @author Jang,Pyohwan @@ -12,7 +18,8 @@ * @desc : */ -@Data +@Getter +@Setter public class CommentOnES { @JestId @@ -23,4 +30,16 @@ public class CommentOnES { private CommonWriter writer; private String content; + + public CommentOnES(BoardFreeComment boardFreeComment) { + + String contentES = Optional.ofNullable(boardFreeComment.getContent()).orElse(""); + contentES = StringUtils.replacePattern(contentES, CommonConst.REGEX_FIND_HTML_TAG, ""); + contentES = StringUtils.replacePattern(contentES, CommonConst.REGEX_FIND_HTML_WHITESPACE, ""); + + this.id = boardFreeComment.getId(); + this.boardItem = boardFreeComment.getBoardItem(); + this.writer = boardFreeComment.getWriter(); + this.content = contentES; + } } diff --git a/jakduk-core/src/main/java/com/jakduk/core/model/elasticsearch/GalleryOnES.java b/jakduk-core/src/main/java/com/jakduk/core/model/elasticsearch/GalleryOnES.java index 7c670c5a..a8d0c407 100644 --- a/jakduk-core/src/main/java/com/jakduk/core/model/elasticsearch/GalleryOnES.java +++ b/jakduk-core/src/main/java/com/jakduk/core/model/elasticsearch/GalleryOnES.java @@ -1,7 +1,12 @@ package com.jakduk.core.model.elasticsearch; +import com.jakduk.core.model.db.Gallery; import com.jakduk.core.model.embedded.CommonWriter; import io.searchbox.annotations.JestId; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; /** * @author Jang,Pyohwan @@ -9,6 +14,8 @@ * @date : 2015. 8. 27. * @desc : */ + +@Getter public class GalleryOnES { @JestId @@ -18,33 +25,9 @@ public class GalleryOnES { private CommonWriter writer; - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; + public GalleryOnES(Gallery gallery) { + this.id = gallery.getId(); + this.name = gallery.getName(); + this.writer = gallery.getWriter(); } - - public CommonWriter getWriter() { - return writer; - } - - public void setWriter(CommonWriter writer) { - this.writer = writer; - } - - @Override - public String toString() { - return "GalleryOnES [id=" + id + ", name=" + name + ", writer=" + writer + "]"; - } - } diff --git a/jakduk-core/src/main/java/com/jakduk/core/service/BoardFreeService.java b/jakduk-core/src/main/java/com/jakduk/core/service/BoardFreeService.java index 788dc832..023d65b0 100644 --- a/jakduk-core/src/main/java/com/jakduk/core/service/BoardFreeService.java +++ b/jakduk-core/src/main/java/com/jakduk/core/service/BoardFreeService.java @@ -10,9 +10,6 @@ import com.jakduk.core.model.db.BoardFree; import com.jakduk.core.model.db.BoardFreeComment; import com.jakduk.core.model.db.Gallery; -import com.jakduk.core.model.elasticsearch.BoardFreeOnES; -import com.jakduk.core.model.elasticsearch.CommentOnES; -import com.jakduk.core.model.elasticsearch.GalleryOnES; import com.jakduk.core.model.embedded.*; import com.jakduk.core.model.etc.BoardFreeOnBest; import com.jakduk.core.model.etc.GalleryOnBoard; @@ -24,7 +21,6 @@ import com.jakduk.core.repository.BoardFreeRepository; import com.jakduk.core.repository.GalleryRepository; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.bson.types.ObjectId; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.i18n.LocaleContextHolder; @@ -33,6 +29,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; import java.time.Instant; import java.time.LocalDate; @@ -137,15 +134,18 @@ public Integer insertFreePost(String subject, String content, CommonConst.BOARD_ GalleryStatus status = updateGallery.getStatus(); List posts = updateGallery.getPosts(); - if (Objects.isNull(posts)) { + if (Objects.isNull(posts)) posts = new ArrayList<>(); - } // 연관된 글이 겹침인지 검사하고, 연관글로 등록한다. long itemCount = 0; - if (! posts.isEmpty()) - itemCount = posts.stream().filter(item -> item.getId().equals(boardItem.getId())).count(); + if (! posts.isEmpty()) { + itemCount = posts.stream() + .filter(item -> item.getId().equals(boardItem.getId())) + .count(); + } + if (itemCount == 0) { posts.add(boardItem); @@ -163,33 +163,11 @@ public Integer insertFreePost(String subject, String content, CommonConst.BOARD_ updateGallery.setStatus(status); galleryRepository.save(updateGallery); - // 엘라스틱 서치 gallery 도큐먼트 생성을 위한 객체. - GalleryOnES galleryOnES = new GalleryOnES(); - galleryOnES.setId(updateGallery.getId()); - galleryOnES.setWriter(updateGallery.getWriter()); - galleryOnES.setName(updateGallery.getName()); - - searchService.createDocumentGallery(galleryOnES); + searchService.createDocumentGallery(updateGallery); } } - // 엘라스틱 서치 도큐먼트 생성을 위한 객체. - - BoardFreeOnES boardFreeOnEs = new BoardFreeOnES(); - boardFreeOnEs.setId(boardFree.getId()); - boardFreeOnEs.setSeq(boardFree.getSeq()); - boardFreeOnEs.setWriter(boardFree.getWriter()); - boardFreeOnEs.setCategoryName(boardFree.getCategory().toString()); - - String subjectEL = Optional.ofNullable(boardFree.getSubject()).orElse(""); - subjectEL = StringUtils.replacePattern(subjectEL, CommonConst.REGEX_FIND_HTML_TAG, ""); - boardFree.setSubject(StringUtils.replacePattern(subjectEL, CommonConst.REGEX_FIND_HTML_WHITESPACE, "")); - - String contentEL = Optional.ofNullable(boardFree.getContent()).orElse(""); - contentEL = StringUtils.replacePattern(contentEL, CommonConst.REGEX_FIND_HTML_TAG, ""); - boardFree.setContent(StringUtils.replacePattern(contentEL, CommonConst.REGEX_FIND_HTML_WHITESPACE, "")); - - searchService.createDocumentBoard(boardFreeOnEs); + searchService.createDocumentBoard(boardFree); /* @@ -305,33 +283,12 @@ public Integer updateFreePost(Integer seq, String subject, String content, Commo updateGallery.setStatus(status); galleryRepository.save(updateGallery); - // 엘라스틱 서치 gallery 도큐먼트 생성을 위한 객체. - GalleryOnES galleryOnES = new GalleryOnES(); - galleryOnES.setId(galleryOnBoard.getId()); - galleryOnES.setWriter(updateGallery.getWriter()); - galleryOnES.setName(galleryOnBoard.getName()); - - searchService.createDocumentGallery(galleryOnES); + searchService.createDocumentGallery(updateGallery); } } - // 엘라스틱 서치 도큐먼트 생성을 위한 객체. - BoardFreeOnES boardFreeOnEs = new BoardFreeOnES(); - boardFreeOnEs.setId(boardFree.getId()); - boardFreeOnEs.setSeq(boardFree.getSeq()); - boardFreeOnEs.setWriter(boardFree.getWriter()); - boardFreeOnEs.setCategoryName(boardFree.getCategory().toString()); - - String subjectEL = Optional.ofNullable(boardFree.getSubject()).orElse(""); - subjectEL = StringUtils.replacePattern(subjectEL, CommonConst.REGEX_FIND_HTML_TAG, ""); - boardFree.setSubject(StringUtils.replacePattern(subjectEL, CommonConst.REGEX_FIND_HTML_WHITESPACE, "")); - - String contentEL = Optional.ofNullable(boardFree.getContent()).orElse(""); - contentEL = StringUtils.replacePattern(contentEL, CommonConst.REGEX_FIND_HTML_TAG, ""); - boardFree.setContent(StringUtils.replacePattern(contentEL, CommonConst.REGEX_FIND_HTML_WHITESPACE, "")); - - searchService.createDocumentBoard(boardFreeOnEs); + searchService.createDocumentBoard(boardFree); if (log.isInfoEnabled()) { log.info("post was edited. post seq=" + boardFree.getSeq() + ", subject=" + boardFree.getSubject()); @@ -535,28 +492,17 @@ public BoardFreeComment addFreeComment(Integer seq, String contents, CommonConst boardFreeCommentRepository.save(boardFreeComment); - // 엘라스틱 서치 도큐먼트 생성을 위한 객체. - CommentOnES commentOnES = new CommentOnES(); - commentOnES.setId(boardFreeComment.getId()); - commentOnES.setWriter(boardFreeComment.getWriter()); - commentOnES.setBoardItem(boardFreeComment.getBoardItem()); - - String contentES = Optional.ofNullable(contents).orElse(""); - contentES = StringUtils.replacePattern(contentES, CommonConst.REGEX_FIND_HTML_TAG, ""); - commentOnES.setContent(StringUtils.replacePattern(contentES, CommonConst.REGEX_FIND_HTML_WHITESPACE, "")); - - searchService.createDocumentComment(commentOnES); + searchService.createDocumentComment(boardFreeComment); return boardFreeComment; } // 게시판 댓글 목록 public List getFreeComments(Integer seq, String commentId) { - BoardFreeOfMinimum boardFreeOnComment = boardFreeRepository.findBoardFreeOfMinimumBySeq(seq); List comments; - if (commentId != null && !commentId.isEmpty()) { + if (! ObjectUtils.isEmpty(commentId)) { comments = boardDAO.getBoardFreeComment(seq, new ObjectId(commentId)); } else { comments = boardDAO.getBoardFreeComment(seq, null); diff --git a/jakduk-core/src/main/java/com/jakduk/core/service/SearchService.java b/jakduk-core/src/main/java/com/jakduk/core/service/SearchService.java index d10bf9b2..bf48ee75 100644 --- a/jakduk-core/src/main/java/com/jakduk/core/service/SearchService.java +++ b/jakduk-core/src/main/java/com/jakduk/core/service/SearchService.java @@ -4,10 +4,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.jakduk.core.common.CommonConst; -import com.jakduk.core.dao.BoardDAO; import com.jakduk.core.dao.JakdukDAO; import com.jakduk.core.exception.ServiceError; import com.jakduk.core.exception.ServiceException; +import com.jakduk.core.model.db.BoardFree; +import com.jakduk.core.model.db.BoardFreeComment; +import com.jakduk.core.model.db.Gallery; import com.jakduk.core.model.elasticsearch.BoardFreeOnES; import com.jakduk.core.model.elasticsearch.CommentOnES; import com.jakduk.core.model.elasticsearch.GalleryOnES; @@ -18,16 +20,14 @@ import io.searchbox.indices.CreateIndex; import io.searchbox.indices.mapping.PutMapping; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.bson.types.ObjectId; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse; import org.elasticsearch.client.Client; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.index.query.QueryBuilder; -import org.elasticsearch.index.query.QueryBuilders; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.io.IOException; @@ -47,18 +47,15 @@ public class SearchService { @Value("${elasticsearch.host.name}") private String elasticsearchHostName; - + + @Value("${elasticsearch.enable}") + private boolean elasticsearchEnabled; + @Autowired private JestClient jestClient; @Autowired private Client client; - - @Autowired - private CommonService commonService; - - @Autowired - private BoardDAO boardDAO; @Autowired private JakdukDAO jakdukDAO; @@ -126,18 +123,24 @@ public SearchResult searchDocumentBoard(String q, int from, int size) { throw new ServiceException(ServiceError.IO_EXCEPTION); } } - - public void createDocumentBoard(BoardFreeOnES boardFreeOnEs) { - Index index = new Index.Builder(boardFreeOnEs).index(elasticsearchIndexName).type(CommonConst.ELASTICSEARCH_TYPE_BOARD).build(); - - try { - JestResult jestResult = jestClient.execute(index); - if (!jestResult.isSucceeded()) { - log.error(jestResult.getErrorMessage()); - } - } catch (IOException e) { - log.warn(e.getMessage(), e); - } + + @Async + public void createDocumentBoard(BoardFree boardFree) { + + if (elasticsearchEnabled) { + BoardFreeOnES boardFreeOnES = new BoardFreeOnES(boardFree); + + Index index = new Index.Builder(boardFreeOnES) + .index(elasticsearchIndexName) + .type(CommonConst.ELASTICSEARCH_TYPE_BOARD) + .build(); + + try { + jestClient.execute(index); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } } public void deleteDocumentBoard(String id) { @@ -195,17 +198,22 @@ public SearchResult searchDocumentComment(String q, int from, int size) { return null; } - public void createDocumentComment(CommentOnES commentOnES) { - Index index = new Index.Builder(commentOnES).index(elasticsearchIndexName).type(CommonConst.ELASTICSEARCH_TYPE_COMMENT).build(); - - try { - JestResult jestResult = jestClient.execute(index); - if (!jestResult.isSucceeded()) { - log.error(jestResult.getErrorMessage()); - } - } catch (IOException e) { - log.warn(e.getMessage(), e); - } + @Async + public void createDocumentComment(BoardFreeComment boardFreeComment) { + if (elasticsearchEnabled) { + CommentOnES commentOnES = new CommentOnES(boardFreeComment); + + Index index = new Index.Builder(commentOnES) + .index(elasticsearchIndexName) + .type(CommonConst.ELASTICSEARCH_TYPE_COMMENT) + .build(); + + try { + jestClient.execute(index); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } } public void createDocumentJakduComment(JakduCommentOnES jakduCommentOnES) { @@ -286,18 +294,24 @@ public SearchResult searchDocumentGallery(String q, int from, int size) { } return null; } - - public void createDocumentGallery(GalleryOnES galleryOnES) { - Index index = new Index.Builder(galleryOnES).index(elasticsearchIndexName).type(CommonConst.ELASTICSEARCH_TYPE_GALLERY).build(); - - try { - JestResult jestResult = jestClient.execute(index); - if (!jestResult.isSucceeded()) { - log.error(jestResult.getErrorMessage()); - } - } catch (IOException e) { - log.warn(e.getMessage(), e); - } + + @Async + public void createDocumentGallery(Gallery gallery) { + + if (elasticsearchEnabled) { + GalleryOnES galleryOnES = new GalleryOnES(gallery); + + Index index = new Index.Builder(galleryOnES) + .index(elasticsearchIndexName) + .type(CommonConst.ELASTICSEARCH_TYPE_GALLERY) + .build(); + + try { + jestClient.execute(index); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } } public void deleteDocumentGallery(String id) { diff --git a/jakduk-core/src/main/resources/properties/core-local.properties b/jakduk-core/src/main/resources/properties/core-local.properties index 0277d83e..28feceac 100644 --- a/jakduk-core/src/main/resources/properties/core-local.properties +++ b/jakduk-core/src/main/resources/properties/core-local.properties @@ -3,6 +3,7 @@ mongo.db.name=jakduk_test mongo.host.name=http://172.30.1.40:27017,http://172.30.1.43:27017 # elasticsearch +elasticsearch.enable = false elasticsearch.cluster.name = jakduk-elasticsearch elasticsearch.host.name=http://172.30.1.9:9200,http://172.30.1.37:9200 elasticsearch.index.name=jakduk_test diff --git a/jakduk-core/src/main/resources/properties/core-production.properties b/jakduk-core/src/main/resources/properties/core-production.properties index 47dcdbde..37fa0893 100644 --- a/jakduk-core/src/main/resources/properties/core-production.properties +++ b/jakduk-core/src/main/resources/properties/core-production.properties @@ -3,6 +3,7 @@ mongo.db.name=jakduk_sample mongo.host.name=http://172.30.1.40:27017,http://172.30.1.43:27017 #elasticsearch +elasticsearch.enable = true elasticsearch.cluster.name = jakduk-elasticsearch elasticsearch.host.name=http://172.30.1.9:9200,http://172.30.1.37:9200 elasticsearch.index.name=jakduk diff --git a/jakduk-core/src/main/resources/properties/core-staging.properties b/jakduk-core/src/main/resources/properties/core-staging.properties index 19542550..7e61a188 100644 --- a/jakduk-core/src/main/resources/properties/core-staging.properties +++ b/jakduk-core/src/main/resources/properties/core-staging.properties @@ -3,6 +3,7 @@ mongo.db.name=jakduk_test mongo.host.name=http://172.30.1.40:27017,http://172.30.1.43:27017 # elasticsearch +elasticsearch.enable = true elasticsearch.cluster.name = jakduk-elasticsearch elasticsearch.host.name=http://172.30.1.9:9200,http://172.30.1.37:9200 elasticsearch.index.name=jakduk_test