Fixed message restting after page refresh (#234)
Co-authored-by: widlam <mikolaj.widla@gmail.com> Reviewed-on: #234 Reviewed-by: Adam Bem <bema@noreply.example.com> Co-authored-by: Mikolaj Widla <widlam@noreply.example.com> Co-committed-by: Mikolaj Widla <widlam@noreply.example.com>
This commit is contained in:
		| @@ -1,6 +1,5 @@ | |||||||
| package com.r11.tools.controller; | package com.r11.tools.controller; | ||||||
|  |  | ||||||
| import com.fasterxml.jackson.databind.ObjectMapper; |  | ||||||
| import com.r11.tools.model.MockedMessageDto; | import com.r11.tools.model.MockedMessageDto; | ||||||
| import com.r11.tools.service.KlausService; | import com.r11.tools.service.KlausService; | ||||||
| import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||||
| @@ -9,12 +8,12 @@ import org.apache.logging.log4j.LogManager; | |||||||
| import org.apache.logging.log4j.Logger; | import org.apache.logging.log4j.Logger; | ||||||
| import org.springframework.http.HttpHeaders; | import org.springframework.http.HttpHeaders; | ||||||
| import org.springframework.http.HttpStatus; | import org.springframework.http.HttpStatus; | ||||||
| import org.springframework.http.MediaType; |  | ||||||
| import org.springframework.http.ResponseEntity; | import org.springframework.http.ResponseEntity; | ||||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||||
|  |  | ||||||
| import java.time.LocalDateTime; | import java.util.Arrays; | ||||||
| import java.util.*; | import java.util.Objects; | ||||||
|  | import java.util.UUID; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Returns the homepage and provides the api for javascript async requests. |  * Returns the homepage and provides the api for javascript async requests. | ||||||
| @@ -57,40 +56,10 @@ public class MockController { | |||||||
|         MockedMessageDto message ; |         MockedMessageDto message ; | ||||||
|         if(uuidValue == null || uuidValue.equals("")) clientUUID = UUID.randomUUID(); |         if(uuidValue == null || uuidValue.equals("")) clientUUID = UUID.randomUUID(); | ||||||
|         else clientUUID = UUID.fromString(uuidValue); |         else clientUUID = UUID.fromString(uuidValue); | ||||||
|         message = klausService |         message = klausService.getMockedResponse(clientUUID.toString()); | ||||||
|                 .getMockedMessageByClientUUID(clientUUID) |  | ||||||
|                 .orElse( buildDefaultMessage(clientUUID) ); |  | ||||||
|  |  | ||||||
|         return message; |         return message; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Constructs message with default set of data |  | ||||||
|      * @param uuid the key-uuid of given set of messages |  | ||||||
|      * @return message with default dataset |  | ||||||
|      */ |  | ||||||
|     private MockedMessageDto buildDefaultMessage(UUID uuid){ |  | ||||||
|         Map<String, String> headers = new HashMap<>(); |  | ||||||
|         headers.put("Keep-Alive", "timeout=60"); |  | ||||||
|         headers.put("Connection", "keep-alive"); |  | ||||||
|         headers.put("Date", LocalDateTime.now().toString()); |  | ||||||
|         MockedMessageDto mockedMessageDto = MockedMessageDto.builder() |  | ||||||
|                 .clientUUID(uuid) |  | ||||||
|                 .contentType(MediaType.APPLICATION_XML_VALUE) |  | ||||||
|                 .messageBody("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + |  | ||||||
|                         "<note>\n" + |  | ||||||
|                         "  <to>Tove</to>\n" + |  | ||||||
|                         "  <from>Jani</from>\n" + |  | ||||||
|                         "  <heading>Reminder</heading>\n" + |  | ||||||
|                         "  <body>Don't forget me this weekend!</body>\n" + |  | ||||||
|                         "</note>") |  | ||||||
|                 .httpHeaders(headers) |  | ||||||
|                 .httpStatus(200) |  | ||||||
|                 .build(); |  | ||||||
|         klausService.setMockedResponse(mockedMessageDto); |  | ||||||
|         return mockedMessageDto; |  | ||||||
|     } |  | ||||||
|     /** |     /** | ||||||
|      * It's one of the most important features - the bread and butter of the Mocked Service. It's link that allows |      * It's one of the most important features - the bread and butter of the Mocked Service. It's link that allows | ||||||
|      * to receive mocked response from the server and use it to mock! |      * to receive mocked response from the server and use it to mock! | ||||||
| @@ -99,7 +68,7 @@ public class MockController { | |||||||
|      */ |      */ | ||||||
|     @RequestMapping(value = "/r/{clientUUID}") |     @RequestMapping(value = "/r/{clientUUID}") | ||||||
|     public ResponseEntity getMockedResponse( |     public ResponseEntity getMockedResponse( | ||||||
|                                             @PathVariable UUID clientUUID) { |                                             @PathVariable String clientUUID) { | ||||||
|         MockedMessageDto mockedMessageDto = klausService.getMockedResponse(clientUUID); |         MockedMessageDto mockedMessageDto = klausService.getMockedResponse(clientUUID); | ||||||
|         HttpHeaders httpHeaders = new HttpHeaders(); |         HttpHeaders httpHeaders = new HttpHeaders(); | ||||||
|         if (mockedMessageDto.getHttpHeaders() != null) mockedMessageDto.getHttpHeaders().forEach(httpHeaders::set); |         if (mockedMessageDto.getHttpHeaders() != null) mockedMessageDto.getHttpHeaders().forEach(httpHeaders::set); | ||||||
|   | |||||||
| @@ -26,7 +26,7 @@ import java.util.UUID; | |||||||
| public class MockedMessage implements Serializable { | public class MockedMessage implements Serializable { | ||||||
|     @Indexed |     @Indexed | ||||||
|     @Id |     @Id | ||||||
|     private UUID clientUUID; |     private String clientUUID; | ||||||
|     private String contentType; |     private String contentType; | ||||||
|     private String messageBody; |     private String messageBody; | ||||||
|     private Map<String, String> httpHeaders; |     private Map<String, String> httpHeaders; | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ import java.util.UUID; | |||||||
| @NoArgsConstructor | @NoArgsConstructor | ||||||
| @AllArgsConstructor | @AllArgsConstructor | ||||||
| public class MockedMessageDto implements Serializable{ | public class MockedMessageDto implements Serializable{ | ||||||
|     private UUID clientUUID; |     private String clientUUID; | ||||||
|     private String contentType; |     private String contentType; | ||||||
|     private String messageBody; |     private String messageBody; | ||||||
|     private Map<String, String> httpHeaders; |     private Map<String, String> httpHeaders; | ||||||
|   | |||||||
| @@ -1,24 +1,16 @@ | |||||||
| package com.r11.tools.repository; | package com.r11.tools.repository; | ||||||
|  |  | ||||||
| import com.r11.tools.model.MockedMessage; | import com.r11.tools.model.MockedMessage; | ||||||
| import java.util.List; |  | ||||||
| import java.util.Optional; |  | ||||||
| import java.util.UUID; |  | ||||||
| import org.springframework.data.repository.CrudRepository; | import org.springframework.data.repository.CrudRepository; | ||||||
| import org.springframework.stereotype.Repository; | import org.springframework.stereotype.Repository; | ||||||
| import org.springframework.transaction.annotation.Transactional; | import org.springframework.transaction.annotation.Transactional; | ||||||
|  |  | ||||||
|  | import java.util.Optional; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Spring repository that allows to retrieve message list by key-uuid from redis database |  * Spring repository that allows to retrieve message list by key-uuid from redis database | ||||||
|  * @author Rafał Żukowicz |  * @author Rafał Żukowicz | ||||||
|  */ |  */ | ||||||
| @Repository | @Repository | ||||||
| @Transactional | @Transactional | ||||||
| public interface MockedResponseRepository extends CrudRepository<MockedMessage, UUID> { | public interface MockedResponseRepository extends CrudRepository<MockedMessage, String> {} | ||||||
|     /** |  | ||||||
|      * Finds all messages by their uuid |  | ||||||
|      * @param clientUUID the key-uuid of given set of messages |  | ||||||
|      * @return Optional of list of {@link com.r11.tools.model.MockedMessage} |  | ||||||
|      */ |  | ||||||
|     Optional<MockedMessage> findAllByClientUUID(UUID clientUUID); |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -13,7 +13,6 @@ import org.springframework.stereotype.Service; | |||||||
|  */ |  */ | ||||||
| @Service | @Service | ||||||
| public interface KlausService { | public interface KlausService { | ||||||
|     Optional<MockedMessageDto> getMockedMessageByClientUUID(UUID clientUUID); |     MockedMessageDto getMockedResponse(String clientUUID); | ||||||
|     MockedMessageDto getMockedResponse(UUID clientUUID); |  | ||||||
|     ResponseEntity<String> setMockedResponse(MockedMessageDto mockedMessageDto); |     ResponseEntity<String> setMockedResponse(MockedMessageDto mockedMessageDto); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -10,11 +10,14 @@ import org.apache.logging.log4j.LogManager; | |||||||
| import org.apache.logging.log4j.Logger; | import org.apache.logging.log4j.Logger; | ||||||
| import org.springframework.http.HttpHeaders; | import org.springframework.http.HttpHeaders; | ||||||
| import org.springframework.http.HttpStatus; | import org.springframework.http.HttpStatus; | ||||||
|  | import org.springframework.http.MediaType; | ||||||
| import org.springframework.http.ResponseEntity; | import org.springframework.http.ResponseEntity; | ||||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||||
|  |  | ||||||
|  | import java.time.LocalDateTime; | ||||||
|  | import java.util.HashMap; | ||||||
|  | import java.util.Map; | ||||||
| import java.util.Optional; | import java.util.Optional; | ||||||
| import java.util.UUID; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Service for {@link com.r11.tools.controller.MockController} and {@link com.r11.tools.controller.MockController} |  * Service for {@link com.r11.tools.controller.MockController} and {@link com.r11.tools.controller.MockController} | ||||||
| @@ -31,18 +34,6 @@ public class KlausServiceImpl implements KlausService { | |||||||
|     private final MockedResponseRepository mockedResponseRepository; |     private final MockedResponseRepository mockedResponseRepository; | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Returns all messages of given key-uuid |  | ||||||
|      * @param clientUUID the key-uuid of given set of messages |  | ||||||
|      * @return List of {@link MockedMessageDto} |  | ||||||
|      */ |  | ||||||
|     @Override |  | ||||||
|     public Optional<MockedMessageDto> getMockedMessageByClientUUID(UUID clientUUID){ |  | ||||||
|         Optional<MockedMessage> mockedMessageOptional = mockedResponseRepository.findAllByClientUUID(clientUUID); |  | ||||||
|         log.info("Message for UUID: "+clientUUID+" has been fetched from DB."); |  | ||||||
|         return mockedMessageMapper.optionalMockedMessageToOptionalMockedMessageDTO(mockedMessageOptional); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Returns {@link MockedMessageDto} of given id and key-uuid. If message doesn't then empty message is returned |      * Returns {@link MockedMessageDto} of given id and key-uuid. If message doesn't then empty message is returned | ||||||
|      * @param clientUUID the key-uuid of given set of messages |      * @param clientUUID the key-uuid of given set of messages | ||||||
| @@ -50,18 +41,44 @@ public class KlausServiceImpl implements KlausService { | |||||||
|      */ |      */ | ||||||
|     @SneakyThrows |     @SneakyThrows | ||||||
|     @Override |     @Override | ||||||
|     public MockedMessageDto getMockedResponse(UUID clientUUID){ |     public MockedMessageDto getMockedResponse(String clientUUID){ | ||||||
|         Optional<MockedMessage> optionalMockedMessage = mockedResponseRepository.findById(clientUUID); |         Optional<MockedMessage> optionalMockedMessage = mockedResponseRepository.findById(clientUUID); | ||||||
|         MockedMessageDto mockedMessageDto = MockedMessageDto.builder() |         MockedMessageDto mockedMessageDto; | ||||||
|                 .clientUUID(clientUUID) |  | ||||||
|                 .build(); |  | ||||||
|         if (optionalMockedMessage.isPresent()) { |         if (optionalMockedMessage.isPresent()) { | ||||||
|             mockedMessageDto = mockedMessageMapper.mockedMessageToMockedMessageDto(optionalMockedMessage.get()); |             mockedMessageDto = mockedMessageMapper.mockedMessageToMockedMessageDto(optionalMockedMessage.get()); | ||||||
|             //log.info(mockedMessageDto.toString().replaceAll("\"", "\\\\\"")); |  | ||||||
|             return mockedMessageDto; |             return mockedMessageDto; | ||||||
|  |         } else { | ||||||
|  |             MockedMessageDto defaultMessage = buildDefaultMessage(clientUUID); | ||||||
|  |             setMockedResponse(defaultMessage); | ||||||
|  |             return defaultMessage; | ||||||
|         } |         } | ||||||
|         //log.info(mockedMessageDto.toString().replaceAll("\"", "\\\\\"")); |     } | ||||||
|         return mockedMessageDto; |  | ||||||
|  |     /** | ||||||
|  |      * Constructs message with default set of data | ||||||
|  |      * @param uuid the key-uuid of given set of messages | ||||||
|  |      * @return message with default dataset | ||||||
|  |      */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     private MockedMessageDto buildDefaultMessage(String uuid){ | ||||||
|  |         Map<String, String> headers = new HashMap<>(); | ||||||
|  |         headers.put("Keep-Alive", "timeout=60"); | ||||||
|  |         headers.put("Connection", "keep-alive"); | ||||||
|  |         headers.put("Date", LocalDateTime.now().toString()); | ||||||
|  |         return MockedMessageDto.builder() | ||||||
|  |                 .clientUUID(uuid) | ||||||
|  |                 .contentType(MediaType.APPLICATION_XML_VALUE) | ||||||
|  |                 .messageBody("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + | ||||||
|  |                         "<note>\n" + | ||||||
|  |                         "  <to>Tove</to>\n" + | ||||||
|  |                         "  <from>Jani</from>\n" + | ||||||
|  |                         "  <heading>Reminder</heading>\n" + | ||||||
|  |                         "  <body>Don't forget me this weekend!</body>\n" + | ||||||
|  |                         "</note>") | ||||||
|  |                 .httpHeaders(headers) | ||||||
|  |                 .httpStatus(200) | ||||||
|  |                 .build(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -72,8 +89,10 @@ public class KlausServiceImpl implements KlausService { | |||||||
|     @SneakyThrows |     @SneakyThrows | ||||||
|     @Override |     @Override | ||||||
|     public ResponseEntity<String> setMockedResponse(MockedMessageDto mockedMessageDto) { |     public ResponseEntity<String> setMockedResponse(MockedMessageDto mockedMessageDto) { | ||||||
|         mockedResponseRepository.save(mockedMessageMapper.mockedMessageDtoToMockedMessage(mockedMessageDto)); |         MockedMessage message = mockedMessageMapper.mockedMessageDtoToMockedMessage(mockedMessageDto); | ||||||
|         //log.info(mockedMessageDto.toString().replaceAll("\"", "\\\\\"")); |         message.setCreatedAt(LocalDateTime.now()); | ||||||
|  |         log.info("SAVE:"+message.toString().replace("\n"," ")); | ||||||
|  |         mockedResponseRepository.save(message); | ||||||
|         return new ResponseEntity<>("MockedResponse has been setup successfully!", new HttpHeaders(), |         return new ResponseEntity<>("MockedResponse has been setup successfully!", new HttpHeaders(), | ||||||
|                 HttpStatus.ACCEPTED); |                 HttpStatus.ACCEPTED); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ const props = defineProps( | |||||||
|  |  | ||||||
| const message = ref(''); | const message = ref(''); | ||||||
| const visible = ref('hidden'); | const visible = ref('hidden'); | ||||||
| const fetchLink = window.location.protocol + "//" + window.location.hostname + "/mock/api/mock" | const fetchLink = window.location.protocol + "//" + window.location.hostname + "/mock/api/mock"; | ||||||
|  |  | ||||||
| function prepareAndSendData(){ | function prepareAndSendData(){ | ||||||
|     if (props.messageData != null|| props.messageData != undefined ){ |     if (props.messageData != null|| props.messageData != undefined ){ | ||||||
| @@ -27,7 +27,7 @@ function prepareAndSendData(){ | |||||||
|  |  | ||||||
| function showToast(){ | function showToast(){ | ||||||
|     visible.value = "visible"; |     visible.value = "visible"; | ||||||
|     setTimeout( () => { visible.value = "opacity-0" } , 1500 ) |     setTimeout( () => { visible.value = "opacity-0" } , 1000 ) | ||||||
| } | } | ||||||
|  |  | ||||||
| function hideToast(){ | function hideToast(){ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user