T157 prepared REST API for javascript based page
This commit is contained in:
		@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user