From 387551bd7becf6e7acd32d23387e39360a5c08c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A8=D0=B8=D0=BC=D1=87=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Fri, 12 Sep 2025 05:43:20 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20src/main/java/org/lanit/controllers/JSONController.jav?= =?UTF-8?q?a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/lanit/controllers/JSONController.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/main/java/org/lanit/controllers/JSONController.java diff --git a/src/main/java/org/lanit/controllers/JSONController.java b/src/main/java/org/lanit/controllers/JSONController.java new file mode 100644 index 0000000..159945e --- /dev/null +++ b/src/main/java/org/lanit/controllers/JSONController.java @@ -0,0 +1,73 @@ +package org.lanit.controllers; + +import org.lanit.models.*; +import org.lanit.service.JsonProcessingService; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import java.io.IOException; +import java.time.Instant; + +@RestController +public class JSONController { + + private final JsonProcessingService processingService; + private final ObjectMapper objectMapper; + + public JSONController(JsonProcessingService processingService, ObjectMapper objectMapper) { + this.processingService = processingService; + this.objectMapper = objectMapper; + } + + @GetMapping("/json") + public ResponseEntity handleJsonRequest( + @RequestParam("action") String action, + @RequestBody String jsonBody) throws IOException { + + System.out.println("Received JSON: " + jsonBody); + System.out.println("Action: " + action); + + try { + if ("add".equals(action)) { + AddRequest addRequest = objectMapper.readValue(jsonBody, AddRequest.class); + Info modifiedInfo = processingService.processAdd(addRequest); + + Response response = new Response(); + response.setInfo(modifiedInfo); + response.setUuid(addRequest.getUuid()); + response.setLastUpdate(Instant.now().toString()); + return ResponseEntity.ok(response); + + } else if ("delete".equals(action)) { + DeleteRequest deleteRequest = objectMapper.readValue(jsonBody, DeleteRequest.class); + Info modifiedInfo = processingService.processDelete(deleteRequest); + + Response response = new Response(); + response.setInfo(modifiedInfo); + response.setUuid(deleteRequest.getUuid()); + response.setLastUpdate(Instant.now().toString()); + return ResponseEntity.ok(response); + + } else { + ErrorResponse error = new ErrorResponse(); + error.setStatus("error"); + error.setMessage("Передан некорректный action - " + action); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error); + } + + } catch (RuntimeException e) { + ErrorResponse error = new ErrorResponse(); + error.setStatus("error"); + error.setMessage(e.getMessage()); + HttpStatus status = e.getMessage().contains("тикер") || e.getMessage().contains("индекс") + ? HttpStatus.NOT_FOUND : HttpStatus.BAD_REQUEST; + return ResponseEntity.status(status).body(error); + } catch (IOException e) { + ErrorResponse error = new ErrorResponse(); + error.setStatus("error"); + error.setMessage("Ошибка разбора JSON"); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error); + } + } +} \ No newline at end of file