하석형 하석형 03-31
250331 하석형 ContextPath 관리 기능 추가
@f69bf33a30f52f99cc3c905b43712e79085188fb
 
src/main/java/com/takensoft/cms/cntxtPth/dao/CntxtPthDAO.java (added)
+++ src/main/java/com/takensoft/cms/cntxtPth/dao/CntxtPthDAO.java
@@ -0,0 +1,68 @@
+package com.takensoft.cms.cntxtPth.dao;
+
+import com.takensoft.cms.cntxtPth.vo.CntxtPthVO;
+import com.takensoft.common.Pagination;
+import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
+
+import java.util.List;
+
+/**
+ * @author 하석형
+ * @since 2025.03.31
+ * @modification
+ *     since    |    author    | description
+ *  2025.03.31  |    하석형     | 최초 등록
+ *
+ * 컨텍스트 패스 정보 관련 DAO
+ */
+@Mapper("cntxtPthDAO")
+public interface CntxtPthDAO {
+
+    /**
+     * @param pagination - 페이징 정보
+     * @return List<CntxtPthVO> - 컨텍스트 패스 정보를 담고 있는 객체 목록
+     *
+     * 컨텍스트 패스 목록 조회
+     */
+    List<CntxtPthVO> findAll(Pagination pagination);
+
+    /**
+     * @param pagination - 페이징 정보
+     * @return int - 컨텍스트 패스 목록 갯수
+     *
+     * 컨텍스트 패스 목록 갯수
+     */
+    int findAllCnt(Pagination pagination);
+
+    /**
+     * @param cntxtPthId - 컨텍스트 패스 아이디
+     * @return CntxtPthVO - 컨텍스트 패스 정보를 담고 있는 객체
+     *
+     * 컨텍스트 패스 상세 조회
+     */
+    CntxtPthVO findByCntxtPthId(String cntxtPthId);
+
+    /**
+     * @param cntxtPthVO - 컨텍스트 패스 정보
+     * @return int - 컨텍스트 패스 등록 결과
+     *
+     * 컨텍스트 패스 등록
+     */
+    int save(CntxtPthVO cntxtPthVO);
+
+    /**
+     * @param cntxtPthVO - 컨텍스트 패스 정보
+     * @return int - 컨텍스트 패스 수정 결과
+     *
+     * 컨텍스트 패스 수정
+     */
+    int update(CntxtPthVO cntxtPthVO);
+
+    /**
+     * @param cntxtPthId - 컨텍스트 패스 아이디
+     * @return int - 컨텍스트 패스 삭제 결과
+     *
+     * 컨텍스트 패스 삭제
+     */
+    int delete(String cntxtPthId);
+}
 
src/main/java/com/takensoft/cms/cntxtPth/service/CntxtPthService.java (added)
+++ src/main/java/com/takensoft/cms/cntxtPth/service/CntxtPthService.java
@@ -0,0 +1,59 @@
+package com.takensoft.cms.cntxtPth.service;
+
+import com.takensoft.cms.cntxtPth.vo.CntxtPthVO;
+
+import java.util.Map;
+
+/**
+ * @author 하석형
+ * @since 2025.03.31
+ * @modification
+ *     since    |    author    | description
+ *  2025.03.31  |    하석형     | 최초 등록
+ *
+ * 컨텍스트 패스 정보 관련 인터페이스
+ */
+public interface CntxtPthService {
+
+    /**
+     * @param params - 검색조건 및 페이징 정보
+     * @return Map<String, Object>
+     *  - list : 컨텍스트 패스 목록
+     *  - pagination : 페이징 정보
+     *
+     * 컨텍스트 패스 목록 조회
+     */
+    public Map<String, Object> findAllCntxtPth(Map<String, String> params);
+
+    /**
+     * @param cntxtPthId - 컨텍스트 패스 아이디
+     * @return CntxtPthVO - 컨텍스트 패스 정보를 담고 있는 객체
+     *
+     * 컨텍스트 패스 상세 조회
+     */
+    Map<String, Object> findByCntxtPthId(String cntxtPthId);
+
+    /**
+     * @param cntxtPthVO - 컨텍스트 패스 정보
+     * @return int - 컨텍스트 패스 등록 결과
+     *
+     * 컨텍스트 패스 등록
+     */
+    public int cntxtPthSave(CntxtPthVO cntxtPthVO);
+
+    /**
+     * @param cntxtPthVO - 컨텍스트 패스 정보
+     * @return int - 컨텍스트 패스 수정 결과
+     *
+     * 컨텍스트 패스 수정
+     */
+    public int cntxtPthUpdate(CntxtPthVO cntxtPthVO);
+
+    /**
+     * @param cntxtPthId - 컨텍스트 패스 아이디
+     * @return int - 컨텍스트 패스 삭제 결과
+     *
+     * 컨텍스트 패스 삭제
+     */
+    public int cntxtPthDelete(String cntxtPthId);
+}
 
src/main/java/com/takensoft/cms/cntxtPth/service/Impl/CntxtPthServiceImpl.java (added)
+++ src/main/java/com/takensoft/cms/cntxtPth/service/Impl/CntxtPthServiceImpl.java
@@ -0,0 +1,177 @@
+package com.takensoft.cms.cntxtPth.service.Impl;
+
+import com.takensoft.cms.cntxtPth.dao.CntxtPthDAO;
+import com.takensoft.cms.cntxtPth.service.CntxtPthService;
+import com.takensoft.cms.cntxtPth.vo.CntxtPthVO;
+import com.takensoft.common.Pagination;
+import com.takensoft.common.exception.CustomDeleteFailException;
+import com.takensoft.common.exception.CustomInsertFailException;
+import com.takensoft.common.exception.CustomUpdateFailException;
+import com.takensoft.common.idgen.service.IdgenService;
+import com.takensoft.common.util.JWTUtil;
+import lombok.RequiredArgsConstructor;
+import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import org.springframework.dao.DataAccessException;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 하석형
+ * @since 2025.03.31
+ * @modification
+ *     since    |    author    | description
+ *  2025.03.31  |    하석형     | 최초 등록
+ *
+ * EgovAbstractServiceImpl : 전자정부 상속
+ * CntxtPthService : 컨텍스트 패스 정보 관련 인터페이스 상속
+ *
+ * 컨텍스트 패스 정보 관련 인터페이스 구현체
+ */
+@Service("cntxtPthService")
+@RequiredArgsConstructor
+public class CntxtPthServiceImpl extends EgovAbstractServiceImpl implements CntxtPthService {
+    private final CntxtPthDAO cntxtPthDAO;
+    private final JWTUtil jwtUtil;
+    private final IdgenService cntxtPthIdgn;
+
+    /**
+     * @param params - 검색조건 및 페이징 정보
+     * @return Map<String, Object>
+     *  - list : 컨텍스트 패스 목록
+     *  - pagination : 페이징 정보
+     *  @throws DataAccessException - db 관련 예외 발생 시
+     *  @throws Exception - 그 외 예외 발생 시
+     *
+     * 컨텍스트 패스 목록 조회
+     */
+    @Override
+    public Map<String, Object> findAllCntxtPth(Map<String, String> params) {
+        try {
+            Map<String, Object> result = new HashMap<String, Object>(); // 반환 객체 생성
+            Pagination search = new Pagination(0, params); // 검색조건 객체 생성
+            int cnt = cntxtPthDAO.findAllCnt(search); // 게시물 갯수
+            Pagination pagination = new Pagination(cnt, params); // 게시물 갯수 조회 후 검색조건 객체 초기화
+            List<CntxtPthVO> list = cntxtPthDAO.findAll(pagination); // 목록 조회
+
+            result.put("list", list);
+            result.put("pagination", pagination);
+
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
+    }
+
+    /**
+     * @param cntxtPthId - 컨텍스트 패스 코드
+     * @return AuthorVO - 컨텍스트 패스 정보를 담고 있는 객체
+     * @throws DataAccessException - db 관련 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
+     * 컨텍스트 패스 상세 조회
+     */
+    @Override
+    public Map<String, Object> findByCntxtPthId(String cntxtPthId) {
+        try {
+            Map<String, Object> result = new HashMap<String, Object>(); // 반환 객체 생성
+            CntxtPthVO cntxtPth = new CntxtPthVO();
+            if (cntxtPthId != null && !cntxtPthId.equals("")) {
+                cntxtPth = cntxtPthDAO.findByCntxtPthId(cntxtPthId);
+            }
+            result.put("cntxtPth", cntxtPth);
+
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
+    }
+
+    /**
+     * @param cntxtPthVO - 컨텍스트 패스 정보
+     * @return int - 컨텍스트 패스 등록 결과
+     * @throws CustomInsertFailException - 컨텍스트 패스 등록 예외 발생 시
+     * @throws DataAccessException - db 관련 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
+     * 컨텍스트 패스 등록
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int cntxtPthSave(CntxtPthVO cntxtPthVO) {
+        try {
+            // 등록된 토큰에서 사용자 정보 조회
+            cntxtPthVO.setRgtr(jwtUtil.getWriter());
+            cntxtPthVO.setCntxtPthId(cntxtPthIdgn.getNextStringId()); // 컨텍스트 패스 아이디 생성
+            int result = cntxtPthDAO.save(cntxtPthVO);
+            if(result == 0) {
+                throw new CustomInsertFailException("컨텍스트 패스 등록에 실패했습니다.");
+            }
+
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
+    }
+
+    /**
+     * @param cntxtPthVO - 컨텍스트 패스 정보
+     * @return int - 컨텍스트 패스 수정 결과
+     * @throws CustomUpdateFailException - 컨텍스트 패스 수정 예외 발생 시
+     * @throws DataAccessException - db 관련 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
+     * 컨텍스트 패스 수정
+     */
+    @Override
+    public int cntxtPthUpdate(CntxtPthVO cntxtPthVO) {
+        try {
+            // 등록된 토큰에서 사용자 정보 조회
+            cntxtPthVO.setMdfr(jwtUtil.getWriter());
+            int result = cntxtPthDAO.update(cntxtPthVO);
+            if(result == 0) {
+                throw new CustomUpdateFailException("컨텍스트 패스 수정에 실패했습니다.");
+            }
+
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
+    }
+
+    /**
+     * @param cntxtPthId - 컨텍스트 패스 정보
+     * @return int - 컨텍스트 패스 삭제 결과
+     * @throws CustomDeleteFailException - 컨텍스트 패스 삭제 예외 발생 시
+     * @throws DataAccessException - db 관련 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
+     * 컨텍스트 패스 삭제
+     */
+    @Override
+    public int cntxtPthDelete(String cntxtPthId) {
+        try {
+            int result = cntxtPthDAO.delete(cntxtPthId);
+            if(result == 0) {
+                throw new CustomDeleteFailException("컨텍스트 패스 삭제에 실패했습니다.");
+            }
+
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
+    }
+}
 
src/main/java/com/takensoft/cms/cntxtPth/vo/CntxtPthVO.java (added)
+++ src/main/java/com/takensoft/cms/cntxtPth/vo/CntxtPthVO.java
@@ -0,0 +1,34 @@
+package com.takensoft.cms.cntxtPth.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * @author  : 하석형
+ * @since   : 2025.03.31
+ * @modification
+ *     since    |    author    | description
+ *  2025.03.31  |    하석형     | 최초 등록
+ *
+ * 컨텍스트 패스 정보 관련 VO
+ */
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public class CntxtPthVO {
+
+    private String cntxtPthId;       // 컨텍스트 패스 아이디
+    private String path;             // 경로
+    private String useYn;            // 사용여부
+    private String sysPvsnYn;        // 시스템 제공 여부 ( 0: 시스템, 1: 사용자 ) -> 시스템에서 제공되는 데이터는 사용자가 제거하지 못하도록 하기 위한 설정값
+    private String rgtr;             // 등록자
+    private String rgtrNm;           // 등록자명
+    private String regDt;            // 등록일
+    private String mdfr;             // 수정자
+    private String mdfrNm;           // 수정자명
+    private String mdfcnDt;          // 수정일
+
+}
 
src/main/java/com/takensoft/cms/cntxtPth/web/CntxtPthController.java (added)
+++ src/main/java/com/takensoft/cms/cntxtPth/web/CntxtPthController.java
@@ -0,0 +1,97 @@
+package com.takensoft.cms.cntxtPth.web;
+
+import com.takensoft.cms.cntxtPth.service.CntxtPthService;
+import com.takensoft.cms.cntxtPth.vo.CntxtPthVO;
+import com.takensoft.common.message.MessageCode;
+import com.takensoft.common.util.ResponseUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 하석형
+ * @since 2025.03.31
+ * @modification
+ *     since    |    author    | description
+ *  2025.03.31  |    하석형     | 최초 등록
+ *
+ * 컨텍스트 패스 정보 관련 컨트롤러
+ */
+@RestController
+@RequiredArgsConstructor
+@Slf4j
+@RequestMapping("/admin/cntxtPth")
+public class CntxtPthController {
+
+    private final ResponseUtil resUtil;
+    private final CntxtPthService cntxtPthService;
+
+    /**
+     * @param cntxtPthVO - 컨텍스트 패스 정보
+     * @return ResponseEntity - 컨텍스트 패스 등록 결과를 포함하는 응답
+     *
+     * 컨텍스트 패스 등록
+     */
+    @PostMapping("/saveProc.json")
+    public ResponseEntity<?> saveProc(@RequestBody CntxtPthVO cntxtPthVO) {
+        // 컨텍스트 패스 등록
+        int result = cntxtPthService.cntxtPthSave(cntxtPthVO);
+        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
+    }
+
+    /**
+     * @param params - 검색조건 및 페이징 정보
+     * @return ResponseEntity - 컨텍스트 패스 목록 조회 결과를 포함하는 응답
+     *
+     * 컨텍스트 패스 목록 조회
+     */
+    @PostMapping("/findAll.json")
+    public ResponseEntity<?> findAll(@RequestBody Map<String, String> params) {
+        Map<String, Object> result = cntxtPthService.findAllCntxtPth(params);
+        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
+    }
+
+    /**
+     * @param cntxtPthVO - 컨텍스트 패스 정보
+     * @return ResponseEntity - 컨텍스트 패스 상세 조회 결과를 포함하는 응답
+     *
+     * 컨텍스트 패스 상세 조회
+     */
+    @PostMapping("/findByCntxtPth.json")
+    public ResponseEntity<?> findByCntxtPth(@RequestBody CntxtPthVO cntxtPthVO) {
+        Map<String, Object> result = cntxtPthService.findByCntxtPthId(cntxtPthVO.getCntxtPthId());
+        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
+    }
+
+    /**
+     * @param cntxtPthVO - 컨텍스트 패스 정보
+     * @return ResponseEntity - 컨텍스트 패스 수정 결과를 포함하는 응답
+     *
+     * 컨텍스트 패스 수정
+     */
+    @PostMapping("/updateProc.json")
+    public ResponseEntity<?> updateProc(@RequestBody CntxtPthVO cntxtPthVO) {
+        int result = cntxtPthService.cntxtPthUpdate(cntxtPthVO);
+        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
+    }
+
+    /**
+     * @param cntxtPthVO - 컨텍스트 패스 정보
+     * @return ResponseEntity - 컨텍스트 패스 삭제 결과를 포함하는 응답
+     *
+     * 컨텍스트 패스 삭제
+     */
+    @PostMapping("/deleteProc.json")
+    public ResponseEntity<?> deleteProc(@RequestBody CntxtPthVO cntxtPthVO) {
+        int result = cntxtPthService.cntxtPthDelete(cntxtPthVO.getCntxtPthId());
+        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
+    }
+}
src/main/java/com/takensoft/common/idgen/context/ContextIdgen.java
--- src/main/java/com/takensoft/common/idgen/context/ContextIdgen.java
+++ src/main/java/com/takensoft/common/idgen/context/ContextIdgen.java
@@ -178,4 +178,15 @@
         idgenServiceImpl.setTblNm("LOGIN_MODE_ID");
         return idgenServiceImpl;
     }
+
+    // 컨텍스트 패스 관리
+    @Bean(name = "cntxtPthIdgn")
+    public IdgenService cntxtPthIdgnIdgen() {
+        IdgenService idgenServiceImpl = new IdgenService();
+        idgenServiceImpl.setCipers(15);
+        idgenServiceImpl.setFillChar('0');
+        idgenServiceImpl.setPrefix("CNTXT_PTH_");
+        idgenServiceImpl.setTblNm("CNTXT_PTH_ID");
+        return idgenServiceImpl;
+    }
 }
(No newline at end of file)
 
src/main/resources/mybatis/mapper/cntxtPth/cntxtPth-SQL.xml (added)
+++ src/main/resources/mybatis/mapper/cntxtPth/cntxtPth-SQL.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+    작 성 자 : 하석형
+    작 성 일 : 2025.03.31
+    이   력
+    |    수 정 일    |    수 정 자    |    내    용
+    ========================================================================================================
+    |  2025.03.31   |     하석형     | - 최초 등록
+    ========================================================================================================
+-->
+<mapper namespace="com.takensoft.cms.cntxtPth.dao.CntxtPthDAO">
+    <sql id="selectCntxtPth">
+         SELECT cpm.cntxt_pth_id
+             , cpm.path
+             , cpm.use_yn
+             , cpm.sys_pvsn_yn
+             , cpm.rgtr
+             , (SELECT mbr_nm FROM mbr_info WHERE mbr_id = cpm.rgtr) AS rgtr_nm
+             , TO_CHAR(cpm.reg_dt, 'YYYY-MM-DD HH24:MI') AS reg_dt
+             , cpm.mdfr
+             , (SELECT mbr_nm FROM mbr_info WHERE mbr_id = cpm.mdfr) AS mdfr_nm
+             , TO_CHAR(cpm.mdfcn_dt, 'YYYY-MM-DD HH24:MI') AS mdfcn_dt
+          FROM cntxt_pth_mng cpm
+    </sql>
+
+    <sql id="selectRequirement">
+        <if test="searchText != null and searchText != ''">
+            AND cpm.path LIKE '%' || #{searchText} || '%'
+        </if>
+    </sql>
+
+    <!--
+        작 성 자 : 하석형
+        작 성 일 : 2025.03.31
+        내   용 : 컨텍스트 패스 목록 조회
+    -->
+    <select id="findAll" parameterType="Pagination" resultType="CntxtPthVO">
+        <include refid="selectCntxtPth" />
+         WHERE 1=1
+        <include refid="selectRequirement" />
+        LIMIT #{recordSize} OFFSET #{limitStart}
+    </select>
+
+    <!--
+        작 성 자 : 하석형
+        작 성 일 : 2025.03.31
+        내   용 : 컨텍스트 패스 목록 갯수 조회
+    -->
+    <select id="findAllCnt" parameterType="Pagination" resultType="Integer">
+        SELECT COUNT(cpm.cntxt_pth_id)
+          FROM cntxt_pth_mng cpm
+         WHERE 1=1
+        <include refid="selectRequirement" />
+    </select>
+
+    <!--
+        작 성 자 : 하석형
+        작 성 일 : 2025.03.31
+        내   용 : 컨텍스트 패스 상세 조회
+    -->
+    <select id="findByCntxtPthCode" parameterType="String" resultType="CntxtPthVO">
+        <include refid="selectCntxtPth" />
+         WHERE cpm.cntxt_pth_id = #{cntxtPthId}
+    </select>
+
+    <!--
+        작 성 자 : 하석형
+        작 성 일 : 2025.03.31
+        내   용 : 컨텍스트 패스 등록
+    -->
+    <insert id="save" parameterType="CntxtPthVO">
+        INSERT INTO cntxt_pth_mng (
+            cntxt_pth_id
+            , path
+            , use_yn
+            , sys_pvsn_yn
+            , rgtr
+            , reg_dt
+        ) VALUES (
+            #{cntxtPthId}
+            , #{path}
+            , 'Y'
+            , 1
+            , #{rgtr}
+            , NOW()
+        )
+    </insert>
+
+    <!--
+        작 성 자 : 하석형
+        작 성 일 : 2025.03.31
+        내   용 : 컨텍스트 패스 수정
+    -->
+    <update id="update" parameterType="CntxtPthVO">
+        UPDATE cntxt_pth_mng
+           SET path = #{path}
+             , use_yn = #{useYn}
+             , mdfr = #{mdfr}
+             , mdfcn_dt = NOW()
+        WHERE cntxt_pth_id = #{cntxtPthId}
+    </update>
+
+    <!--
+        작 성 자 : 하석형
+        작 성 일 : 2025.03.31
+        내   용 : 컨텍스트 패스 삭제
+    -->
+    <delete id="delete" parameterType="String">
+        DELETE FROM cntxt_pth_mng
+        WHERE cntxt_pth_id = #{cntxtPthId}
+    </delete>
+</mapper>(No newline at end of file)
Add a comment
List