package ru.copperside.repository; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.stereotype.Repository; import ru.copperside.model.dto.RolePermissionDto; import ru.copperside.sql.SqlRegistry; import ru.copperside.util.PermissionsCompiler; import ru.copperside.model.permission.Permission; import java.util.List; import static ru.copperside.util.RepoMappingHelper.*; @Repository @RequiredArgsConstructor public class PermissionsRepositoryJdbc implements PermissionsRepository{ private final NamedParameterJdbcTemplate namedParameterJdbcTemplate; private final SqlRegistry sqlRegistry; private final ObjectMapper objectMapper; @Override public List findRoleByHierarchyId(Long hierarchyId) { var p = new MapSqlParameterSource().addValue("hierarchyId", hierarchyId); return namedParameterJdbcTemplate.query(sqlRegistry.get("auth/find_inherited_role_permissions_by_hierarchyid"), p, (rs, rn) -> { return new RolePermissionDto( rs.getLong("HIERARCHYID"), rs.getInt("LEVEL"), rs.getLong("ROLEID"), rs.getLong("PERMISSIONID"), rs.getString("PERMISSION_STRID"), readLargeText(rs, "SETTINGS"), getNullableBoolean(rs, "ACTION"), readLargeText(rs, "PDATA"), rs.getString("COMMAND"), rs.getString("HTTP") ); }); } @Override public List findPersonalByHierarchyId(Long hierarchyId) { var p = new MapSqlParameterSource().addValue("hierarchyId", hierarchyId); return namedParameterJdbcTemplate.query(sqlRegistry.get("auth/find_inherited_permissions_by_hierarchyid"), p, (rs, rn) -> new RolePermissionDto( getNullableLong(rs, "HIERARCHYID"), rs.getInt("LEVEL"), getNullableLong(rs, "ROLEID"), // здесь всегда null из SQL rs.getLong("PERMISSIONID"), rs.getString("PERMISSION_STRID"), readLargeText(rs, "SETTINGS"), getNullableBoolean(rs, "ACTION"), readLargeText(rs, "PDATA"), rs.getString("COMMAND"), rs.getString("HTTP") ) ); } @Override public List findCompiledByHierarchyId(Long hierarchyId) { var rolePerms = findRoleByHierarchyId(hierarchyId); var personalPerms = findPersonalByHierarchyId(hierarchyId); return new PermissionsCompiler(objectMapper).compile(rolePerms, personalPerms); } }