Add success messages, modify s3 handler, update csv generator

This commit is contained in:
Maksim Tereshin 2024-11-26 13:02:12 +01:00
parent adf30c5bf8
commit 7ceed04db1
No known key found for this signature in database
3 changed files with 63 additions and 11 deletions

View file

@ -35,7 +35,7 @@ public class ApiController {
logger.debug("Starting block process for ids: {}", ids);
apiService.process("block", ids);
logger.debug("Finished block process for ids: {}", ids);
return ResponseEntity.ok("");
return ResponseEntity.ok("Операция \"Блокировка\" завершена успешно.");
}
@PostMapping("/unblock")
@ -43,7 +43,7 @@ public class ApiController {
logger.debug("Starting unblock process for ids: {}", ids);
apiService.process("unblock", ids);
logger.debug("Finished unblock process for ids: {}", ids);
return ResponseEntity.ok("");
return ResponseEntity.ok("Операция \"Разблокировка\" завершена успешно.");
}
@PostMapping("/removeFromSystem")
@ -52,7 +52,7 @@ public class ApiController {
logger.debug("Starting removeFromSystem process for ids: {}", ids);
apiService.process("removeFromSystem", ids);
logger.debug("Finished removeFromSystem process for ids: {}", ids);
return ResponseEntity.ok("");
return ResponseEntity.ok("Операция \"Удаление данных по гражданину\" завершена успешно.");
}
@PostMapping("/removeFromCallList")
@ -61,7 +61,7 @@ public class ApiController {
logger.debug("Starting removeFromCallList process for ids: {}", ids);
apiService.process("removeFromCallList", ids);
logger.debug("Finished removeFromCallList process for ids: {}", ids);
return ResponseEntity.ok("");
return ResponseEntity.ok("Операция \"Удаление из списков на вызов\" завершена успешно.");
}
@PostMapping("/downloadCSV")

View file

@ -7,9 +7,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@ -41,14 +40,19 @@ public class DownloadService {
File csvFile = File.createTempFile("download-", ".csv");
try (PrintWriter writer = new PrintWriter(csvFile)) {
try (PrintWriter writer = new PrintWriter(
new OutputStreamWriter(new FileOutputStream(csvFile), StandardCharsets.UTF_8))) {
String lineSeparator = "\r\n";
for (String[] row : results) {
writer.println(String.join(",", row));
writer.print(formatCsvRow(row));
writer.print(lineSeparator);
}
} catch (IOException e) {
logger.error("Failed to write to CSV file", e);
}
return csvFile;
}
@ -58,6 +62,29 @@ public class DownloadService {
return null;
}
private String formatCsvRow(String[] row) {
StringBuilder formattedRow = new StringBuilder();
for (int i = 0; i < row.length; i++) {
if (i > 0) {
formattedRow.append(",");
}
formattedRow.append("\"");
formattedRow.append(escapeCsvField(row[i]));
formattedRow.append("\"");
}
return formattedRow.toString();
}
private String escapeCsvField(String field) {
if (field == null) {
return "";
}
return field.replace("\"", "\"\"");
}
private Map<String, Object> buildSqlQuery(DownloadRequest request, List<String> ids, LocalDate startDate, LocalDate endDate) {
Map<String, Object> resultMap = new HashMap<>();
String endpointArguments;
@ -105,7 +132,6 @@ public class DownloadService {
}
catch (SQLException e) {
logger.error("Failed to execute query for RequestArgument", e);
throw new RuntimeException("Error executing database query: " + argument.getRequestArgumentURL(), e);
}
}
}

View file

@ -64,7 +64,8 @@ public class RequestService {
for (RequestArgument argument : request.getRequestArguments()) {
try (Connection connection = DatabaseConnection.getConnection(
argument.getRequestArgumentConnectionParams())) {
Map<String, Object> query = buildSqlQuery(request, ids);
Map<String, Object> query = buildSqlQueryForS3(request.getRequestURL(), ids);
logger.debug("Starting fetching paths from database for S3 request");
long startExecTime = System.currentTimeMillis();
@ -161,6 +162,31 @@ public class RequestService {
}
}
private Map<String, Object> buildSqlQueryForS3(String requestURL, List<String> ids) {
logger.debug("Starting building SQL query for request: {}", requestURL);
long startExecTime = System.currentTimeMillis();
Map<String, Object> resultMap = new HashMap<>();
String endpointArguments;
if (requestURL.contains(":=")) {
endpointArguments = "'{" + ids.stream()
.map(String::trim)
.collect(Collectors.joining(", ")) + "}'";
} else {
endpointArguments = "(" + ids.stream()
.map(s -> "'" + s.trim() + "'")
.collect(Collectors.joining(", ")) + ")";
}
resultMap.put("requestURL", requestURL
.replace("${endpointArguments}", endpointArguments));
long endExecTime = System.currentTimeMillis();
logger.debug("SQL query for S3 built in {} ms", endExecTime - startExecTime);
return resultMap;
}
private Map<String, Object> buildSqlQuery(BaseRequest request, List<String> ids) {
logger.debug("Starting building SQL query for request: {}", request.getRequestURL());
long startExecTime = System.currentTimeMillis();