1
0

Add SingleJsonResponse class for POST/PUT return messages

This commit is contained in:
Jose
2025-03-16 04:33:34 +01:00
parent 156fc97e98
commit 92ca2e4c0a
3 changed files with 58 additions and 35 deletions

View File

@@ -1,16 +0,0 @@
package net.miarma.contaminus;
import net.miarma.contaminus.database.QueryBuilder;
import net.miarma.contaminus.database.entities.DeviceSensorValue;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
String query = QueryBuilder
.select(DeviceSensorValue.class)
.build();
System.out.println(query);
}
}

View File

@@ -0,0 +1,7 @@
package net.miarma.contaminus.common;
public record SingleJsonResponse<T>(T message) {
public static <T> SingleJsonResponse<T> of(T message) {
return new SingleJsonResponse<>(message);
}
}

View File

@@ -20,11 +20,15 @@ public class QueryBuilder {
} }
private static <T> String getTableName(Class<T> clazz) { private static <T> String getTableName(Class<T> clazz) {
if (clazz == null) {
throw new IllegalArgumentException("Class cannot be null");
}
if (clazz.isAnnotationPresent(Table.class)) { if (clazz.isAnnotationPresent(Table.class)) {
Table annotation = clazz.getAnnotation(Table.class); Table annotation = clazz.getAnnotation(Table.class);
return annotation.value(); // lee el nombre de la tabla desde la annotation return annotation.value();
} }
throw new IllegalArgumentException("Clase no tiene la anotación @TableName"); throw new IllegalArgumentException("Class does not have @Table annotation");
} }
public String getQuery() { public String getQuery() {
@@ -32,6 +36,10 @@ public class QueryBuilder {
} }
public static <T> QueryBuilder select(Class<T> clazz, String... columns) { public static <T> QueryBuilder select(Class<T> clazz, String... columns) {
if (clazz == null) {
throw new IllegalArgumentException("Class cannot be null");
}
QueryBuilder qb = new QueryBuilder(); QueryBuilder qb = new QueryBuilder();
String tableName = getTableName(clazz); String tableName = getTableName(clazz);
@@ -42,7 +50,9 @@ public class QueryBuilder {
} else { } else {
StringJoiner joiner = new StringJoiner(", "); StringJoiner joiner = new StringJoiner(", ");
for (String column : columns) { for (String column : columns) {
joiner.add(column); if (column != null) {
joiner.add(column);
}
} }
qb.query.append(joiner).append(" "); qb.query.append(joiner).append(" ");
} }
@@ -52,6 +62,10 @@ public class QueryBuilder {
} }
public static <T> QueryBuilder where(QueryBuilder qb, T object) { public static <T> QueryBuilder where(QueryBuilder qb, T object) {
if (qb == null || object == null) {
throw new IllegalArgumentException("QueryBuilder and object cannot be null");
}
List<String> conditions = new ArrayList<>(); List<String> conditions = new ArrayList<>();
Class<?> clazz = object.getClass(); Class<?> clazz = object.getClass();
@@ -79,13 +93,19 @@ public class QueryBuilder {
} }
public static <T> QueryBuilder select(T object, String... columns) { public static <T> QueryBuilder select(T object, String... columns) {
if (object == null) {
throw new IllegalArgumentException("Object cannot be null");
}
Class<?> clazz = object.getClass(); Class<?> clazz = object.getClass();
QueryBuilder qb = select(clazz, columns); QueryBuilder qb = select(clazz, columns);
return where(qb, object); return where(qb, object);
} }
public static <T> QueryBuilder insert(T object) { public static <T> QueryBuilder insert(T object) {
if (object == null) {
throw new IllegalArgumentException("Object cannot be null");
}
QueryBuilder qb = new QueryBuilder(); QueryBuilder qb = new QueryBuilder();
String table = getTableName(object.getClass()); String table = getTableName(object.getClass());
qb.query.append("INSERT INTO ").append(table).append(" "); qb.query.append("INSERT INTO ").append(table).append(" ");
@@ -96,10 +116,15 @@ public class QueryBuilder {
field.setAccessible(true); field.setAccessible(true);
try { try {
columns.add(field.getName()); columns.add(field.getName());
if(field.get(object) instanceof String) { Object fieldValue = field.get(object);
values.add("'" + field.get(object) + "'"); if (fieldValue != null) {
if (fieldValue instanceof String) {
values.add("'" + fieldValue + "'");
} else {
values.add(fieldValue.toString());
}
} else { } else {
values.add(field.get(object).toString()); values.add("NULL");
} }
} catch (IllegalArgumentException | IllegalAccessException e) { } catch (IllegalArgumentException | IllegalAccessException e) {
Constants.LOGGER.error("(REFLECTION) Error reading field: " + e.getMessage()); Constants.LOGGER.error("(REFLECTION) Error reading field: " + e.getMessage());
@@ -111,6 +136,10 @@ public class QueryBuilder {
} }
public static <T> QueryBuilder update(T object) { public static <T> QueryBuilder update(T object) {
if (object == null) {
throw new IllegalArgumentException("Object cannot be null");
}
QueryBuilder qb = new QueryBuilder(); QueryBuilder qb = new QueryBuilder();
String table = getTableName(object.getClass()); String table = getTableName(object.getClass());
qb.query.append("UPDATE ").append(table).append(" "); qb.query.append("UPDATE ").append(table).append(" ");
@@ -119,10 +148,15 @@ public class QueryBuilder {
for (Field field : object.getClass().getDeclaredFields()) { for (Field field : object.getClass().getDeclaredFields()) {
field.setAccessible(true); field.setAccessible(true);
try { try {
if(field.get(object) instanceof String) { Object fieldValue = field.get(object);
joiner.add(field.getName() + " = '" + field.get(object) + "'"); if (fieldValue != null) {
if (fieldValue instanceof String) {
joiner.add(field.getName() + " = '" + fieldValue + "'");
} else {
joiner.add(field.getName() + " = " + fieldValue.toString());
}
} else { } else {
joiner.add(field.getName() + " = " + field.get(object).toString()); joiner.add(field.getName() + " = NULL");
} }
} catch (IllegalArgumentException | IllegalAccessException e) { } catch (IllegalArgumentException | IllegalAccessException e) {
Constants.LOGGER.error("(REFLECTION) Error reading field: " + e.getMessage()); Constants.LOGGER.error("(REFLECTION) Error reading field: " + e.getMessage());
@@ -133,17 +167,17 @@ public class QueryBuilder {
} }
public QueryBuilder orderBy(Optional<String> column, Optional<String> order) { public QueryBuilder orderBy(Optional<String> column, Optional<String> order) {
if (column.isPresent()) { column.ifPresent(c -> {
sort = "ORDER BY " + column.get() + " "; sort = "ORDER BY " + c + " ";
if (order.isPresent()) { order.ifPresent(o -> {
sort += order.get().equalsIgnoreCase("asc") ? "ASC" : "DESC" + " "; sort += o.equalsIgnoreCase("asc") ? "ASC" : "DESC" + " ";
} });
} });
return this; return this;
} }
public QueryBuilder limit(Optional<Integer> limitParam) { public QueryBuilder limit(Optional<Integer> limitParam) {
limit = limitParam.isPresent() ? "LIMIT " + limitParam.get() + " " : ""; limitParam.ifPresent(param -> limit = "LIMIT " + param + " ");
return this; return this;
} }
@@ -159,6 +193,4 @@ public class QueryBuilder {
} }
return query.toString().trim() + ";"; return query.toString().trim() + ";";
} }
} }