From 92ca2e4c0a125a612a53e3f10ce32bd94e6233d6 Mon Sep 17 00:00:00 2001 From: Jose Date: Sun, 16 Mar 2025 04:33:34 +0100 Subject: [PATCH] Add SingleJsonResponse class for POST/PUT return messages --- .../main/java/net/miarma/contaminus/Main.java | 16 ----- .../contaminus/common/SingleJsonResponse.java | 7 ++ .../contaminus/database/QueryBuilder.java | 70 ++++++++++++++----- 3 files changed, 58 insertions(+), 35 deletions(-) delete mode 100644 backend/src/main/java/net/miarma/contaminus/Main.java create mode 100644 backend/src/main/java/net/miarma/contaminus/common/SingleJsonResponse.java diff --git a/backend/src/main/java/net/miarma/contaminus/Main.java b/backend/src/main/java/net/miarma/contaminus/Main.java deleted file mode 100644 index b495d38..0000000 --- a/backend/src/main/java/net/miarma/contaminus/Main.java +++ /dev/null @@ -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); - } - -} diff --git a/backend/src/main/java/net/miarma/contaminus/common/SingleJsonResponse.java b/backend/src/main/java/net/miarma/contaminus/common/SingleJsonResponse.java new file mode 100644 index 0000000..fb8b23c --- /dev/null +++ b/backend/src/main/java/net/miarma/contaminus/common/SingleJsonResponse.java @@ -0,0 +1,7 @@ +package net.miarma.contaminus.common; + +public record SingleJsonResponse(T message) { + public static SingleJsonResponse of(T message) { + return new SingleJsonResponse<>(message); + } +} diff --git a/backend/src/main/java/net/miarma/contaminus/database/QueryBuilder.java b/backend/src/main/java/net/miarma/contaminus/database/QueryBuilder.java index 4b07395..ebfc658 100644 --- a/backend/src/main/java/net/miarma/contaminus/database/QueryBuilder.java +++ b/backend/src/main/java/net/miarma/contaminus/database/QueryBuilder.java @@ -20,11 +20,15 @@ public class QueryBuilder { } private static String getTableName(Class clazz) { + if (clazz == null) { + throw new IllegalArgumentException("Class cannot be null"); + } + if (clazz.isAnnotationPresent(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() { @@ -32,6 +36,10 @@ public class QueryBuilder { } public static QueryBuilder select(Class clazz, String... columns) { + if (clazz == null) { + throw new IllegalArgumentException("Class cannot be null"); + } + QueryBuilder qb = new QueryBuilder(); String tableName = getTableName(clazz); @@ -42,7 +50,9 @@ public class QueryBuilder { } else { StringJoiner joiner = new StringJoiner(", "); for (String column : columns) { - joiner.add(column); + if (column != null) { + joiner.add(column); + } } qb.query.append(joiner).append(" "); } @@ -52,6 +62,10 @@ public class QueryBuilder { } public static QueryBuilder where(QueryBuilder qb, T object) { + if (qb == null || object == null) { + throw new IllegalArgumentException("QueryBuilder and object cannot be null"); + } + List conditions = new ArrayList<>(); Class clazz = object.getClass(); @@ -79,13 +93,19 @@ public class QueryBuilder { } public static QueryBuilder select(T object, String... columns) { + if (object == null) { + throw new IllegalArgumentException("Object cannot be null"); + } Class clazz = object.getClass(); QueryBuilder qb = select(clazz, columns); return where(qb, object); } - public static QueryBuilder insert(T object) { + if (object == null) { + throw new IllegalArgumentException("Object cannot be null"); + } + QueryBuilder qb = new QueryBuilder(); String table = getTableName(object.getClass()); qb.query.append("INSERT INTO ").append(table).append(" "); @@ -96,10 +116,15 @@ public class QueryBuilder { field.setAccessible(true); try { columns.add(field.getName()); - if(field.get(object) instanceof String) { - values.add("'" + field.get(object) + "'"); + Object fieldValue = field.get(object); + if (fieldValue != null) { + if (fieldValue instanceof String) { + values.add("'" + fieldValue + "'"); + } else { + values.add(fieldValue.toString()); + } } else { - values.add(field.get(object).toString()); + values.add("NULL"); } } catch (IllegalArgumentException | IllegalAccessException e) { Constants.LOGGER.error("(REFLECTION) Error reading field: " + e.getMessage()); @@ -111,6 +136,10 @@ public class QueryBuilder { } public static QueryBuilder update(T object) { + if (object == null) { + throw new IllegalArgumentException("Object cannot be null"); + } + QueryBuilder qb = new QueryBuilder(); String table = getTableName(object.getClass()); qb.query.append("UPDATE ").append(table).append(" "); @@ -119,10 +148,15 @@ public class QueryBuilder { for (Field field : object.getClass().getDeclaredFields()) { field.setAccessible(true); try { - if(field.get(object) instanceof String) { - joiner.add(field.getName() + " = '" + field.get(object) + "'"); + Object fieldValue = field.get(object); + if (fieldValue != null) { + if (fieldValue instanceof String) { + joiner.add(field.getName() + " = '" + fieldValue + "'"); + } else { + joiner.add(field.getName() + " = " + fieldValue.toString()); + } } else { - joiner.add(field.getName() + " = " + field.get(object).toString()); + joiner.add(field.getName() + " = NULL"); } } catch (IllegalArgumentException | IllegalAccessException e) { Constants.LOGGER.error("(REFLECTION) Error reading field: " + e.getMessage()); @@ -133,17 +167,17 @@ public class QueryBuilder { } public QueryBuilder orderBy(Optional column, Optional order) { - if (column.isPresent()) { - sort = "ORDER BY " + column.get() + " "; - if (order.isPresent()) { - sort += order.get().equalsIgnoreCase("asc") ? "ASC" : "DESC" + " "; - } - } + column.ifPresent(c -> { + sort = "ORDER BY " + c + " "; + order.ifPresent(o -> { + sort += o.equalsIgnoreCase("asc") ? "ASC" : "DESC" + " "; + }); + }); return this; } public QueryBuilder limit(Optional limitParam) { - limit = limitParam.isPresent() ? "LIMIT " + limitParam.get() + " " : ""; + limitParam.ifPresent(param -> limit = "LIMIT " + param + " "); return this; } @@ -159,6 +193,4 @@ public class QueryBuilder { } return query.toString().trim() + ";"; } - - }