<?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.v2.admin.menu.dao.MenuDAO">
	<select id="listMenu" parameterType="java.util.Map" resultType="java.util.Map">
		<![CDATA[
			/* [com.i2sema.v2.admin.menu.dao.MenuDAO.listMenu] 메뉴 목록 */
			WITH RECURSIVE menu as (
				SELECT		*, 1 AS level, sort AS padding
				FROM			admin_menu
				WHERE		pid IS NULL
				UNION ALL
				SELECT		a.*, (m.level + 1), CONCAT(m.padding, a.sort) AS padding
				FROM			admin_menu a
									INNER JOIN menu m
										ON a.pid = m.seq
			)
			SELECT	DISTINCT seq, pid, sort, name, url, sub_url AS subUrl, header_url AS headerUrl, auth, level, padding
			FROM	(
				SELECT	m.seq, m.pid, m.sort, m.name, m.url, m.sub_url, m.header_url, m.auth, m.level, lpad(m.padding, 10, '0') AS padding
				FROM		menu m
				WHERE	auth IS NULL
				UNION ALL
				SELECT	m.seq, m.pid, m.sort, m.name, m.url, m.sub_url, m.header_url, m.auth, m.level, lpad(m.padding, 10, '0') AS padding
				FROM		menu m
								INNER JOIN admin_menu_auth a
									ON a.seq = m.seq
										AND a.type = 'role'
				WHERE	m.auth IS NOT NULL
									AND a.role = #{role}
				UNION ALL
				SELECT	m.seq, m.pid, m.sort, m.name, m.url, m.sub_url, m.header_url, m.auth, m.level, lpad(m.padding, 10, '0') as padding
				FROM		menu m
						INNER JOIN admin_menu_auth a
							ON a.seq = m.seq
								AND a.type = 'level'
				WHERE	m.auth IS NOT NULL
						AND a.role = #{level}
			) a
			ORDER BY padding
		]]>
	</select>
</mapper>