|
@@ -73,12 +104,76 @@
diff --git a/src/ru/charm/back/dao/ProfileDao.java b/src/ru/charm/back/dao/ProfileDao.java
index 3080d86..dbb4fea 100644
--- a/src/ru/charm/back/dao/ProfileDao.java
+++ b/src/ru/charm/back/dao/ProfileDao.java
@@ -27,6 +27,7 @@ public class ProfileDao {
public static final String INSERT = "INSERT INTO profile (email, password) VALUES (?, ?)";
private static final ProfileDao INSTANCE = new ProfileDao();
+ private Set validColumns;
@SneakyThrows
public static ProfileDao getInstance() {
@@ -85,7 +86,7 @@ public class ProfileDao {
.addStatus(filter.getStatus())
.addLTAge(filter.getLtAge())
.addGTEAge(filter.getGteAge())
- .build();
+ .build(getValidSort(filter.getSort()));
try (
Connection connection = ConnectionManager.getConnection();
@@ -108,6 +109,30 @@ public class ProfileDao {
}
}
+ private String getValidSort(String sort) {
+ if (validColumns == null) {
+ validColumns = new HashSet<>();
+ try (Connection conn = getConnection();) {
+ ResultSet rs = conn.getMetaData().getColumns(null, null, "profile", null);
+
+ while(rs.next()) {
+ String comment = rs.getString("REMARKS");
+ if("sortable".equals(comment)) {
+ validColumns.add(rs.getString("COLUMN_NAME"));
+ }
+ }
+
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ if (validColumns.contains(sort)) {
+ return sort;
+ } else {
+ return "id";
+ }
+ }
+
public void update(Profile profile) {
Query query = new ProfileUpdateQueryBuilder()
.addEmail(profile.getEmail())
diff --git a/src/ru/charm/back/dto/ProfileFilter.java b/src/ru/charm/back/dto/ProfileFilter.java
index d041066..37f8e01 100644
--- a/src/ru/charm/back/dto/ProfileFilter.java
+++ b/src/ru/charm/back/dto/ProfileFilter.java
@@ -14,4 +14,5 @@ public class ProfileFilter {
Integer ltAge;
Integer gteAge;
Status status;
+ String sort;
}
diff --git a/src/ru/charm/back/dto/ProfileSelectQueryBuilder.java b/src/ru/charm/back/dto/ProfileSelectQueryBuilder.java
index 396bedd..72099f8 100644
--- a/src/ru/charm/back/dto/ProfileSelectQueryBuilder.java
+++ b/src/ru/charm/back/dto/ProfileSelectQueryBuilder.java
@@ -112,4 +112,9 @@ public class ProfileSelectQueryBuilder {
public Query build() {
return new Query(sb.toString(), args);
}
+
+ public Query build(String sort) {
+ sb.append(" ORDER BY ").append(sort).append(" ASC");
+ return new Query(sb.toString(), args);
+ }
}
diff --git a/src/ru/charm/back/mapper/RequestToProfileFilterMapper.java b/src/ru/charm/back/mapper/RequestToProfileFilterMapper.java
index cc84a61..a67e5fd 100644
--- a/src/ru/charm/back/mapper/RequestToProfileFilterMapper.java
+++ b/src/ru/charm/back/mapper/RequestToProfileFilterMapper.java
@@ -49,6 +49,10 @@ public class RequestToProfileFilterMapper implements Mapper |