your messages table with update, delete buttons

This commit is contained in:
Szakalakamaka
2020-09-11 10:01:30 +02:00
parent 13dd0642ab
commit 790f34a5e1
38 changed files with 310 additions and 224 deletions

View File

@@ -13,10 +13,9 @@ public class KlausApplication {
}
//TODO
//TODO history logs; for log indexing - create custom log appender for Redis - in case etrack would be too slow
//TODO JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisHost, redisPort, timeout, redisPassword)
//TODO JedisPool optimalization https://partners-intl.aliyun.com/help/doc-detail/98726.htm
// logging, security, account creation
// tracking clients activity, admin panel
// use a centralized logging collection tool like logstash for admin panel
//TODO split into separate microservices
//TODO swagger

View File

@@ -2,12 +2,12 @@ package com.release11.klaus.controller;
import com.release11.klaus.model.MockedMessageDto;
import com.release11.klaus.service.KlausService;
import com.release11.klaus.utilis.BusinessKey;
import com.release11.klaus.utilis.TrackingClient;
import com.release11.klaus.model.MockedMessage;
import com.release11.klaus.service.KlausService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
@@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
@Controller("/")
@@ -28,6 +29,15 @@ public class KlausController {
private final KlausService klausService;
@RequestMapping(value = "klaus/v1/delete/{clientUUID}/{mockedResponseId}")
public ResponseEntity<String> deleteMockedResponse(@PathVariable UUID clientUUID,
@PathVariable int mockedResponseId){
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "deleteMockedResponse",
BusinessKey.CLIENT_UUID, String.valueOf(clientUUID),
BusinessKey.MESSAGE_ID, String.valueOf(mockedResponseId)));
klausService.deleteMockedResponse(clientUUID, mockedResponseId);
return new ResponseEntity<>("message has been deleted", HttpStatus.OK);
}
@RequestMapping(value = "klaus/v1/getAll/{clientUUID}")
public ResponseEntity<String> getAllMockedResponses(@PathVariable UUID clientUUID){
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getMockedResponse",
@@ -43,18 +53,22 @@ public class KlausController {
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getMockedResponse",
BusinessKey.CLIENT_UUID, String.valueOf(clientUUID),
BusinessKey.MESSAGE_ID, String.valueOf(mockedResponseId)));
return klausService.getMockedResponse(clientUUID, mockedResponseId);
MockedMessageDto mockedMessageDto = klausService.getMockedResponse(clientUUID, mockedResponseId);
HttpHeaders httpHeaders = new HttpHeaders();
if (mockedMessageDto.getHttpHeaders() != null) mockedMessageDto.getHttpHeaders().forEach(httpHeaders::set);
return new ResponseEntity<>(mockedMessageDto.getMessageBody(), httpHeaders,
Objects.requireNonNull(HttpStatus.valueOf(mockedMessageDto.getHttpStatus())));
}
@PostMapping(value = "klaus/v1/set/{clientUUID}/{mockedResponseId}")
public ResponseEntity<String> setMockedResponse(@PathVariable UUID clientUUID,
@PathVariable int mockedResponseId,
@RequestParam(required = false) int httpStatus,
@RequestParam(required = false) Integer httpStatus,
RequestEntity<String> requestEntity){
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "setMockedResponse",
BusinessKey.CLIENT_UUID, String.valueOf(clientUUID),
BusinessKey.MESSAGE_ID, String.valueOf(mockedResponseId)));
if (httpStatus == null) httpStatus = 200;
MockedMessageDto mockedMessageDto = new MockedMessageDto(clientUUID, mockedResponseId,
requestEntity.getHeaders().getContentType().toString(), requestEntity.getBody(),

View File

@@ -27,20 +27,21 @@ import java.util.*;
@AllArgsConstructor
public class KlausMvcController {
private final KlausService klausService;
private final Set<MockedMessageDto> globalMockedMessageDtoList = new HashSet<>();
@GetMapping("/login")
public String login() {
return "login";
}
@SneakyThrows
@GetMapping({"/home", "/home/{uuid}"})
public String showHome(final MockedMessageDto mockedMessageDto, Model model,
public String showHome(final MockedMessageDto mockedMessageDto, final Model model,
@RequestParam(required = false) UUID clientUUID,
@PathVariable(required = false) UUID uuid) {
if (uuid != null) clientUUID = uuid;
if (clientUUID != null) mockedMessageDto.setClientUUID(clientUUID);
model.addAttribute("mockedMessageDtoList", klausService.getAllMockedResponses(clientUUID));
populateModelWithLists(model, mockedMessageDto,true);
return "index";
}
@@ -51,7 +52,7 @@ public class KlausMvcController {
BusinessKey.CLIENT_UUID, String.valueOf(mockedMessageDto.getClientUUID()),
BusinessKey.MESSAGE_ID, String.valueOf(mockedMessageDto.getMockedResponseId())));
klausService.setMockedResponse(mockedMessageDto);
model.addAttribute("mockedMessageDtoList", klausService.getAllMockedResponses(mockedMessageDto.getClientUUID()));
populateModelWithLists(model, mockedMessageDto,true);
model.addAttribute("mockSaved", "true");
return "index";
}
@@ -66,20 +67,36 @@ public class KlausMvcController {
mockedMessageDto.getMockedResponseId()).toString();
}
@RequestMapping(value = "/home/{clientUUID}", params = {"addHeader"})
public String addRow(final MockedMessageDto mockedMessageDto, @RequestParam String headerKey,
@RequestParam String headerValue) {
@RequestMapping(value = "/home/{clientUUID}", params = {"addHeader"} )
public String addHeader(final MockedMessageDto mockedMessageDto, @RequestParam String headerKey,
@RequestParam String headerValue, final Model model) {
populateModelWithLists(model, mockedMessageDto,false);
mockedMessageDto.getHttpHeaders().put(headerKey, headerValue);
return "index";
}
@RequestMapping(value="/home/{clientUUID}", params={"removeHeader"})
public String removeHeader(final MockedMessageDto mockedMessageDto, final HttpServletRequest req) {
public String removeHeader(final MockedMessageDto mockedMessageDto, final HttpServletRequest req, final Model model) {
populateModelWithLists(model, mockedMessageDto,false);
mockedMessageDto.getHttpHeaders().remove(req.getParameter("removeHeader"));
System.out.println(mockedMessageDto);
return "index";
}
@RequestMapping(value="/home/{clientUUID}", params={"updateMessage"})
public String updateMessage(final HttpServletRequest req, final MockedMessageDto mockedMessageDto, final Model model) {
model.addAttribute("mockedMessageDto", klausService.getMockedResponse(mockedMessageDto.getClientUUID(),
Integer.parseInt(req.getParameter("updateMessage"))));
populateModelWithLists(model, mockedMessageDto, false);
return "index";
}
@RequestMapping(value="/home/{clientUUID}", params={"removeMessage"})
public String removeMessage(final MockedMessageDto mockedMessageDto, final HttpServletRequest req, final Model model) {
klausService.deleteMockedResponse(mockedMessageDto.getClientUUID(),
Integer.parseInt(req.getParameter("removeMessage")));
populateModelWithLists(model, mockedMessageDto, true);
return "index";
}
@SneakyThrows
@ModelAttribute("localhost")
@@ -98,12 +115,21 @@ public class KlausMvcController {
"application/xml", "body", new LinkedHashMap<>(), 200);
}
@ModelAttribute("eventsDto")
public EventRequestDto eventsDto() {
@ModelAttribute("eventRequestDto")
public EventRequestDto eventRequestDto() {
return EventRequestDto.builder()
.mockedResponseId(1)
.localDateTimeFrom(LocalDateTime.of(LocalDate.now(), LocalTime.MIN))
.localDateTimeTo(LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIDNIGHT))
.build();
}
private void populateModelWithLists(Model model, MockedMessageDto mockedMessageDto, boolean updateList){
if (updateList){
globalMockedMessageDtoList.clear();
globalMockedMessageDtoList.addAll(klausService.getAllMockedResponses(mockedMessageDto.getClientUUID()));
}
model.addAttribute("mockedMessageDtoList", globalMockedMessageDtoList);
}
}

View File

@@ -20,6 +20,6 @@ public class EventRequestDto {
private LocalDateTime localDateTimeFrom;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime localDateTimeTo;
private int mockedResponseId;
private Integer mockedResponseId;
}

View File

@@ -29,25 +29,6 @@ public class MockedMessage implements Serializable {
@HttpCode
private Integer httpStatus;
public MockedMessage(MockedMessage mockedMessage) {
this.compositePrimaryKey = mockedMessage.getClientUUID().toString() + "_" + mockedMessage.getMockedResponseId();
this.clientUUID = mockedMessage.getClientUUID();
this.mockedResponseId = mockedMessage.getMockedResponseId();
this.mediaType = mockedMessage.getMediaType();
this.messageBody = mockedMessage.getMessageBody();
this.httpHeaders = mockedMessage.getHttpHeaders();
this.httpStatus = mockedMessage.getHttpStatus();
}
public MockedMessage(UUID clientUUID, int mockedResponseId, String mediaType,
String messageBody, Map<String, String> httpHeaders, Integer httpStatus) {
this.compositePrimaryKey = clientUUID.toString() + "_" + mockedResponseId;
this.clientUUID = clientUUID;
this.mockedResponseId = mockedResponseId;
this.mediaType = mediaType;
this.messageBody = messageBody;
this.httpHeaders = httpHeaders;
this.httpStatus = httpStatus;
}
}

View File

@@ -5,8 +5,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.release11.klaus.model.Event;
import com.release11.klaus.utilis.BusinessKey;
import lombok.AllArgsConstructor;
import org.springframework.boot.configurationprocessor.json.JSONException;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.stereotype.Repository;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
@@ -14,7 +12,10 @@ import redis.clients.jedis.JedisPool;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Repository
@@ -52,6 +53,8 @@ public class EventRepositoryImpl implements EventRepository {
List<String> resultList = new ArrayList<>();
for (Map.Entry<BusinessKey, String> entry : businessKeys.entrySet()) {
String stringPattern = "\"" + entry.getKey() + ":" + entry.getValue() + "\"";
String u;
u = "das";
resultList = events.stream().filter(s -> s.contains(stringPattern)).collect(Collectors.toList());
}
return resultList;

View File

@@ -12,4 +12,5 @@ import java.util.UUID;
@Transactional
public interface MockedResponseRepository extends CrudRepository<MockedMessage, String> {
List<MockedMessage> findAllByClientUUID(UUID clientUUID);
MockedMessage getByCompositePrimaryKey(String compositePrimaryKey);
}

View File

@@ -23,6 +23,9 @@ public class EtrackServiceImpl implements EtrackService {
public List<Event> getEventsByDateTimeAndBusinessKeys(EventRequestDto eventsDto) {
Map<BusinessKey, String> businessKeys = new HashMap<>();
businessKeys.put(BusinessKey.CLIENT_UUID, eventsDto.getClientUUID().toString());
if (eventsDto.getMockedResponseId() != null){
businessKeys.put(BusinessKey.MESSAGE_ID, String.valueOf(eventsDto.getMockedResponseId()));
}
return eventRepository.findEvents(eventsDto.getLocalDateTimeFrom(), eventsDto.getLocalDateTimeTo(),
businessKeys);
}

View File

@@ -11,6 +11,6 @@ import java.util.UUID;
public interface KlausService {
void deleteMockedResponse(UUID clientUUID, int mockedResponseId);
List<MockedMessageDto> getAllMockedResponses(UUID clientUUID);
ResponseEntity<String> getMockedResponse(UUID clientUUID, int mockedResponseId);
MockedMessageDto getMockedResponse(UUID clientUUID, int mockedResponseId);
ResponseEntity<String> setMockedResponse(MockedMessageDto mockedMessageDto);
}

View File

@@ -1,6 +1,5 @@
package com.release11.klaus.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.release11.klaus.mappers.MockedMessageMapper;
import com.release11.klaus.model.MockedMessage;
import com.release11.klaus.model.MockedMessageDto;
@@ -13,7 +12,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
@@ -22,13 +21,13 @@ import java.util.stream.Collectors;
@AllArgsConstructor
public class KlausServiceImpl implements KlausService {
private final ObjectMapper objectMapper;
private final MockedMessageMapper mockedMessageMapper;
private final MockedResponseRepository mockedResponseRepository;
@Override
public void deleteMockedResponse(UUID clientUUID, int mockedResponseId) {
String key = clientUUID.toString() + "_" + mockedResponseId;
mockedResponseRepository.deleteById(key);
}
@Override
@@ -39,15 +38,15 @@ public class KlausServiceImpl implements KlausService {
}
@Override
public ResponseEntity<String> getMockedResponse(UUID clientUUID, int mockedResponseId) {
public MockedMessageDto getMockedResponse(UUID clientUUID, int mockedResponseId) {
log.info("KlausServiceImpl, operation getMockedResponse, clientId {}, mockedResponseId {} ",
clientUUID, mockedResponseId);
String key = clientUUID.toString() + "_" + mockedResponseId;
MockedMessage mockedMessage = mockedResponseRepository.findById(key).get();
HttpHeaders httpHeaders = new HttpHeaders();
if(mockedMessage.getHttpHeaders() !=null)mockedMessage.getHttpHeaders().forEach(httpHeaders::set);
return new ResponseEntity<>(mockedMessage.getMessageBody(), httpHeaders,
Objects.requireNonNull(HttpStatus.valueOf(mockedMessage.getHttpStatus())));
Optional<MockedMessage> optionalMockedMessage = mockedResponseRepository.findById(key);
if (optionalMockedMessage.isPresent()) {
return mockedMessageMapper.mockedMessageToMockedMessageDto(optionalMockedMessage.get());
}
return new MockedMessageDto();
}
@Override