SpringBoot: GameProposal
- rest controller - poposal endpoint
This commit is contained in:
		
							parent
							
								
									7403cf671a
								
							
						
					
					
						commit
						36edc91cf3
					
				@ -1,43 +0,0 @@
 | 
				
			|||||||
package djmil.cordacheckers;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.List;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					 | 
				
			||||||
import org.springframework.http.ResponseEntity;
 | 
					 | 
				
			||||||
import org.springframework.security.core.annotation.AuthenticationPrincipal;
 | 
					 | 
				
			||||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
					 | 
				
			||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import djmil.cordacheckers.cordaclient.CordaClient;
 | 
					 | 
				
			||||||
import djmil.cordacheckers.cordaclient.dao.VirtualNode;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@RestController
 | 
					 | 
				
			||||||
public class ApiController {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Autowired
 | 
					 | 
				
			||||||
    CordaClient cordaClient;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @GetMapping("/api/badjokes")
 | 
					 | 
				
			||||||
    public ResponseEntity<Joke> badJokes() {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        List<VirtualNode> vNodeList = cordaClient.getVirtualNodeList();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Joke joke = new Joke("What do you call a fly without wings? A walk! " + vNodeList.get(1).holdingIdentity().x500Name());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return ResponseEntity.ok(joke);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 
 | 
					 | 
				
			||||||
     * @return a Json list of active games
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    @GetMapping("/api/gameproposals")
 | 
					 | 
				
			||||||
    public ResponseEntity<String> dashboard(@AuthenticationPrincipal ApiUserDetails user) {
 | 
					 | 
				
			||||||
        System.out.println("List of active games for "
 | 
					 | 
				
			||||||
            + "user: " + user.getUsername()
 | 
					 | 
				
			||||||
            + " with HoldingIdentity ShortHash: " + user.getHoldingIdentity().shortHash());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return ResponseEntity.ok("{ \"UnconsumedGameProposals\" : [\"id_game1\", \"id_game2\"] }" );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -0,0 +1,78 @@
 | 
				
			|||||||
 | 
					package djmil.cordacheckers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.net.URI;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
 | 
					import org.springframework.http.ResponseEntity;
 | 
				
			||||||
 | 
					import org.springframework.security.core.annotation.AuthenticationPrincipal;
 | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.GetMapping;
 | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
 | 
					import org.springframework.web.util.UriComponentsBuilder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import djmil.cordacheckers.cordaclient.CordaClient;
 | 
				
			||||||
 | 
					import djmil.cordacheckers.cordaclient.HoldingIdentityResolver;
 | 
				
			||||||
 | 
					import djmil.cordacheckers.cordaclient.dao.HoldingIdentity;
 | 
				
			||||||
 | 
					import djmil.cordacheckers.cordaclient.dao.VirtualNode;
 | 
				
			||||||
 | 
					import djmil.cordacheckers.game.PlayerColor;
 | 
				
			||||||
 | 
					import djmil.cordacheckers.gameproposal.CreateGameProposal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.PostMapping;
 | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.RequestBody;
 | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@RestController
 | 
				
			||||||
 | 
					@RequestMapping("/gameproposal")
 | 
				
			||||||
 | 
					public class GameProposalController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    CordaClient cordaClient;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    HoldingIdentityResolver holdingIdentityResolver;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @GetMapping
 | 
				
			||||||
 | 
					    public ResponseEntity<String> findAllUnconsumed(
 | 
				
			||||||
 | 
					        @AuthenticationPrincipal ApiUserDetails user
 | 
				
			||||||
 | 
					    ) {
 | 
				
			||||||
 | 
					        String gpList = cordaClient.listGameProposals(user.getHoldingIdentity());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return ResponseEntity.ok(gpList);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // @PostMapping()
 | 
				
			||||||
 | 
					    // public  ResponseEntity<String> gameproposalSend(@AuthenticationPrincipal ApiUserDetails user) {
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    //     return  ResponseEntity.ok("");
 | 
				
			||||||
 | 
					    // }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @PostMapping()
 | 
				
			||||||
 | 
					    public ResponseEntity<Void> create(
 | 
				
			||||||
 | 
					        @AuthenticationPrincipal ApiUserDetails player,
 | 
				
			||||||
 | 
					        @RequestBody CreateGameProposal gpRequest,
 | 
				
			||||||
 | 
					        UriComponentsBuilder ucb
 | 
				
			||||||
 | 
					    ) {
 | 
				
			||||||
 | 
					        final HoldingIdentity gpSender = player.getHoldingIdentity();
 | 
				
			||||||
 | 
					        // TODO: throw execption with custom type
 | 
				
			||||||
 | 
					        final HoldingIdentity gpReceiver = holdingIdentityResolver.getByCommonName(gpRequest.opponentName());
 | 
				
			||||||
 | 
					        final PlayerColor gpReceiverColor = PlayerColor.valueOf(gpRequest.opponentColor());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String newGameProposalUuid = cordaClient.sendGameProposal(
 | 
				
			||||||
 | 
					            gpSender,
 | 
				
			||||||
 | 
					            gpReceiver,
 | 
				
			||||||
 | 
					            gpReceiverColor,
 | 
				
			||||||
 | 
					            gpRequest.message()
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        URI locationOfNewGameProposal = ucb
 | 
				
			||||||
 | 
					            .path("gameproposal/{id}")
 | 
				
			||||||
 | 
					            .buildAndExpand(newGameProposalUuid)
 | 
				
			||||||
 | 
					            .toUri();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return ResponseEntity
 | 
				
			||||||
 | 
					            .created(locationOfNewGameProposal)
 | 
				
			||||||
 | 
					            .build();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -22,6 +22,7 @@ import djmil.cordacheckers.cordaclient.dao.VirtualNodeList;
 | 
				
			|||||||
import djmil.cordacheckers.cordaclient.dao.flow.RequestBody;
 | 
					import djmil.cordacheckers.cordaclient.dao.flow.RequestBody;
 | 
				
			||||||
import djmil.cordacheckers.cordaclient.dao.flow.ResponseBody;
 | 
					import djmil.cordacheckers.cordaclient.dao.flow.ResponseBody;
 | 
				
			||||||
import djmil.cordacheckers.cordaclient.dao.flow.arguments.Empty;
 | 
					import djmil.cordacheckers.cordaclient.dao.flow.arguments.Empty;
 | 
				
			||||||
 | 
					import djmil.cordacheckers.game.PlayerColor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Service
 | 
					@Service
 | 
				
			||||||
public class CordaClient {
 | 
					public class CordaClient {
 | 
				
			||||||
@ -72,6 +73,10 @@ public class CordaClient {
 | 
				
			|||||||
        return gameProposalsJsonString;
 | 
					        return gameProposalsJsonString;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String sendGameProposal(HoldingIdentity sender, HoldingIdentity receiver, PlayerColor receiverColor, String message) {
 | 
				
			||||||
 | 
					        return "";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private String cordaFlowExecute(HoldingIdentity holdingIdentity, RequestBody requestBody) {
 | 
					    private String cordaFlowExecute(HoldingIdentity holdingIdentity, RequestBody requestBody) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					package djmil.cordacheckers.cordaclient.dao;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@JsonDeserialize
 | 
				
			||||||
 | 
					public record GameProposal(
 | 
				
			||||||
 | 
					    String sender,
 | 
				
			||||||
 | 
					    String recipient,
 | 
				
			||||||
 | 
					    String youPlayAs,
 | 
				
			||||||
 | 
					    String additionalMessage,
 | 
				
			||||||
 | 
					    String id) {
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					package djmil.cordacheckers.game;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public enum PlayerColor {
 | 
				
			||||||
 | 
					    WHITE,
 | 
				
			||||||
 | 
					    BLACK
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					package djmil.cordacheckers.gameproposal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public record CreateGameProposal(
 | 
				
			||||||
 | 
					    String opponentName,
 | 
				
			||||||
 | 
					    String opponentColor,
 | 
				
			||||||
 | 
					    String message)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user