<?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">

<mapper namespace="com.i2sema.board.dao.BoardDAO">
        
    <sql id="searchQuery">  
    	<if test="searchKeyword != null and searchKeyword !=''">  
          	AND (
				  SUBJECT LIKE CONCAT('%', #{searchKeyword}, '%')
				  OR CONTENTS LIKE CONCAT('%', #{searchKeyword}, '%')
			    )
      	</if>      
     	 <if test="searchCondition != null and searchCondition !=''">
         	AND B.CATEGORY_SE = #{searchCondition}
         </if> 	
      	<if test="@i2c.cmm.util.StringUtil@isEmpty(board_tp) == false">
      		AND B.BOARD_TP = #{board_tp}
      	</if> 
      	<if test="@i2c.cmm.util.StringUtil@isEmpty(usr_id) == false">
      		AND B.REGIST_ID = #{usr_id}
      	</if>     	 
    </sql>        
    
    <sql id="countBoard">  
   	 SELECT 
            COUNT(B.BOARD_ID)
       FROM BOARD B
      WHERE 1=1
     <include refid="searchQuery"/>
    </sql>
    
    <select id="checkBoard" parameterType="Map" resultType="int">
        /* [com.i2sema.board.dao.BoardDAO.checkBoard] 게시물 유무 체크 */
        SELECT 
               COUNT(B.BOARD_ID)
         FROM BOARD B
	     WHERE B.BOARD_ID = #{board_id}	
    </select>
    
    <select id="listBoard" parameterType="Map" resultType="i2c.cmm.base.CommonResultMap">
        /* [com.i2sema.board.dao.BoardDAO.listBoard] 게시판 목록 API */
        SELECT *
        FROM (
            SELECT 
            	  B.*
            	, (@ROWNUM  := @ROWNUM + 1) RNUM  
            	, (<include refid="countBoard"/>) TOT_CNT          	
              FROM (
	               SELECT 
	                     B.BOARD_ID
	                   , B.SUBJECT  
	                   , B.REGIST_DE
	                   	<if test="board_tp == 'BRTP01' or board_tp == 'BRTP03'">
				        , B.NOTICE_AT
				      	</if> 	
			           	<if test="board_tp == 'BRTP01' or board_tp == 'BRTP02' or board_tp == 'BRTP03'">
				        , B.LOCK_AT
				      	</if>
				      	<if test="board_tp == 'BRTP04'">
			            , B.CONTENTS
				      	, B.ANSWER_CONTENTS
			            </if>
			            <if test="board_tp == 'BRTP02' or board_tp == 'BRTP04'">
			            , B.CATEGORY_SE
			            , FN_GET_CODE_NM('CATEGORY_SE',B.CATEGORY_SE) CATEGORY_SE_NM
			            </if>
			            <if test="board_tp == 'BRTP02'">
			            , B.BOARD_STTUS
			            , FN_GET_CODE_NM('BOARD_STTUS',B.BOARD_STTUS) BOARD_STTUS_NM
			            </if>
	                FROM BOARD B
			   	   WHERE 1=1	
				     <include refid="searchQuery"/>		               	               
            ) B, (SELECT @ROWNUM := 0 FROM DUAL) ROWNUM
            ORDER BY <if test="board_tp == 'BRTP01' or board_tp == 'BRTP03'">NOTICE_AT DESC, </if>
            REGIST_DE DESC	
        ) C        
		ORDER BY RNUM
		LIMIT #{page_index} , #{page_limit}		 		
    </select>
    
    <resultMap id="boardResultMap" type="Map">
    	 <id 	 property = "post_id" 			column = "post_id" 		 	 />
    	 <result property = "board_id" 			column = "board_id" 		 />     
	  	 <result property = "board_tp" 			column = "board_tp" 		 />     
		 <result property = "ntice_start_dt" 	column = "ntice_start_dt"  	 />     
		 <result property = "ntice_end_dt" 		column = "ntice_end_dt" 	 /> 
		 <result property = "board_password" 	column = "board_password" 	 />         
		 <result property = "email" 			column = "email" 			 />     
		 <result property = "lock_at" 			column = "lock_at" 			 />     
		 <result property = "notice_at" 		column = "notice_at" 		 />     
		 <result property = "subject" 			column = "subject" 			 />     
		 <result property = "contents" 			column = "contents" 		 />     
		 <result property = "category_se" 		column = "category_se" 		 />	
		 <result property = "category_se_nm" 	column = "category_se_nm"	 />  
		 <result property = "phn_num" 			column = "phn_num" 			 />     
		 <result property = "sms_at" 			column = "sms_at" 			 />     
		 <result property = "board_sttus" 		column = "board_sttus" 		 /> 
		 <result property = "board_sttus_nm"	column = "board_sttus_nm"	 />    
		 <result property = "answer_contents" 	column = "answer_contents" 	 />     
		 <result property = "answer_push_at" 	column = "answer_push_at"  	 /> 
		 <result property = "regist_id" 		column = "regist_id"  	 	 />
		 <result property = "regist_id_nm" 		column = "regist_id_nm"  	 />
		 <result property = "regist_de" 		column = "regist_de"  	 	 />
		 <collection property = "listAttach"    column = "{post_id = post_id}" javaType="ArrayList" ofType="i2c.cmm.base.CommonResultMap"   select = "com.i2sema.board.dao.BoardDAO.attachBoard"/>
	</resultMap>
        
    <select id="viewBoard" parameterType="Map" resultMap="boardResultMap">
        /* [com.i2sema.board.dao.BoardDAO.viewBoard] 게시판 목록 API */
        SELECT 
               B.BOARD_ID
		     , B.REGIST_ID
			 , B.REGIST_DE
		     , B.SUBJECT
		     , B.CONTENTS
		     , B.LOCK_AT
		 	<if test="board_tp == 'BRTP01' or board_tp == 'BRTP03'">
             , B.NOTICE_AT
             , FN_GET_USR_NM(B.REGIST_ID) REGIST_ID_NM
             , B.NTICE_START_DT
             , B.NTICE_END_DT  
             , B.BOARD_PASSWORD
		 	</if>
		 	<if test="board_tp == 'BRTP02'">
		 	 , B.CATEGORY_SE
             , FN_GET_CODE_NM('CATEGORY_SE',B.CATEGORY_SE) CATEGORY_SE_NM
             , B.BOARD_STTUS
             , FN_GET_CODE_NM('BOARD_STTUS',B.BOARD_STTUS) BOARD_STTUS_NM
             , B.ANSWER_CONTENTS
		 	</if>
		     , (SELECT
		     		   POST_ID
		     	  FROM SNS_POST SP
		     	 WHERE SP.TAR_OBJ_ID = B.BOARD_ID
		     	 LIMIT 1
		     	) POST_ID
	      FROM BOARD B
	     WHERE B.BOARD_ID = #{board_id}	
      		<if test="@i2c.cmm.util.StringUtil@isEmpty(board_password) == false">
     		  AND B.BOARD_PASSWORD = #{board_password}        		 
     	   </if>    
    </select>
    
    <insert id="saveBoard" parameterType="Map">
        /* [com.i2sema.board.dao.BoardDAO.saveBoard] 게시판 등록 */
        INSERT INTO BOARD
			(
			  BOARD_ID
            , BOARD_TP
            , NTICE_START_DT
            , NTICE_END_DT
            , BOARD_PASSWORD             
            , EMAIL
            , LOCK_AT
            , NOTICE_AT
            , SUBJECT
            , CONTENTS
            , CATEGORY_SE
            , PHN_NUM
            , SMS_AT
            , BOARD_STTUS
            , ANSWER_CONTENTS
		    , ANSWER_PUSH_AT
			, REGIST_ID
			, REGIST_DE		
			, UPDT_ID
			, UPDT_DE	
			)
		VALUES 
			(
			  #{board_id}
            , #{board_tp}
            , #{ntice_start_dt}
            , #{ntice_end_dt} 
            , #{board_password}     
            , #{email}
            , #{lock_at}
            , #{notice_at}
            , #{subject}
            , #{contents}
            , #{category_se}
            , #{phn_num}
            , #{sms_at}
            , 'BRST01'
            , #{answer_contents}
		    , #{answer_push_at}	
			, #{usr_id}
			, DATE_FORMAT(SYSDATE(), '%Y%m%d%H%i%s')
			, #{usr_id}
			, DATE_FORMAT(SYSDATE(), '%Y%m%d%H%i%s')
			)
    </insert>
    
    <select id="attachBoard" parameterType="Map" resultType="i2c.cmm.base.CommonResultMap">
        /* [com.i2sema.board.dao.BoardDAO.attachBoard] 게시판 첨부목록 API */
    	SELECT 
    		   ATTACH_FILE_ID
			 , POST_ID			 		 
			 , ATTACH_TP_CD
			 , ATTACH_NM			 
			 , CRT_USR_ID
			 , CRT_DTTM			 
			 , PHYSCL_FILE_NM
			 , CONCAT('/',Lower(TAR_TP), '/', POST_ID, '/', PHYSCL_FILE_NM) PHYSCL_FILE_PATH	
			 , SUBSTRING(PHYSCL_FILE_NM FROM (LOCATE('.',PHYSCL_FILE_NM)+1)) FILE_EXT	
			 , TAR_TP
			 , TAR_SUB_TP	 
		FROM
			SNS_ATTACH
		WHERE 1=1
			AND POST_ID = #{post_id}
		ORDER BY CRT_DTTM DESC
	</select>
	
	<select id="listBoardMenu" parameterType="Map" resultType="i2c.cmm.base.CommonResultMap">
        /* [com.i2sema.board.dao.BoardDAO.listBoardMenu] 게시판 메뉴목록 API */
		SELECT 
			   BM.BOARD_TP
			 , BM.BOARD_MASTER_NM
			 , BM.GRP_NM
			 , BM.SRT_ORD			 
		  FROM BOARD_MASTER BM
	  	 ORDER BY SRT_ORD
	 </select>
    
</mapper>