= 코드 관리

== 개요
그룹 코드를 등록하고 그룹 코드의 공통 코드를 등록하여 추가, 수정 및 삭제를 관리한다. +
groupcodes는 그룹 코드를 나타내고, commcodes는 공통 코드를 나타낸다. 그룹 코드가 상위, 공통 코드가 그룹 코드의 하위 개념이다.

== Table
* 그룹 코드 : TC_CF_COMM_CODE_TYPE
* 공통 코드 : TC_CF_COMM_CODE

== API
.CommCodeController.java

. 그룹 코드 목록 조회 +
GET /commcode/groupcodes-with-paging +
Query ID : selectGroupCodePagingList
.. 검색조건에는 코드, 코드명, 설명이 있다. +
"그룹 코드 목록 조회(페이징)"을 사용하며 각 조건에 맞게 쿼리를 실행한다. +
특히 코드명은 한글, 영어, 중국어에 상관없이 입력한 값의 대소문자를 가리지 않고 1글자만 입력해도 검색이 된다.
.. orderBy는 기본이 COMM_CODE_TYPE_CODE(코드명) 이다.

. 그룹 코드 등록 +
POST /commcode/groupcodes
** 그룹 코드는 20자 이내로 입력해야 한다. 영문자와 숫자, 특수문자만 사용할 수 있고 한글은 입력이 안 되게 정규식을 사용하여 프론트단에서 유효성 체크를 한다.

. 그룹 코드 삭제 +
DELETE /commcode/groupcodes/{groupCode}
.. 그룹 코드는 TC_CF_COMM_CODE_TYPE.DELETE_YN 컬럼 값을 true로 업데이트 하는 식으로 삭제한다.
... 먼저 그룹 코드에 추가되어 있는 공통 코드의 하위를 전부 조회하여 찾은 후 공통 코드 전부 TC_CF_COMM_CODE.DELETE_YN 컬럼을 true로 업데이트 한다.
.... Query ID : updateCommCodeDeleted
... 그 후 그룹 코드의 DELETE_YN 컬럼을 true로 업데이트 하여 삭제한다.
.... Query ID : updateGroupCode

. 공통 코드 추가 +
POST /commcode/groupcodes/{groupCode}/commcodes
** 추가시에 중복체크하고 없으면 등록하는데 TC_CF_COMM_CODE.CODE_ID는 IdGenService를 사용하여 유니크한 ID를 만들어서 등록한다.

. 공통 코드 삭제 +
DELETE /commcode/groupcodes/{groupCode}/commcodes/{commCodeId}
** 삭제하려는 공통 코드의 자신과 자식들 코드를 조회하여 DELETE_YN 컬럼 값을 true로 업데이트 하는 식으로 삭제한다.
*** Query ID : updateCommCodeDeleted

== 화면
그룹 코드 및 그룹코드에 대한 공통 코드를 추가, 수정 및 삭제 기능을 수행하여 관리한다. +

image::commonCodeList.png[]

=== 기능별 설명
- 등록 : 코드 정보를 등록하는 화면으로 이동

== 코드 등록
그룹 코드를 등록 +
* 영문자와 숫자, '-', '_' 2개의 특수문자만 사용하여 등록 가능하다.

image::commonCodeDetail_Reg.png[]

=== 기능별 설명
- 목록 : 코드 관리 화면으로 이동
- 저장 : 그룹 코드 정보를 저장

== 코드 상세 정보
그룹 코드의 상세 정보를 수정, 삭제하고 그에 대한 공통 코드를 추가, 수정, 삭제하여 관리

image::commonCodeDetail.png[]

=== 기능별 설명
==== 그룹코드 정보
- 엑셀다운로드 : 조회 조건과 동일한 조회 결과 값을 담은 엑셀 파일을 다운로드 하는 기능
- 목록 : 코드 관리 화면으로 이동
- 삭제 : 그룹코드를 삭제
- 저장 : 수정된 그룹코드 상세 정보를 수정

==== 공통코드 목록
- 추가 : 공통코드를 등록하는 Popup 호출
- 수정 : 공통코드를 수정하는 Popup 호출
- 삭제 : 공통코드를 삭제