= 메일 그룹 관리

== 개요

메일 그룹 및 맵핑 정보 관리 기능 제공.

== UI Design & Function

=== 메일 그룹 목록(MailGroupList.vue)

메일 그룹 등록, 수정 및 삭제가 가능하다.

image::mailGroupList.png[mailGroupList.png]

* 기능 설명
. 메일 그룹 목록 조회
. 메일 그룹 상세정보 조회
. 메일 그룹 등록 : 등록 버튼 클릭 시 메일 그룹 입력 popup 호출.
. 메일 그룹 수정 : checkbox 선택 후 수정 버튼 클릭 시 변경을 위한 popup 호출.
. 메일 그룹 삭제 : checkbox 선택 후 삭제 버튼 클릭 시 삭제.


=== 메일 그룹 맵핑 수정(MailGroupMappEdit.vue)

메일 그룹 맵핑 목록 등록 및 삭제가 가능하다.

image::mailGroupMappEdit.png[mailGroupMappList.png]

* 기능 설명
. 메일 그룹 맵핑 목록 조회
. 메일 그룹 맵핑 저장
.. 사용자 추가 : 버튼 클릭 시 사용자 추가 popup 호출.
.. 역할 추가 : 버튼 클릭 시 역할 추가 popup 호출.
.. 업무그룹 추가 : 버튼 클릭 시 업무그룹 추가 popup 호출.

== API & Service

=== API

* API : MailGroupController.java

. 메일 그룹 목록 조회 : GET /mail-group-with-paging
. 메일 그룹 상세정보 조회 : GET /mail-group/{mailGroupId}
. 메일 그룹 등록 : POST /mail-group
. 메일 그룹 수정 : PUT /mail-group
. 메일 그룹 삭제 : DELETE /mail-group
. 메일 그룹 맵핑 목록 조회 : GET /mail-group-mapp-with-paging
. 메일 그룹 맵핑 저장 : POST /mail-group-mapp/{mailGroupId}

* Service : MailGroupServiceImpl.java

. 메일 그룹 맵핑 저장 +
맵핑 정보 저장 시 기등록 되어 있는 맵핑 목록 삭제 후
전체 목록을 다시 저장하도록 구현.

[source,java]
----
@Override
@Transactional
public void saveMailGroupMapp(String mailGroupId, List<MailGroupMapp> mailGroupMappList) {
	
	mailGroupDao.deleteMailGroupMapp(mailGroupId);
	
	for(MailGroupMapp mailGroupMapp : mailGroupMappList) {
		mailGroupMapp.setMailGroupId(mailGroupId);
		mailGroupDao.insertMailGroupMapp(mailGroupMapp);
	}
}
----



== Entity Table & SQL

=== Entity Table

* TN_CF_MAIL_GROUP : 메일 그룹
* TN_CF_MAIL_GROUP_MAPP : 메일 그룹 맵핑

=== SQL

. 메일 그룹 목록 조회

[source,xml]
----
<select id="selectMailGroupPagingList" parameterType="java.util.HashMap" resultMap="mailGroupResult">
	SELECT T.*
	FROM   (SELECT ROW_NUMBER() OVER(ORDER BY LABEL ASC) ROWNUM,
	--생략--
----

[start=2]
. 메일 그룹 상세정보 조회

[source,xml]
----
<select id="selectMailGroup" parameterType="java.util.HashMap" resultMap="mailGroupResult">
	SELECT <include refid="columnMailGroup" />,
	       (SELECT USER_NAME
	       --생략--
----

[start=3]
. 메일그룹 등록

[source,xml]
----
<insert id="insertMailGroup" parameterType="java.util.HashMap">
	INSERT INTO <include refid="tableMailGroup" />
	(<include refid="columnMailGroup" />)
	--생략--
----

[start=4]
. 메일그룹 수정

[source,xml]
----
<update id="updateMailGroup" parameterType="java.util.HashMap">
	UPDATE <include refid="tableMailGroup" />
	SET    LABEL = #{label},
	--생략--
----

[start=5]
. 메일그룹 삭제

[source,xml]
----
<delete id="deleteMailGroup" parameterType="java.util.HashMap">
	UPDATE <include refid="tableMailGroup" />
	SET    DELETED = '1',
	--생략--
----

[start=6]
. 메일그룹 맵핑 목록 조회

[source,xml]
----
<delete id="deleteMailGroup" parameterType="java.util.HashMap">
	UPDATE <include refid="tableMailGroup" />
	SET    DELETED = '1',
	--생략--
----

[start=7]
. 메일그룹 맵핑 저장

[source,xml]
----
<delete id="deleteMailGroupMapp" parameterType="java.util.HashMap">
	DELETE FROM <include refid="tableMailGroupMapp" />
	WHERE  MAIL_GROUP_ID = #{mailGroupId}
</delete>

<insert id="insertMailGroupMapp" parameterType="java.util.HashMap">
	INSERT INTO <include refid="tableMailGroupMapp" />
	(<include refid="columnMailGroupMapp" />)
	--생략--
----