Я получил простую структуру данных
private InMemoryDataBase() {
Account account1 = new Account("222", "222");
account1.getPlayers().add(new Player("john"));
account1.getPlayers().add(new Player("rachel"));
Account account2 = new Account("111", "111");
account2.getPlayers().add(new Player("max"));
accounts.add(account1);
accounts.add(account2);
}
public class Account {
private String accountNumber;
private String password;
private List<Player> players;
public Account(String accountNumber, String password){
this.accountNumber = accountNumber;
this.password = password;
players = new ArrayList<>();
}
}
И метод, который находит Account
, если существует
private Optional<Account> findAccount() {
return dataBase.getAccounts()
.stream().findAny()
.filter(a -> a.getAccountNumber()
.equals(inputData.getAccountNumber()));
}
, а затем простую логику, связанную с этим
public void process() {
Optional<Account> account = findAccount();
if(account.isPresent()) {
if(validatePassword(account.get().getPassword())) {
outputData = new PlayersList(ConnectionInfo.Source.SERVER, inputData.getSourceID(), players);
} else {
outputData = new Message(ConnectionInfo.Source.SERVER, inputData.getSourceID(), "Incorrect password");
}
} else {
outputData = new Message(ConnectionInfo.Source.SERVER, inputData.getSourceID(), "Account not found");
}
}
Короче говоря, это часть связи клиент-сервер, inputData
- это данные, отправленные из клиентского приложения.И это похоже на работу, но только если я введу accountNumber равным «222» (первый в InMemoryDataBase.accounts
.
Я провел некоторое тестирование, я могу переключить эти значения в своей базе данных, яЯ получу положительный результат только в том случае, если я запрошу первый в списке, а другой получит сообщение «Аккаунт не найден».