<?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="org.dromara.visor.module.infra.dao.SystemRoleDAO">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="org.dromara.visor.module.infra.entity.domain.SystemRoleDO">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="code" property="code"/>
        <result column="status" property="status"/>
        <result column="description" property="description"/>
        <result column="create_time" property="createTime"/>
        <result column="update_time" property="updateTime"/>
        <result column="creator" property="creator"/>
        <result column="updater" property="updater"/>
        <result column="deleted" property="deleted"/>
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, name, code, status, description, create_time, update_time, creator, updater, deleted
    </sql>

    <select id="getRoleIdByUserIdAndRoleCode" resultType="java.lang.Long">
        SELECT role_id
        FROM system_user_role
        WHERE user_id = #{userId}
        AND deleted = 0
        AND role_id IN
        (SELECT id
        FROM system_role
        WHERE deleted = 0
        AND status = 1
        AND code IN
        <foreach collection="codeList" item="item" open="(" close=")" separator=",">
            #{item}
        </foreach>
        )
    </select>

    <select id="getPermissionByRoleIdAndPermission" resultType="java.lang.String">
        SELECT m.permission
        FROM system_menu m
        LEFT JOIN system_role_menu rm ON rm.menu_id = m.id
        WHERE rm.deleted = 0
        AND m.deleted = 0
        AND m.type = 3
        AND m.status = 1
        <if test="permissionList != null and permissionList.size() > 0">
            AND m.permission IN
            <foreach collection="permissionList" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        AND rm.role_id IN
        <foreach collection="roleIdList" item="item" open="(" close=")" separator=",">
            #{item}
        </foreach>
    </select>

    <select id="selectRoleByUserId" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM system_role
        WHERE deleted = 0
        AND id IN (SELECT role_id FROM system_user_role WHERE user_id = #{userId} AND deleted = 0)
    </select>

</mapper>
