Bläddra i källkod

게시물 상세 조회 수정

sangwonlee 3 år sedan
förälder
incheckning
9cbe3636b0

+ 10 - 4
realworld/src/main/java/com/dbs/realworld/controller/ArticleController.java

@@ -213,8 +213,8 @@ public class ArticleController {
         data.put("articles", articleDTOs);
 
         final int size = articleDTOs.size();
-        int lastItemArticleId = (size != 0) ? articleDTOs.get(size - 1).getId() : -1;
-        data.put("paging", this.articleService.calculatePagingInfo(articleDTOs, lastItemArticleId, feed, userId));
+        int lastArticleId = (size != 0) ? articleDTOs.get(size - 1).getId() : -1;
+        data.put("paging", this.articleService.calculatePagingInfo(articleDTOs, lastArticleId, feed, userId));
         
         return ResponseEntity.ok().body(data);
     }
@@ -224,9 +224,15 @@ public class ArticleController {
      * 게시물 상세 조회
      */
     @GetMapping("/{articleId}")
-    public String getArticleDetailById(@PathVariable("articleId") int articleId, ModelMap model) {
+    public String getArticleDetail(HttpServletRequest request, @PathVariable("articleId") int articleId, ModelMap model) {
 
-        ArticleDTO articleDTO = this.articleService.findByArticleId(articleId);
+        int userId = -1;
+        HttpSession session = request.getSession();
+        if (session.getAttribute("ssId") != null) {
+            userId = (int) request.getSession().getAttribute("ssId");
+        }
+
+        ArticleDTO articleDTO = this.articleService.findArticleDetail(articleId, userId);
 
         model.put("articleDetail", articleDTO);
         return Views.ARTICLE_DETAIL;

+ 2 - 1
realworld/src/main/java/com/dbs/realworld/dto/ArticleDTO.java

@@ -26,5 +26,6 @@ public class ArticleDTO {
     private List<CommentDTO> comments;
 
     private int favoriteNum;
-    private boolean favorite;
+    private boolean favorite;     // 로그인한 경우
+    private boolean writerFollow; // 로그인한 경우
 }

+ 2 - 1
realworld/src/main/java/com/dbs/realworld/mapper/ArticleMapper.java

@@ -14,11 +14,12 @@ public interface ArticleMapper {
     void insertArticle(ArticleDTO dto);
     List<ArticleDTO> select(int articleId, String feed, int userId);
     Map<String, Object> selectPagingInfo(int articleId, String feed, int userId);
+    ArticleDTO selectArticleDetail(int articleId, int userId);
     ArticleDTO selectByArticleId(int articleId);
     void deleteByArticleId(int articleId);
     int updateArticle(ArticleDTO dto);
+    
     void insertFavorite(int userId, int articleId);
-    // boolean checkExistFavorite()    
     void deleteFavorite(int userId, int articleId);
     void updateFavoriteNum(int articleId);
 }

+ 15 - 4
realworld/src/main/java/com/dbs/realworld/service/ArticleService.java

@@ -42,10 +42,10 @@ public class ArticleService {
     }
 
 
-    public Map<String, Object> calculatePagingInfo(List<ArticleDTO> articleDTOs, int articleId, String feed, int userId) {
-        Map<String, Object> paging = this.articleMapper.selectPagingInfo(articleId, feed, userId);
+    public Map<String, Object> calculatePagingInfo(List<ArticleDTO> articleDTOs, int lastArticleId, String feed, int userId) {
+        Map<String, Object> paging = this.articleMapper.selectPagingInfo(lastArticleId, feed, userId);
         paging.put("size", articleDTOs.size());
-        if (articleId == -1) {
+        if (lastArticleId == -1) {
             paging.put("isNext", false);
             paging.put("firstId", null);
             paging.put("lastId", null);
@@ -57,7 +57,6 @@ public class ArticleService {
         return paging;
     }
 
-
     public ArticleDTO findByArticleId(int articleId) {
         ArticleDTO articleDTO = this.articleMapper.selectByArticleId(articleId);
         List<CommentDTO> commentDTOs = this.commentService.findAllByArticleId(articleId);
@@ -66,6 +65,18 @@ public class ArticleService {
     }
 
 
+    public ArticleDTO findArticleDetail(int articleId, int userId) {
+        ArticleDTO articleDTO = this.articleMapper.selectArticleDetail(articleId, userId);
+        
+        List<CommentDTO> commentDTOs = this.commentService.findAllByArticleId(articleId);
+        articleDTO.setComments(commentDTOs);
+
+
+
+        return articleDTO;
+    }
+
+
     public void remove(int articleId) {
         this.articleMapper.deleteByArticleId(articleId);
     }

+ 48 - 4
realworld/src/main/resources/mybatis/mapper/user/ArticleMapper.xml

@@ -17,16 +17,24 @@
             SET	update_datetime = NOW()
       ]]>
       <if test='title != null'>
-        , title = #{title}
+        <![CDATA[
+          , title = #{title}
+        ]]>	
       </if>
       <if test='subtitle != null'>
-        , subtitle = #{subtitle}
+        <![CDATA[
+          , subtitle = #{subtitle}
+        ]]>	
       </if>
       <if test='content != null'>
-        , content = #{content}
+        <![CDATA[
+          , content = #{content}
+        ]]>	
       </if>
       <if test='tags != null'>
-        , tags = #{tags}
+        <![CDATA[
+          , tags = #{tags}
+        ]]>	
       </if>
         <![CDATA[
           WHERE id = #{id}
@@ -102,6 +110,42 @@
      </select>
 
 
+    <select id="selectArticleDetail" parameterType="hashmap" resultType="ArticleDTO">
+      <![CDATA[
+        SELECT
+          USR.name            AS writerName,
+          USR.email           AS writerEmail,
+          AR.user_id          AS writerId,
+          AR.id               AS id,
+          AR.title            AS title,
+          AR.subtitle         AS subtitle,
+          AR.content          AS content,
+          AR.tags             AS tags,
+          AR.create_datetime  AS created,
+          AR.favorite_num     AS favoriteNum,
+      ]]>
+      <if test='userId != -1'>
+        <![CDATA[
+          (
+              SELECT COUNT(*) FROM article_like AL 
+              WHERE AL.user_id     = #{userId}
+              AND   AL.article_id  = AR.id
+          )                   AS favorite,
+          (
+              SELECT COUNT(*) FROM user_follow UF
+              WHERE  UF.from_user = #{userId}
+              AND    UF.to_user   = AR.user_id
+          )                   AS writerFollow
+        ]]>
+      </if>
+      <![CDATA[
+        FROM article_mst AR
+        LEFT JOIN user_mst USR
+        ON AR.user_id = USR.id
+        WHERE AR.id = #{articleId}
+      ]]>
+    </select>
+
     <select id="selectByArticleId" parameterType="int" resultType="ArticleDTO">
       <![CDATA[
         SELECT