package com.flexpoker.signup.repository; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.UUID; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Repository; import com.flexpoker.signup.SignUpUser; @Profile("default") @Repository public class InMemorySignUpRepository implements SignUpRepository { private final Set<String> usernameSet; private final Map<UUID, Map<String, UUID>> signUpCodeMap; private final Map<UUID, SignUpUser> signUpUserMap; public InMemorySignUpRepository() { usernameSet = new HashSet<>(); signUpCodeMap = new HashMap<>(); signUpUserMap = new HashMap<>(); addDefaultSignUps(); } @Override public boolean usernameExists(String username) { return usernameSet.contains(username); } @Override public boolean signUpCodeExists(UUID signUpCode) { return signUpCodeMap.containsKey(signUpCode); } @Override public UUID findAggregateIdByUsernameAndSignUpCode(String username, UUID signUpCode) { Map<String, UUID> foundSignUpCode = signUpCodeMap.get(signUpCode); if (foundSignUpCode != null) { UUID aggregateId = foundSignUpCode.get(username); return aggregateId; } return null; } @Override public void storeSignUpInformation(UUID aggregateId, String username, UUID signupCode) { signUpCodeMap.put(signupCode, new HashMap<>()); signUpCodeMap.get(signupCode).put(username, aggregateId); } @Override public void storeNewlyConfirmedUsername(String username) { usernameSet.add(username); } @Override public UUID findSignUpCodeByUsername(String username) { return signUpCodeMap.entrySet().stream() .filter(x -> x.getValue().containsKey(username)) .findAny().get().getKey(); } private void addDefaultSignUps() { storeNewlyConfirmedUsername("player1"); storeNewlyConfirmedUsername("player2"); storeNewlyConfirmedUsername("player3"); storeNewlyConfirmedUsername("player4"); } @Override public SignUpUser fetchSignUpUser(UUID signUpUserId) { return signUpUserMap.get(signUpUserId); } @Override public void saveSignUpUser(SignUpUser signUpUser) { signUpUserMap.put(signUpUser.getAggregateId(), signUpUser); } }