From bcbce86a1e54d773d5008b21ff2ae124cfc6dda7 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 월, 22 11월 2021 13:36:08 +0900
Subject: [PATCH] 연관이슈, 하위이슈 테이블 표시 설정(백엔드)

---
 src/main/resources/migration/V1_11__Alter_Table.sql                           |    5 +
 src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java |   50 ++++++++++++
 src/main/java/kr/wisestone/owl/domain/IssueTableConfig.java                   |   21 +++++
 src/main/java/kr/wisestone/owl/service/IssueTableConfigService.java           |   15 +++
 src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java  |  120 +++++++++++++++++++++++++++++
 src/main/java/kr/wisestone/owl/repository/IssueTableConfigRepository.java     |    3 
 6 files changed, 208 insertions(+), 6 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/domain/IssueTableConfig.java b/src/main/java/kr/wisestone/owl/domain/IssueTableConfig.java
index 9cb73fd..8b7e5dc 100644
--- a/src/main/java/kr/wisestone/owl/domain/IssueTableConfig.java
+++ b/src/main/java/kr/wisestone/owl/domain/IssueTableConfig.java
@@ -14,6 +14,7 @@
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
     private String issueTableConfigs;
+    private int issueTableType;
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "workspace_id")
@@ -22,6 +23,10 @@
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "user_id")
     private User user;
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "issue_id")
+    private Issue issue;
 
     public IssueTableConfig(){}
 
@@ -56,4 +61,20 @@
     public void setUser(User user) {
         this.user = user;
     }
+
+    public Issue getIssue() {
+        return issue;
+    }
+
+    public void setIssue(Issue issue) {
+        this.issue = issue;
+    }
+
+    public int getIssueTableType() {
+        return issueTableType;
+    }
+
+    public void setIssueTableType(int issueTableType) {
+        this.issueTableType = issueTableType;
+    }
 }
diff --git a/src/main/java/kr/wisestone/owl/repository/IssueTableConfigRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueTableConfigRepository.java
index 07303d3..92cb5e2 100644
--- a/src/main/java/kr/wisestone/owl/repository/IssueTableConfigRepository.java
+++ b/src/main/java/kr/wisestone/owl/repository/IssueTableConfigRepository.java
@@ -6,4 +6,7 @@
 
 public interface IssueTableConfigRepository extends JpaRepository<IssueTableConfig, Long> {
     IssueTableConfig findByUserIdAndWorkspaceId(@Param("userId") Long userId, @Param("workspaceId") Long workspaceId);
+
+    IssueTableConfig findByIssueIdAndIssueTableType(@Param("issueId") Long issueId, @Param("issueTableType") int issueTableType);
+
 }
diff --git a/src/main/java/kr/wisestone/owl/service/IssueTableConfigService.java b/src/main/java/kr/wisestone/owl/service/IssueTableConfigService.java
index 64d643f..c301940 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueTableConfigService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueTableConfigService.java
@@ -8,7 +8,20 @@
 
     IssueTableConfig addIssueTableConfig(Map<String, Object> params);
 
-    IssueTableConfig findByUserIdAndWorkspaceId();
+    IssueTableConfig addRelationIssueTableConfig(Map<String, Object> params);
+
+    IssueTableConfig addDownIssueTableConfig(Map<String, Object> params);
 
     void detailIssueTableConfig(Map<String, Object> resJsonData);
+
+    void detailRelationIssueTableConfig(Long issueId, Map<String, Object> resJsonData);
+
+    void detailDownIssueTableConfig(Long issueId, Map<String, Object> resJsonData);
+
+    IssueTableConfig findByUserIdAndWorkspaceId();
+
+    IssueTableConfig findByIssueIdAndIssueTableType(Long issueId, int issueTableType);
+
+    void multipleCode();
+
 }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
index a404a90..8f99a4e 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
@@ -1,10 +1,12 @@
 package kr.wisestone.owl.service.impl;
 
 import kr.wisestone.owl.constant.Constants;
+import kr.wisestone.owl.domain.Issue;
 import kr.wisestone.owl.domain.IssueTableConfig;
 import kr.wisestone.owl.domain.User;
 import kr.wisestone.owl.domain.Workspace;
 import kr.wisestone.owl.repository.IssueTableConfigRepository;
+import kr.wisestone.owl.service.IssueService;
 import kr.wisestone.owl.service.IssueTableConfigService;
 import kr.wisestone.owl.service.UserService;
 import kr.wisestone.owl.service.WorkspaceService;
@@ -32,30 +34,102 @@
     @Autowired
     private UserService userService;
 
+    @Autowired
+    private IssueService issueService;
+
     @Override
     protected JpaRepository<IssueTableConfig, Long> getRepository() {
         return this.issueTableConfigRepository;
     }
+
+    @Override
+    public void multipleCode() {
+
+    }
+    Long issueId;
+    int issueTableType = 0; //issueTableType 珥덇린媛� �꽕�젙
 
     //  �씠�뒋 �뀒�씠釉� 而щ읆 �꽕�젙 �젙蹂대�� ���옣�븳�떎.
     @Override
     @Transactional
     public IssueTableConfig addIssueTableConfig(Map<String, Object> params) {
         String issueTableConfigs = MapUtil.getString(params, "issueTableConfigs");
+        issueId = (long) -1;
+        issueTableType = 1;
+
         //  �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 �궗�슜�옄�쓽 �씠�뒋 紐⑸줉 �뀒�씠釉� 而щ읆 �꽕�젙�쓣 議고쉶�븳�떎.
         IssueTableConfig saveIssueTableConfig = this.findByUserIdAndWorkspaceId();
-
+        IssueTableConfig saveIssueTableType = this.findByIssueIdAndIssueTableType(issueId,issueTableType);
         //  �븘吏� �뀒�씠釉� 而щ읆 �꽕�젙�쓣 �븯吏� �븡�븯�쓣 寃쎌슦
-        if (saveIssueTableConfig == null) {
+        if (saveIssueTableConfig == null && saveIssueTableType == null) {
             IssueTableConfig issueTableConfig = new IssueTableConfig();
             Workspace workspace = this.workspaceService.getWorkspace(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
             User user = this.userService.getUser(this.webAppUtil.getLoginId());
+            Issue issue = this.issueService.getIssue(issueId);
             issueTableConfig.setWorkspace(workspace);
             issueTableConfig.setUser(user);
+            issueTableConfig.setIssue(issue);
+            issueTableConfig.setIssueTableType(issueTableType);
             issueTableConfig.setIssueTableConfigs(issueTableConfigs);
             return this.issueTableConfigRepository.saveAndFlush(issueTableConfig);
         }
         else {
+            saveIssueTableConfig.setIssueTableConfigs(issueTableConfigs);
+            return this.issueTableConfigRepository.saveAndFlush(saveIssueTableConfig);
+        }
+    }
+
+    @Override
+    public IssueTableConfig addRelationIssueTableConfig(Map<String, Object> params) {
+        String issueTableConfigs = MapUtil.getString(params, "issueTableConfigs");
+
+        issueId = MapUtil.getLong(params, "issueId");
+        issueTableType = 2;
+        //  �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 �궗�슜�옄�쓽 �씠�뒋 紐⑸줉 �뀒�씠釉� 而щ읆 �꽕�젙�쓣 議고쉶�븳�떎.
+        IssueTableConfig saveIssueTableConfig = this.findByUserIdAndWorkspaceId();
+        IssueTableConfig saveIssueTableType = this.findByIssueIdAndIssueTableType(issueId,issueTableType);
+
+        //  �븘吏� �뀒�씠釉� 而щ읆 �꽕�젙�쓣 �븯吏� �븡�븯�쓣 寃쎌슦
+        if (saveIssueTableConfig == null && saveIssueTableType == null) {
+            IssueTableConfig issueTableConfig = new IssueTableConfig();
+            Workspace workspace = this.workspaceService.getWorkspace(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
+            User user = this.userService.getUser(this.webAppUtil.getLoginId());
+            Issue issue = this.issueService.getIssue(issueId);
+            issueTableConfig.setWorkspace(workspace);
+            issueTableConfig.setUser(user);
+            issueTableConfig.setIssue(issue);
+            issueTableConfig.setIssueTableType(issueTableType);
+            issueTableConfig.setIssueTableConfigs(issueTableConfigs);
+            return this.issueTableConfigRepository.saveAndFlush(issueTableConfig);
+        }else {
+            saveIssueTableConfig.setIssueTableConfigs(issueTableConfigs);
+            return this.issueTableConfigRepository.saveAndFlush(saveIssueTableConfig);
+        }
+    }
+
+    @Override
+    public IssueTableConfig addDownIssueTableConfig(Map<String, Object> params) {
+        String issueTableConfigs = MapUtil.getString(params, "issueTableConfigs");
+
+        issueId = MapUtil.getLong(params, "issueId");
+        issueTableType = 3;
+        //  �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 �궗�슜�옄�쓽 �씠�뒋 紐⑸줉 �뀒�씠釉� 而щ읆 �꽕�젙�쓣 議고쉶�븳�떎.
+        IssueTableConfig saveIssueTableConfig = this.findByUserIdAndWorkspaceId();
+        IssueTableConfig saveIssueTableType = this.findByIssueIdAndIssueTableType(issueId,issueTableType);
+
+        //  �븘吏� �뀒�씠釉� 而щ읆 �꽕�젙�쓣 �븯吏� �븡�븯�쓣 寃쎌슦
+        if (saveIssueTableConfig == null && saveIssueTableType == null) {
+            IssueTableConfig issueTableConfig = new IssueTableConfig();
+            Workspace workspace = this.workspaceService.getWorkspace(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
+            User user = this.userService.getUser(this.webAppUtil.getLoginId());
+            Issue issue = this.issueService.getIssue(issueId);
+            issueTableConfig.setWorkspace(workspace);
+            issueTableConfig.setUser(user);
+            issueTableConfig.setIssue(issue);
+            issueTableConfig.setIssueTableType(issueTableType);
+            issueTableConfig.setIssueTableConfigs(issueTableConfigs);
+            return this.issueTableConfigRepository.saveAndFlush(issueTableConfig);
+        }else {
             saveIssueTableConfig.setIssueTableConfigs(issueTableConfigs);
             return this.issueTableConfigRepository.saveAndFlush(saveIssueTableConfig);
         }
@@ -69,14 +143,39 @@
                 this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
     }
 
+    @Override
+    @Transactional(readOnly = true)
+    public IssueTableConfig findByIssueIdAndIssueTableType(Long issueId, int issueTableType) {
+        return this.issueTableConfigRepository.findByIssueIdAndIssueTableType(issueId, issueTableType);
+    }
+
     //  ���옣�맂 �씠�뒋 �뀒�씠釉� �꽕�젙�쓣 議고쉶�븳�떎.
     @Override
     @Transactional(readOnly = true)
     public void detailIssueTableConfig(Map<String, Object> resJsonData) {
+        issueId = (long) -1;
+        issueTableType = 1;
         //  �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 �궗�슜�옄�쓽 �씠�뒋 寃��깋 議곌굔�쓣 議고쉶�븳�떎.
         IssueTableConfig issueTableConfig = this.findByUserIdAndWorkspaceId();
+        IssueTableConfig saveIssueTableType = this.findByIssueIdAndIssueTableType(issueId,issueTableType);
 
-        if (issueTableConfig != null) {
+        if (issueTableConfig != null && saveIssueTableType != null) {
+            resJsonData.put(Constants.RES_KEY_CONTENTS, issueTableConfig.getIssueTableConfigs());
+        }
+        else {
+            resJsonData.put(Constants.RES_KEY_CONTENTS, "");
+        }
+    }
+    
+    //  ���옣�맂 �뿰愿� �씠�뒋 �뀒�씠釉� �꽕�젙 議고쉶
+    @Override
+    public void detailRelationIssueTableConfig(Long issueId, Map<String, Object> resJsonData) {
+        issueTableType = 2;
+        //  �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 �궗�슜�옄�쓽 �씠�뒋 寃��깋 議곌굔�쓣 議고쉶�븳�떎.
+        IssueTableConfig issueTableConfig = this.findByUserIdAndWorkspaceId();
+        IssueTableConfig saveIssueTableType = this.findByIssueIdAndIssueTableType(issueId,issueTableType);
+        
+        if (issueTableConfig != null && saveIssueTableType != null) {
             resJsonData.put(Constants.RES_KEY_CONTENTS, issueTableConfig.getIssueTableConfigs());
         }
         else {
@@ -84,6 +183,21 @@
         }
     }
 
+    //  ���옣�맂 �븯�쐞 �씠�뒋 �뀒�씠釉� �꽕�젙 議고쉶
+    @Override
+    public void detailDownIssueTableConfig(Long issueId, Map<String, Object> resJsonData) {
+        issueTableType = 3;
+        //  �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 �궗�슜�옄�쓽 �씠�뒋 寃��깋 議곌굔�쓣 議고쉶�븳�떎.
+        IssueTableConfig issueTableConfig = this.findByUserIdAndWorkspaceId();
+        IssueTableConfig saveIssueTableType = this.findByIssueIdAndIssueTableType(issueId,issueTableType);
+
+        if (issueTableConfig != null && saveIssueTableType != null) {
+            resJsonData.put(Constants.RES_KEY_CONTENTS, issueTableConfig.getIssueTableConfigs());
+        }
+        else {
+            resJsonData.put(Constants.RES_KEY_CONTENTS, "");
+        }
+    }
 
 
 }
diff --git a/src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java b/src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java
index 7fe99d9..115e6e8 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java
@@ -21,7 +21,7 @@
     @Autowired
     private IssueTableConfigService issueTableConfigService;
 
-    //  �씠�뒋 �뀒�씠釉� �꽕�젙 ���옣
+    //  硫붿씤 �씠�뒋 �뀒�씠釉� �꽕�젙 ���옣
     @RequestMapping(value = "/issueTableConfig/add", produces = MediaType.APPLICATION_JSON_VALUE)
     public
     @ResponseBody
@@ -33,7 +33,7 @@
         return this.setSuccessMessage(resJsonData);
     }
 
-    //  �씠�뒋 �뀒�씠釉� �꽕�젙 �긽�꽭 議고쉶
+    //  硫붿씤 �씠�뒋 �뀒�씠釉� �꽕�젙 �긽�꽭 議고쉶
     @RequestMapping(value = "/issueTableConfig/detail", produces = MediaType.APPLICATION_JSON_VALUE)
     public
     @ResponseBody
@@ -43,4 +43,50 @@
 
         return this.setSuccessMessage(resJsonData);
     }
+
+    //  �뿰愿� �씠�뒋 �뀒�씠釉� �꽕�젙 ���옣
+    @RequestMapping(value = "/issueTableConfig/relationAdd", produces = MediaType.APPLICATION_JSON_VALUE)
+    public
+    @ResponseBody
+    Map<String, Object> relationAdd(@RequestBody Map<String, Map<String, Object>> params) {
+        Map<String, Object> resJsonData = new HashMap<>();
+
+        this.issueTableConfigService.addRelationIssueTableConfig(params.get(Constants.REQ_KEY_CONTENT));
+
+        return this.setSuccessMessage(resJsonData);
+    }
+
+    //  �뿰愿� �씠�뒋 �뀒�씠釉� �꽕�젙 �긽�꽭 議고쉶
+    @RequestMapping(value = "/issueTableConfig/relationDetail", produces = MediaType.APPLICATION_JSON_VALUE)
+    public
+    @ResponseBody
+    Map<String, Object> relationDetail(@RequestBody Long issueId) {
+        Map<String, Object> resJsonData = new HashMap<>();
+        this.issueTableConfigService.detailRelationIssueTableConfig(issueId,resJsonData);
+
+        return this.setSuccessMessage(resJsonData);
+    }
+
+    //  �븯�쐞 �씠�뒋 �뀒�씠釉� �꽕�젙 ���옣
+    @RequestMapping(value = "/issueTableConfig/downAdd", produces = MediaType.APPLICATION_JSON_VALUE)
+    public
+    @ResponseBody
+    Map<String, Object> downAdd(@RequestBody Map<String, Map<String, Object>> params) {
+        Map<String, Object> resJsonData = new HashMap<>();
+
+        this.issueTableConfigService.addDownIssueTableConfig(params.get(Constants.REQ_KEY_CONTENT));
+
+        return this.setSuccessMessage(resJsonData);
+    }
+
+    //  �븯�쐞 �씠�뒋 �뀒�씠釉� �꽕�젙 �긽�꽭 議고쉶
+    @RequestMapping(value = "/issueTableConfig/downDetail", produces = MediaType.APPLICATION_JSON_VALUE)
+    public
+    @ResponseBody
+    Map<String, Object> downDetail(@RequestBody Long issueId) {
+        Map<String, Object> resJsonData = new HashMap<>();
+        this.issueTableConfigService.detailDownIssueTableConfig(issueId,resJsonData);
+
+        return this.setSuccessMessage(resJsonData);
+    }
 }
diff --git a/src/main/resources/migration/V1_11__Alter_Table.sql b/src/main/resources/migration/V1_11__Alter_Table.sql
index 9d9de68..f4f4ac6 100644
--- a/src/main/resources/migration/V1_11__Alter_Table.sql
+++ b/src/main/resources/migration/V1_11__Alter_Table.sql
@@ -182,3 +182,8 @@
     PRIMARY KEY (`id`) USING BTREE,
     INDEX `ispIdIndex` (`isp_id`) USING BTREE
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- �씠�뒋 �뀒�씠釉� ���엯 �꽕�젙(1: 硫붿씤, 2: �뿰愿�, 3: �븯�쐞)
+ALTER TABLE `issue_table_config` ADD COLUMN  `issue_id` BIGINT(20) NOT NULL;
+ALTER TABLE `issue_table_config` ADD COLUMN  `issue_table_type` INT(11) NOT NULL;
+ALTER TABLE `issue_table_config` ADD INDEX `issueTableTypeIndex`(`issue_table_type`);

--
Gitblit v1.8.0