From e1aac9342ec0237115eccfa2ea2f00c79f605501 Mon Sep 17 00:00:00 2001 From: "nise.moe" Date: Sun, 25 Feb 2024 02:17:35 +0100 Subject: [PATCH] Catch search errors and validation --- .../nisemoe/nise/search/SearchController.kt | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/nise-backend/src/main/kotlin/com/nisemoe/nise/search/SearchController.kt b/nise-backend/src/main/kotlin/com/nisemoe/nise/search/SearchController.kt index 1966a60..0964161 100644 --- a/nise-backend/src/main/kotlin/com/nisemoe/nise/search/SearchController.kt +++ b/nise-backend/src/main/kotlin/com/nisemoe/nise/search/SearchController.kt @@ -4,7 +4,9 @@ import jakarta.validation.Valid import jakarta.validation.constraints.Min import jakarta.validation.constraints.NotBlank import jakarta.validation.constraints.Size +import org.slf4j.LoggerFactory import org.springframework.http.ResponseEntity +import org.springframework.util.StopWatch import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestHeader @@ -15,6 +17,8 @@ class SearchController( private val searchService: SearchService ) { + private val logger = LoggerFactory.getLogger(javaClass) + companion object { const val RESULTS_PER_PAGE = 50 @@ -101,7 +105,7 @@ class SearchController( ) data class SearchRequest( - @Valid @field:ValidChildQueriesDepth val queries: List, + @Valid @field:ValidChildQueriesDepth @field:Size(max = 10) val queries: List, @Valid val sorting: SearchSorting, @field:Min(1) val page: Int ) @@ -113,8 +117,8 @@ class SearchController( data class SearchQuery( @field:NotBlank @field:Size(max = 300) val logicalOperator: String, - @Valid val predicates: List, - @Valid @field:ValidChildQueriesDepth val childQueries: List? + @Valid @field:Size(max = 10) val predicates: List, + @Valid @field:ValidChildQueriesDepth @field:Size(max = 10) val childQueries: List? ) data class SearchPredicate( @@ -138,11 +142,20 @@ class SearchController( if (apiVersion.isBlank()) return ResponseEntity.badRequest().build() - val response = this.searchService.search(request) + // TODO: CSRF - return ResponseEntity.ok(response) + val stopwatch = StopWatch() + stopwatch.start() + try { + val response = this.searchService.search(request) + return ResponseEntity.ok(response) + } catch (e: Exception) { + this.logger.error("Error while searching: {}", e.stackTraceToString()) + return ResponseEntity.status(500).build() + } finally { + stopwatch.stop() + this.logger.info("Search took {} seconds", String.format("%.2f", stopwatch.totalTimeSeconds)) + } } - - } \ No newline at end of file