From 9ff3e8c43d01f758381b4925cff44502f1241750 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 수, 22 12월 2021 14:26:36 +0900
Subject: [PATCH] - 일반 사용자로 검색 기능 제대로 동작안되는 문제 해결 - 이슈 유형에서 사용중인 프로젝트는 삭제 불가 - 이슈 유형에서 프로젝트 검색 시 워크스페이스 관리자는 모든 프로젝트 검색 가능(기존엔 참여하고있는 프로젝트만 검색가능하게되어있었음)

---
 src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java              |    2 
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java     |    4 
 src/main/resources/mybatis/query-template/project-template.xml        |   38 ++++++++++++
 src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java   |   34 ++++++++++-
 src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java    |    1 
 src/main/java/kr/wisestone/owl/service/IssueTypeService.java          |    2 
 src/main/webapp/scripts/app/common/common.controller.js               |    3 
 src/main/webapp/scripts/app/issue/issueList.controller.js             |   36 ++++++-----
 src/main/java/kr/wisestone/owl/constant/MsgConstants.java             |    1 
 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties                |    1 
 src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java |    5 +
 11 files changed, 103 insertions(+), 24 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
index 559d4cc..6ed48e3 100644
--- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
+++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -10,6 +10,7 @@
     public static final String PROJECT_NOT_EXIST = "PROJECT_NOT_EXIST";    //	�봽濡쒖젥�듃媛� 議댁옱�븯吏� �븡�뒿�땲�떎.
     public static final String PROJECT_NOT_MANAGER = "PROJECT_NOT_MANAGER"; //  �봽濡쒖젥�듃 愿�由ъ옄媛� 議댁옱�븯吏� �븡�뒿�땲�떎.
     public static final String PROJECT_NOT_MODIFY_PERMISSION = "PROJECT_NOT_MODIFY_PERMISSION"; //  �봽濡쒖젥�듃 愿�由� 沅뚰븳�씠 �뾾�뒿�땲�떎.
+    public static final String PROJECT_NOT_DELETE = "PROJECT_NOT_DELETE"; //  �씠�뒋�쑀�삎�뿉�꽌 �궗�슜以묒씤 �봽濡쒖젥�듃 �엯�땲�떎.
     public static final String PROJECT_NOT_NAME = "PROJECT_NOT_NAME";   //  �봽濡쒖젥�듃 �씠由꾩씠 �엯�젰�릺吏� �븡�븯�뒿�땲�떎.
     public static final String PROJECT_NOT_STATUS = "PROJECT_NOT_STATUS";   //  �봽濡쒖젥�듃�쓽 �긽�깭媛� �꽑�깮�릺吏� �븡�븯�뒿�땲�떎.
     public static final String DATE_NOT_EXIST = "DATE_NOT_EXIST";   //  �궇吏쒓� �꽑�깮�릺吏� �븡�븯�뒿�땲�떎.
diff --git a/src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java b/src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java
index 118fe38..5ef5ae6 100644
--- a/src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java
+++ b/src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java
@@ -24,6 +24,8 @@
 
     List<Map<String, Object>> findByWorkspaceIdAndIncludeProject(ProjectCondition projectCondition);
 
+    List<Map<String, Object>> findByWorkspaceIdAndProjectAll(ProjectCondition projectCondition);
+
     List<Map<String, Object>> findByWorkspaceIdAndIncludeProjectAll(ProjectCondition projectCondition);
 
     void deleteProject(Map<String, Object> deleteProjectMap);
diff --git a/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java
index c0a8a75..939ce23 100644
--- a/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java
+++ b/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java
@@ -15,4 +15,5 @@
 
     List<IssueType> findByWorkspaceId(@Param("workspaceId") Long workspaceId);
 
+    List<IssueType> findByProjectId(@Param("projectId") Long projectId);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/IssueTypeService.java b/src/main/java/kr/wisestone/owl/service/IssueTypeService.java
index 738a26a..1f7a4c1 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueTypeService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueTypeService.java
@@ -37,6 +37,8 @@
 
     IssueType getIssueType(Long id);
 
+    List<IssueType> findByProjectId(Long projectId);
+
     void removeIssueTypes(IssueTypeForm issueTypeForm);
 
     List<IssueType> findByWorkspaceId();
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
index 4cd121d..af302ce 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -1246,7 +1246,7 @@
         }
 
         //  �봽濡쒖젥�듃瑜� �꽑�깮�븯吏� �븡�븯�쑝硫� �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 李몄뿬�븯怨� �엳�뒗 �봽濡쒖젥�듃瑜� 李얜뒗�떎.
-        if (condition.getProjectIds().size() < 1) {
+        /*if (condition.getProjectIds().size() < 1) {
             List<Map<String, Object>> projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectStatues, condition.getProjectType());
             List<Long> projectIds = Lists.newArrayList();
 
@@ -1263,7 +1263,7 @@
             if (projectIds.size() < 1) {
                 return false;
             }
-        }
+        }*/
 
         return true;
     }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
index 5519b9e..78c915a 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
@@ -261,6 +261,11 @@
         }
     }
 
+    //  �씠�뒋 �쑀�삎�뿉 �봽濡쒖젥�듃ID濡� 議고쉶
+    public List<IssueType> findByProjectId(Long projectId) {
+        return this.issueTypeRepository.findByProjectId(projectId);
+    }
+
     private void setUseIssueTypeByIssueStatus(List<IssueTypeVo> issueTypeVos) {
         for (IssueTypeVo issueTypeVo : issueTypeVos) {
             IssueType issueType = this.getIssueType(issueTypeVo.getId());
diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
index 6689f61..16c21d2 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -66,6 +66,9 @@
     private UserWorkspaceService userWorkspaceService;
 
     @Autowired
+    private IssueTypeService issueTypeService;
+
+    @Autowired
     private UserLevelService userLevelService;
 
     @Autowired
@@ -561,7 +564,7 @@
         User user = this.webAppUtil.getLoginUserObject();
 
         //  �썙�겕�뒪�럹�씠�뒪�뿉�꽌 湲곕낯�쑝濡� �젣怨듬릺�뒗 �봽濡쒖젥�듃�뿉 ���븳 泥댄겕
-        this.checkDefaultProject(project, projectForm);
+        //this.checkDefaultProject(project, projectForm);
         //  �닔�젙 沅뚰븳 泥댄겕
         this.checkModifyPermission(project.getId(), user);
         //  愿�由ъ옄 蹂�寃�
@@ -683,6 +686,20 @@
                             this.messageAccessor.getMessage(MsgConstants.DEFAULT_PROJECT_MANAGER_NOT_CHANGE));
                 }
             }
+        }
+    }
+
+    private void checkUsingIssueType(Long projectId) {
+        Boolean del = Boolean.FALSE;
+
+        List<IssueType> usingIssueTypes = this.issueTypeService.findByProjectId(projectId);
+        if (usingIssueTypes == null || usingIssueTypes.isEmpty()) {
+            del = true;
+        }
+
+        if (!del) {
+            throw new OwlRuntimeException(
+                    this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_DELETE));
         }
     }
 
@@ -1024,10 +1041,11 @@
     private void removeProjects(Long projectId) {
         Project project = this.getProject(projectId);
         //  湲곕낯 �봽濡쒖젥�듃�뒗 �궘�젣 湲덉�
-        if (project.getDefaultYn()) {
+        /*if (project.getDefaultYn()) {
             throw new OwlRuntimeException(
                     this.messageAccessor.getMessage(MsgConstants.DEFAULT_PROJECT_NOT_REMOVE));
-        }
+        }*/
+        this.checkUsingIssueType(project.getId());
 
         //  濡쒓렇�씤�븳 �궗�슜�옄媛� 愿�由ъ옄 �뿭�븷�뿉 �냼�냽�릺�뼱 �엳�뒗吏� �솗�씤�븳�떎.
         this.checkModifyPermission(project.getId(), this.webAppUtil.getLoginUserObject());
@@ -1118,7 +1136,15 @@
     public List<Map<String, Object>> findByWorkspaceIdAndIncludeProjectAll(ProjectCondition projectCondition) {
         projectCondition.setLoginUserId(this.webAppUtil.getLoginId());
         projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
-        return this.projectMapper.findByWorkspaceIdAndIncludeProjectAll(projectCondition);
+
+        UserWorkspace userWorkspace = this.userWorkspaceService.findWorkspaceManager(this.webAppUtil.getLoginId());
+        List<Map<String, Object>> results = Lists.newArrayList();
+        if(userWorkspace != null) {// �썙�겕�뒪�럹�씠�뒪 愿�由ъ옄�씪寃쎌슦
+            results = this.projectMapper.findByWorkspaceIdAndProjectAll(projectCondition);
+        } else {
+            results = this.projectMapper.findByWorkspaceIdAndIncludeProjectAll(projectCondition);
+        }
+        return results;
     }
 
     //  �쁽�옱 �젒洹쇳븳 �뾽臾닿났媛꾩뿉�꽌 李몄뿬�븯怨� �엳�뒗 �봽濡쒖젥�듃瑜� 議고쉶�븳�떎. - �긽�떒 �봽濡쒖젥�듃 紐⑸줉�뿉�꽌 �궗�슜
diff --git a/src/main/resources/mybatis/query-template/project-template.xml b/src/main/resources/mybatis/query-template/project-template.xml
index ed1a5fd..1ec4ee1 100644
--- a/src/main/resources/mybatis/query-template/project-template.xml
+++ b/src/main/resources/mybatis/query-template/project-template.xml
@@ -340,6 +340,44 @@
         AND p.workspace_id = #{workspaceId}
     </select>
 
+    <!--    �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 吏꾪뻾以묒씤 紐⑤뱺 �봽濡쒖젥�듃瑜� 議고쉶�븳�떎  -->
+    <select id="findByWorkspaceIdAndProjectAll" resultType="java.util.HashMap"
+            parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
+        SELECT
+        DISTINCT p.id as id,
+        p.name as name,
+        p.description as description,
+        p.status as status,
+        p.start_date as startDate,
+        p.end_date as endDate,
+        p.project_key as projectKey,
+        CASE p.default_yn WHEN 'Y' THEN 'true' ELSE 'false' END as defaultYn
+        FROM
+        project p
+        INNER JOIN project_role pr on p.id = pr.project_id
+        INNER JOIN project_role_user pru on pru.project_role_id = pr.id
+        WHERE p.workspace_id = #{workspaceId}
+        <if test="name != '' and name != null">
+            AND p.name like CONCAT('%',#{name},'%')
+        </if>
+        <choose>
+            <when test="statuses.size != 0">
+                AND p.status IN
+                <foreach collection="statuses" item="item" index="index" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </when>
+        </choose>
+        <choose>
+            <when test="excludeIds.size != 0">
+                AND p.id NOT IN
+                <foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </when>
+        </choose>
+    </select>
+
 
     <!--    �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 李몄뿬�븯怨� �엳�뒗 吏꾪뻾以묒씤 �봽濡쒖젥�듃瑜� 議고쉶�븳�떎  -->
     <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap"
diff --git a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
index 51e977e..d26b1a2 100644
--- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
+++ b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -14,6 +14,7 @@
 PROJECT_NOT_EXIST = \uD504\uB85C\uC81D\uD2B8\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
 PROJECT_NOT_MANAGER = \uD504\uB85C\uC81D\uD2B8 \uAD00\uB9AC\uC790\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
 PROJECT_NOT_MODIFY_PERMISSION = \uD504\uB85C\uC81D\uD2B8 \uAD00\uB9AC \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.
+PROJECT_NOT_DELETE = \uC774\uC288\uC720\uD615\uC5D0\uC11C \uC0AC\uC6A9\uC911\uC778 \uD504\uB85C\uC81D\uD2B8 \uC785\uB2C8\uB2E4.
 PROJECT_NOT_NAME = \uD504\uB85C\uC81D\uD2B8 \uC774\uB984\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
 PROJECT_NOT_STATUS = \uD504\uB85C\uC81D\uD2B8\uC758 \uC0C1\uD0DC\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
 DATE_NOT_EXIST = \uAE30\uAC04\uC774 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
diff --git a/src/main/webapp/scripts/app/common/common.controller.js b/src/main/webapp/scripts/app/common/common.controller.js
index e1c0035..8642c6f 100644
--- a/src/main/webapp/scripts/app/common/common.controller.js
+++ b/src/main/webapp/scripts/app/common/common.controller.js
@@ -67,7 +67,8 @@
                     } else {
                         $rootScope.$broadcast("searchIssueList", {keyWord: $scope.vm.searchAll.keyWord});
                     }
-
+                    //$scope.vm.searchAll.keyWord = "";
+                    //$rootScope.previousGetParams = null;
                 }
 
                 function setLastIssueType() {
diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js
index 197ce4d..46c4c54 100644
--- a/src/main/webapp/scripts/app/issue/issueList.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -52,7 +52,7 @@
                     issueTypeId : "",
                     partnerVos : "",
                     search : {
-                        keyWord : "", //  �쟾泥� 寃��깋
+                        keyWord : "", //  寃��깋
                         title : "", //  �젣紐�
                         description : "",   //  �궡�슜
                         combinationIssueNumber : "",   //  �씠�뒋 踰덊샇
@@ -65,6 +65,9 @@
                         priorityIds : [],   //  �슦�꽑�닚�쐞 寃��깋
                         issueStatusIds : [],    //  �씠�뒋 �긽�깭 寃��깋
                         issueTypeIds : []   //  �씠�뒋 �쑀�삎 寃��깋
+                    },
+                    searchAll : {
+                        keyWord : "", //  �쟾泥� 寃��깋
                     },
                     searchView : false, //  �긽�꽭 寃��깋 議곌굔 �몴�떆 �뿬遺�
                     detailView : false, //  �긽�꽭 紐⑤뱶 蹂�寃� 媛�
@@ -131,7 +134,7 @@
 
                 // �긽�떒 寃��깋�떆
                 $rootScope.$on("searchIssueList", function (event, args) {
-                    $scope.vm.search.keyWord = args.keyWord;
+                    $scope.vm.searchAll.keyWord = args.keyWord;
                     $scope.fn.getPageList(0);
                 });
 
@@ -622,7 +625,7 @@
                     // 寃��깋 湲곕낯媛� �꽭�똿
                     $scope.vm.search.issueTypeIds = [];
                     $scope.vm.projects = [];
-                    if ($scope.vm.search.keyWord == null || $scope.vm.search.keyWord === "") {
+                    if ($scope.vm.searchAll.keyWord == null || $scope.vm.searchAll.keyWord === "") {
                         // 硫붾돱�뿉�꽌 �꽑�깮�맂 �씠�뒋 �쑀�삎�쓣 湲곕낯�쑝濡� 異붽�
                         if ($rootScope.issueTypeMenu != null) {
                             //$scope.vm.pageTitle = $rootScope.issueTypeMenu.name;
@@ -631,19 +634,19 @@
                                 fieldKey: $rootScope.issueTypeMenu.id,
                                 fieldValue: $rootScope.issueTypeMenu.name
                             });
-
-                            //  寃��깋 議곌굔�쓣 ���옣�븳�떎.
-                            //$scope.fn.makeVmSearchObject();
-
-                            // �쁽�옱 �꽑�깮�맂 �봽濡쒖젥�듃瑜� 寃��깋 湲곕낯�쑝濡� 異붽�
-                            if ($rootScope.workProject != null && $rootScope.workProject.id > -1) {
-                                var find = findProjectSearch($rootScope.workProject.id);
-                                if (!find) {
-                                    $scope.vm.projects.push($rootScope.workProject);
-                                }
-                            }
                         }
 
+                        //  寃��깋 議곌굔�쓣 ���옣�븳�떎.
+                        //$scope.fn.makeVmSearchObject();
+
+                        // �쁽�옱 �꽑�깮�맂 �봽濡쒖젥�듃瑜� 寃��깋 湲곕낯�쑝濡� 異붽�
+                        if ($rootScope.workProject != null && $rootScope.workProject.id > -1) {
+                            var find = findProjectSearch($rootScope.workProject.id);
+                            if (!find) {
+                                $scope.vm.projects.push($rootScope.workProject);
+                            }
+                        }
+                        //$scope.vm.searchAll.keyWord = "";
                     }
 
                     //  �씠�뒋 寃��깋 議곌굔�쓣 留뚮뱺�떎.
@@ -682,7 +685,6 @@
                             } else {
                                 $scope.vm.responseData = result.data;
                             }
-
                         }
                         else {
                             SweetAlert.error($filter("translate")("issue.failedIssueLookup"), result.data.message.message); // �씠�뒋 議고쉶 �떎�뙣
@@ -1260,12 +1262,12 @@
                     if ($rootScope.isDefined(params)) {
                         // $rootScope.$broadcast("makeIssueSearch", {  projectKey : params.projectKey, issueNumber : params.issueNumber });
                          if (params.keyWord != null) {
-                             getPageList(0,false,params.keyWord);
+                             $scope.vm.searchAll.keyWord = params.keyWord;
+                             getPageList(0,false, params.keyWord);
                          }else {
                             getDetailList(params.projectKey, params.issueNumber);
                             return;
                         }
-                        $rootScope.previousGetParams = null;
                         // $rootScope.issueTypeId = $rootScope.issueTypeMenu.id;
                     }
 

--
Gitblit v1.8.0