<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> 

<mapper namespace="kr.co.i2talk.sns">
<!-- 1. 추가  쿼리 메소드 작성 -->
    <select id="kr.co.i2talk.sns.listSnsUsersByGroup"
		parameterType="Map"
		resultType="i2c.cmm.base.CommonResultMap">
	/* kr.co.i2talk.sns.listSnsUsersByGroup */
SELECT 
	users_by_group_id, 
	a.grp_id, 
	b.grp_nm,
	b.grp_tp,
	b.GRP_IMG,
	FN_GET_FILE_NM('group', a.grp_id, b.grp_img) grp_img_path,
	usr_id, 
	join_yn, join_dttm, 
	leave_dttm, 
	aprv_dttm, 
	admin_yn, 
	favo_yn, 
	a.crt_usr_id, 
	a.crt_dttm, 
	a.mod_usr_id, 
	a.mod_dttm,
	(
		select count(*) from sns_users_by_group it where it.grp_id = a.grp_id
	) member_cnt
FROM
	sns_users_by_group a,
	sns_group b
where 1=1
	and a.grp_id = b.grp_id
	and a.usr_id = #{usr_id}
<if test='favo_yn != null'>
	and a.favo_yn = #{favo_yn}
</if>
    </select>

    <select id="kr.co.i2talk.sns.viewSnsUsersByGroup"
		parameterType="Map"
		resultType="i2c.cmm.base.CommonResultMap">
	/* kr.co.i2talk.sns.viewSnsUsersByGroup */
SELECT 
	users_by_group_id, grp_id, usr_id, join_yn, join_dttm, 
	leave_dttm, aprv_dttm, admin_yn, favo_yn, crt_usr_id, 
	crt_dttm, mod_usr_id, mod_dttm,
	(
		select count(*) from sns_group it where it.grp_id = a.grp_id
	) member_cnt
FROM
	sns_users_by_group
WHERE
	users_by_group_id = #{users_by_group_id}
    </select>

    <insert id="kr.co.i2talk.sns.insertSnsUsersByGroup"
		parameterType="Map">
/* kr.co.i2talk.sns.insertSnsUsersByGroup */
INSERT INTO sns_users_by_group ( 
	users_by_group_id, grp_id, usr_id, join_yn, join_dttm, 
	leave_dttm, aprv_dttm, admin_yn, favo_yn, crt_usr_id, 
	crt_dttm, mod_usr_id, mod_dttm)
VALUES (
	#{users_by_group_id}, #{grp_id}, #{usr_id}, #{join_yn}, #{join_dttm}, 
	#{leave_dttm}, #{aprv_dttm}, #{admin_yn}, #{favo_yn}, #{crt_usr_id}, 
	#{crt_dttm}, #{mod_usr_id}, #{mod_dttm})
    </insert>
    
	<update id="kr.co.i2talk.sns.updateSnsUsersByGroup"
		parameterType="Map">
/* kr.co.i2talk.sns.updateSnsUsersByGroup */
UPDATE sns_users_by_group SET
	grp_id = #{grp_id}, 
	usr_id = #{usr_id}, 
	join_yn = #{join_yn}, 
	join_dttm = #{join_dttm}, 
	leave_dttm = #{leave_dttm}, 
	aprv_dttm = #{aprv_dttm}, 
	admin_yn = #{admin_yn}, 
	favo_yn = #{favo_yn}, 
	crt_usr_id = #{crt_usr_id}, 
	crt_dttm = #{crt_dttm}, 
	mod_usr_id = #{mod_usr_id}, 
	mod_dttm = #{mod_dttm}
WHERE
	users_by_group_id = #{users_by_group_id}
    </update>

	<delete id="kr.co.i2talk.sns.deleteSnsUsersByGroup"
		parameterType="Map">
/* kr.co.i2talk.sns.deleteSnsUsersByGroup */
DELETE FROM SNS_USERS_BY_GROUP 
WHERE
	GRP_ID = #{grp_id}
AND
	USR_ID = #{usr_id}
    </delete>
<!-- 1. 추가  쿼리 메소드 작성 끝 -->

<!-- 2. 추가  쿼리 메소드 작성 -->

	<update id="kr.co.i2talk.sns.leaveGroupMember"
		parameterType="Map">
/* kr.co.i2talk.sns.leaveGroupMember */
UPDATE sns_users_by_group SET
	 leave_dttm = #{leave_dttm}	
WHERE 1=1
<if test="@i2c.cmm.util.StringUtil@isEmpty(users_by_group_id) == false">	
	AND	users_by_group_id = #{users_by_group_id}	
</if>
<if test="@i2c.cmm.util.StringUtil@isEmpty(grp_id) == false">	
	AND GRP_ID = #{grp_id}
</if>
<if test="@i2c.cmm.util.StringUtil@isEmpty(grp_usr_id) == false">	
	AND	usr_id = #{grp_usr_id}	
</if>

    </update>

	<update id="kr.co.i2talk.sns.updateFavoYn"
		parameterType="Map">
/* kr.co.i2talk.sns.updateFavoYn */
UPDATE sns_users_by_group SET
	favo_yn = #{favo_yn}
WHERE
	users_by_group_id = #{users_by_group_id}
    </update>


	<update id="kr.co.i2talk.sns.updateSnsGroupAdmin"
		parameterType="Map">
/* kr.co.i2talk.sns.updateSnsGroupAdmin */
UPDATE sns_users_by_group SET
	admin_yn = #{admin_yn},	
	mod_usr_id = #{mod_usr_id},
	mod_dttm = #{mod_dttm}
WHERE
	grp_id = #{grp_id}
AND usr_id = #{tar_usr_id} 
    </update>

	<select id="kr.co.i2talk.sns.viewSnsGroupAdmin"
		parameterType="Map"
		resultType="i2c.cmm.base.CommonResultMap">
/* kr.co.i2talk.sns.viewSnsGroupAdmin */
SELECT grp_id, usr_id, admin_yn FROM sns_users_by_group 
 WHERE admin_yn = 'Y'
   AND grp_id = #{grp_id}
    </select>
<!-- 2. 추가  쿼리 메소드 작성 끝 -->

	<update id="kr.co.i2talk.sns.cancelLeave"
		parameterType="Map">
/* kr.co.i2talk.sns.cancelLeave */
UPDATE sns_users_by_group SET
	leave_dttm = null
WHERE
	grp_id = #{grp_id}
	AND usr_id = #{usr_id}
    </update>
    
	<update id="kr.co.i2talk.sns.joinApproval"
		parameterType="Map">
/* kr.co.i2talk.sns.joinApproval */
UPDATE sns_users_by_group SET
	leave_dttm = null,
	join_yn = #{join_yn},
	aprv_dttm = #{aprv_dttm}
WHERE
	grp_id = #{grp_id}
	AND usr_id = #{usr_id}
    </update>
    
    <update id="kr.co.i2talk.sns.groupAddUser"
		parameterType="Map">
/* kr.co.i2talk.sns.groupAddUser */
MERGE   INTO SNS_USERS_BY_GROUP
        USING DUAL
        ON (GRP_ID = #{grp_id} AND USR_ID = #{usr_id})
        WHEN MATCHED THEN
            UPDATE SET            		            		  
            		  JOIN_DTTM = DATE_FORMAT(SYSDATE(),'%Y%m%d%H%i%s')
            		, LEAVE_DTTM = NULL
        WHEN NOT MATCHED THEN
            INSERT (USERS_BY_GROUP_ID, GRP_ID, USR_ID, JOIN_YN, ADMIN_YN, 
            		JOIN_DTTM, APRV_DTTM, CRT_USR_ID, CRT_DTTM)            		
            VALUES(	#{users_by_group_id}, #{grp_id}, #{usr_id}, #{join_yn}, #{admin_yn}, 
            		DATE_FORMAT(SYSDATE(),'%Y%m%d%H%i%s'), DATE_FORMAT(SYSDATE(),'%Y%m%d%H%i%s'), #{crt_usr_id}, DATE_FORMAT(SYSDATE(),'%Y%m%d%H%i%s'))       		
            		
    </update>
    
    <update id="kr.co.i2talk.sns.addGroupOper"
		parameterType="Map">
	/* kr.co.i2talk.sns.addGroupOper */
	UPDATE SNS_USERS_BY_GROUP SET
		SUB_ADMIN_YN = #{sub_admin_yn}
	WHERE
		GRP_ID = #{grp_id}
	AND USR_ID = #{usr_id}
    </update>

</mapper>
