T157 prepared REST API for javascript based page

This commit is contained in:
2021-02-04 18:27:22 +01:00
parent 672dbc0550
commit 7a46ad8530
2 changed files with 75 additions and 32 deletions

6
.idea/workspace.xml generated
View File

@@ -20,11 +20,8 @@
</component>
<component name="ChangeListManager">
<list default="true" id="458cde88-df3d-44bc-9d57-a33823e2f1a6" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/src/main/java/com/release11/klaus/controller/MockController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/release11/klaus/controller/KlausController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/release11/klaus/controller/KlausController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/release11/klaus/controller/KlausMvcController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/release11/klaus/controller/KlausMvcController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/release11/klaus/model/TestModel.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/release11/klaus/controller/MockController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/release11/klaus/controller/MockController.java" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -312,6 +309,7 @@
<workItem from="1612178634549" duration="20097000" />
<workItem from="1612259068808" duration="10440000" />
<workItem from="1612279535476" duration="5692000" />
<workItem from="1612442837870" duration="6837000" />
</task>
<task id="LOCAL-00077" summary="testing jenkins docker">
<created>1601453886631</created>

View File

@@ -5,15 +5,15 @@ import com.release11.klaus.service.KlausService;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.*;
import java.util.HashSet;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.Map;
import java.util.UUID;
@Slf4j
@@ -25,42 +25,87 @@ public class MockController {
//TODO: Write a method
private final MockedMessageDto defaultMessage = MockedMessageDto.builder().build();
private UUID sessionUUID;
private final Set<MockedMessageDto> globalMockedMessageDtoList = new HashSet<>();
/*
1. GET request to get the page
2. Javascripts checks for cookies if not it sends empty UUID on GetMapping /mock/json
3. When Javascript:
- 1. Saves: PUT request, then GET request
- 2. Deletes: DELETE request, then GET request
- 3. Adds new message: POST request, then GET request
4. After each action cookie is updated
Cookie holds uuid, last displayed message
*/
//TODO: Add cookie in javascript
/**
* Responds to first user request. If UUID is given then it's set if it's not, then new one is generated.
* Next recalls method that populates model based on UUID
* @param clientUUID
* @param uuid
* @return
*/
@SneakyThrows
@GetMapping({"/mock", "/mock/{uuid}"})
public String showHome(@RequestParam(required = false) UUID clientUUID,
@PathVariable(required = false) UUID uuid){
if (uuid != null) clientUUID = uuid;
if (clientUUID != null) sessionUUID = clientUUID;
else sessionUUID = UUID.randomUUID();
this.updateGlobalMockedMessageDtoList();
@GetMapping("/mock")
public String showHome(){
return "mock";
}
/**
* Populates model with current message list based on sessionUUID
*/
private void updateGlobalMockedMessageDtoList(){
globalMockedMessageDtoList.clear();
List<MockedMessageDto> mockedMessageDtoList = klausService.getAllMockedResponses(sessionUUID);
if (mockedMessageDtoList.size() == 0) mockedMessageDtoList.add(defaultMessage);
globalMockedMessageDtoList.addAll(mockedMessageDtoList);
@PutMapping("/mock/{uuid}")
public ResponseEntity<String> updateMessage(@RequestBody MockedMessageDto message){
return klausService.setMockedResponse(message);
}
//TODO: Add json file
private static MockedMessageDto buildDefaultMessage(){
return null;
@GetMapping("/mock/json")
public List<MockedMessageDto> getJson(@RequestParam(required = false) UUID clientUUID){
if(clientUUID != null) sessionUUID = clientUUID;
else sessionUUID = UUID.randomUUID();
List<MockedMessageDto> messages = klausService.getAllMockedResponses(clientUUID);
if(messages.size() == 0) {
klausService.setMockedResponse(buildDefaultMessage(clientUUID));
messages = klausService.getAllMockedResponses(clientUUID);
}
return messages;
}
@PostMapping("/mock/json")
public ResponseEntity<String> addNewMessage(@RequestParam UUID clientUUID){
List<MockedMessageDto> messages = klausService.getAllMockedResponses(clientUUID);
MockedMessageDto nextMessage = buildDefaultMessage(clientUUID, findNextId(messages));
return klausService.setMockedResponse(nextMessage);
}
private static MockedMessageDto buildDefaultMessage(UUID uuid, int id){
MockedMessageDto message = buildDefaultMessage(uuid);
message.setMockedResponseId(id);
return message;
}
private static 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());
return MockedMessageDto.builder()
.clientUUID(uuid)
.mockedResponseId(1)
.mediaType(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();
}
public static int findNextId(List<MockedMessageDto> messages) {
int highestId = 0;
for (MockedMessageDto m : messages)
highestId = highestId < m.getMockedResponseId() ? highestId : m.getMockedResponseId();
return highestId;
}