From 76cd25e11f073c5954380fb9ea1a2a1fa3eb6a37 Mon Sep 17 00:00:00 2001 From: jinia91 Date: Sun, 27 Mar 2022 00:30:18 +0900 Subject: [PATCH] =?UTF-8?q?=ED=97=A5=EC=82=AC=EA=B3=A0=EB=82=A0=20?= =?UTF-8?q?=EC=95=84=ED=82=A4=ED=85=8D=EC=B3=90=EB=A1=9C=20=EB=A6=AC?= =?UTF-8?q?=EC=95=84=ED=82=A4=ED=85=8D=EC=B3=90=EB=A7=81=20=EB=A7=88?= =?UTF-8?q?=EB=AC=B4=EB=A6=AC,=20DDD=EB=A5=BC=20=EC=A0=81=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EB=91=90=EA=BA=BC=EC=9A=B4=20=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8,=20=EC=96=87=EC=9D=80=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=EB=A1=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{web => }/ArticleController.java | 23 +++--- .../incomming/{web => }/ArticleForm.java | 2 +- .../incomming/{web => }/MainController.java | 4 +- .../incomming/{web => }/PagingBoxHandler.java | 2 +- .../{web => }/TempArticleController.java | 4 +- .../article/application/ArticleQueries.java | 14 ++-- .../article/application/ArticleService.java | 18 ++--- .../blog/article/application/TagsQueries.java | 2 +- .../port/incomming/ArticleQueriesUseCase.java | 8 +- .../port/incomming/ArticleUseCase.java | 4 +- .../port/incomming/TagsQueriesUseCase.java | 2 +- .../request/ArticleCreateRequest.java | 4 +- .../request/ArticleEditRequest.java | 4 +- .../response/ArticleResponseByCategory.java | 2 +- .../response/ArticleResponseForCardBox.java | 2 +- .../response/ArticleResponseForDetail.java | 2 +- .../response/ArticleResponseForEdit.java | 2 +- .../response/TagsResponse.java | 2 +- .../response/TempArticleResponse.java | 2 +- .../blog/base/config/SecurityConfig.java | 2 +- .../adapter/imcomming/CategoryController.java | 13 ++-- .../CategoryRepositoryAdapter.java | 2 +- .../MybatisCategoryRepository.java | 2 +- .../appliacation/CategoryService.java | 4 +- .../port/incomming/CategoryUseCase.java | 4 +- .../response/CategorySimpleDto.java | 2 +- .../response/CategoryViewForLayout.java | 2 +- .../port/outgoing/CategoryRepositoryPort.java | 2 +- .../adapter/incomming/CommentController.java | 19 +++-- .../comment/application/CommentService.java | 16 ++-- .../port/incomming/CommentUseCase.java | 9 ++- .../incomming/{ => response}/CommentDto.java | 2 +- .../{ => response}/CommentDtoForLayout.java | 2 +- .../incomming/UploadImgController.java | 6 +- .../AwsS3ImgUploadStrategyAdapter.java | 2 +- .../ImgUploadService.java | 9 +-- .../port/incomming/ImgUploadUseCase.java | 4 +- .../port/outgoing/ImgUploadStrategyPort.java | 2 +- .../adapter/incomming/MemberController.java | 26 +++++++ .../repository/JpaMemberRepository.java} | 5 +- .../repository/MemberRepositoryAdapter.java | 32 ++++++++ .../application/BuildAdminAccountHelper.java | 38 +++++++++ .../Oauth2MemberService.java | 76 ++++-------------- .../UserInfoFactory.java | 7 +- .../port/incomming/MemberUseCase.java | 7 ++ .../port/incomming/response}/MemberVo.java | 3 +- .../incomming/response}/PrincipalDetails.java | 7 +- .../response}/userinfo/GoogleUserInfo.java | 2 +- .../response}/userinfo/NaverUserInfo.java | 3 +- .../response}/userinfo/Oauth2UserInfo.java | 2 +- .../response}/userinfo/ProviderType.java | 2 +- .../port/outgoing/MemberRepositoryPort.java | 12 +++ .../member/controller/MemberController.java | 44 ----------- .../seo/adapter/incomming/RssController.java | 7 +- .../adapter/incomming/SiteMapController.java | 7 +- .../blog/seo/application/RssService.java | 72 +++-------------- .../blog/seo/application/SiteMapService.java | 78 +++---------------- .../application/XMLOutPutterBuildHelper.java | 13 ++++ .../port/incomming/RssUseCase.java | 2 +- .../port/incomming/SiteMapUseCase.java | 2 +- .../java/myblog/blog/seo/domain/RssFeed.java | 67 ++++++++++++++++ .../java/myblog/blog/seo/domain/SiteMap.java | 64 +++++++++++++++ .../queries/LayoutRenderingQueries.java | 10 +-- 63 files changed, 425 insertions(+), 370 deletions(-) rename src/main/java/myblog/blog/article/adapter/incomming/{web => }/ArticleController.java (93%) rename src/main/java/myblog/blog/article/adapter/incomming/{web => }/ArticleForm.java (91%) rename src/main/java/myblog/blog/article/adapter/incomming/{web => }/MainController.java (92%) rename src/main/java/myblog/blog/article/adapter/incomming/{web => }/PagingBoxHandler.java (96%) rename src/main/java/myblog/blog/article/adapter/incomming/{web => }/TempArticleController.java (90%) rename src/main/java/myblog/blog/article/application/port/{ => incomming}/request/ArticleCreateRequest.java (85%) rename src/main/java/myblog/blog/article/application/port/{ => incomming}/request/ArticleEditRequest.java (85%) rename src/main/java/myblog/blog/article/application/port/{ => incomming}/response/ArticleResponseByCategory.java (75%) rename src/main/java/myblog/blog/article/application/port/{ => incomming}/response/ArticleResponseForCardBox.java (83%) rename src/main/java/myblog/blog/article/application/port/{ => incomming}/response/ArticleResponseForDetail.java (87%) rename src/main/java/myblog/blog/article/application/port/{ => incomming}/response/ArticleResponseForEdit.java (87%) rename src/main/java/myblog/blog/article/application/port/{ => incomming}/response/TagsResponse.java (78%) rename src/main/java/myblog/blog/article/application/port/{ => incomming}/response/TempArticleResponse.java (73%) rename src/main/java/myblog/blog/category/appliacation/port/{ => incomming}/response/CategorySimpleDto.java (95%) rename src/main/java/myblog/blog/category/appliacation/port/{ => incomming}/response/CategoryViewForLayout.java (97%) rename src/main/java/myblog/blog/comment/application/port/incomming/{ => response}/CommentDto.java (97%) rename src/main/java/myblog/blog/comment/application/port/incomming/{ => response}/CommentDtoForLayout.java (88%) rename src/main/java/myblog/blog/imgupload/{service => application}/ImgUploadService.java (78%) rename src/main/java/myblog/blog/imgupload/{service => application}/port/incomming/ImgUploadUseCase.java (62%) rename src/main/java/myblog/blog/imgupload/{service => application}/port/outgoing/ImgUploadStrategyPort.java (78%) create mode 100644 src/main/java/myblog/blog/member/adapter/incomming/MemberController.java rename src/main/java/myblog/blog/member/{repository/MemberRepository.java => adapter/outgoing/repository/JpaMemberRepository.java} (63%) create mode 100644 src/main/java/myblog/blog/member/adapter/outgoing/repository/MemberRepositoryAdapter.java create mode 100644 src/main/java/myblog/blog/member/application/BuildAdminAccountHelper.java rename src/main/java/myblog/blog/member/{service => application}/Oauth2MemberService.java (58%) rename src/main/java/myblog/blog/member/{auth => application}/UserInfoFactory.java (83%) create mode 100644 src/main/java/myblog/blog/member/application/port/incomming/MemberUseCase.java rename src/main/java/myblog/blog/member/{dto => application/port/incomming/response}/MemberVo.java (90%) rename src/main/java/myblog/blog/member/{auth => application/port/incomming/response}/PrincipalDetails.java (87%) rename src/main/java/myblog/blog/member/{auth => application/port/incomming/response}/userinfo/GoogleUserInfo.java (92%) rename src/main/java/myblog/blog/member/{auth => application/port/incomming/response}/userinfo/NaverUserInfo.java (91%) rename src/main/java/myblog/blog/member/{auth => application/port/incomming/response}/userinfo/Oauth2UserInfo.java (81%) rename src/main/java/myblog/blog/member/{auth => application/port/incomming/response}/userinfo/ProviderType.java (77%) create mode 100644 src/main/java/myblog/blog/member/application/port/outgoing/MemberRepositoryPort.java delete mode 100644 src/main/java/myblog/blog/member/controller/MemberController.java create mode 100644 src/main/java/myblog/blog/seo/application/XMLOutPutterBuildHelper.java rename src/main/java/myblog/blog/{article => seo}/application/port/incomming/RssUseCase.java (50%) rename src/main/java/myblog/blog/{article => seo}/application/port/incomming/SiteMapUseCase.java (52%) create mode 100644 src/main/java/myblog/blog/seo/domain/RssFeed.java create mode 100644 src/main/java/myblog/blog/seo/domain/SiteMap.java diff --git a/src/main/java/myblog/blog/article/adapter/incomming/web/ArticleController.java b/src/main/java/myblog/blog/article/adapter/incomming/ArticleController.java similarity index 93% rename from src/main/java/myblog/blog/article/adapter/incomming/web/ArticleController.java rename to src/main/java/myblog/blog/article/adapter/incomming/ArticleController.java index 7a00e9d..fc0ca0c 100644 --- a/src/main/java/myblog/blog/article/adapter/incomming/web/ArticleController.java +++ b/src/main/java/myblog/blog/article/adapter/incomming/ArticleController.java @@ -1,4 +1,4 @@ -package myblog.blog.article.adapter.incomming.web; +package myblog.blog.article.adapter.incomming; import lombok.RequiredArgsConstructor; @@ -6,17 +6,16 @@ import myblog.blog.article.application.port.incomming.ArticleUseCase; import myblog.blog.article.application.port.incomming.TempArticleUseCase; import myblog.blog.article.application.port.incomming.ArticleQueriesUseCase; import myblog.blog.article.application.port.incomming.TagsQueriesUseCase; -import myblog.blog.article.application.port.request.ArticleCreateRequest; -import myblog.blog.article.application.port.request.ArticleEditRequest; -import myblog.blog.article.application.port.response.ArticleResponseByCategory; -import myblog.blog.article.application.port.response.ArticleResponseForCardBox; -import myblog.blog.article.application.port.response.ArticleResponseForDetail; -import myblog.blog.article.application.port.response.ArticleResponseForEdit; - import myblog.blog.category.appliacation.port.incomming.CategoryUseCase; -import myblog.blog.category.appliacation.port.response.CategoryViewForLayout; -import myblog.blog.member.auth.PrincipalDetails; -import myblog.blog.member.dto.MemberVo; +import myblog.blog.article.application.port.incomming.request.ArticleCreateRequest; +import myblog.blog.article.application.port.incomming.request.ArticleEditRequest; +import myblog.blog.category.appliacation.port.incomming.response.CategoryViewForLayout; +import myblog.blog.article.application.port.incomming.response.ArticleResponseByCategory; +import myblog.blog.article.application.port.incomming.response.ArticleResponseForCardBox; +import myblog.blog.article.application.port.incomming.response.ArticleResponseForDetail; +import myblog.blog.article.application.port.incomming.response.ArticleResponseForEdit; +import myblog.blog.member.application.port.incomming.response.PrincipalDetails; + import myblog.blog.shared.queries.LayoutRenderingQueries; import org.jsoup.Jsoup; @@ -209,7 +208,7 @@ public class ArticleController { Model model) { // 1. 로그인 여부에 따라 뷰단에 회원정보 출력 여부 결정 if (principal != null) { - model.addAttribute("member", MemberVo.from(principal.getMember())); + model.addAttribute("member", principal.getMember()); } else { model.addAttribute("member", null); } diff --git a/src/main/java/myblog/blog/article/adapter/incomming/web/ArticleForm.java b/src/main/java/myblog/blog/article/adapter/incomming/ArticleForm.java similarity index 91% rename from src/main/java/myblog/blog/article/adapter/incomming/web/ArticleForm.java rename to src/main/java/myblog/blog/article/adapter/incomming/ArticleForm.java index df5fa77..35544cd 100644 --- a/src/main/java/myblog/blog/article/adapter/incomming/web/ArticleForm.java +++ b/src/main/java/myblog/blog/article/adapter/incomming/ArticleForm.java @@ -1,4 +1,4 @@ -package myblog.blog.article.adapter.incomming.web; +package myblog.blog.article.adapter.incomming; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/myblog/blog/article/adapter/incomming/web/MainController.java b/src/main/java/myblog/blog/article/adapter/incomming/MainController.java similarity index 92% rename from src/main/java/myblog/blog/article/adapter/incomming/web/MainController.java rename to src/main/java/myblog/blog/article/adapter/incomming/MainController.java index 79a2c8a..2e6bcdc 100644 --- a/src/main/java/myblog/blog/article/adapter/incomming/web/MainController.java +++ b/src/main/java/myblog/blog/article/adapter/incomming/MainController.java @@ -1,8 +1,8 @@ -package myblog.blog.article.adapter.incomming.web; +package myblog.blog.article.adapter.incomming; import lombok.RequiredArgsConstructor; -import myblog.blog.article.application.port.response.ArticleResponseForCardBox; +import myblog.blog.article.application.port.incomming.response.ArticleResponseForCardBox; import myblog.blog.article.application.port.incomming.ArticleQueriesUseCase; import myblog.blog.shared.queries.LayoutRenderingQueries; import org.jsoup.Jsoup; diff --git a/src/main/java/myblog/blog/article/adapter/incomming/web/PagingBoxHandler.java b/src/main/java/myblog/blog/article/adapter/incomming/PagingBoxHandler.java similarity index 96% rename from src/main/java/myblog/blog/article/adapter/incomming/web/PagingBoxHandler.java rename to src/main/java/myblog/blog/article/adapter/incomming/PagingBoxHandler.java index 900976e..b6944a8 100644 --- a/src/main/java/myblog/blog/article/adapter/incomming/web/PagingBoxHandler.java +++ b/src/main/java/myblog/blog/article/adapter/incomming/PagingBoxHandler.java @@ -1,4 +1,4 @@ -package myblog.blog.article.adapter.incomming.web; +package myblog.blog.article.adapter.incomming; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/myblog/blog/article/adapter/incomming/web/TempArticleController.java b/src/main/java/myblog/blog/article/adapter/incomming/TempArticleController.java similarity index 90% rename from src/main/java/myblog/blog/article/adapter/incomming/web/TempArticleController.java rename to src/main/java/myblog/blog/article/adapter/incomming/TempArticleController.java index 055a314..693e987 100644 --- a/src/main/java/myblog/blog/article/adapter/incomming/web/TempArticleController.java +++ b/src/main/java/myblog/blog/article/adapter/incomming/TempArticleController.java @@ -1,9 +1,9 @@ -package myblog.blog.article.adapter.incomming.web; +package myblog.blog.article.adapter.incomming; import lombok.RequiredArgsConstructor; import myblog.blog.article.domain.TempArticle; import myblog.blog.article.application.TempArticleService; -import myblog.blog.article.application.port.response.TempArticleResponse; +import myblog.blog.article.application.port.incomming.response.TempArticleResponse; import org.springframework.web.bind.annotation.*; import java.util.Optional; diff --git a/src/main/java/myblog/blog/article/application/ArticleQueries.java b/src/main/java/myblog/blog/article/application/ArticleQueries.java index 88932ed..15370a0 100644 --- a/src/main/java/myblog/blog/article/application/ArticleQueries.java +++ b/src/main/java/myblog/blog/article/application/ArticleQueries.java @@ -2,17 +2,17 @@ package myblog.blog.article.application; import lombok.RequiredArgsConstructor; -import myblog.blog.article.application.port.response.ArticleResponseForCardBox; +import myblog.blog.article.application.port.incomming.response.ArticleResponseForCardBox; import myblog.blog.article.application.port.incomming.ArticleQueriesUseCase; import myblog.blog.article.application.port.outgoing.ArticleRepositoryPort; import myblog.blog.article.domain.Article; +import myblog.blog.category.appliacation.port.incomming.CategoryUseCase; import myblog.blog.category.domain.Category; -import myblog.blog.article.application.port.response.ArticleResponseByCategory; -import myblog.blog.article.application.port.response.ArticleResponseForDetail; -import myblog.blog.article.application.port.response.ArticleResponseForEdit; +import myblog.blog.article.application.port.incomming.response.ArticleResponseByCategory; +import myblog.blog.article.application.port.incomming.response.ArticleResponseForDetail; +import myblog.blog.article.application.port.incomming.response.ArticleResponseForEdit; -import myblog.blog.category.appliacation.CategoryService; import org.modelmapper.ModelMapper; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; @@ -27,7 +27,7 @@ import java.util.stream.Collectors; public class ArticleQueries implements ArticleQueriesUseCase { private final ArticleRepositoryPort articleRepositoryPort; - private final CategoryService categoryService; + private final CategoryUseCase categoryUseCase; private final ModelMapper modelMapper; /* @@ -130,7 +130,7 @@ public class ArticleQueries implements ArticleQueriesUseCase { */ @Override public List getArticlesByCategoryForDetailView(String categoryName){ - Category category = categoryService.findCategory(categoryName); + Category category = categoryUseCase.findCategory(categoryName); return articleRepositoryPort.findTop6ByCategoryOrderByIdDesc(category) .stream() .map(article -> modelMapper.map(article, ArticleResponseByCategory.class)) diff --git a/src/main/java/myblog/blog/article/application/ArticleService.java b/src/main/java/myblog/blog/article/application/ArticleService.java index fa8b294..7d1fea4 100644 --- a/src/main/java/myblog/blog/article/application/ArticleService.java +++ b/src/main/java/myblog/blog/article/application/ArticleService.java @@ -2,10 +2,12 @@ package myblog.blog.article.application; import lombok.RequiredArgsConstructor; -import myblog.blog.article.application.port.request.ArticleCreateRequest; -import myblog.blog.article.application.port.request.ArticleEditRequest; +import myblog.blog.article.application.port.incomming.request.ArticleCreateRequest; +import myblog.blog.article.application.port.incomming.request.ArticleEditRequest; import myblog.blog.article.application.port.incomming.ArticleUseCase; import myblog.blog.article.application.port.incomming.TagUseCase; +import myblog.blog.category.appliacation.port.incomming.CategoryUseCase; +import myblog.blog.member.application.port.incomming.MemberUseCase; import myblog.blog.article.application.port.outgoing.ArticleBackupRepositoryPort; import myblog.blog.article.application.port.outgoing.ArticleRepositoryPort; @@ -13,8 +15,6 @@ import myblog.blog.article.domain.Article; import myblog.blog.category.domain.Category; import myblog.blog.member.doamin.Member; -import myblog.blog.category.appliacation.CategoryService; -import myblog.blog.member.service.Oauth2MemberService; import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; @@ -28,16 +28,16 @@ import java.util.List; public class ArticleService implements ArticleUseCase { private final TagUseCase tagUseCase; - private final CategoryService categoryService; - private final Oauth2MemberService memberService; + private final CategoryUseCase categoryUseCase; + private final MemberUseCase memberUseCase; private final ArticleRepositoryPort articleRepositoryPort; private final ArticleBackupRepositoryPort articleBackupRepositoryPort; @Override @CacheEvict(value = {"layoutCaching", "layoutRecentArticleCaching","seoCaching"}, allEntries = true) public Long writeArticle(ArticleCreateRequest articleCreateRequest) { - Member writer = memberService.findById(articleCreateRequest.getMemberId()); - Category category = categoryService.findCategory(articleCreateRequest.getCategory()); + Member writer = memberUseCase.findById(articleCreateRequest.getMemberId()); + Category category = categoryUseCase.findCategory(articleCreateRequest.getCategory()); Article newArticle = new Article(articleCreateRequest.getTitle(), articleCreateRequest.getContent(), articleCreateRequest.getToc(), @@ -54,7 +54,7 @@ public class ArticleService implements ArticleUseCase { public void editArticle(ArticleEditRequest articleEditRequest) { Article article = articleRepositoryPort.findById(articleEditRequest.getArticleId()) .orElseThrow(() -> new IllegalArgumentException("NotFoundArticleException")); - Category category = categoryService.findCategory(articleEditRequest.getCategoryName()); + Category category = categoryUseCase.findCategory(articleEditRequest.getCategoryName()); tagUseCase.deleteAllTagsWith(article); tagUseCase.createNewTagsAndArticleTagList(articleEditRequest.getTags(), article); article.edit(articleEditRequest.getContent(), diff --git a/src/main/java/myblog/blog/article/application/TagsQueries.java b/src/main/java/myblog/blog/article/application/TagsQueries.java index ef9a180..e0eda89 100644 --- a/src/main/java/myblog/blog/article/application/TagsQueries.java +++ b/src/main/java/myblog/blog/article/application/TagsQueries.java @@ -5,7 +5,7 @@ import myblog.blog.article.application.port.outgoing.TagRepositoryPort; import myblog.blog.article.domain.Tags; import myblog.blog.article.application.port.incomming.TagsQueriesUseCase; import myblog.blog.shared.utils.MapperUtils; -import myblog.blog.article.application.port.response.TagsResponse; +import myblog.blog.article.application.port.incomming.response.TagsResponse; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/myblog/blog/article/application/port/incomming/ArticleQueriesUseCase.java b/src/main/java/myblog/blog/article/application/port/incomming/ArticleQueriesUseCase.java index d1da141..d4d8852 100644 --- a/src/main/java/myblog/blog/article/application/port/incomming/ArticleQueriesUseCase.java +++ b/src/main/java/myblog/blog/article/application/port/incomming/ArticleQueriesUseCase.java @@ -1,9 +1,9 @@ package myblog.blog.article.application.port.incomming; -import myblog.blog.article.application.port.response.ArticleResponseForCardBox; -import myblog.blog.article.application.port.response.ArticleResponseByCategory; -import myblog.blog.article.application.port.response.ArticleResponseForDetail; -import myblog.blog.article.application.port.response.ArticleResponseForEdit; +import myblog.blog.article.application.port.incomming.response.ArticleResponseForCardBox; +import myblog.blog.article.application.port.incomming.response.ArticleResponseByCategory; +import myblog.blog.article.application.port.incomming.response.ArticleResponseForDetail; +import myblog.blog.article.application.port.incomming.response.ArticleResponseForEdit; import org.springframework.data.domain.Page; import org.springframework.data.domain.Slice; diff --git a/src/main/java/myblog/blog/article/application/port/incomming/ArticleUseCase.java b/src/main/java/myblog/blog/article/application/port/incomming/ArticleUseCase.java index 194a2a0..13a9395 100644 --- a/src/main/java/myblog/blog/article/application/port/incomming/ArticleUseCase.java +++ b/src/main/java/myblog/blog/article/application/port/incomming/ArticleUseCase.java @@ -1,7 +1,7 @@ package myblog.blog.article.application.port.incomming; -import myblog.blog.article.application.port.request.ArticleCreateRequest; -import myblog.blog.article.application.port.request.ArticleEditRequest; +import myblog.blog.article.application.port.incomming.request.ArticleCreateRequest; +import myblog.blog.article.application.port.incomming.request.ArticleEditRequest; import myblog.blog.article.domain.Article; import java.util.List; diff --git a/src/main/java/myblog/blog/article/application/port/incomming/TagsQueriesUseCase.java b/src/main/java/myblog/blog/article/application/port/incomming/TagsQueriesUseCase.java index b0fe6ff..0f2024f 100644 --- a/src/main/java/myblog/blog/article/application/port/incomming/TagsQueriesUseCase.java +++ b/src/main/java/myblog/blog/article/application/port/incomming/TagsQueriesUseCase.java @@ -1,6 +1,6 @@ package myblog.blog.article.application.port.incomming; -import myblog.blog.article.application.port.response.TagsResponse; +import myblog.blog.article.application.port.incomming.response.TagsResponse; import java.util.List; diff --git a/src/main/java/myblog/blog/article/application/port/request/ArticleCreateRequest.java b/src/main/java/myblog/blog/article/application/port/incomming/request/ArticleCreateRequest.java similarity index 85% rename from src/main/java/myblog/blog/article/application/port/request/ArticleCreateRequest.java rename to src/main/java/myblog/blog/article/application/port/incomming/request/ArticleCreateRequest.java index dd2168a..0283cab 100644 --- a/src/main/java/myblog/blog/article/application/port/request/ArticleCreateRequest.java +++ b/src/main/java/myblog/blog/article/application/port/incomming/request/ArticleCreateRequest.java @@ -1,8 +1,8 @@ -package myblog.blog.article.application.port.request; +package myblog.blog.article.application.port.incomming.request; import lombok.AllArgsConstructor; import lombok.Getter; -import myblog.blog.article.adapter.incomming.web.ArticleForm; +import myblog.blog.article.adapter.incomming.ArticleForm; @Getter @AllArgsConstructor diff --git a/src/main/java/myblog/blog/article/application/port/request/ArticleEditRequest.java b/src/main/java/myblog/blog/article/application/port/incomming/request/ArticleEditRequest.java similarity index 85% rename from src/main/java/myblog/blog/article/application/port/request/ArticleEditRequest.java rename to src/main/java/myblog/blog/article/application/port/incomming/request/ArticleEditRequest.java index a45e4ec..ecbece7 100644 --- a/src/main/java/myblog/blog/article/application/port/request/ArticleEditRequest.java +++ b/src/main/java/myblog/blog/article/application/port/incomming/request/ArticleEditRequest.java @@ -1,8 +1,8 @@ -package myblog.blog.article.application.port.request; +package myblog.blog.article.application.port.incomming.request; import lombok.AllArgsConstructor; import lombok.Getter; -import myblog.blog.article.adapter.incomming.web.ArticleForm; +import myblog.blog.article.adapter.incomming.ArticleForm; @Getter @AllArgsConstructor diff --git a/src/main/java/myblog/blog/article/application/port/response/ArticleResponseByCategory.java b/src/main/java/myblog/blog/article/application/port/incomming/response/ArticleResponseByCategory.java similarity index 75% rename from src/main/java/myblog/blog/article/application/port/response/ArticleResponseByCategory.java rename to src/main/java/myblog/blog/article/application/port/incomming/response/ArticleResponseByCategory.java index 019d952..86d0ca4 100644 --- a/src/main/java/myblog/blog/article/application/port/response/ArticleResponseByCategory.java +++ b/src/main/java/myblog/blog/article/application/port/incomming/response/ArticleResponseByCategory.java @@ -1,4 +1,4 @@ -package myblog.blog.article.application.port.response; +package myblog.blog.article.application.port.incomming.response; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/myblog/blog/article/application/port/response/ArticleResponseForCardBox.java b/src/main/java/myblog/blog/article/application/port/incomming/response/ArticleResponseForCardBox.java similarity index 83% rename from src/main/java/myblog/blog/article/application/port/response/ArticleResponseForCardBox.java rename to src/main/java/myblog/blog/article/application/port/incomming/response/ArticleResponseForCardBox.java index 98f64c9..19e27a0 100644 --- a/src/main/java/myblog/blog/article/application/port/response/ArticleResponseForCardBox.java +++ b/src/main/java/myblog/blog/article/application/port/incomming/response/ArticleResponseForCardBox.java @@ -1,4 +1,4 @@ -package myblog.blog.article.application.port.response; +package myblog.blog.article.application.port.incomming.response; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/myblog/blog/article/application/port/response/ArticleResponseForDetail.java b/src/main/java/myblog/blog/article/application/port/incomming/response/ArticleResponseForDetail.java similarity index 87% rename from src/main/java/myblog/blog/article/application/port/response/ArticleResponseForDetail.java rename to src/main/java/myblog/blog/article/application/port/incomming/response/ArticleResponseForDetail.java index a0d072e..1d98161 100644 --- a/src/main/java/myblog/blog/article/application/port/response/ArticleResponseForDetail.java +++ b/src/main/java/myblog/blog/article/application/port/incomming/response/ArticleResponseForDetail.java @@ -1,4 +1,4 @@ -package myblog.blog.article.application.port.response; +package myblog.blog.article.application.port.incomming.response; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/myblog/blog/article/application/port/response/ArticleResponseForEdit.java b/src/main/java/myblog/blog/article/application/port/incomming/response/ArticleResponseForEdit.java similarity index 87% rename from src/main/java/myblog/blog/article/application/port/response/ArticleResponseForEdit.java rename to src/main/java/myblog/blog/article/application/port/incomming/response/ArticleResponseForEdit.java index f73500e..360ec8a 100644 --- a/src/main/java/myblog/blog/article/application/port/response/ArticleResponseForEdit.java +++ b/src/main/java/myblog/blog/article/application/port/incomming/response/ArticleResponseForEdit.java @@ -1,4 +1,4 @@ -package myblog.blog.article.application.port.response; +package myblog.blog.article.application.port.incomming.response; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/myblog/blog/article/application/port/response/TagsResponse.java b/src/main/java/myblog/blog/article/application/port/incomming/response/TagsResponse.java similarity index 78% rename from src/main/java/myblog/blog/article/application/port/response/TagsResponse.java rename to src/main/java/myblog/blog/article/application/port/incomming/response/TagsResponse.java index c4449ef..ad73916 100644 --- a/src/main/java/myblog/blog/article/application/port/response/TagsResponse.java +++ b/src/main/java/myblog/blog/article/application/port/incomming/response/TagsResponse.java @@ -1,4 +1,4 @@ -package myblog.blog.article.application.port.response; +package myblog.blog.article.application.port.incomming.response; import lombok.Data; diff --git a/src/main/java/myblog/blog/article/application/port/response/TempArticleResponse.java b/src/main/java/myblog/blog/article/application/port/incomming/response/TempArticleResponse.java similarity index 73% rename from src/main/java/myblog/blog/article/application/port/response/TempArticleResponse.java rename to src/main/java/myblog/blog/article/application/port/incomming/response/TempArticleResponse.java index 5869ef9..6797848 100644 --- a/src/main/java/myblog/blog/article/application/port/response/TempArticleResponse.java +++ b/src/main/java/myblog/blog/article/application/port/incomming/response/TempArticleResponse.java @@ -1,4 +1,4 @@ -package myblog.blog.article.application.port.response; +package myblog.blog.article.application.port.incomming.response; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/myblog/blog/base/config/SecurityConfig.java b/src/main/java/myblog/blog/base/config/SecurityConfig.java index f461cd2..92a1f76 100644 --- a/src/main/java/myblog/blog/base/config/SecurityConfig.java +++ b/src/main/java/myblog/blog/base/config/SecurityConfig.java @@ -3,7 +3,7 @@ package myblog.blog.base.config; import lombok.RequiredArgsConstructor; import myblog.blog.shared.exception.LoginFailHandler; import myblog.blog.member.doamin.Role; -import myblog.blog.member.service.Oauth2MemberService; +import myblog.blog.member.application.Oauth2MemberService; import org.springframework.boot.autoconfigure.security.servlet.PathRequest; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; diff --git a/src/main/java/myblog/blog/category/adapter/imcomming/CategoryController.java b/src/main/java/myblog/blog/category/adapter/imcomming/CategoryController.java index ba35061..69f20e4 100644 --- a/src/main/java/myblog/blog/category/adapter/imcomming/CategoryController.java +++ b/src/main/java/myblog/blog/category/adapter/imcomming/CategoryController.java @@ -3,9 +3,9 @@ package myblog.blog.category.adapter.imcomming; import lombok.RequiredArgsConstructor; import myblog.blog.category.appliacation.port.incomming.CategoryUseCase; -import myblog.blog.category.appliacation.port.response.CategoryViewForLayout; -import myblog.blog.category.appliacation.port.response.CategorySimpleDto; -import myblog.blog.comment.application.port.incomming.CommentDtoForLayout; +import myblog.blog.category.appliacation.port.incomming.response.CategoryViewForLayout; +import myblog.blog.category.appliacation.port.incomming.response.CategorySimpleDto; +import myblog.blog.comment.application.port.incomming.response.CommentDtoForLayout; import myblog.blog.comment.application.CommentService; import org.springframework.stereotype.Controller; @@ -27,13 +27,13 @@ public class CategoryController { - 카테고리 수정폼 조회 */ @GetMapping("/category/edit") - public String editCategoryForm(Model model) { + String editCategoryForm(Model model) { List categoryList = categoryUseCase.getCategorytCountList(); List copyList = new ArrayList<>(List.copyOf(categoryList)); copyList.remove(0); CategoryViewForLayout categoryViewForLayout = CategoryViewForLayout.from(categoryList); - List comments = commentService.recentCommentList(); + List comments = commentService.recentCommentListForLayout(); model.addAttribute("categoryForEdit", copyList); model.addAttribute("category", categoryViewForLayout); @@ -45,8 +45,7 @@ public class CategoryController { - 카테고리 수정 요청 */ @PostMapping("/category/edit") - public @ResponseBody - String editCategory(@RequestBody List categoryList, Errors errors) { + @ResponseBody String editCategory(@RequestBody List categoryList, Errors errors) { // List DTO 검증을 위한 커스텀 validator categorylistValidator.validate(categoryList, errors); categoryUseCase.changeCategory(categoryList); diff --git a/src/main/java/myblog/blog/category/adapter/outgoing/persistence/CategoryRepositoryAdapter.java b/src/main/java/myblog/blog/category/adapter/outgoing/persistence/CategoryRepositoryAdapter.java index 6698e9b..634277c 100644 --- a/src/main/java/myblog/blog/category/adapter/outgoing/persistence/CategoryRepositoryAdapter.java +++ b/src/main/java/myblog/blog/category/adapter/outgoing/persistence/CategoryRepositoryAdapter.java @@ -2,7 +2,7 @@ package myblog.blog.category.adapter.outgoing.persistence; import lombok.RequiredArgsConstructor; import myblog.blog.category.appliacation.port.outgoing.CategoryRepositoryPort; -import myblog.blog.category.appliacation.port.response.CategorySimpleDto; +import myblog.blog.category.appliacation.port.incomming.response.CategorySimpleDto; import myblog.blog.category.domain.Category; import org.springframework.stereotype.Component; diff --git a/src/main/java/myblog/blog/category/adapter/outgoing/persistence/MybatisCategoryRepository.java b/src/main/java/myblog/blog/category/adapter/outgoing/persistence/MybatisCategoryRepository.java index be9dabe..8fbc9b6 100644 --- a/src/main/java/myblog/blog/category/adapter/outgoing/persistence/MybatisCategoryRepository.java +++ b/src/main/java/myblog/blog/category/adapter/outgoing/persistence/MybatisCategoryRepository.java @@ -1,6 +1,6 @@ package myblog.blog.category.adapter.outgoing.persistence; -import myblog.blog.category.appliacation.port.response.CategorySimpleDto; +import myblog.blog.category.appliacation.port.incomming.response.CategorySimpleDto; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; diff --git a/src/main/java/myblog/blog/category/appliacation/CategoryService.java b/src/main/java/myblog/blog/category/appliacation/CategoryService.java index 2ca5a85..2ce6cfe 100644 --- a/src/main/java/myblog/blog/category/appliacation/CategoryService.java +++ b/src/main/java/myblog/blog/category/appliacation/CategoryService.java @@ -5,8 +5,8 @@ import lombok.RequiredArgsConstructor; import myblog.blog.category.domain.Category; import myblog.blog.category.appliacation.port.incomming.CategoryUseCase; import myblog.blog.category.appliacation.port.outgoing.CategoryRepositoryPort; -import myblog.blog.category.appliacation.port.response.CategorySimpleDto; -import myblog.blog.category.appliacation.port.response.CategoryViewForLayout; +import myblog.blog.category.appliacation.port.incomming.response.CategorySimpleDto; +import myblog.blog.category.appliacation.port.incomming.response.CategoryViewForLayout; import org.modelmapper.ModelMapper; import org.springframework.cache.annotation.CacheEvict; diff --git a/src/main/java/myblog/blog/category/appliacation/port/incomming/CategoryUseCase.java b/src/main/java/myblog/blog/category/appliacation/port/incomming/CategoryUseCase.java index 8163884..8508cc2 100644 --- a/src/main/java/myblog/blog/category/appliacation/port/incomming/CategoryUseCase.java +++ b/src/main/java/myblog/blog/category/appliacation/port/incomming/CategoryUseCase.java @@ -1,7 +1,7 @@ package myblog.blog.category.appliacation.port.incomming; -import myblog.blog.category.appliacation.port.response.CategorySimpleDto; -import myblog.blog.category.appliacation.port.response.CategoryViewForLayout; +import myblog.blog.category.appliacation.port.incomming.response.CategorySimpleDto; +import myblog.blog.category.appliacation.port.incomming.response.CategoryViewForLayout; import myblog.blog.category.domain.Category; import java.util.List; diff --git a/src/main/java/myblog/blog/category/appliacation/port/response/CategorySimpleDto.java b/src/main/java/myblog/blog/category/appliacation/port/incomming/response/CategorySimpleDto.java similarity index 95% rename from src/main/java/myblog/blog/category/appliacation/port/response/CategorySimpleDto.java rename to src/main/java/myblog/blog/category/appliacation/port/incomming/response/CategorySimpleDto.java index 8f2657d..ea97d7e 100644 --- a/src/main/java/myblog/blog/category/appliacation/port/response/CategorySimpleDto.java +++ b/src/main/java/myblog/blog/category/appliacation/port/incomming/response/CategorySimpleDto.java @@ -1,4 +1,4 @@ -package myblog.blog.category.appliacation.port.response; +package myblog.blog.category.appliacation.port.incomming.response; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/myblog/blog/category/appliacation/port/response/CategoryViewForLayout.java b/src/main/java/myblog/blog/category/appliacation/port/incomming/response/CategoryViewForLayout.java similarity index 97% rename from src/main/java/myblog/blog/category/appliacation/port/response/CategoryViewForLayout.java rename to src/main/java/myblog/blog/category/appliacation/port/incomming/response/CategoryViewForLayout.java index b446527..82ccec7 100644 --- a/src/main/java/myblog/blog/category/appliacation/port/response/CategoryViewForLayout.java +++ b/src/main/java/myblog/blog/category/appliacation/port/incomming/response/CategoryViewForLayout.java @@ -1,4 +1,4 @@ -package myblog.blog.category.appliacation.port.response; +package myblog.blog.category.appliacation.port.incomming.response; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/myblog/blog/category/appliacation/port/outgoing/CategoryRepositoryPort.java b/src/main/java/myblog/blog/category/appliacation/port/outgoing/CategoryRepositoryPort.java index dc387ce..5bbd87d 100644 --- a/src/main/java/myblog/blog/category/appliacation/port/outgoing/CategoryRepositoryPort.java +++ b/src/main/java/myblog/blog/category/appliacation/port/outgoing/CategoryRepositoryPort.java @@ -1,6 +1,6 @@ package myblog.blog.category.appliacation.port.outgoing; -import myblog.blog.category.appliacation.port.response.CategorySimpleDto; +import myblog.blog.category.appliacation.port.incomming.response.CategorySimpleDto; import myblog.blog.category.domain.Category; import java.util.List; diff --git a/src/main/java/myblog/blog/comment/adapter/incomming/CommentController.java b/src/main/java/myblog/blog/comment/adapter/incomming/CommentController.java index c836f29..8021665 100644 --- a/src/main/java/myblog/blog/comment/adapter/incomming/CommentController.java +++ b/src/main/java/myblog/blog/comment/adapter/incomming/CommentController.java @@ -1,13 +1,12 @@ package myblog.blog.comment.adapter.incomming; import myblog.blog.comment.application.port.incomming.CommentUseCase; -import myblog.blog.comment.application.port.incomming.CommentDto; +import myblog.blog.comment.application.port.incomming.response.CommentDto; -import myblog.blog.member.auth.PrincipalDetails; - -import myblog.blog.member.doamin.Member; +import myblog.blog.member.application.port.incomming.response.PrincipalDetails; import lombok.RequiredArgsConstructor; +import myblog.blog.member.application.port.incomming.response.MemberVo; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.validation.Errors; import org.springframework.validation.annotation.Validated; @@ -24,7 +23,7 @@ public class CommentController { - 아티클 조회시 아티클에 달린 댓글들 전체 조회 */ @GetMapping("/comment/list/{articleId}") - public List getCommentList(@PathVariable Long articleId){ + List getCommentList(@PathVariable Long articleId){ return commentUseCase.getCommentList(articleId); } @@ -32,7 +31,7 @@ public class CommentController { - 댓글 작성 요청 */ @PostMapping("/comment/write") - public List getCommentList(@RequestParam Long articleId, + List getCommentList(@RequestParam Long articleId, @RequestParam(required = false) Long parentId, @Validated @RequestBody CommentForm commentForm, Errors errors, @AuthenticationPrincipal PrincipalDetails principal){ @@ -40,13 +39,13 @@ public class CommentController { throw new InvalidCommentRequestException(Objects.requireNonNull(errors.getFieldError()).getDefaultMessage()); } - Member member = principal.getMember(); + MemberVo member = principal.getMember(); // 부모 댓글인지 자식댓글인지 분기로 저장 if(parentId != null){ - commentUseCase.saveCComment(commentForm.getContent(), commentForm.isSecret(), member, articleId, parentId); + commentUseCase.saveCComment(commentForm.getContent(), commentForm.isSecret(), member.getId(), articleId, parentId); } else { - commentUseCase.savePComment(commentForm.getContent(), commentForm.isSecret(), member, articleId); + commentUseCase.savePComment(commentForm.getContent(), commentForm.isSecret(), member.getId(), articleId); } return commentUseCase.getCommentList(articleId); @@ -56,7 +55,7 @@ public class CommentController { - 댓글 삭제 요청 */ @PostMapping("/comment/delete") - public List deleteComment(@RequestParam Long articleId, + List deleteComment(@RequestParam Long articleId, @RequestParam Long commentId) { commentUseCase.deleteComment(commentId); return commentUseCase.getCommentList(articleId); diff --git a/src/main/java/myblog/blog/comment/application/CommentService.java b/src/main/java/myblog/blog/comment/application/CommentService.java index 58c47db..8252679 100644 --- a/src/main/java/myblog/blog/comment/application/CommentService.java +++ b/src/main/java/myblog/blog/comment/application/CommentService.java @@ -2,8 +2,8 @@ package myblog.blog.comment.application; import myblog.blog.article.application.port.incomming.ArticleUseCase; import myblog.blog.comment.application.port.incomming.CommentUseCase; -import myblog.blog.comment.application.port.incomming.CommentDto; -import myblog.blog.comment.application.port.incomming.CommentDtoForLayout; +import myblog.blog.comment.application.port.incomming.response.CommentDto; +import myblog.blog.comment.application.port.incomming.response.CommentDtoForLayout; import myblog.blog.comment.application.port.outgoing.CommentRepositoryPort; import myblog.blog.comment.domain.Comment; @@ -11,6 +11,7 @@ import myblog.blog.article.domain.Article; import myblog.blog.member.doamin.Member; import lombok.RequiredArgsConstructor; +import myblog.blog.member.application.port.incomming.MemberUseCase; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -23,6 +24,7 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class CommentService implements CommentUseCase { private final ArticleUseCase articleUseCase; + private final MemberUseCase memberUseCase; private final CommentRepositoryPort commentRepositoryPort; /* @@ -38,8 +40,8 @@ public class CommentService implements CommentUseCase { */ @CacheEvict(value = "layoutRecentCommentCaching", allEntries = true) @Override - public void savePComment(String content, boolean secret, Member member, Long articleId){ - + public void savePComment(String content, boolean secret, Long memberId, Long articleId){ + Member member = memberUseCase.findById(memberId); Article article = articleUseCase.getArticle(articleId); Comment comment = Comment.builder() @@ -60,8 +62,8 @@ public class CommentService implements CommentUseCase { */ @CacheEvict(value = "layoutRecentCommentCaching", allEntries = true) @Override - public void saveCComment(String content, boolean secret, Member member, Long articleId, Long parentId) { - + public void saveCComment(String content, boolean secret, Long memberId, Long articleId, Long parentId) { + Member member = memberUseCase.findById(memberId); Article article = articleUseCase.getArticle(articleId); Comment pComment = commentRepositoryPort.findById(parentId) .orElseThrow(() -> new IllegalArgumentException("NotfoundParentCommentException")); @@ -97,7 +99,7 @@ public class CommentService implements CommentUseCase { */ @Cacheable(value = "layoutRecentCommentCaching", key = "0") @Override - public List recentCommentList(){ + public List recentCommentListForLayout(){ return commentRepositoryPort.findTop5ByOrderByIdDesc() .stream() .map(comment -> diff --git a/src/main/java/myblog/blog/comment/application/port/incomming/CommentUseCase.java b/src/main/java/myblog/blog/comment/application/port/incomming/CommentUseCase.java index b122877..764752a 100644 --- a/src/main/java/myblog/blog/comment/application/port/incomming/CommentUseCase.java +++ b/src/main/java/myblog/blog/comment/application/port/incomming/CommentUseCase.java @@ -1,13 +1,14 @@ package myblog.blog.comment.application.port.incomming; -import myblog.blog.member.doamin.Member; +import myblog.blog.comment.application.port.incomming.response.CommentDto; +import myblog.blog.comment.application.port.incomming.response.CommentDtoForLayout; import java.util.List; public interface CommentUseCase { List getCommentList(Long articleId); - void savePComment(String content, boolean secret, Member member, Long articleId); - void saveCComment(String content, boolean secret, Member member, Long articleId, Long parentId); + void savePComment(String content, boolean secret, Long memberId, Long articleId); + void saveCComment(String content, boolean secret, Long memberId, Long articleId, Long parentId); void deleteComment(Long commentId); - List recentCommentList(); + List recentCommentListForLayout(); } diff --git a/src/main/java/myblog/blog/comment/application/port/incomming/CommentDto.java b/src/main/java/myblog/blog/comment/application/port/incomming/response/CommentDto.java similarity index 97% rename from src/main/java/myblog/blog/comment/application/port/incomming/CommentDto.java rename to src/main/java/myblog/blog/comment/application/port/incomming/response/CommentDto.java index 07eea20..607509a 100644 --- a/src/main/java/myblog/blog/comment/application/port/incomming/CommentDto.java +++ b/src/main/java/myblog/blog/comment/application/port/incomming/response/CommentDto.java @@ -1,4 +1,4 @@ -package myblog.blog.comment.application.port.incomming; +package myblog.blog.comment.application.port.incomming.response; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/myblog/blog/comment/application/port/incomming/CommentDtoForLayout.java b/src/main/java/myblog/blog/comment/application/port/incomming/response/CommentDtoForLayout.java similarity index 88% rename from src/main/java/myblog/blog/comment/application/port/incomming/CommentDtoForLayout.java rename to src/main/java/myblog/blog/comment/application/port/incomming/response/CommentDtoForLayout.java index 57e90e9..fef5ef9 100644 --- a/src/main/java/myblog/blog/comment/application/port/incomming/CommentDtoForLayout.java +++ b/src/main/java/myblog/blog/comment/application/port/incomming/response/CommentDtoForLayout.java @@ -1,4 +1,4 @@ -package myblog.blog.comment.application.port.incomming; +package myblog.blog.comment.application.port.incomming.response; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/myblog/blog/imgupload/adapter/incomming/UploadImgController.java b/src/main/java/myblog/blog/imgupload/adapter/incomming/UploadImgController.java index 6a2887b..ed094e1 100644 --- a/src/main/java/myblog/blog/imgupload/adapter/incomming/UploadImgController.java +++ b/src/main/java/myblog/blog/imgupload/adapter/incomming/UploadImgController.java @@ -1,10 +1,9 @@ package myblog.blog.imgupload.adapter.incomming; -import myblog.blog.imgupload.service.port.incomming.ImgUploadUseCase; +import myblog.blog.imgupload.application.port.incomming.ImgUploadUseCase; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.io.IOException; @RestController @RequiredArgsConstructor @@ -13,8 +12,7 @@ public class UploadImgController { private final ImgUploadUseCase imgUploadUseCase; @PostMapping("/article/uploadImg") - public @ResponseBody - String imgUpload(@ModelAttribute UploadImgForm uploadImgForm) throws IOException { + String imgUpload(@ModelAttribute UploadImgForm uploadImgForm){ return imgUploadUseCase.storeImg(uploadImgForm.getImg()); } } diff --git a/src/main/java/myblog/blog/imgupload/adapter/outgoing/AwsS3ImgUploadStrategyAdapter.java b/src/main/java/myblog/blog/imgupload/adapter/outgoing/AwsS3ImgUploadStrategyAdapter.java index dbe1fe3..2f522ff 100644 --- a/src/main/java/myblog/blog/imgupload/adapter/outgoing/AwsS3ImgUploadStrategyAdapter.java +++ b/src/main/java/myblog/blog/imgupload/adapter/outgoing/AwsS3ImgUploadStrategyAdapter.java @@ -4,7 +4,7 @@ import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.model.*; import lombok.RequiredArgsConstructor; import myblog.blog.imgupload.domain.ImageFile; -import myblog.blog.imgupload.service.port.outgoing.ImgUploadStrategyPort; +import myblog.blog.imgupload.application.port.outgoing.ImgUploadStrategyPort; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; diff --git a/src/main/java/myblog/blog/imgupload/service/ImgUploadService.java b/src/main/java/myblog/blog/imgupload/application/ImgUploadService.java similarity index 78% rename from src/main/java/myblog/blog/imgupload/service/ImgUploadService.java rename to src/main/java/myblog/blog/imgupload/application/ImgUploadService.java index f5813cb..19916e9 100644 --- a/src/main/java/myblog/blog/imgupload/service/ImgUploadService.java +++ b/src/main/java/myblog/blog/imgupload/application/ImgUploadService.java @@ -1,16 +1,13 @@ -package myblog.blog.imgupload.service; +package myblog.blog.imgupload.application; import lombok.RequiredArgsConstructor; import myblog.blog.imgupload.domain.ImageFile; -import myblog.blog.imgupload.service.port.incomming.ImgUploadUseCase; -import myblog.blog.imgupload.service.port.outgoing.ImgUploadStrategyPort; +import myblog.blog.imgupload.application.port.incomming.ImgUploadUseCase; +import myblog.blog.imgupload.application.port.outgoing.ImgUploadStrategyPort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; -import java.util.UUID; - @Service @Transactional @RequiredArgsConstructor diff --git a/src/main/java/myblog/blog/imgupload/service/port/incomming/ImgUploadUseCase.java b/src/main/java/myblog/blog/imgupload/application/port/incomming/ImgUploadUseCase.java similarity index 62% rename from src/main/java/myblog/blog/imgupload/service/port/incomming/ImgUploadUseCase.java rename to src/main/java/myblog/blog/imgupload/application/port/incomming/ImgUploadUseCase.java index 1cae642..d87497d 100644 --- a/src/main/java/myblog/blog/imgupload/service/port/incomming/ImgUploadUseCase.java +++ b/src/main/java/myblog/blog/imgupload/application/port/incomming/ImgUploadUseCase.java @@ -1,9 +1,7 @@ -package myblog.blog.imgupload.service.port.incomming; +package myblog.blog.imgupload.application.port.incomming; import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; - public interface ImgUploadUseCase { String storeImg(MultipartFile img); } diff --git a/src/main/java/myblog/blog/imgupload/service/port/outgoing/ImgUploadStrategyPort.java b/src/main/java/myblog/blog/imgupload/application/port/outgoing/ImgUploadStrategyPort.java similarity index 78% rename from src/main/java/myblog/blog/imgupload/service/port/outgoing/ImgUploadStrategyPort.java rename to src/main/java/myblog/blog/imgupload/application/port/outgoing/ImgUploadStrategyPort.java index 92dc274..ca5efb4 100644 --- a/src/main/java/myblog/blog/imgupload/service/port/outgoing/ImgUploadStrategyPort.java +++ b/src/main/java/myblog/blog/imgupload/application/port/outgoing/ImgUploadStrategyPort.java @@ -1,4 +1,4 @@ -package myblog.blog.imgupload.service.port.outgoing; +package myblog.blog.imgupload.application.port.outgoing; import myblog.blog.imgupload.domain.ImageFile; diff --git a/src/main/java/myblog/blog/member/adapter/incomming/MemberController.java b/src/main/java/myblog/blog/member/adapter/incomming/MemberController.java new file mode 100644 index 0000000..4a1322e --- /dev/null +++ b/src/main/java/myblog/blog/member/adapter/incomming/MemberController.java @@ -0,0 +1,26 @@ +package myblog.blog.member.adapter.incomming; + +import lombok.RequiredArgsConstructor; +import myblog.blog.shared.queries.LayoutRenderingQueries; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +@RequiredArgsConstructor +public class MemberController { + private final LayoutRenderingQueries layoutRenderingQueries; + + /* + - 회원 로그인 폼 조회 + */ + @GetMapping("/login") + String loginFrom(@RequestParam(value = "error",required = false) String error, Model model){ + if(error!=null&&error.equals("duplicatedEmail")){ + model.addAttribute("errMsg","이미 가입된 이메일입니다."); + } + layoutRenderingQueries.AddLayoutTo(model); + return "login"; + } +} diff --git a/src/main/java/myblog/blog/member/repository/MemberRepository.java b/src/main/java/myblog/blog/member/adapter/outgoing/repository/JpaMemberRepository.java similarity index 63% rename from src/main/java/myblog/blog/member/repository/MemberRepository.java rename to src/main/java/myblog/blog/member/adapter/outgoing/repository/JpaMemberRepository.java index 6e55688..c6f9001 100644 --- a/src/main/java/myblog/blog/member/repository/MemberRepository.java +++ b/src/main/java/myblog/blog/member/adapter/outgoing/repository/JpaMemberRepository.java @@ -1,10 +1,9 @@ -package myblog.blog.member.repository; +package myblog.blog.member.adapter.outgoing.repository; import myblog.blog.member.doamin.Member; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -public interface MemberRepository extends JpaRepository { +public interface JpaMemberRepository extends JpaRepository { /* - Id로 유저 찾기 */ diff --git a/src/main/java/myblog/blog/member/adapter/outgoing/repository/MemberRepositoryAdapter.java b/src/main/java/myblog/blog/member/adapter/outgoing/repository/MemberRepositoryAdapter.java new file mode 100644 index 0000000..66b3f4c --- /dev/null +++ b/src/main/java/myblog/blog/member/adapter/outgoing/repository/MemberRepositoryAdapter.java @@ -0,0 +1,32 @@ +package myblog.blog.member.adapter.outgoing.repository; + +import myblog.blog.member.application.port.outgoing.MemberRepositoryPort; +import myblog.blog.member.doamin.Member; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +@Component +@RequiredArgsConstructor +public class MemberRepositoryAdapter implements MemberRepositoryPort { + private final JpaMemberRepository jpaMemberRepository; + + @Override + public Member findByEmail(String email) { + return jpaMemberRepository.findByEmail(email); + } + @Override + public void save(Member member) { + jpaMemberRepository.save(member); + } + @Override + public Optional findById(Long memberId) { + return jpaMemberRepository.findById(memberId); + } + @Override + public Member findByUserId(String providerId) { + return jpaMemberRepository.findByUserId(providerId); + } +} diff --git a/src/main/java/myblog/blog/member/application/BuildAdminAccountHelper.java b/src/main/java/myblog/blog/member/application/BuildAdminAccountHelper.java new file mode 100644 index 0000000..ba63bb5 --- /dev/null +++ b/src/main/java/myblog/blog/member/application/BuildAdminAccountHelper.java @@ -0,0 +1,38 @@ +package myblog.blog.member.application; + +@Deprecated +public class BuildAdminAccountHelper { + + // 앱 구동시 ADMIN 계정 Insert +// @Value("${admin.username}") +// private String adminUsername; +// @Value("${admin.picUrl}") +// private String adminPicUrl; +// @Value("${admin.email}") +// private String adminEmail; +// @Value("${admin.providerId}") +// private String adminProviderId; +// @Value("${admin.provider}") +// private String adminProvider; + /* + - 앱 구동시 ADMIN 계정 INSERT + */ +// @PostConstruct +// public void insertAdmin(){ +// +// Member admin = memberRepository.findByEmail(adminEmail); +// if(admin == null){ +// admin = Member.builder() +// .username(adminUsername+"#"+adminProviderId.substring(0,5)) +// .email(adminEmail) +// .picUrl(adminPicUrl) +// .userId(adminProviderId) +// .providerId(adminProviderId) +// .provider(adminProvider) +// .role(Role.ADMIN) +// .build(); +// +// memberRepository.save(admin); +// } +// } +} diff --git a/src/main/java/myblog/blog/member/service/Oauth2MemberService.java b/src/main/java/myblog/blog/member/application/Oauth2MemberService.java similarity index 58% rename from src/main/java/myblog/blog/member/service/Oauth2MemberService.java rename to src/main/java/myblog/blog/member/application/Oauth2MemberService.java index 3596506..9c4eb68 100644 --- a/src/main/java/myblog/blog/member/service/Oauth2MemberService.java +++ b/src/main/java/myblog/blog/member/application/Oauth2MemberService.java @@ -1,13 +1,14 @@ -package myblog.blog.member.service; +package myblog.blog.member.application; + +import myblog.blog.member.application.port.incomming.MemberUseCase; +import myblog.blog.member.application.port.incomming.response.PrincipalDetails; +import myblog.blog.member.application.port.incomming.response.userinfo.Oauth2UserInfo; +import myblog.blog.member.application.port.outgoing.MemberRepositoryPort; -import lombok.RequiredArgsConstructor; -import myblog.blog.member.auth.userinfo.Oauth2UserInfo; -import myblog.blog.member.auth.UserInfoFactory; -import myblog.blog.member.repository.MemberRepository; -import myblog.blog.member.auth.PrincipalDetails; import myblog.blog.member.doamin.Member; import myblog.blog.member.doamin.Role; -import org.springframework.beans.factory.annotation.Value; + +import lombok.RequiredArgsConstructor; import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; import org.springframework.security.oauth2.core.OAuth2AuthenticationException; @@ -15,42 +16,24 @@ import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.PostConstruct; - @Service @Transactional @RequiredArgsConstructor -public class Oauth2MemberService extends DefaultOAuth2UserService { +public class Oauth2MemberService extends DefaultOAuth2UserService implements MemberUseCase { - private final MemberRepository memberRepository; + private final MemberRepositoryPort memberRepositoryPort; private final UserInfoFactory userInfoFactory; - // 앱 구동시 ADMIN 계정 Insert - @Value("${admin.username}") - private String adminUsername; - @Value("${admin.picUrl}") - private String adminPicUrl; - @Value("${admin.email}") - private String adminEmail; - @Value("${admin.providerId}") - private String adminProviderId; - @Value("${admin.provider}") - private String adminProvider; - - /* - OAuth2 인증 로그인 */ @Override @Transactional public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { - OAuth2User oAuth2User = super.loadUser(userRequest); Oauth2UserInfo userInfo = userInfoFactory.makeOauth2UserInfoOf(userRequest, oAuth2User); - Member member = getOrJoinMember(userInfo); - return new PrincipalDetails(member, userInfo.getAttributes()); } @@ -58,16 +41,12 @@ public class Oauth2MemberService extends DefaultOAuth2UserService { - 회원가입 or 로그인 로직 */ private Member getOrJoinMember(Oauth2UserInfo userInfo) { - //DB에서 조회해서 존재시 로그인처리, 미존재시 가입처리 - Member member = memberRepository.findByUserId(userInfo.getProviderId()); - + Member member = memberRepositoryPort.findByUserId(userInfo.getProviderId()); if(member == null) { - //Email 중복검증 - if(memberRepository.findByEmail(userInfo.getEmail()) != null) + if(memberRepositoryPort.findByEmail(userInfo.getEmail()) != null) throw new OAuth2AuthenticationException("duplicateEmail"); - member = Member.builder() .username(userInfo.getUserName()) .picUrl(userInfo.getPicture()) @@ -77,43 +56,18 @@ public class Oauth2MemberService extends DefaultOAuth2UserService { .provider(userInfo.getProvider()) .role(Role.USER) .build(); - - memberRepository.save(member); + memberRepositoryPort.save(member); } - // 유저 네임 변경시 더티체킹으로 유저네임 변경 if(!member.getUsername().equals(userInfo.getUserName())){ member.changeUsername(userInfo.getUserName()); } - return member; } - /* - - 앱 구동시 ADMIN 계정 INSERT - */ -// @PostConstruct - public void insertAdmin(){ - - Member admin = memberRepository.findByEmail(adminEmail); - if(admin == null){ - admin = Member.builder() - .username(adminUsername+"#"+adminProviderId.substring(0,5)) - .email(adminEmail) - .picUrl(adminPicUrl) - .userId(adminProviderId) - .providerId(adminProviderId) - .provider(adminProvider) - .role(Role.ADMIN) - .build(); - - memberRepository.save(admin); - } - - } - + @Override public Member findById(Long memberId) { - return memberRepository.findById(memberId) + return memberRepositoryPort.findById(memberId) .orElseThrow(() -> new IllegalArgumentException("NotFoundMemberException")); } } diff --git a/src/main/java/myblog/blog/member/auth/UserInfoFactory.java b/src/main/java/myblog/blog/member/application/UserInfoFactory.java similarity index 83% rename from src/main/java/myblog/blog/member/auth/UserInfoFactory.java rename to src/main/java/myblog/blog/member/application/UserInfoFactory.java index 2021415..297c451 100644 --- a/src/main/java/myblog/blog/member/auth/UserInfoFactory.java +++ b/src/main/java/myblog/blog/member/application/UserInfoFactory.java @@ -1,6 +1,9 @@ -package myblog.blog.member.auth; +package myblog.blog.member.application; -import myblog.blog.member.auth.userinfo.*; +import myblog.blog.member.application.port.incomming.response.userinfo.GoogleUserInfo; +import myblog.blog.member.application.port.incomming.response.userinfo.NaverUserInfo; +import myblog.blog.member.application.port.incomming.response.userinfo.Oauth2UserInfo; +import myblog.blog.member.application.port.incomming.response.userinfo.ProviderType; import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Component; diff --git a/src/main/java/myblog/blog/member/application/port/incomming/MemberUseCase.java b/src/main/java/myblog/blog/member/application/port/incomming/MemberUseCase.java new file mode 100644 index 0000000..f643a28 --- /dev/null +++ b/src/main/java/myblog/blog/member/application/port/incomming/MemberUseCase.java @@ -0,0 +1,7 @@ +package myblog.blog.member.application.port.incomming; + +import myblog.blog.member.doamin.Member; + +public interface MemberUseCase { + Member findById(Long memberId); +} diff --git a/src/main/java/myblog/blog/member/dto/MemberVo.java b/src/main/java/myblog/blog/member/application/port/incomming/response/MemberVo.java similarity index 90% rename from src/main/java/myblog/blog/member/dto/MemberVo.java rename to src/main/java/myblog/blog/member/application/port/incomming/response/MemberVo.java index 2255826..aff8ede 100644 --- a/src/main/java/myblog/blog/member/dto/MemberVo.java +++ b/src/main/java/myblog/blog/member/application/port/incomming/response/MemberVo.java @@ -1,8 +1,7 @@ -package myblog.blog.member.dto; +package myblog.blog.member.application.port.incomming.response; import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.Setter; import myblog.blog.member.doamin.Member; /* diff --git a/src/main/java/myblog/blog/member/auth/PrincipalDetails.java b/src/main/java/myblog/blog/member/application/port/incomming/response/PrincipalDetails.java similarity index 87% rename from src/main/java/myblog/blog/member/auth/PrincipalDetails.java rename to src/main/java/myblog/blog/member/application/port/incomming/response/PrincipalDetails.java index f02249b..cb9f112 100644 --- a/src/main/java/myblog/blog/member/auth/PrincipalDetails.java +++ b/src/main/java/myblog/blog/member/application/port/incomming/response/PrincipalDetails.java @@ -1,6 +1,7 @@ -package myblog.blog.member.auth; +package myblog.blog.member.application.port.incomming.response; import myblog.blog.member.doamin.Member; + import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.oauth2.core.user.OAuth2User; @@ -16,12 +17,14 @@ public class PrincipalDetails implements OAuth2User { private final Map attributes; private final Member member; + private final MemberVo memberVo; public PrincipalDetails(Member member, Map attributes) { this.member = member; this.attributes = attributes; + this.memberVo = MemberVo.from(member); } - public Member getMember(){return member;} + public MemberVo getMember(){return memberVo;} // 타임리프 뷰단처리를 위한 편의 메소드 public Long getMemberId(){ diff --git a/src/main/java/myblog/blog/member/auth/userinfo/GoogleUserInfo.java b/src/main/java/myblog/blog/member/application/port/incomming/response/userinfo/GoogleUserInfo.java similarity index 92% rename from src/main/java/myblog/blog/member/auth/userinfo/GoogleUserInfo.java rename to src/main/java/myblog/blog/member/application/port/incomming/response/userinfo/GoogleUserInfo.java index e71bae9..c465270 100644 --- a/src/main/java/myblog/blog/member/auth/userinfo/GoogleUserInfo.java +++ b/src/main/java/myblog/blog/member/application/port/incomming/response/userinfo/GoogleUserInfo.java @@ -1,4 +1,4 @@ -package myblog.blog.member.auth.userinfo; +package myblog.blog.member.application.port.incomming.response.userinfo; import org.springframework.security.oauth2.core.user.OAuth2User; import java.util.Map; diff --git a/src/main/java/myblog/blog/member/auth/userinfo/NaverUserInfo.java b/src/main/java/myblog/blog/member/application/port/incomming/response/userinfo/NaverUserInfo.java similarity index 91% rename from src/main/java/myblog/blog/member/auth/userinfo/NaverUserInfo.java rename to src/main/java/myblog/blog/member/application/port/incomming/response/userinfo/NaverUserInfo.java index a8b8c20..6d0a588 100644 --- a/src/main/java/myblog/blog/member/auth/userinfo/NaverUserInfo.java +++ b/src/main/java/myblog/blog/member/application/port/incomming/response/userinfo/NaverUserInfo.java @@ -1,7 +1,6 @@ -package myblog.blog.member.auth.userinfo; +package myblog.blog.member.application.port.incomming.response.userinfo; import org.springframework.security.oauth2.core.user.OAuth2User; -import org.springframework.stereotype.Component; import java.util.Map; diff --git a/src/main/java/myblog/blog/member/auth/userinfo/Oauth2UserInfo.java b/src/main/java/myblog/blog/member/application/port/incomming/response/userinfo/Oauth2UserInfo.java similarity index 81% rename from src/main/java/myblog/blog/member/auth/userinfo/Oauth2UserInfo.java rename to src/main/java/myblog/blog/member/application/port/incomming/response/userinfo/Oauth2UserInfo.java index 8b90f15..2be33c4 100644 --- a/src/main/java/myblog/blog/member/auth/userinfo/Oauth2UserInfo.java +++ b/src/main/java/myblog/blog/member/application/port/incomming/response/userinfo/Oauth2UserInfo.java @@ -1,4 +1,4 @@ -package myblog.blog.member.auth.userinfo; +package myblog.blog.member.application.port.incomming.response.userinfo; import java.util.Map; diff --git a/src/main/java/myblog/blog/member/auth/userinfo/ProviderType.java b/src/main/java/myblog/blog/member/application/port/incomming/response/userinfo/ProviderType.java similarity index 77% rename from src/main/java/myblog/blog/member/auth/userinfo/ProviderType.java rename to src/main/java/myblog/blog/member/application/port/incomming/response/userinfo/ProviderType.java index bb6b3c7..e08e5dd 100644 --- a/src/main/java/myblog/blog/member/auth/userinfo/ProviderType.java +++ b/src/main/java/myblog/blog/member/application/port/incomming/response/userinfo/ProviderType.java @@ -1,4 +1,4 @@ -package myblog.blog.member.auth.userinfo; +package myblog.blog.member.application.port.incomming.response.userinfo; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/myblog/blog/member/application/port/outgoing/MemberRepositoryPort.java b/src/main/java/myblog/blog/member/application/port/outgoing/MemberRepositoryPort.java new file mode 100644 index 0000000..e3ce8e7 --- /dev/null +++ b/src/main/java/myblog/blog/member/application/port/outgoing/MemberRepositoryPort.java @@ -0,0 +1,12 @@ +package myblog.blog.member.application.port.outgoing; + +import myblog.blog.member.doamin.Member; + +import java.util.Optional; + +public interface MemberRepositoryPort { + Member findByEmail(String email); + void save(Member member); + Optional findById(Long memberId); + Member findByUserId(String providerId); +} diff --git a/src/main/java/myblog/blog/member/controller/MemberController.java b/src/main/java/myblog/blog/member/controller/MemberController.java deleted file mode 100644 index 0577906..0000000 --- a/src/main/java/myblog/blog/member/controller/MemberController.java +++ /dev/null @@ -1,44 +0,0 @@ -package myblog.blog.member.controller; - -import lombok.RequiredArgsConstructor; -import myblog.blog.category.appliacation.port.response.CategoryViewForLayout; -import myblog.blog.category.appliacation.CategoryService; -import myblog.blog.comment.application.port.incomming.CommentDtoForLayout; -import myblog.blog.comment.application.CommentService; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; - -import java.util.List; - -@Controller -@RequiredArgsConstructor -public class MemberController { - - private final CategoryService categoryService; - private final CommentService commentService; - - - /* - - 회원 로그인 폼 조회 - */ - @GetMapping("/login") - public String loginFrom(@RequestParam(value = "error",required = false) String error, Model model){ - - // 가입 실패시 에러 메시지 처리 - if(error!=null&&error.equals("duplicatedEmail")){ - model.addAttribute("errMsg","이미 가입된 이메일입니다."); - } - - // 레이아웃 DTO 전처리 - CategoryViewForLayout categoryViewForLayout = categoryService.getCategoryViewForLayout(); - List comments = commentService.recentCommentList(); - // - - model.addAttribute("category", categoryViewForLayout); - model.addAttribute("commentsList", comments); - - return "login"; - } -} diff --git a/src/main/java/myblog/blog/seo/adapter/incomming/RssController.java b/src/main/java/myblog/blog/seo/adapter/incomming/RssController.java index 144fea1..7476a44 100644 --- a/src/main/java/myblog/blog/seo/adapter/incomming/RssController.java +++ b/src/main/java/myblog/blog/seo/adapter/incomming/RssController.java @@ -1,22 +1,21 @@ package myblog.blog.seo.adapter.incomming; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; -import myblog.blog.article.application.port.incomming.RssUseCase; +import myblog.blog.seo.application.port.incomming.RssUseCase; /* - rss 피드 발행 요청 - rss 발행 비용을 감안해 캐시처리 - 발행빈도가 아직 예측되지않으므로 캐시 만료를 12시간으로 설정 */ -@Controller +@RestController @RequiredArgsConstructor public class RssController { private final RssUseCase rssUseCase; @GetMapping(value = "/rss",produces = "application/xml;charset=utf-8") - public @ResponseBody String rssFeed() { + String rssFeed() { return rssUseCase.getRssFeed(); } } diff --git a/src/main/java/myblog/blog/seo/adapter/incomming/SiteMapController.java b/src/main/java/myblog/blog/seo/adapter/incomming/SiteMapController.java index 22bc8fd..bcc5a8d 100644 --- a/src/main/java/myblog/blog/seo/adapter/incomming/SiteMapController.java +++ b/src/main/java/myblog/blog/seo/adapter/incomming/SiteMapController.java @@ -1,22 +1,21 @@ package myblog.blog.seo.adapter.incomming; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; -import myblog.blog.article.application.port.incomming.SiteMapUseCase; +import myblog.blog.seo.application.port.incomming.SiteMapUseCase; /* - siteMap.xml 요청 - 작성 비용을 감안해 캐시처리 - 조회 빈도가 아직 예측되지않으므로 캐시 만료를 12시간으로 설정 */ -@Controller +@RestController @RequiredArgsConstructor public class SiteMapController { private final SiteMapUseCase siteMapUseCase; @GetMapping(value = "/sitemap",produces = "application/xml;charset=utf-8") - public @ResponseBody String getSiteMap() { + String getSiteMap() { return siteMapUseCase.getSiteMap(); } } diff --git a/src/main/java/myblog/blog/seo/application/RssService.java b/src/main/java/myblog/blog/seo/application/RssService.java index 68f23b6..5ce81e4 100644 --- a/src/main/java/myblog/blog/seo/application/RssService.java +++ b/src/main/java/myblog/blog/seo/application/RssService.java @@ -1,21 +1,18 @@ package myblog.blog.seo.application; -import lombok.RequiredArgsConstructor; import myblog.blog.article.application.port.incomming.ArticleUseCase; -import myblog.blog.article.application.port.incomming.RssUseCase; +import myblog.blog.seo.application.port.incomming.RssUseCase; +import myblog.blog.article.domain.Article; + +import myblog.blog.seo.domain.RssFeed; + +import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import myblog.blog.article.domain.Article; -import org.jdom2.*; import org.jdom2.output.*; -import java.sql.Timestamp; -import java.text.SimpleDateFormat; import java.util.*; -import static myblog.blog.shared.utils.MarkdownUtils.*; - /* - rss 서비스 로직 1. jdom2 사용하여 xml파일 작성 @@ -27,65 +24,14 @@ import static myblog.blog.shared.utils.MarkdownUtils.*; @RequiredArgsConstructor public class RssService implements RssUseCase { - static final String ITEM_ROOT = "https://www.jiniaslog.co.kr/article/view?articleId="; - private final ArticleUseCase articleUseCase; @Override @Cacheable(value = "seoCaching", key = "0") public String getRssFeed() { List
articles = articleUseCase.getTotalArticle(); - Document doc = makeRssFeedDocumentFrom(articles); - XMLOutputter xmlOutputter = getXmlOutputter(); - return xmlOutputter.outputString(doc); - } - - private Document makeRssFeedDocumentFrom(List
articles) { - Document doc = new Document(); - Element rss = buildRssRoot(); - doc.setRootElement(rss); - Element channel = buildChannel(); - rss.addContent(channel); - addArticleItemsToChannel(articles, channel, new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH)); - return doc; - } - - private Element buildRssRoot() { - Element rss = new Element("rss"); - rss.setAttribute(new Attribute("version", "2.0")); - return rss; - } - - private Element buildChannel() { - Element channel = new Element("channel"); - channel.addContent(new Element("title").addContent(new CDATA("Jinia's LOG"))); - channel.addContent(new Element("link").setText("https://www.jiniaslog.co.kr")); - channel.addContent(new Element("description").addContent(new CDATA("비전공 출신, 개발자 지망생의 공부 내용을 기록하는 블로그입니다."))); - return channel; - } - - private void addArticleItemsToChannel(List
articles, Element channel, SimpleDateFormat dateFormat) { - for (Article article : articles) { - Element item = createItemTo(article, dateFormat); - channel.addContent(item); - } - } - - private Element createItemTo(Article article, SimpleDateFormat dateFormat) { - Element item = new Element("item"); - item - .addContent(new Element("title").addContent(new CDATA(article.getTitle()))) - .addContent(new Element("link").setText(ITEM_ROOT + article.getId())) - .addContent(new Element("description").addContent(new CDATA(getHtmlRenderer().render(getParser().parse(article.getContent()))))) - .addContent(new Element("pubDate").setText(dateFormat.format(Timestamp.valueOf(article.getCreatedDate())))) - .addContent(new Element("guid").setText(ITEM_ROOT + article.getId())); - return item; - } - - private XMLOutputter getXmlOutputter() { - Format format = Format.getPrettyFormat(); - format.setEncoding("UTF-8"); - format.setLineSeparator("\r\n"); - return new XMLOutputter(format); + RssFeed rssFeed = RssFeed.from(articles); + XMLOutputter xmlOutputter = XMLOutPutterBuildHelper.getXmlOutputter(); + return xmlOutputter.outputString(rssFeed.getRssDoc()); } } diff --git a/src/main/java/myblog/blog/seo/application/SiteMapService.java b/src/main/java/myblog/blog/seo/application/SiteMapService.java index 3f46f99..56275b9 100644 --- a/src/main/java/myblog/blog/seo/application/SiteMapService.java +++ b/src/main/java/myblog/blog/seo/application/SiteMapService.java @@ -1,89 +1,35 @@ package myblog.blog.seo.application; import myblog.blog.article.application.port.incomming.ArticleUseCase; -import myblog.blog.article.application.port.incomming.SiteMapUseCase; +import myblog.blog.category.appliacation.port.incomming.CategoryUseCase; +import myblog.blog.seo.application.port.incomming.SiteMapUseCase; + +import myblog.blog.article.domain.Article; +import myblog.blog.category.domain.Category; +import myblog.blog.seo.domain.SiteMap; + import org.springframework.cache.annotation.Cacheable; import org.springframework.transaction.annotation.Transactional; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; - -import myblog.blog.article.domain.Article; -import myblog.blog.category.domain.Category; -import myblog.blog.category.appliacation.CategoryService; -import org.jdom2.*; import org.jdom2.output.*; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.*; @Service @Transactional @RequiredArgsConstructor public class SiteMapService implements SiteMapUseCase { - - static final String NAMESPACE = "http://www.sitemaps.org/schemas/sitemap/0.9"; - static final String ROOT = "https://www.jiniaslog.co.kr"; - static final String CATEGORYPRE = "/article/list?"; - static final String CATEGORYPRO = "&page=1"; - static final String ARTICLEPREV = "/article/view?articleId="; private final ArticleUseCase articleUseCase; - private final CategoryService categoryService; + private final CategoryUseCase categoryUseCase; @Override @Cacheable(value = "seoCaching", key = "1") public String getSiteMap(){ List
articles = articleUseCase.getTotalArticle(); - List allCategories = categoryService.getAllCategories(); - Document doc = makeSiteMapDocument(articles, allCategories); - XMLOutputter xmlOutputter = getXmlOutputter(); - return xmlOutputter.outputString(doc); - } - - private Document makeSiteMapDocument(List
articles, List allCategories) { - Document doc = new Document(); - Element siteMap = new Element("urlset", NAMESPACE); - doc.setRootElement(siteMap); - Element main = createMainElement(); - siteMap.addContent(main); - addCategoryUrlsToSiteMap(allCategories, siteMap); - addArticleUrlToSiteMap(articles, siteMap); - return doc; - } - - private Element createMainElement() { - Element main = new Element("url",NAMESPACE); - main.addContent(new Element("loc",NAMESPACE).setText(ROOT)); - main.addContent(new Element("lastmod",NAMESPACE).setText( - LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd",Locale.ENGLISH)))); - main.addContent(new Element("priority",NAMESPACE).setText("1.0")); - return main; - } - - private void addArticleUrlToSiteMap(List
articles, Element siteMap) { - for (Article article : articles) { - Element articleUrl = new Element("url",NAMESPACE); - articleUrl.addContent(new Element("loc",NAMESPACE) - .setText(ROOT + ARTICLEPREV + article.getId())); - siteMap.addContent(articleUrl); - } - } - - private void addCategoryUrlsToSiteMap(List allCategories, Element siteMap) { - for (Category category : allCategories) { - Element categoryUrl = new Element("url",NAMESPACE); - categoryUrl.addContent(new Element("loc",NAMESPACE) - .setText(ROOT + CATEGORYPRE + "category="+category.getTitle()+"&tier="+category.getTier()+CATEGORYPRO)); - siteMap.addContent(categoryUrl); - } - } - - // 쓰레드 세잎한지 확신이 안듬 방어적으로 생각해서 객체 생성하고 캐싱으로 처리하자 - private XMLOutputter getXmlOutputter() { - Format format = Format.getPrettyFormat(); - format.setEncoding("UTF-8"); - format.setLineSeparator("\r\n"); - return new XMLOutputter(format); + List allCategories = categoryUseCase.getAllCategories(); + SiteMap siteMap = SiteMap.from(articles, allCategories); + XMLOutputter xmlOutputter = XMLOutPutterBuildHelper.getXmlOutputter(); + return xmlOutputter.outputString(siteMap.getSiteMapDoc()); } } diff --git a/src/main/java/myblog/blog/seo/application/XMLOutPutterBuildHelper.java b/src/main/java/myblog/blog/seo/application/XMLOutPutterBuildHelper.java new file mode 100644 index 0000000..31e83e4 --- /dev/null +++ b/src/main/java/myblog/blog/seo/application/XMLOutPutterBuildHelper.java @@ -0,0 +1,13 @@ +package myblog.blog.seo.application; + +import org.jdom2.output.Format; +import org.jdom2.output.XMLOutputter; + +public class XMLOutPutterBuildHelper { + static public XMLOutputter getXmlOutputter() { + Format format = Format.getPrettyFormat(); + format.setEncoding("UTF-8"); + format.setLineSeparator("\r\n"); + return new XMLOutputter(format); + } +} diff --git a/src/main/java/myblog/blog/article/application/port/incomming/RssUseCase.java b/src/main/java/myblog/blog/seo/application/port/incomming/RssUseCase.java similarity index 50% rename from src/main/java/myblog/blog/article/application/port/incomming/RssUseCase.java rename to src/main/java/myblog/blog/seo/application/port/incomming/RssUseCase.java index 1901ad6..3776a49 100644 --- a/src/main/java/myblog/blog/article/application/port/incomming/RssUseCase.java +++ b/src/main/java/myblog/blog/seo/application/port/incomming/RssUseCase.java @@ -1,4 +1,4 @@ -package myblog.blog.article.application.port.incomming; +package myblog.blog.seo.application.port.incomming; public interface RssUseCase { String getRssFeed(); diff --git a/src/main/java/myblog/blog/article/application/port/incomming/SiteMapUseCase.java b/src/main/java/myblog/blog/seo/application/port/incomming/SiteMapUseCase.java similarity index 52% rename from src/main/java/myblog/blog/article/application/port/incomming/SiteMapUseCase.java rename to src/main/java/myblog/blog/seo/application/port/incomming/SiteMapUseCase.java index d648a3e..a77b9d2 100644 --- a/src/main/java/myblog/blog/article/application/port/incomming/SiteMapUseCase.java +++ b/src/main/java/myblog/blog/seo/application/port/incomming/SiteMapUseCase.java @@ -1,4 +1,4 @@ -package myblog.blog.article.application.port.incomming; +package myblog.blog.seo.application.port.incomming; public interface SiteMapUseCase { String getSiteMap(); diff --git a/src/main/java/myblog/blog/seo/domain/RssFeed.java b/src/main/java/myblog/blog/seo/domain/RssFeed.java new file mode 100644 index 0000000..57dd6f6 --- /dev/null +++ b/src/main/java/myblog/blog/seo/domain/RssFeed.java @@ -0,0 +1,67 @@ +package myblog.blog.seo.domain; + +import lombok.Getter; + +import myblog.blog.article.domain.Article; + +import org.jdom2.*; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.Locale; + +import static myblog.blog.shared.utils.MarkdownUtils.getHtmlRenderer; +import static myblog.blog.shared.utils.MarkdownUtils.getParser; + +@Getter +public class RssFeed { + static private final String ITEM_ROOT = "https://www.jiniaslog.co.kr/article/view?articleId="; + private final Document rssDoc; + + private RssFeed(Document rssDoc) { + this.rssDoc = rssDoc; + } + + static public RssFeed from(List
articles){ + Document doc = new Document(); + Element rss = buildRssRoot(); + doc.setRootElement(rss); + Element channel = buildChannel(); + rss.addContent(channel); + addArticleItemsToChannel(articles, channel, new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH)); + return new RssFeed(doc); + } + + static private Element buildRssRoot() { + Element rss = new Element("rss"); + rss.setAttribute(new Attribute("version", "2.0")); + return rss; + } + + static private Element buildChannel() { + Element channel = new Element("channel"); + channel.addContent(new Element("title").addContent(new CDATA("Jinia's LOG"))); + channel.addContent(new Element("link").setText("https://www.jiniaslog.co.kr")); + channel.addContent(new Element("description").addContent(new CDATA("비전공 출신, 개발자 지망생의 공부 내용을 기록하는 블로그입니다."))); + return channel; + } + + static private void addArticleItemsToChannel(List
articles, Element channel, SimpleDateFormat dateFormat) { + for (Article article : articles) { + Element item = createItemTo(article, dateFormat); + channel.addContent(item); + } + } + + static private Element createItemTo(Article article, SimpleDateFormat dateFormat) { + Element item = new Element("item"); + item + .addContent(new Element("title").addContent(new CDATA(article.getTitle()))) + .addContent(new Element("link").setText(ITEM_ROOT + article.getId())) + .addContent(new Element("description").addContent(new CDATA(getHtmlRenderer().render(getParser().parse(article.getContent()))))) + .addContent(new Element("pubDate").setText(dateFormat.format(Timestamp.valueOf(article.getCreatedDate())))) + .addContent(new Element("guid").setText(ITEM_ROOT + article.getId())); + return item; + } + +} diff --git a/src/main/java/myblog/blog/seo/domain/SiteMap.java b/src/main/java/myblog/blog/seo/domain/SiteMap.java new file mode 100644 index 0000000..005b399 --- /dev/null +++ b/src/main/java/myblog/blog/seo/domain/SiteMap.java @@ -0,0 +1,64 @@ +package myblog.blog.seo.domain; + +import lombok.Getter; +import myblog.blog.article.domain.Article; +import myblog.blog.category.domain.Category; +import org.jdom2.Document; +import org.jdom2.Element; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Locale; + +@Getter +public class SiteMap { + static private final String NAMESPACE = "http://www.sitemaps.org/schemas/sitemap/0.9"; + static private final String ROOT = "https://www.jiniaslog.co.kr"; + static private final String CATEGORYPRE = "/article/list?"; + static private final String CATEGORYPRO = "&page=1"; + static private final String ARTICLEPREV = "/article/view?articleId="; + private final Document siteMapDoc; + + private SiteMap(Document siteMapDoc) { + this.siteMapDoc = siteMapDoc; + } + + static public SiteMap from(List
articles, List allCategories) { + Document doc = new Document(); + Element siteMap = new Element("urlset", NAMESPACE); + doc.setRootElement(siteMap); + Element main = createMainElement(); + siteMap.addContent(main); + addCategoryUrlsToSiteMap(allCategories, siteMap); + addArticleUrlToSiteMap(articles, siteMap); + return new SiteMap(doc); + } + + static private Element createMainElement() { + Element main = new Element("url",NAMESPACE); + main.addContent(new Element("loc",NAMESPACE).setText(ROOT)); + main.addContent(new Element("lastmod",NAMESPACE).setText( + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH)))); + main.addContent(new Element("priority",NAMESPACE).setText("1.0")); + return main; + } + + static private void addArticleUrlToSiteMap(List
articles, Element siteMap) { + for (Article article : articles) { + Element articleUrl = new Element("url",NAMESPACE); + articleUrl.addContent(new Element("loc",NAMESPACE) + .setText(ROOT + ARTICLEPREV + article.getId())); + siteMap.addContent(articleUrl); + } + } + + static private void addCategoryUrlsToSiteMap(List allCategories, Element siteMap) { + for (Category category : allCategories) { + Element categoryUrl = new Element("url",NAMESPACE); + categoryUrl.addContent(new Element("loc",NAMESPACE) + .setText(ROOT + CATEGORYPRE + "category="+category.getTitle()+"&tier="+category.getTier()+CATEGORYPRO)); + siteMap.addContent(categoryUrl); + } + } +} diff --git a/src/main/java/myblog/blog/shared/queries/LayoutRenderingQueries.java b/src/main/java/myblog/blog/shared/queries/LayoutRenderingQueries.java index 4f93174..816b2f1 100644 --- a/src/main/java/myblog/blog/shared/queries/LayoutRenderingQueries.java +++ b/src/main/java/myblog/blog/shared/queries/LayoutRenderingQueries.java @@ -2,9 +2,9 @@ package myblog.blog.shared.queries; import lombok.RequiredArgsConstructor; import myblog.blog.category.appliacation.port.incomming.CategoryUseCase; -import myblog.blog.category.appliacation.port.response.CategoryViewForLayout; -import myblog.blog.comment.application.port.incomming.CommentDtoForLayout; -import myblog.blog.comment.application.CommentService; +import myblog.blog.category.appliacation.port.incomming.response.CategoryViewForLayout; +import myblog.blog.comment.application.port.incomming.CommentUseCase; +import myblog.blog.comment.application.port.incomming.response.CommentDtoForLayout; import org.springframework.stereotype.Component; import org.springframework.ui.Model; @@ -15,14 +15,14 @@ import java.util.List; public class LayoutRenderingQueries { private final CategoryUseCase categoryUseCase; - private final CommentService commentService; + private final CommentUseCase commentUseCase; /* - 레이아웃에 필요한 모델 담기 */ public void AddLayoutTo(Model model) { CategoryViewForLayout categoryViewForLayout = categoryUseCase.getCategoryViewForLayout(); - List comments = commentService.recentCommentList(); + List comments = commentUseCase.recentCommentListForLayout(); model.addAttribute("category", categoryViewForLayout); model.addAttribute("commentsList", comments); }