package com.monkeyk.os.infrastructure.jdbc;
import com.monkeyk.os.domain.users.Roles;
import com.monkeyk.os.domain.users.Users;
import com.monkeyk.os.domain.users.UsersAuthzRepository;
import org.apache.commons.lang.StringUtils;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.stereotype.Repository;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.List;
/**
* 2016/6/3
* <p/>
* 账号(Users) 相关的 JDBC操作实现
*
* @author Shengzhao Li
*/
@Repository("usersJdbcAuthzRepository")
public class UsersJdbcAuthzRepository extends AbstractJdbcRepository implements UsersAuthzRepository {
private static UsersRowMapper usersRowMapper = new UsersRowMapper();
private static RolesRowMapper rolesRowMapper = new RolesRowMapper();
@Override
public List<Users> findUsersByUsername(String username) {
String sql = " select u.* from users u where u.archived = 0 ";
if (StringUtils.isNotEmpty(username)) {
sql += " and u.username = ? order by u.id desc ";
return this.jdbcTemplate.query(sql, usersRowMapper, username);
}
sql += " order by u.id desc ";
return this.jdbcTemplate.query(sql, usersRowMapper);
}
@Override
public List<Roles> findAvailableRolesList() {
String sql = " select r.* from roles r where r.archived = 0 ";
return this.jdbcTemplate.query(sql, rolesRowMapper);
}
@Override
public Users findByUsername(String username) {
String sql = " select * from users where username = ? ";
final List<Users> list = this.jdbcTemplate.query(sql, usersRowMapper, username);
return list.isEmpty() ? null : list.get(0);
}
@Override
public int saveUsers(final Users users) {
String sql = " insert into users(guid,create_time, username,password) values (?,?,?,?) ";
this.jdbcTemplate.update(sql, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, users.guid());
ps.setTimestamp(2, new Timestamp(users.createTime().getTime()));
ps.setString(3, users.username());
ps.setString(4, users.password());
}
});
return this.jdbcTemplate.queryForObject("select id from users where guid = ?", new Object[]{users.guid()}, Integer.class);
}
@Override
public Roles findRolesByGuid(String guid) {
final List<Roles> list = this.jdbcTemplate.query(" select * from roles where guid = ?", rolesRowMapper, guid);
return list.isEmpty() ? null : list.get(0);
}
@Override
public void insertUserRoles(final int userId, final int rolesId) {
String sql = "insert into user_roles(users_id,roles_id) values (?,?) ";
this.jdbcTemplate.update(sql, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setInt(1, userId);
ps.setInt(2, rolesId);
}
});
}
@Override
public List<Roles> findUsersRolesList(String usersGuid) {
String sql = " select r.* from roles r where r.archived = 0 and r.id in (" +
" select roles_id from user_roles where users_id = (" +
" select id from users where guid = ? and archived = 0))";
return this.jdbcTemplate.query(sql, rolesRowMapper, usersGuid);
}
@Override
public List<String> findPermissionsByRoles(String rolesGuid) {
String sql = " select p.permission from roles_permissions p where p.roles_id = (" +
" select id from roles where guid = ? and archived = 0 )";
return this.jdbcTemplate.queryForList(sql, new Object[]{rolesGuid}, String.class);
}
}