Added Update flow checks and bugs fixes
This commit is contained in:
parent
e9c1139bfd
commit
f3951ae0b0
@ -11,19 +11,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import java.security.PublicKey;
|
import java.security.PublicKey;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/*
|
|
||||||
@BelongsToContract(ChatContract::class)
|
|
||||||
data class ChatState(
|
|
||||||
val id : UUID = UUID.randomUUID(),
|
|
||||||
val chatName: String,
|
|
||||||
val messageFrom: MemberX500Name,
|
|
||||||
val message: String,
|
|
||||||
override val participants: List<PublicKey>) : ContractState {
|
|
||||||
|
|
||||||
fun updateMessage(messageFrom: MemberX500Name, message: String) = copy(messageFrom = messageFrom, message = message)
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
@CordaSerializable
|
@CordaSerializable
|
||||||
@BelongsToContract(ChatContract.class)
|
@BelongsToContract(ChatContract.class)
|
||||||
public class ChatState implements ContractState {
|
public class ChatState implements ContractState {
|
||||||
@ -105,7 +92,7 @@ public class ChatState implements ContractState {
|
|||||||
public List<PublicKey> participants;
|
public List<PublicKey> participants;
|
||||||
|
|
||||||
public ChatState updateMessage(MemberX500Name name, String message) {
|
public ChatState updateMessage(MemberX500Name name, String message) {
|
||||||
return new ChatState(chatName, name, message, participants);
|
return new ChatState(id, chatName, name, message, participants);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -36,8 +36,11 @@ public class GetChatFlow implements RPCStartableFlow {
|
|||||||
GetChatFlowArgs flowArgs = requestBody.getRequestBodyAs(jsonMarshallingService, GetChatFlowArgs.class);
|
GetChatFlowArgs flowArgs = requestBody.getRequestBodyAs(jsonMarshallingService, GetChatFlowArgs.class);
|
||||||
List<StateAndRef<ChatState>> stateAndRefs = ledgerService.findUnconsumedStatesByType(ChatState.class);
|
List<StateAndRef<ChatState>> stateAndRefs = ledgerService.findUnconsumedStatesByType(ChatState.class);
|
||||||
|
|
||||||
|
log.info("GetChatFlow Number of stateAndRefs = " + stateAndRefs.size());
|
||||||
|
log.info("GetChatFlow stateAndRefs = " + stateAndRefs);
|
||||||
|
|
||||||
StateAndRef<ChatState> state = findAndExpectExactlyOne(stateAndRefs,
|
StateAndRef<ChatState> state = findAndExpectExactlyOne(stateAndRefs,
|
||||||
stateAndRef -> stateAndRef.getState().getContractState().getId() == flowArgs.getId(),
|
stateAndRef -> stateAndRef.getState().getContractState().getId().equals(flowArgs.getId()),
|
||||||
"did not find an unique ChatState"
|
"did not find an unique ChatState"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -60,10 +60,11 @@ public class UpdateChatFlow implements RPCStartableFlow {
|
|||||||
try {
|
try {
|
||||||
UpdateChatFlowArgs flowArgs = requestBody.getRequestBodyAs(jsonMarshallingService, UpdateChatFlowArgs.class);
|
UpdateChatFlowArgs flowArgs = requestBody.getRequestBodyAs(jsonMarshallingService, UpdateChatFlowArgs.class);
|
||||||
|
|
||||||
// look up state (this is very inefficient)
|
// Look up state (this is very inefficient)
|
||||||
|
// Can get the error when you forget to update the ID.
|
||||||
StateAndRef<ChatState> stateAndRef = findAndExpectExactlyOne(
|
StateAndRef<ChatState> stateAndRef = findAndExpectExactlyOne(
|
||||||
ledgerService.findUnconsumedStatesByType(ChatState.class),
|
ledgerService.findUnconsumedStatesByType(ChatState.class),
|
||||||
sAndR -> sAndR.getState().getContractState().getId() == flowArgs.getId(),
|
sAndR -> sAndR.getState().getContractState().getId().equals(flowArgs.getId()),
|
||||||
"Multiple or zero Chat states with id " + flowArgs.getId() + " found"
|
"Multiple or zero Chat states with id " + flowArgs.getId() + " found"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -74,15 +75,11 @@ public class UpdateChatFlow implements RPCStartableFlow {
|
|||||||
it -> requireNonNull(memberLookup.lookup(it), "Member not found from Key")
|
it -> requireNonNull(memberLookup.lookup(it), "Member not found from Key")
|
||||||
).collect(Collectors.toList());
|
).collect(Collectors.toList());
|
||||||
|
|
||||||
|
// Now we want to check that there is only one member other than ourselves in the chat.
|
||||||
// Now we want to check that there is only
|
|
||||||
/*
|
|
||||||
val otherMember = (members - myInfo).singleOrNull()
|
|
||||||
?: throw Exception("Should be only one participant other than the initiator")
|
|
||||||
|
|
||||||
*/
|
|
||||||
// NEED TO ADD CHECKS
|
|
||||||
members.remove(myInfo);
|
members.remove(myInfo);
|
||||||
|
if(members.size() != 1) {
|
||||||
|
throw new IllegalArgumentException("Should be only one participant other than the initiator");
|
||||||
|
}
|
||||||
MemberInfo otherMember = members.get(0);
|
MemberInfo otherMember = members.get(0);
|
||||||
|
|
||||||
// This needs to be a deep copy?
|
// This needs to be a deep copy?
|
||||||
@ -114,7 +111,7 @@ RequestBody for triggering the flow via http-rpc:
|
|||||||
"clientRequestId": "update-1",
|
"clientRequestId": "update-1",
|
||||||
"flowClassName": "com.r3.developers.csdetemplate.utxoexample.workflows.UpdateChatFlow",
|
"flowClassName": "com.r3.developers.csdetemplate.utxoexample.workflows.UpdateChatFlow",
|
||||||
"requestData": {
|
"requestData": {
|
||||||
"id":" ** chat id **",
|
"id":" ** fill in id **",
|
||||||
"message": "How are you today?"
|
"message": "How are you today?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user