diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/controller/MockController.java b/Backend/mocked-services/src/main/java/com/r11/tools/controller/MockController.java index 61f00fe..a9af2c3 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/controller/MockController.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/controller/MockController.java @@ -51,106 +51,35 @@ public class MockController { * Returns the full list of messages. It's used by javascript on the client side to initialize homepage * with data from the database. * @param uuidValue the key-uuid of given set of messages - * @return responds with 200 OK and list of {@link MockedMessageDto} + * @return responds with 200 OK and {@link MockedMessageDto} */ @GetMapping({"/", "/{uuidValue}"}) - public List getListOfMessages(@PathVariable(required = false) String uuidValue){ + public MockedMessageDto getMessage(@PathVariable(required = false) String uuidValue){ UUID clientUUID; + MockedMessageDto message ; if(uuidValue == null || uuidValue.equals("")) clientUUID = UUID.randomUUID(); else clientUUID = UUID.fromString(uuidValue); - List messages = klausService.getAllMockedResponses(clientUUID); - if(messages.size() == 0) { - klausService.setMockedResponse(buildDefaultMessage(clientUUID)); - messages = klausService.getAllMockedResponses(clientUUID); - } - Collections.sort(messages); - return messages; - } + message = klausService + .getMockedMessageByClientUUID(clientUUID) + .orElse( buildDefaultMessage(clientUUID) ); - /** - * If provided UUID does not exist in database returns ResponseEntity with new generated UUID(if previous UUID is not provided), - * or old UUID(if previous UUID is provided). If provided UUID exists function returns provided UUID. - * @param givenUUIDValue the UUID client wants to check exsitance in database - * @param previousUUIDValue the previous UUID used by client(optional variable) - * @return ResponseEntity with UUID - */ - @RequestMapping( - method = RequestMethod.GET , - path = {"/check/{givenUUIDValue}/{previousUUIDValue}", - "/check/{givenUUIDValue}"}) - public ResponseEntity checkUUID( - @PathVariable String givenUUIDValue - ,@PathVariable(required = false) String previousUUIDValue ){ - try{ - UUID.fromString(givenUUIDValue); - } catch (IllegalArgumentException ex){ - log.error("Wrong UUID value!"); - if (previousUUIDValue == null || previousUUIDValue.equals("")){ - UUID newUUID = UUID.randomUUID(); - log.info("New UUID generated."); - return ResponseEntity.ok(newUUID.toString()); - } - log.info("Previous UUID value restored."); - return ResponseEntity.ok(previousUUIDValue); - } - return ResponseEntity.ok(givenUUIDValue); - } - - /** - * Accepts empty post request and creates new message in given set. The new message has default set of data, - * which is constructed in {@link #buildDefaultMessage(UUID, int)} method. - * @param uuidValue the key-uuid of given set of messages - * @return confirmation response with 200 OK - */ - @PostMapping("/{uuidValue}") - public ResponseEntity addNewMessage(@PathVariable String uuidValue){ - UUID clientUUID = UUID.fromString(uuidValue); - List messages = klausService.getAllMockedResponses(clientUUID); - MockedMessageDto nextMessage = buildDefaultMessage(clientUUID, findNextId(messages)); - return klausService.setMockedResponse(nextMessage); - } - - /** - * Deletes message of given id via client request - * @param uuidValue the key-uuid of given set of messages - * @param idValue unique id of given message - * @return after deletion the confirmation is send with status 200 OK - */ - @DeleteMapping("/{uuidValue}/{idValue}") - public ResponseEntity removeMessage(@PathVariable String uuidValue, - @PathVariable String idValue){ - UUID clientUUID = UUID.fromString(uuidValue); - int id = Integer.parseInt(idValue); - return klausService.deleteMockedResponse(clientUUID, id); - } - - - /** - * Recalls {@link #buildDefaultMessage(UUID)} for message construction and sets id of message - * @param uuid the key-uuid of given set of messages - * @param id unique id of given message - * @return message with default dataset and set id - */ - private static MockedMessageDto buildDefaultMessage(UUID uuid, int id){ - MockedMessageDto message = buildDefaultMessage(uuid); - message.setMockedResponseId(id); 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 static MockedMessageDto buildDefaultMessage(UUID uuid){ + private MockedMessageDto buildDefaultMessage(UUID uuid){ Map headers = new HashMap<>(); headers.put("Keep-Alive", "timeout=60"); headers.put("Connection", "keep-alive"); headers.put("Date", LocalDateTime.now().toString()); - return MockedMessageDto.builder() + MockedMessageDto mockedMessageDto = MockedMessageDto.builder() .clientUUID(uuid) - .mockedResponseId(1) - .mediaType(MediaType.APPLICATION_XML_VALUE) + .contentType(MediaType.APPLICATION_XML_VALUE) .messageBody("\n" + "\n" + " Tove\n" + @@ -161,38 +90,24 @@ public class MockController { .httpHeaders(headers) .httpStatus(200) .build(); + klausService.setMockedResponse(mockedMessageDto); + return mockedMessageDto; } - - /** - * Finds the highest id in the list and returns it incremented by 1 - * @param messages list of messages - * @return highest id incremented by 1 - */ - public static int findNextId(List messages) { - int highestId = 0; - for (MockedMessageDto m : messages) - highestId = highestId > m.getMockedResponseId() ? highestId : m.getMockedResponseId(); - return ++highestId; - } - /** * 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! * @param clientUUID the key-uuid of given set of messages - * @param mockedResponseId unique id of given message * @return */ - @RequestMapping(value = "/r/{clientUUID}/{mockedResponseId}") + @RequestMapping(value = "/r/{clientUUID}") public ResponseEntity getMockedResponse( - @PathVariable UUID clientUUID, - @PathVariable int mockedResponseId) { - MockedMessageDto mockedMessageDto = klausService.getMockedResponse(clientUUID, mockedResponseId); + @PathVariable UUID clientUUID) { + MockedMessageDto mockedMessageDto = klausService.getMockedResponse(clientUUID); HttpHeaders httpHeaders = new HttpHeaders(); if (mockedMessageDto.getHttpHeaders() != null) mockedMessageDto.getHttpHeaders().forEach(httpHeaders::set); - httpHeaders.add("Content-Type", mockedMessageDto.getMediaType()); + httpHeaders.add("Content-Type", mockedMessageDto.getContentType()); return new ResponseEntity<>(mockedMessageDto.getMessageBody(), httpHeaders, Objects.requireNonNull(HttpStatus.valueOf(mockedMessageDto.getHttpStatus()))); } - } diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/controller/RequestHistoryController.java b/Backend/mocked-services/src/main/java/com/r11/tools/controller/RequestHistoryController.java index de220c7..bfd7ddb 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/controller/RequestHistoryController.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/controller/RequestHistoryController.java @@ -1,7 +1,6 @@ package com.r11.tools.controller; import com.r11.tools.mappers.RequestHistoryMapper; -import com.r11.tools.model.HistoryRequestModel; import com.r11.tools.model.RequestHistory; import com.r11.tools.model.RequestHistoryDTO; import com.r11.tools.service.RequestHistoryService; @@ -9,9 +8,7 @@ import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import java.time.LocalDateTime; import java.util.List; -import java.util.UUID; import java.util.stream.Collectors; /** @@ -28,40 +25,14 @@ public class RequestHistoryController { private final RequestHistoryMapper mapper; /** - * Returns the list of Events in given time bracket. - * The list of objects is received via {@link RequestHistoryDTO}, which contains time brackets, - * as well as the key - uuid. - * @param historyRequestModel EventRequestDto object that contains data needed to query the database - * @return list of {@link RequestHistory} - */ - @PostMapping - public ResponseEntity> filterHistory(@RequestBody HistoryRequestModel historyRequestModel){ - return ResponseEntity.ok( - service.getHistoryRecordsBetweenDatesAndByUUIDAndMessageId(historyRequestModel) - .stream() - .map(mapper::requestHistoryToRequestHistoryDTO) - .collect(Collectors.toList()) - ); - } - - /** - * Returns the list of Events of last 24h from given date. + * Returns the list of Events. * @param uuid unique id of message list - * @param messageId unique id of message in message list * @return list of {@link RequestHistory} */ - @GetMapping(path = "/{uuid}/{messageId}") - public ResponseEntity> getLastDay(@PathVariable UUID uuid, - @PathVariable Integer messageId){ - LocalDateTime requestTime = LocalDateTime.now(); - LocalDateTime dayBeforeRequest = requestTime.minusDays(1L); - List requestHistory = service.getHistoryRecordsBetweenDatesAndByUUIDAndMessageId( - HistoryRequestModel.builder() - .localDateTimeFrom(dayBeforeRequest) - .localDateTimeTo(requestTime) - .clientUUID(uuid) - .mockedResponseId(messageId) - .build() + @GetMapping(path = "/{uuid}") + public ResponseEntity> getLastDay(@PathVariable String uuid){ + List requestHistory = service.getHistoryRecordsByUUID( + uuid ).stream() .map(mapper::requestHistoryToRequestHistoryDTO) .collect(Collectors.toList()); diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/interceptor/IncomingMockRequestInterceptor.java b/Backend/mocked-services/src/main/java/com/r11/tools/interceptor/IncomingMockRequestInterceptor.java index 70faec3..0693ef9 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/interceptor/IncomingMockRequestInterceptor.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/interceptor/IncomingMockRequestInterceptor.java @@ -39,7 +39,6 @@ public class IncomingMockRequestInterceptor implements HandlerInterceptor { RequestHistoryDTO historyDTO = RequestHistoryDTO.builder() .httpMethod(HttpMethod.valueOf(httpRequest.getMethod())) .headers( headers ) - .messageID(Integer.valueOf(pathVariable.get("mockedResponseId"))) .clientUUID(UUID.fromString(pathVariable.get("clientUUID"))) .dateTimeStamp(LocalDateTime.now()) .requestBody(requestBody) diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/mappers/MockedMessageMapper.java b/Backend/mocked-services/src/main/java/com/r11/tools/mappers/MockedMessageMapper.java index 0ba9a76..af0098f 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/mappers/MockedMessageMapper.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/mappers/MockedMessageMapper.java @@ -4,15 +4,23 @@ import com.r11.tools.model.MockedMessage; import com.r11.tools.model.MockedMessageDto; import org.mapstruct.*; +import java.util.Optional; + /** * Creates key value for redis entry * @author Rafał Źukowicz */ @Mapper public interface MockedMessageMapper { - @Mapping( target = "compositePrimaryKey", expression = "java(mockedMessageDto.getClientUUID() + \"_\"" + - " + mockedMessageDto.getMockedResponseId())") @Mapping( target = "createdAt" , expression = "java(java.time.LocalDateTime.now())") MockedMessage mockedMessageDtoToMockedMessage(MockedMessageDto mockedMessageDto); MockedMessageDto mockedMessageToMockedMessageDto(MockedMessage mockedMessage); + + default Optional optionalMockedMessageToOptionalMockedMessageDTO(Optional optionalMockedMessage){ + return optionalMockedMessage.map(this::mockedMessageToMockedMessageDto); + } + + default Optional optionalMockedMessageDTOToOptionalMockedMessage(Optional optionalMockedMessageDto){ + return optionalMockedMessageDto.map(this::mockedMessageDtoToMockedMessage); + } } diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/mappers/RequestHistoryMapper.java b/Backend/mocked-services/src/main/java/com/r11/tools/mappers/RequestHistoryMapper.java index a4bb5ed..5f97e92 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/mappers/RequestHistoryMapper.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/mappers/RequestHistoryMapper.java @@ -15,7 +15,6 @@ import org.mapstruct.Mapping; @Mapper public interface RequestHistoryMapper { - @Mapping(target = "id", expression = "java(null)") @Mapping(target = "clientUUID", expression = "java(requestHistoryDTO.getClientUUID().toString())") RequestHistory requestHistoryDTOToRequestHistory(RequestHistoryDTO requestHistoryDTO); @Mapping(target = "clientUUID", expression = "java(java.util.UUID.fromString(requestHistory.getClientUUID()))") diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/model/HistoryRequestModel.java b/Backend/mocked-services/src/main/java/com/r11/tools/model/HistoryRequestModel.java deleted file mode 100644 index 54aa79f..0000000 --- a/Backend/mocked-services/src/main/java/com/r11/tools/model/HistoryRequestModel.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.r11.tools.model; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.springframework.format.annotation.DateTimeFormat; - -import java.time.LocalDateTime; -import java.util.UUID; - -/** - * Represents all data needed to get HistoryRecord from database - * @author Mikołaj Widła - */ - -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class HistoryRequestModel { - - private UUID clientUUID; - @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) - private LocalDateTime localDateTimeFrom; - @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) - private LocalDateTime localDateTimeTo; - private Integer mockedResponseId; - -} diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessage.java b/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessage.java index abdf15a..a0b6d0e 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessage.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessage.java @@ -1,11 +1,6 @@ package com.r11.tools.model; import com.r11.tools.model.constraints.HttpCode; -import java.io.Serializable; -import java.time.LocalDateTime; -import java.util.Map; -import java.util.UUID; -import javax.validation.constraints.Positive; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -14,6 +9,11 @@ import org.springframework.data.annotation.Id; import org.springframework.data.redis.core.RedisHash; import org.springframework.data.redis.core.index.Indexed; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Map; +import java.util.UUID; + /** * MockedMessage redis entity pojo * @author Rafał Żukowicz @@ -24,13 +24,10 @@ import org.springframework.data.redis.core.index.Indexed; @NoArgsConstructor @AllArgsConstructor public class MockedMessage implements Serializable { - @Id - private String compositePrimaryKey; @Indexed + @Id private UUID clientUUID; - @Positive - private Integer mockedResponseId; - private String mediaType; + private String contentType; private String messageBody; private Map httpHeaders; @HttpCode @@ -38,5 +35,3 @@ public class MockedMessage implements Serializable { private LocalDateTime createdAt; } - - diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessageDto.java b/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessageDto.java index caae824..d3206ed 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessageDto.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessageDto.java @@ -1,12 +1,11 @@ package com.r11.tools.model; import com.r11.tools.model.constraints.HttpCode; +import lombok.*; + import java.io.Serializable; import java.util.Map; import java.util.UUID; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Positive; -import lombok.*; /** * Alternative version of {@link MockedMessage} used in http body @@ -18,19 +17,12 @@ import lombok.*; @ToString @NoArgsConstructor @AllArgsConstructor -public class MockedMessageDto implements Serializable, Comparable { +public class MockedMessageDto implements Serializable{ private UUID clientUUID; - @NotNull - @Positive - private Integer mockedResponseId; - private String mediaType; + private String contentType; private String messageBody; private Map httpHeaders; @HttpCode private Integer httpStatus; - @Override - public int compareTo(MockedMessageDto message) { - return this.mockedResponseId > message.getMockedResponseId() ? 1 : -1; - } } diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/model/RequestHistory.java b/Backend/mocked-services/src/main/java/com/r11/tools/model/RequestHistory.java index 385d5e2..1c17387 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/model/RequestHistory.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/model/RequestHistory.java @@ -25,15 +25,12 @@ import java.util.Map; @AllArgsConstructor @RedisHash("mockHistory") public class RequestHistory implements Comparable, Serializable { - @Id private String id; @DateTimeFormat(pattern = "yyyy-MM-ddTHH:mm:ss") private LocalDateTime dateTimeStamp; @Indexed private String clientUUID; - @Indexed - private Integer messageID; private Map headers; private HttpMethod httpMethod; private String requestBody; diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/model/RequestHistoryDTO.java b/Backend/mocked-services/src/main/java/com/r11/tools/model/RequestHistoryDTO.java index 1df697c..7c78958 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/model/RequestHistoryDTO.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/model/RequestHistoryDTO.java @@ -25,7 +25,6 @@ public class RequestHistoryDTO { private UUID clientUUID; @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) private LocalDateTime dateTimeStamp; - private Integer messageID; private Map headers; private HttpMethod httpMethod; private String requestBody; diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/repository/MockedResponseRepository.java b/Backend/mocked-services/src/main/java/com/r11/tools/repository/MockedResponseRepository.java index 7b12b0b..f9296fa 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/repository/MockedResponseRepository.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/repository/MockedResponseRepository.java @@ -14,11 +14,11 @@ import org.springframework.transaction.annotation.Transactional; */ @Repository @Transactional -public interface MockedResponseRepository extends CrudRepository { +public interface MockedResponseRepository extends CrudRepository { /** * 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> findAllByClientUUID(UUID clientUUID); + Optional findAllByClientUUID(UUID clientUUID); } diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/repository/RequestHistoryRepository.java b/Backend/mocked-services/src/main/java/com/r11/tools/repository/RequestHistoryRepository.java index 2df27d5..9927937 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/repository/RequestHistoryRepository.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/repository/RequestHistoryRepository.java @@ -14,7 +14,5 @@ import java.util.List; @Repository @Transactional public interface RequestHistoryRepository extends CrudRepository { - List findAllByClientUUIDAndMessageID( - String clientUUID, - Integer messageID); + List findAllByClientUUID(String clientUUID); } diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausService.java b/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausService.java index 917f878..1c5079a 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausService.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausService.java @@ -1,7 +1,8 @@ package com.r11.tools.service; import com.r11.tools.model.MockedMessageDto; -import java.util.List; + +import java.util.Optional; import java.util.UUID; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; @@ -12,8 +13,7 @@ import org.springframework.stereotype.Service; */ @Service public interface KlausService { - ResponseEntity deleteMockedResponse(UUID clientUUID, int mockedResponseId); - List getAllMockedResponses(UUID clientUUID); - MockedMessageDto getMockedResponse(UUID clientUUID, int mockedResponseId); + Optional getMockedMessageByClientUUID(UUID clientUUID); + MockedMessageDto getMockedResponse(UUID clientUUID); ResponseEntity setMockedResponse(MockedMessageDto mockedMessageDto); } diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausServiceImpl.java b/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausServiceImpl.java index ce16bb2..08f3569 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausServiceImpl.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausServiceImpl.java @@ -13,16 +13,15 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; -import java.util.List; import java.util.Optional; import java.util.UUID; -import java.util.stream.Collectors; /** * Service for {@link com.r11.tools.controller.MockController} and {@link com.r11.tools.controller.MockController} * Allows for performing CRUD operations on {@link MockedMessageDto} * @author Rafał Żukowicz * @author Gabriel Modzelewski + * @author Mikołaj Widła */ @Service @AllArgsConstructor @@ -31,20 +30,6 @@ public class KlausServiceImpl implements KlausService { private final Logger log = LogManager.getRootLogger(); private final MockedResponseRepository mockedResponseRepository; - /** - * Removes message of given id in given key-uuid set - * @param clientUUID the key-uuid of given set of messages - * @param mockedResponseId unique id of given message - * @return confirmation and status 200 OK - */ - @Override - public ResponseEntity deleteMockedResponse(UUID clientUUID, int mockedResponseId) { - String key = clientUUID.toString() + "_" + mockedResponseId; - mockedResponseRepository.deleteById(key); - log.info("Message: "+mockedResponseId+" has been removed."); - return new ResponseEntity<>("MockedResponse has been removed successfully", - new HttpHeaders(), HttpStatus.ACCEPTED); - } /** * Returns all messages of given key-uuid @@ -52,28 +37,23 @@ public class KlausServiceImpl implements KlausService { * @return List of {@link MockedMessageDto} */ @Override - public List getAllMockedResponses(UUID clientUUID){ - Optional> listOptional = mockedResponseRepository.findAllByClientUUID(clientUUID); - log.info("Messages for UUID: "+clientUUID+" has been fetched from DB."); - return listOptional.map(mockedMessages -> mockedMessages.stream() - .map(mockedMessageMapper::mockedMessageToMockedMessageDto) - .collect(Collectors.toList())).orElse(List.of()); + public Optional getMockedMessageByClientUUID(UUID clientUUID){ + Optional 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 * @param clientUUID the key-uuid of given set of messages - * @param mockedResponseId unique id of given message * @return {@link MockedMessageDto} object */ @SneakyThrows @Override - public MockedMessageDto getMockedResponse(UUID clientUUID, int mockedResponseId){ - String key = clientUUID.toString() + "_" + mockedResponseId; - Optional optionalMockedMessage = mockedResponseRepository.findById(key); + public MockedMessageDto getMockedResponse(UUID clientUUID){ + Optional optionalMockedMessage = mockedResponseRepository.findById(clientUUID); MockedMessageDto mockedMessageDto = MockedMessageDto.builder() .clientUUID(clientUUID) - .mockedResponseId(mockedResponseId) .build(); if (optionalMockedMessage.isPresent()) { mockedMessageDto = mockedMessageMapper.mockedMessageToMockedMessageDto(optionalMockedMessage.get()); diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/service/RequestHistoryService.java b/Backend/mocked-services/src/main/java/com/r11/tools/service/RequestHistoryService.java index 1f8042a..ccd2206 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/service/RequestHistoryService.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/service/RequestHistoryService.java @@ -1,12 +1,12 @@ package com.r11.tools.service; import com.r11.tools.controller.RequestHistoryController; -import com.r11.tools.model.HistoryRequestModel; import com.r11.tools.model.RequestHistory; import com.r11.tools.model.RequestHistoryDTO; -import java.util.List; import org.springframework.stereotype.Service; +import java.util.List; + /** * Spring service interface for {@link RequestHistoryController} * @author Rafał Żukowicz @@ -15,9 +15,9 @@ import org.springframework.stereotype.Service; public interface RequestHistoryService { /** * Searches for {@link RequestHistory} objects between date brackets - * @param historyRequestModel object containing required data for request + * @param uuid user uuid * @return list of {@link RequestHistory} */ - List getHistoryRecordsBetweenDatesAndByUUIDAndMessageId(HistoryRequestModel historyRequestModel); + List getHistoryRecordsByUUID(String uuid); void saveRequest(RequestHistoryDTO requestDTO); } diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/service/RequestHistoryServiceImpl.java b/Backend/mocked-services/src/main/java/com/r11/tools/service/RequestHistoryServiceImpl.java index ffe3ed5..c0da875 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/service/RequestHistoryServiceImpl.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/service/RequestHistoryServiceImpl.java @@ -2,7 +2,6 @@ package com.r11.tools.service; import com.r11.tools.controller.RequestHistoryController; import com.r11.tools.mappers.RequestHistoryMapper; -import com.r11.tools.model.HistoryRequestModel; import com.r11.tools.model.RequestHistory; import com.r11.tools.model.RequestHistoryDTO; import com.r11.tools.repository.RequestHistoryRepository; @@ -11,7 +10,6 @@ import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; /** * Spring Service for {@link RequestHistoryController}. Contains logic required for quering @@ -26,29 +24,11 @@ public class RequestHistoryServiceImpl implements RequestHistoryService { private final RequestHistoryRepository repository; private final RequestHistoryMapper requestMapper; - /** - * in order to create query via{@link com.r11.tools.repository.RequestHistoryRepository} - * @param historyRequestModel object containing required data for request - * @return list of {@link RequestHistory} - */ @Override - public List getHistoryRecordsBetweenDatesAndByUUIDAndMessageId(HistoryRequestModel historyRequestModel) { - List history = repository.findAllByClientUUIDAndMessageID( - historyRequestModel.getClientUUID().toString(), - historyRequestModel.getMockedResponseId() - ); + public List getHistoryRecordsByUUID(String uuid) { + List history = repository.findAllByClientUUID(uuid); Collections.sort(history); - - return history.stream() - .filter( historyRecord -> historyRecord - .getDateTimeStamp() - .isAfter(historyRequestModel.getLocalDateTimeFrom()) - ).filter( - historyRecord-> historyRecord - .getDateTimeStamp() - .isBefore(historyRequestModel.getLocalDateTimeTo()) - ) - .collect(Collectors.toList()); + return history; } @Override diff --git a/Frontend/assets/css/tools/mock/r11tool.css b/Frontend/assets/css/tools/mock/r11tool.css index ad7fed0..098cfe0 100644 --- a/Frontend/assets/css/tools/mock/r11tool.css +++ b/Frontend/assets/css/tools/mock/r11tool.css @@ -63,10 +63,6 @@ body { width: 90%; } -.tool.extended .tool-context { - width: 75%; -} - .tool.extended .tool-extention { width: 20%; padding-top: 2%; diff --git a/Frontend/assets/scripts/frame.js b/Frontend/assets/scripts/frame.js index 0371186..2b4242e 100644 --- a/Frontend/assets/scripts/frame.js +++ b/Frontend/assets/scripts/frame.js @@ -83,12 +83,21 @@ function changeActiveTools(activeCategoryButton) { * @returns {void} */ function changeTool(tool) { - if (tools.has(tool)) { - const url = tools.get(tool); - document.location.search = tool + "/"; - localStorage.setItem("lastPage", tool); - document.getElementById("iframe").src = url; + if (! tools.has(tool)) return; + const url = tools.get(tool); + localStorage.setItem("lastPage", tool); + + switch (tool) { // XML category is default. + case "jsonform": + changeActiveTools('JSON'); + break; + case "mock": + changeActiveTools('REST'); + break; + } + document.location.search = tool; + document.getElementById("iframe").src = url; } /** @@ -104,15 +113,5 @@ function loadLastPage() { if (lastPage == null) { lastPage = "xpath"; } - - switch (lastPage) { // XML category is default. - case "jsonform": - changeActiveTools('JSON'); - break; - case "mock": - changeActiveTools('REST'); - break; - - } - document.getElementById("iframe").src = tools.get(lastPage); + changeTool(lastPage); } \ No newline at end of file diff --git a/Frontend/assets/scripts/tools/mock/datatransfer.js b/Frontend/assets/scripts/tools/mock/datatransfer.js index f1f0811..3f265d1 100644 --- a/Frontend/assets/scripts/tools/mock/datatransfer.js +++ b/Frontend/assets/scripts/tools/mock/datatransfer.js @@ -2,16 +2,9 @@ var clientUUID = ''; var advancedDisplayed = false; var json = {}; var jsonIndex = 0; -var lastId = 1; -var htable_row = 0; var host = window.location.protocol + "//" + window.location.hostname + "/mock"; -var dataModified = false; -const addMessageName = 'addMessage'; -const loadMessageName = 'changeMessage'; -const removeMessageName = 'removeMessage'; const C_UUID = 'mock-uuid'; -const C_ID = 'last-displayed-id'; const C_ADV = 'advanced-mode'; const color_red = "#ff8f8f"; @@ -20,9 +13,6 @@ const color_grey = "#6b6b6b"; const setModified = function(){ setDataModified(); } -const setOrigin = function(){ - setDataOrigin(); -} const getUpdate = function(){ updateData(); @@ -30,33 +20,69 @@ const getUpdate = function(){ const dataRefresh = function(){ getData(); } -$('#btn-newtile').click(function(){callAddMessage()}); -// $('#btn-addRow').click(function(){addRow()}); -// $('#btn-save').click(getUpdate); + +/* + Listeners segment +*/ + +$(document).on('change', '.data-field', setModified); + +$('#btn-save').click( + () => { + disableSaveButton(); + } + ); + +$('#btn-newRow').click( + ()=> { + newRowInput(); + setDataModified(); + } + ); + +/* + Functions segment +*/ + +function disableSaveButton(){ + $('#btn-save').removeClass('active'); + $('#btn-save').off(); +} + +function createLink(uuid){ + var link = host + '/api/mock/r/'+uuid; + return link; +} + + +function onLoad(){ + loadCookies(); + getData(); +} function getData(){ $.getJSON(host + '/api/mock/'+clientUUID, function(data) { json = data; - checkUuid(); - - - refreshData(); + loadFetchedMessage(); + initializeUUID(); }); } - -function checkUuid(){ - if(clientUUID == null || clientUUID == undefined || clientUUID == ''){ - clientUUID = json[0].clientUUID; - setCookie(); - } +function loadCookies(){ + clientUUID = getCookie(C_UUID); + advancedDisplayed = getCookie(C_ADV) == 'true'; } -function getDomain(){ - var url = window.location.href; - var arr = url.split("/"); - var result = arr[0] + "//" + arr[2]; - return result; +function setCookie(){ + document.cookie = C_UUID + '=' +clientUUID; + document.cookie = C_ADV + '=' + advancedVisibility; +} + +function initializeUUID(){ + if(clientUUID == null || clientUUID == undefined || clientUUID == ''){ + clientUUID = json.clientUUID; + setCookie(); + } } function httpStatusInvalid(){ @@ -71,56 +97,9 @@ function setDataModified(){ document.getElementById("httpStatus").style.backgroundColor = color_red; return; } - dataModified = true; - $('#btn-save').addClass('active'); - $('#btn-save').click(getUpdate); - document.getElementById("httpStatus").style.backgroundColor = null; -} - -//Adding change listener to fields -$('.data-field').change(setModified); - -function setDataOrigin(){ - dataModified = false; - $('#btn-save').removeClass('active'); - $('#btn-save').off(); -} - -const idToDisplay = function(){ - let defaultId = json[0].mockedResponseId; - if(lastId == undefined || lastId == null) return defaultId; - for(let i=0; i 0){ - jsonIndex -= 1; - return json[jsonIndex].mockedResponseId; - } - return defaultId; -} - -function refreshData(){ - $("#uuid-input").val(clientUUID); - fillMessageList(); - - let id = idToDisplay(); - - loadMessage(id); - -} - -function setCookie(){ - document.cookie = C_UUID + '=' +clientUUID; - document.cookie = C_ID + '=' + lastId; - document.cookie = C_ADV + '=' + advancedVisibility; -} - -function loadCookies(){ - clientUUID = getCookie(C_UUID); - lastId = getCookie(C_ID); - advancedDisplayed = getCookie(C_ADV) == 'true'; + $('#btn-save').addClass('active'); + $('#btn-save').click(getUpdate); + document.getElementById("httpStatus").style.backgroundColor = null; } function getCookie(cname) { @@ -139,28 +118,10 @@ function getCookie(cname) { return ''; } -function callMethodByName(methodObject){ - let name = methodObject.name; - let id = methodObject.id; - switch(name){ - case addMessageName: - addMessage(); - break; - case loadMessageName: - loadMessage(id); - break; - case removeMessageName: - removeMessage(id); - break; - } -} - - function updateData(){ - var updatedJson = generateJson(); + var updatedJson = createRequestBody(); const dataSaved = function () { - setDataOrigin(); - refreshData(); + loadFetchedMessage(); savedModalDisplay(); } $.ajax({ @@ -169,159 +130,27 @@ function updateData(){ data: JSON.stringify(updatedJson, null, 2), contentType: "application/json", }).done(dataSaved); + disableSaveButton(); } -function callAddMessage(){ - if(dataModified){ - setMethodToCall(addMessageName, null); - dataLossModalDisplay(); - } - else { - addMessage(); - } +function loadFetchedMessage(){ + fillStaticFields( + json.clientUUID, + json.contentType, + json.messageBody, + json.httpStatus); + fillHeaderTable(json.httpHeaders); + initializeHistory(); + refreshHeaderTable(document.innerHTML); } -function addMessage(){ - $.ajax({ - url: host + '/api/mock/'+clientUUID, - type: 'POST', - }).done(dataRefresh); -} - -function callRemoveMessage(id){ - if(dataModified){ - setMethodToCall(removeMessageName, id); - dataLossModalDisplay(); - } - else { - removeMessage(id); - } -} - -function removeMessage(id){ - var jsonObject = findJsonById(id); - $.ajax({ - url: host + '/api/mock/'+clientUUID + '/' + id, - type: 'DELETE', - }).done(dataRefresh); -} - - -function clearMock(){ - fillStaticFields('','','',''); - htable_row = 0; - $('#httpStatusValues').html(''); -} - -function initializeMock(index){ - clearMock(); - fillStaticFields(json[index].clientUUID - , json[index].mockedResponseId - , json[index].mediaType - , json[index].messageBody - , json[index].httpStatus); - fillHeaderTable(json[index].httpHeaders); -} - -function fillStaticFields(uuid, id, mediaType, body, httpStatus){ - let link = createLink(uuid,id); +function fillStaticFields(uuid, contentType, body, httpStatus){ + let link = createLink(uuid); let linkHtml = ''+link+''; $('#messageLink').html(linkHtml); $('#httpStatus').val(httpStatus); - $('#uuid-input').val(uuid); - $('#typeSelector').val(mediaType); + $('#typeSelector').val(contentType); $('#bodyEditor').val(body); - $('#mockedMessageId').html(id); - -} - -function changeEditionOfUUID(element){ - - var inputFieldId= "#uuid-input" - var inputFieldDiv = "#uuid-edit-field" - if(element.checked){ - $(inputFieldId).removeAttr('disabled'); - $(inputFieldDiv).removeClass('disabled'); - } else{ - $(inputFieldId).attr('disabled', true); - $(inputFieldDiv).addClass('disabled'); - } -} - -function copyUUIDToClipboard(){ - navigator.clipboard.writeText( document.getElementById('uuid-input').value ); -} - - -async function fetchUUIDCheck(givenUUID , strategy){ - var newUUID = "UUID" ; - url = host + "/api/mock/check/"; - - switch(strategy){ - case "new":{ - await fetch(url + givenUUID+ "/", { method : "GET" }) - .then ( response => response.text() ) - .then ( data => { - newUUID = data; - - } ) - break; - } - case "restore":{ - await fetch(url + givenUUID + "/" + clientUUID + "/" , { method: "GET" }) - .then (response => response.text() ) - .then (data => { - newUUID = data; - - } ) - break; - } - } - return newUUID ; -} - -function checkUUIDChars(uuid) { - uuid.replace(/ /g,'') - const regex = new RegExp("^[A-z0-9-]+$"); - - if(regex.test(uuid) && uuid != ""){ - return uuid ; - } - return "invalid"; - } - -function changeUUID(element){ - - const uuidStrategy = $('input[name="uuid-validation-type"]:checked').val(); - const givenUUID = checkUUIDChars(element.value); - - if( givenUUID == clientUUID ){ - $("#uuid-input").attr("disabled", true); - uuidChangeModalDisplay("noChg"); - return; - } - - var newUUID = fetchUUIDCheck(givenUUID , uuidStrategy); - var changeMessage = uuidStrategy; - newUUID - .then( data => { - if (givenUUID == data) { - changeMessage = "success"; - } - clientUUID = data; - $("#editable").attr("checked", false); - - uuidChangeModalDisplay(changeMessage); - document.cookie = C_UUID + '=' + data ; - } ) - loadCookies(); - refreshData(); -} - - -function createLink(uuid, id){ - var link = host + '/api/mock/r/'+uuid+'/'+id; - return link; } function fillHeaderTable(headers){ @@ -331,10 +160,9 @@ function fillHeaderTable(headers){ function refreshHeaderTable(html){ $('#headerMapTable').html(html); - $('.table-map').change(function(){setDataModified()}); $('.btn-hashmap').click(function(){ - $(this).closest('tr').remove(); setDataModified(); + $(this).closest('tr').remove(); }) } @@ -353,19 +181,16 @@ function addRow(key, value){ refreshHeaderTable(headersMapHtml); } -const newRowInput = function(){ +function newRowInput(){ const hName = $('#headerKeyInput'); const hValue = $('#headerValueInput'); if(checkIfInputValid(hName.val()) && checkIfInputValid(hValue.val())){ addRow(hName.val(), hValue.val()); hName.val(null); hValue.val(null); - setDataModified(); } } -$('#btn-newRow').click(newRowInput); - function checkIfInputValid(input){ return !(input == '' || input == null || input == undefined); } @@ -396,134 +221,22 @@ function buildRowHtml(key, value){ ''; } - -function fillMessageList(){ - $("#listItems").html(''); - var innerHTML = ''; - for(let i=0; i' + - '
' + - '
' + - '
' + - '

Id: ' + id + '

' + - '

Status: ' + httpStatus + '

' + - '
' + - '
' + - '' + - '
' + - '
' + - '
' + - ''; - return innerHTML; -} - - - -const onbuild = function(){ - loadCookies(); - getData(); - if(advancedDisplayed) { - changeAdvancedVisibility(); - } -} - -$(document).ready(onbuild); - function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } - - -function generateJson(){ +function createRequestBody(){ var newJson = { - clientUUID: json[jsonIndex].clientUUID, - mockedResponseId: json[jsonIndex].mockedResponseId, - mediaType: $('#typeSelector').val(), + clientUUID: json.clientUUID, + contentType: $('#typeSelector').val(), messageBody: $('#bodyEditor').val(), httpStatus: $('#httpStatus').val(), httpHeaders: {}, }; newJson['httpHeaders'] = convertTableToJson(); - json[jsonIndex] = newJson; + json = newJson; return newJson; } @@ -538,4 +251,4 @@ function convertTableToJson(){ obj[key] = rows.eq(i).children().eq(1).children().eq(0).val(); } return obj; -} \ No newline at end of file +} diff --git a/Frontend/assets/scripts/tools/mock/historyloader.js b/Frontend/assets/scripts/tools/mock/historyloader.js index 4c54671..179e665 100644 --- a/Frontend/assets/scripts/tools/mock/historyloader.js +++ b/Frontend/assets/scripts/tools/mock/historyloader.js @@ -1,40 +1,8 @@ var historyJson = {}; const maxIterations = 200; -function filterHistory(){ - var dateFrom = new Date($('#historyFrom').val() + 'T' + $('#historyTimeFrom').val()); - - var dateTo = new Date($('#historyTo').val() + 'T' + $('#historyTimeTo').val()); - - loadHistory(dateFrom, dateTo); -} - -const startSearch = function(){ - filterHistory(); -} -$('#btn-searchHistory').click(startSearch); - -function loadHistory(dateFrom, dateTo){ - - var eventRequest = { - clientUUID : json[jsonIndex].clientUUID, - localDateTimeFrom : dateFrom, - localDateTimeTo : dateTo, - mockedResponseId : json[jsonIndex].mockedResponseId - }; - $.ajax({ - url: host + '/api/event', - type: 'POST', - data: JSON.stringify(eventRequest, null, 2), - contentType: "application/json" - }).done(function(data){ - historyJson = data; - displayHistory(); - }); -} - -function getLast24hHistoryData(){ - $.getJSON(host + '/api/event/' + clientUUID + '/' + lastId, function(data){ +function getHistoryData(){ + $.getJSON(host + '/api/event/' + clientUUID, function(data){ historyJson = data; displayHistory(); }); diff --git a/Frontend/assets/scripts/tools/mock/uianimation.js b/Frontend/assets/scripts/tools/mock/uianimation.js index 66b6625..28644ef 100644 --- a/Frontend/assets/scripts/tools/mock/uianimation.js +++ b/Frontend/assets/scripts/tools/mock/uianimation.js @@ -48,7 +48,7 @@ function showHistory(){ function initializeHistory(){ historyFilter.removeClass('active'); - getLast24hHistoryData(); + getHistoryData(); } function showHeaders(){ @@ -60,9 +60,9 @@ function showHeaders(){ $('#headersTab').off('click'); } -function showHeadersHistory(element){ +function showHeadersHistory(record){ historyTable = ''; - headers = parseHeaders(element.id) + headers = parseHeaders(record.id) headers.forEach( (value,key) => { historyTable += @@ -176,7 +176,7 @@ function focusOutTip(element){ } function refreshHistoryRecords(){ - getLast24hHistoryData(); + getHistoryData(); } function hidTip(element){ @@ -229,19 +229,5 @@ $('#btnSave').focusin(function(){focusInTip('btnSaveTip')}); $('#btnSave').mouseleave(function(){hidTip('btnSaveTip')}); $('#btnSave').focusout(function(){focusOutTip('btnSaveTip')}); -$('#new-tile').mouseover(function(){showTip('btn-newTileTip');}); -$('#new-tile').mouseleave(function(){hidTip('btn-newTileTip')}); -$('#new-tile').focusout(function(){focusOutTip('btn-newTileTip')}); - $('#listItems').mouseover(function(){showTip('messagesTip');}); -$('#listItems').mouseleave(function(){hidTip('messagesTip')}); - - -$('#uuid-edit-field').mouseover(function(){ showTip('UUIDFieldTip') }); -$('#uuid-edit-field').mouseleave(function(){ hidTip('UUIDFieldTip') }); - -$('#uuid-validation-strategy').mouseover(function(){ showTip('UUIDValidationStrategyTip') }); -$('#uuid-validation-strategy').mouseleave(function(){ hidTip('UUIDValidationStrategyTip') }); - -$('#editableBlock').mouseover( function(){ showTip('UUIDEditionTip') } ); -$('#editableBlock').mouseleave(function(){ hidTip('UUIDEditionTip') }); \ No newline at end of file +$('#listItems').mouseleave(function(){hidTip('messagesTip')}); \ No newline at end of file diff --git a/Frontend/tools/mock.html b/Frontend/tools/mock.html index 837c834..1ef5af1 100644 --- a/Frontend/tools/mock.html +++ b/Frontend/tools/mock.html @@ -8,7 +8,7 @@ - +