1+ package com .evolvedbinary .bblValidator .controller ;
2+
3+ import com .evolvedbinary .bblValidator .dto .ValidationError ;
4+ import com .evolvedbinary .bblValidator .dto .ValidationForm ;
5+ import com .evolvedbinary .bblValidator .dto .ValidationResponse ;
6+ import com .evolvedbinary .bblValidator .service .CsvValidationService ;
7+ import com .evolvedbinary .bblValidator .service .FileDownloadService ;
8+ import io .micronaut .http .MediaType ;
9+ import io .micronaut .http .annotation .Body ;
10+ import io .micronaut .http .annotation .Consumes ;
11+ import io .micronaut .http .annotation .Controller ;
12+ import io .micronaut .http .annotation .Post ;
13+ import io .micronaut .http .annotation .QueryValue ;
14+ import jakarta .inject .Inject ;
15+ import org .slf4j .Logger ;
16+ import org .slf4j .LoggerFactory ;
17+
18+ import java .io .IOException ;
19+ import java .nio .file .Path ;
20+ import java .util .List ;
21+
22+ @ Controller ("/validate" )
23+ public class ValidateController {
24+
25+ private static final Logger LOG = LoggerFactory .getLogger (ValidateController .class );
26+ @ Inject
27+ FileDownloadService fileDownloadService ;
28+ @ Inject
29+ CsvValidationService csvValidationService ;
30+
31+ /**
32+ * Handles form URL encoded validation requests.
33+ *
34+ * @param form validation form
35+ * @return validation response
36+ */
37+ @ Post
38+ @ Consumes (MediaType .APPLICATION_FORM_URLENCODED )
39+ public ValidationResponse validateForm (@ Body ValidationForm form ) {
40+ try {
41+ Path downloadedFile = fileDownloadService .downloadToTemp (form .url ());
42+ LOG .info ("File downloaded to: {}" , downloadedFile );
43+ return performValidation (downloadedFile , form .schemaId ());
44+ } catch (IOException e ) {
45+ LOG .error ("Failed to download file from URL: {}" , form .url (), e );
46+ return createErrorResponse ("Download failed: " + e .getMessage (), 0 );
47+ }
48+ }
49+
50+ /**
51+ * Handles CSV body + query param validation requests.
52+ *
53+ * @param schemaId schema ID
54+ * @param csvContent CSV content
55+ * @return validation response
56+ */
57+ @ Post
58+ @ Consumes (MediaType .TEXT_CSV )
59+ public ValidationResponse validateCsv (@ QueryValue ("schema-id" ) String schemaId ,
60+ @ Body String csvContent ) {
61+ try {
62+ Path tempFile = fileDownloadService .saveContentToTemp (csvContent , "uploaded-content.csv" );
63+ LOG .info ("CSV content saved to: {}" , tempFile );
64+ return performValidation (tempFile , schemaId );
65+ } catch (IOException e ) {
66+ LOG .error ("Failed to save CSV content to temp file" , e );
67+ return createErrorResponse ("Failed to save content: " + e .getMessage (), 0 );
68+ }
69+ }
70+
71+ /**
72+ * Handles query params only validation requests.
73+ *
74+ * @param schemaId schema ID
75+ * @param url URL
76+ * @return validation response
77+ */
78+ @ Post
79+ @ Consumes (MediaType .ALL )
80+ public ValidationResponse validateParams (@ QueryValue ("schema-id" ) String schemaId ,
81+ @ QueryValue String url ) {
82+ try {
83+ Path downloadedFile = fileDownloadService .downloadToTemp (url );
84+ LOG .info ("File downloaded to: {}" , downloadedFile );
85+ return performValidation (downloadedFile , schemaId );
86+ } catch (IOException e ) {
87+ LOG .error ("Failed to download file from URL: {}" , url , e );
88+ return createErrorResponse ("Download failed: " + e .getMessage (), 0 );
89+ }
90+ }
91+
92+ private ValidationResponse performValidation (Path csvFile , String schemaId ) {
93+ CsvValidationService .ValidationResult result = csvValidationService .validateCsvFile (csvFile , schemaId );
94+
95+ if (result .hasErrorMessage ()) {
96+ return createErrorResponse (result .getErrorMessage (), result .getExecutionTimeMs ());
97+ }
98+
99+ return new ValidationResponse (result .isValid (), result .getErrors (), result .getExecutionTimeMs ());
100+ }
101+
102+ private ValidationResponse createErrorResponse (String errorMessage , long executionTimeMs ) {
103+ return new ValidationResponse (false ,
104+ List .of (new ValidationError (errorMessage , 0 , 0 )),
105+ executionTimeMs );
106+ }
107+ }
0 commit comments