added DTOs and models

This commit is contained in:
Mehul Ahal 2023-01-11 18:41:36 +01:00 committed by LahaLuhem
parent cf3fa3f566
commit 0213bc4606
8 changed files with 46 additions and 51 deletions

BIN
.DS_Store vendored

Binary file not shown.

View file

@ -1,9 +1,8 @@
import data.enums.CustomReadPreparedStatements; import data.enums.CustomPreparedStatementsRead;
import data.models.QueryResultsModel;
import services.AppConfigService; import services.AppConfigService;
import services.DatabaseService; import services.DatabaseService;
import java.sql.ResultSet;
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) {
final App app = new App(); final App app = new App();
@ -21,7 +20,7 @@ class App {
final AppConfigService appConfigService; final AppConfigService appConfigService;
public void run() { public void run() {
//appConfigService.promptUserArguments(); appConfigService.promptUserArguments();
final ResultSet[] resultSetsQuery1 = databaseService.executeReadReportsEndpoint(CustomReadPreparedStatements.HighestAndLowest10Vaccination); final QueryResultsModel resultSetsQuery1 = databaseService.executeReadReportsEndpoint(CustomPreparedStatementsRead.HighestAndLowest10Vaccination);
} }
} }

View file

@ -5,9 +5,9 @@ import data.dtos.QueryDTO;
import java.sql.*; import java.sql.*;
public class DatabaseApi { public class DatabaseApi {
public PreparedStatement performQuery(QueryDTO queryDTO, Connection connection) { public PreparedStatement performReadQuery(QueryDTO queryDTO, Connection connection) {
try { try {
PreparedStatement statement = connection.prepareStatement(queryDTO.queryTemplate().statementData); PreparedStatement statement = connection.prepareStatement(queryDTO.queryTemplate().statementTemplate);
statement.execute(); statement.execute();
return statement; return statement;
} catch (SQLException e) { } catch (SQLException e) {

View file

@ -1,7 +1,7 @@
package data.dtos; package data.dtos;
import data.enums.CustomReadPreparedStatements; import data.enums.CustomPreparedStatementsRead;
public record QueryDTO(CustomReadPreparedStatements queryTemplate, Object[] placeholderReplacements) { public record QueryDTO(CustomPreparedStatementsRead queryTemplate, Object[] placeholderReplacements) {
} }

View file

@ -0,0 +1,19 @@
package data.enums;
public enum CustomPreparedStatementsRead {
HighestAndLowest10Vaccination("""
"""
),
HighestInfectionsPer100K("""
"""
);
public final String statementTemplate;
private CustomPreparedStatementsRead(String statementTemplate) {
this.statementTemplate = statementTemplate;
}
}

View file

@ -1,34 +0,0 @@
package data.enums;
public enum CustomReadPreparedStatements {
HighestAndLowest10Vaccination("""
WITH vacc_count_per_country AS (
SELECT iso_country, SUM(daily_vaccinations) as total_vaccinations
FROM vaccinations
GROUP BY iso_country
)
SELECT name, total_vaccinations
FROM countries JOIN vacc_count_per_country
ON countries.code = vacc_count_per_country.iso_country
ORDER BY total_vaccinations DESC
LIMIT 10;
WITH vacc_count_per_country AS (
SELECT iso_country, SUM(daily_vaccinations) as total_vaccinations
FROM vaccinations
GROUP BY iso_country
)
SELECT name, total_vaccinations
FROM countries JOIN vacc_count_per_country
ON countries.code = vacc_count_per_country.iso_country
ORDER BY total_vaccinations ASC
LIMIT 10;
"""
);
public final String statementData;
private CustomReadPreparedStatements(String statementData) {
this.statementData = statementData;
}
}

View file

@ -0,0 +1,11 @@
package data.models;
import java.sql.ResultSet;
/**
* Stores the results obtained from executing an SQL query.
* Essentially a type-def, which is not natively supported in Java.
* @param resultSets Result of the query
*/
public record QueryResultsModel(java.util.ArrayList<ResultSet> resultSets) {
}

View file

@ -2,9 +2,9 @@ package services;
import apis.DatabaseApi; import apis.DatabaseApi;
import data.dtos.QueryDTO; import data.dtos.QueryDTO;
import data.enums.CustomReadPreparedStatements; import data.enums.CustomPreparedStatementsRead;
import data.models.QueryResultsModel;
import javax.xml.transform.Result;
import java.sql.*; import java.sql.*;
import java.util.ArrayList; import java.util.ArrayList;
@ -12,9 +12,9 @@ import java.util.ArrayList;
* Stores the active connection between the app and the local SQL Server. * Stores the active connection between the app and the local SQL Server.
*/ */
public class DatabaseService { public class DatabaseService {
private final String url = "jdbc:postgresql://localhost:5432/lunatech_covid"; private static final String url = "jdbc:postgresql://localhost:5432/lunatech_covid";
private final String user = "postgres"; private static final String user = "postgres";
private final String password = "postgres"; private static final String password = "postgres";
private final DatabaseApi databaseApi; private final DatabaseApi databaseApi;
private final Connection connection; private final Connection connection;
@ -24,9 +24,9 @@ public class DatabaseService {
databaseApi = new DatabaseApi(); databaseApi = new DatabaseApi();
} }
public ResultSet[] executeReadReportsEndpoint(CustomReadPreparedStatements customPreparedStatement) { public QueryResultsModel executeReadReportsEndpoint(CustomPreparedStatementsRead customPreparedStatement) {
final QueryDTO queryDTO = new QueryDTO(customPreparedStatement, new Object[]{}); final QueryDTO queryDTO = new QueryDTO(customPreparedStatement, new Object[]{});
final PreparedStatement resultStatement = databaseApi.performQuery(queryDTO, connection); final PreparedStatement resultStatement = databaseApi.performReadQuery(queryDTO, connection);
try { try {
final ArrayList<ResultSet> resultSets = new ArrayList<>(); final ArrayList<ResultSet> resultSets = new ArrayList<>();
do { do {
@ -34,7 +34,7 @@ public class DatabaseService {
} }
while (resultStatement.getMoreResults()); while (resultStatement.getMoreResults());
return resultSets.toArray(new ResultSet[0]); return new QueryResultsModel(resultSets);
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }