diff --git a/src/main/java/biz/nynja/account/components/Validator.java b/src/main/java/biz/nynja/account/components/Validator.java
index 2f1e8373b98c6ec5d35cf0424c6c86b00a2bf2e2..2d66430032afa8dc2f816c8f3ca8b59f6c87f38c 100644
--- a/src/main/java/biz/nynja/account/components/Validator.java
+++ b/src/main/java/biz/nynja/account/components/Validator.java
@@ -128,7 +128,7 @@ public class Validator {
return isValid;
}
-
+
public String getNormalizedPhoneNumber(String authenticationProvider) {
String[] provider = authenticationProvider.split(":");
String country = provider[0];
@@ -140,7 +140,7 @@ public class Validator {
String normalizedPhoneNumber = "";
try {
PhoneNumber pn = phoneUtil.parse(phoneNumber, country);
- normalizedPhoneNumber = Integer.toString(pn.getCountryCode()) +
+ normalizedPhoneNumber = Integer.toString(pn.getCountryCode()) +
Long.toString(pn.getNationalNumber());
logger.info("libphone: Normalized phone number: " + normalizedPhoneNumber);
} catch (NumberParseException e) {
@@ -210,7 +210,7 @@ public class Validator {
return isValid;
}
- boolean isValidUuid(String id) {
+ public boolean isValidUuid(String id) {
return id.matches("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$");
}
diff --git a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java
index d57926148f253ae9c4236aa338e429b9ddb81ba2..23a3dbd5cdc3f5cf34e73f66a031317d43f347ac 100644
--- a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java
+++ b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java
@@ -3,67 +3,28 @@
*/
package biz.nynja.account.services;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
-import java.util.UUID;
-
-import org.apache.commons.lang3.tuple.ImmutablePair;
-import org.lognet.springboot.grpc.GRpcService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import biz.nynja.account.components.AccountServiceHelper;
import biz.nynja.account.components.PhoneNumberNormalizer;
import biz.nynja.account.components.Validator;
-import biz.nynja.account.grpc.AccountByAccountIdRequest;
-import biz.nynja.account.grpc.AccountByAuthenticationProviderRequest;
-import biz.nynja.account.grpc.AccountDetails;
-import biz.nynja.account.grpc.AccountResponse;
-import biz.nynja.account.grpc.AccountServiceGrpc;
-import biz.nynja.account.grpc.AccountsByProfileIdRequest;
-import biz.nynja.account.grpc.AccountsList;
-import biz.nynja.account.grpc.AccountsResponse;
-import biz.nynja.account.grpc.AddAuthenticationProviderRequest;
-import biz.nynja.account.grpc.AddContactInfoRequest;
-import biz.nynja.account.grpc.AuthProviderDetails;
-import biz.nynja.account.grpc.AuthenticationType;
-import biz.nynja.account.grpc.CompletePendingAccountCreationRequest;
-import biz.nynja.account.grpc.ContactDetails;
-import biz.nynja.account.grpc.ContactType;
-import biz.nynja.account.grpc.CreateAccountRequest;
-import biz.nynja.account.grpc.CreatePendingAccountRequest;
-import biz.nynja.account.grpc.CreatePendingAccountResponse;
-import biz.nynja.account.grpc.DeleteAccountRequest;
-import biz.nynja.account.grpc.DeleteAuthenticationProviderRequest;
-import biz.nynja.account.grpc.DeleteContactInfoRequest;
-import biz.nynja.account.grpc.StatusResponse;
-import biz.nynja.account.grpc.DeleteProfileRequest;
-import biz.nynja.account.grpc.EditContactInfoRequest;
-import biz.nynja.account.grpc.ErrorResponse;
-import biz.nynja.account.grpc.ErrorResponse.Cause;
+import biz.nynja.account.grpc.*;
import biz.nynja.account.models.Account;
-import biz.nynja.account.models.AccountByProfileId;
-import biz.nynja.account.models.AuthenticationProvider;
-import biz.nynja.account.models.ContactInfo;
-import biz.nynja.account.models.PendingAccount;
-import biz.nynja.account.models.PendingAccountByAuthenticationProvider;
-import biz.nynja.account.repositories.AccountByAuthenticationProviderRepository;
-import biz.nynja.account.models.Profile;
-import biz.nynja.account.models.ProfileByAuthenticationProvider;
-import biz.nynja.account.repositories.AccountByProfileIdRepository;
-import biz.nynja.account.repositories.AccountRepository;
+import biz.nynja.account.models.*;
import biz.nynja.account.repositories.AccountRepositoryAdditional;
-import biz.nynja.account.repositories.PendingAccountByAuthenticationProviderRepository;
import biz.nynja.account.repositories.PendingAccountRepository;
import biz.nynja.account.repositories.ProfileByAuthenticationProviderRepository;
import biz.nynja.account.repositories.ProfileRepository;
-import biz.nynja.account.grpc.UpdateAccountRequest;
-import biz.nynja.account.grpc.UpdateProfileRequest;
-import biz.nynja.account.grpc.ProfileResponse;
+import biz.nynja.account.services.decomposition.AccountsProvider;
import io.grpc.stub.StreamObserver;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.time.Instant;
+import java.util.Optional;
+import java.util.UUID;
+
+import static biz.nynja.account.grpc.ErrorResponse.Cause;
+import static biz.nynja.account.grpc.ErrorResponse.newBuilder;
/**
* gRPC Account service implementation.
@@ -76,38 +37,29 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
private static final Logger logger = LoggerFactory.getLogger(AccountServiceImpl.class);
private static final byte MIN_NUMBER_OF_AUTH_PROVIDERS_IN_PROFILE = 1;
- @Autowired
- private AccountRepository accountRepository;
-
- @Autowired
- private AccountByProfileIdRepository accountByProfileIdRepository;
-
- @Autowired
- private AccountByAuthenticationProviderRepository accountByAuthenticationProviderRepository;
-
- @Autowired
- private PendingAccountRepository pendingAccountRepository;
-
- @Autowired
- private PendingAccountByAuthenticationProviderRepository pendingAccountByAuthenticationProviderRepository;
-
- @Autowired
- private AccountRepositoryAdditional accountRepositoryAdditional;
-
- @Autowired
- private ProfileRepository profileRepository;
-
- @Autowired
- private ProfileByAuthenticationProviderRepository profileByAutheticationProviderRepository;
-
- @Autowired
- private Validator validator;
-
- @Autowired
- private AccountServiceHelper accountServiceHelper;
-
- @Autowired
- private PhoneNumberNormalizer phoneNumberNormalizer;
+ private final PendingAccountRepository pendingAccountRepository;
+ private final AccountRepositoryAdditional accountRepositoryAdditional;
+ private final ProfileRepository profileRepository;
+ private final ProfileByAuthenticationProviderRepository profileByAutheticationProviderRepository;
+ private final Validator validator;
+ private final AccountsProvider accountsProvider;
+ private final PhoneNumberNormalizer phoneNumberNormalizer;
+
+ public AccountServiceImpl(PendingAccountRepository pendingAccountRepository,
+ AccountRepositoryAdditional accountRepositoryAdditional,
+ ProfileRepository profileRepository,
+ ProfileByAuthenticationProviderRepository profileByAutheticationProviderRepository,
+ Validator validator,
+ AccountsProvider accountsProvider,
+ PhoneNumberNormalizer phoneNumberNormalizer) {
+ this.pendingAccountRepository = pendingAccountRepository;
+ this.accountRepositoryAdditional = accountRepositoryAdditional;
+ this.profileRepository = profileRepository;
+ this.profileByAutheticationProviderRepository = profileByAutheticationProviderRepository;
+ this.validator = validator;
+ this.accountsProvider = accountsProvider;
+ this.phoneNumberNormalizer = phoneNumberNormalizer;
+ }
@Override
public void createAccount(CreateAccountRequest request, StreamObserver responseObserver) {
@@ -118,118 +70,76 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
@Override
public void getAccountByAuthenticationProvider(AccountByAuthenticationProviderRequest request,
- StreamObserver responseObserver) {
+ StreamObserver responseObserver) {
logger.info("Getting account by authentication provider: {}", request);
if (request.getAuthenticationTypeValue() == 0) {
- responseObserver.onNext(AccountResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_AUTH_PROVIDER_TYPE)).build());
- responseObserver.onCompleted();
+ sendErrorMessageForAccountResponse(responseObserver, Cause.MISSING_AUTH_PROVIDER_TYPE);
return;
}
if (request.getAuthenticationIdentifier() == null || request.getAuthenticationIdentifier().isEmpty()) {
- responseObserver.onNext(AccountResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_AUTH_PROVIDER_IDENTIFIER)).build());
- responseObserver.onCompleted();
+ sendErrorMessageForAccountResponse(responseObserver, Cause.MISSING_AUTH_PROVIDER_IDENTIFIER);
return;
}
- if (request.getAuthenticationType() == AuthenticationType.PHONE) {
- // Get the normalized phone number from libphone
- AccountByAuthenticationProviderRequest newRequest = AccountByAuthenticationProviderRequest.newBuilder()
- .setAuthenticationType(request.getAuthenticationType())
- .setAuthenticationIdentifier(validator.getNormalizedPhoneNumber(request.getAuthenticationIdentifier())).build();
- request = newRequest;
- }
+ Optional account = accountsProvider.getAccountByAuthenticationProvider(request);
- Account account = accountServiceHelper.getAccountByAuthenticationProviderHelper(
- request.getAuthenticationIdentifier(), request.getAuthenticationType().toString());
-
- if (account == null) {
-
- logger.debug("No matching accounts found for authetntication provider {}: {}",
- request.getAuthenticationType(), request.getAuthenticationIdentifier());
- responseObserver.onNext(AccountResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.ACCOUNT_NOT_FOUND)).build());
+ if (!account.isPresent()) {
+ sendErrorMessageForAccountResponse(responseObserver, Cause.ACCOUNT_NOT_FOUND);
+ } else {
+ responseObserver.onNext(account.get());
responseObserver.onCompleted();
- return;
- }
+ }
- AccountResponse response = AccountResponse.newBuilder().setAccountDetails(account.toProto()).build();
- logger.debug("Found result for account by authentication provider {}: {}: \"{}\"",
- request.getAuthenticationType(), request.getAuthenticationIdentifier(), response);
- responseObserver.onNext(response);
- responseObserver.onCompleted();
- return;
}
@Override
public void getAllAccountsByProfileId(AccountsByProfileIdRequest request,
- StreamObserver responseObserver) {
+ StreamObserver responseObserver) {
logger.info("Getting accounts by profile id: {}", request.getProfileId());
if ((request.getProfileId() == null) || (request.getProfileId().isEmpty())) {
- responseObserver.onNext(AccountsResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build());
- responseObserver.onCompleted();
+ sendErrorMessageForAccountsResponse(responseObserver, Cause.MISSING_PROFILE_ID);
return;
}
-
- List listAccountsByProfileId = accountByProfileIdRepository
- .findAllByProfileId(UUID.fromString(request.getProfileId()));
-
- List responseList = new ArrayList();
-
- if (listAccountsByProfileId.size() == 0) {
- responseObserver.onNext(AccountsResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.ACCOUNT_NOT_FOUND)).build());
- responseObserver.onCompleted();
+ if (!validator.isValidUuid(request.getProfileId())) {
+ sendErrorMessageForAccountsResponse(responseObserver, Cause.INVALID_PROFILE_ID);
return;
}
+ Optional accounts = accountsProvider.getAllAccountsByProfileId(request);
- for (AccountByProfileId account : listAccountsByProfileId) {
- responseList.add(account.toProto());
+ if (!accounts.isPresent()) {
+ sendErrorMessageForAccountsResponse(responseObserver, Cause.ACCOUNT_NOT_FOUND);
+ } else {
+ responseObserver.onNext(accounts.get());
+ responseObserver.onCompleted();
}
- AccountsResponse response = AccountsResponse.newBuilder()
- .setAccountsResponse(AccountsList.newBuilder().addAllAccountDetails(responseList)).build();
-
- logger.debug("Returned response: \"{}\".", response);
-
- responseObserver.onNext(response);
- responseObserver.onCompleted();
- return;
}
@Override
public void getAccountByAccountId(AccountByAccountIdRequest request,
- StreamObserver responseObserver) {
+ StreamObserver responseObserver) {
logger.info("Getting accounts by account id: {}", request.getAccountId());
if ((request.getAccountId() == null) || (request.getAccountId().isEmpty())) {
- responseObserver.onNext(AccountsResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_ACCOUNT_ID)).build());
- responseObserver.onCompleted();
+ sendErrorMessageForAccountResponse(responseObserver, Cause.MISSING_ACCOUNT_ID);
return;
}
- Account account = accountRepository.findByAccountId(UUID.fromString(request.getAccountId()));
-
- if (account.getAccountId() == null) {
- responseObserver.onNext(AccountsResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.ACCOUNT_NOT_FOUND)).build());
- responseObserver.onCompleted();
+ if (!validator.isValidUuid(request.getAccountId())) {
+ sendErrorMessageForAccountResponse(responseObserver, Cause.INVALID_ACCOUNT_ID);
return;
}
- AccountsResponse response = AccountsResponse.newBuilder()
- .setAccountsResponse(AccountsList.newBuilder().addAccountDetails(account.toProto())).build();
+ Optional account = accountsProvider.getAccountByAccountId(request);
- logger.debug("Returned response: \"{}\".", response);
-
- responseObserver.onNext(response);
- responseObserver.onCompleted();
- return;
+ if (!account.isPresent()) {
+ sendErrorMessageForAccountResponse(responseObserver, Cause.ACCOUNT_NOT_FOUND);
+ } else {
+ responseObserver.onNext(account.get());
+ responseObserver.onCompleted();
+ }
}
@Override
@@ -242,7 +152,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
Cause cause = validator.validateCreatePendingAccountRequest(request);
if (cause != null) {
responseObserver.onNext(CreatePendingAccountResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(cause)).build());
+ .setError(newBuilder().setCause(cause)).build());
responseObserver.onCompleted();
return;
}
@@ -282,7 +192,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
AuthenticationProvider.createAuthenticationProviderFromStrings(request.getAuthenticationType().name(),
request.getAuthenticationProvider()))) {
responseObserver.onNext(CreatePendingAccountResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.ACCOUNT_ALREADY_CREATED)).build());
+ .setError(newBuilder().setCause(Cause.ACCOUNT_ALREADY_CREATED)).build());
responseObserver.onCompleted();
return;
}
@@ -316,7 +226,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
Cause cause = validator.validateCompletePendingAccountCreationRequest(request);
if (cause != null) {
responseObserver
- .onNext(AccountResponse.newBuilder().setError(ErrorResponse.newBuilder().setCause(cause)).build());
+ .onNext(AccountResponse.newBuilder().setError(newBuilder().setCause(cause)).build());
responseObserver.onCompleted();
return;
}
@@ -324,7 +234,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if (request.getUsername() != null && !request.getUsername().trim().isEmpty() && accountRepositoryAdditional
.foundExistingNotOwnUsername(UUID.fromString(request.getAccountId()), request.getUsername())) {
responseObserver.onNext(AccountResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.USERNAME_ALREADY_USED)).build());
+ .setError(newBuilder().setCause(Cause.USERNAME_ALREADY_USED)).build());
responseObserver.onCompleted();
return;
}
@@ -333,7 +243,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if (createdAccount == null) {
responseObserver.onNext(AccountResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.ERROR_CREATING_ACCOUNT)).build());
+ .setError(newBuilder().setCause(Cause.ERROR_CREATING_ACCOUNT)).build());
responseObserver.onCompleted();
return;
} else {
@@ -355,7 +265,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if ((request.getProfileId() == null) || (request.getProfileId().isEmpty())) {
responseObserver.onNext(ProfileResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build());
+ .setError(newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build());
responseObserver.onCompleted();
return;
}
@@ -363,7 +273,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
Cause cause = validator.validateUpdateProfileRequest(request);
if (cause != null) {
responseObserver.onNext(ProfileResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(cause)).build());
+ .setError(newBuilder().setCause(cause)).build());
responseObserver.onCompleted();
return;
}
@@ -372,7 +282,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if (updatedProfile == null) {
responseObserver.onNext(ProfileResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.ERROR_UPDATING_PROFILE)).build());
+ .setError(newBuilder().setCause(Cause.ERROR_UPDATING_PROFILE)).build());
responseObserver.onCompleted();
return;
}
@@ -393,14 +303,14 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if ((request.getAccountId() == null) || (request.getAccountId().isEmpty())) {
responseObserver.onNext(AccountResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_ACCOUNT_ID)).build());
+ .setError(newBuilder().setCause(Cause.MISSING_ACCOUNT_ID)).build());
responseObserver.onCompleted();
return;
}
Cause validationCause = validator.validateUpdateAccountRequest(request);
if (validationCause != null) {
responseObserver.onNext(AccountResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(validationCause)).build());
+ .setError(newBuilder().setCause(validationCause)).build());
responseObserver.onCompleted();
return;
}
@@ -408,7 +318,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if (request.getUsername() != null && !request.getUsername().trim().isEmpty() && accountRepositoryAdditional
.foundExistingNotOwnUsername(UUID.fromString(request.getAccountId()), request.getUsername())) {
responseObserver.onNext(AccountResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.USERNAME_ALREADY_USED)).build());
+ .setError(newBuilder().setCause(Cause.USERNAME_ALREADY_USED)).build());
responseObserver.onCompleted();
return;
}
@@ -417,7 +327,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if (updatedAccount == null) {
responseObserver.onNext(AccountResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.ERROR_UPDATING_ACCOUNT)).build());
+ .setError(newBuilder().setCause(Cause.ERROR_UPDATING_ACCOUNT)).build());
responseObserver.onCompleted();
return;
}
@@ -436,7 +346,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if ((request.getAccountId() == null) || (request.getAccountId().isEmpty())) {
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_ACCOUNT_ID)).build());
+ .setError(newBuilder().setCause(Cause.MISSING_ACCOUNT_ID)).build());
responseObserver.onCompleted();
return;
}
@@ -449,7 +359,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
}
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.ERROR_DELETING_ACCOUNT)).build());
+ .setError(newBuilder().setCause(Cause.ERROR_DELETING_ACCOUNT)).build());
responseObserver.onCompleted();
return;
}
@@ -459,7 +369,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
logger.debug("Deleting profile: {}", request);
if ((request.getProfileId() == null) || (request.getProfileId().isEmpty())) {
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build());
+ .setError(newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build());
responseObserver.onCompleted();
return;
}
@@ -474,7 +384,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
logger.info("Error deleting profile.");
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.ERROR_DELETING_PROFILE)).build());
+ .setError(newBuilder().setCause(Cause.ERROR_DELETING_PROFILE)).build());
responseObserver.onCompleted();
return;
}
@@ -486,27 +396,27 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
logger.debug("Adding authentication provider to profile requested: {}", request);
if ((request.getProfileId() == null) || (request.getProfileId().isEmpty())) {
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build());
+ .setError(newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build());
responseObserver.onCompleted();
return;
}
if (request.getAuthenticationProvider().getAuthenticationTypeValue() == 0) {
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_AUTH_PROVIDER_TYPE)).build());
+ .setError(newBuilder().setCause(Cause.MISSING_AUTH_PROVIDER_TYPE)).build());
responseObserver.onCompleted();
return;
}
if (request.getAuthenticationProvider().getAuthenticationProvider() == null
|| request.getAuthenticationProvider().getAuthenticationProvider().isEmpty()) {
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_AUTH_PROVIDER_IDENTIFIER)).build());
+ .setError(newBuilder().setCause(Cause.MISSING_AUTH_PROVIDER_IDENTIFIER)).build());
responseObserver.onCompleted();
return;
}
Cause cause = validator.validateAddAuthenticationProviderRequest(request);
if (cause != null) {
responseObserver
- .onNext(StatusResponse.newBuilder().setError(ErrorResponse.newBuilder().setCause(cause)).build());
+ .onNext(StatusResponse.newBuilder().setError(newBuilder().setCause(cause)).build());
responseObserver.onCompleted();
return;
}
@@ -528,7 +438,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if (profile == null) {
logger.error("Profile id {} missing in DB.", request.getProfileId());
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.PROFILE_NOT_FOUND)).build());
+ .setError(newBuilder().setCause(Cause.PROFILE_NOT_FOUND)).build());
responseObserver.onCompleted();
return;
}
@@ -542,7 +452,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
request.getAuthenticationProvider().getAuthenticationType().name(),
request.getAuthenticationProvider().getAuthenticationProvider());
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.AUTH_PROVIDER_ALREADY_USED)).build());
+ .setError(newBuilder().setCause(Cause.AUTH_PROVIDER_ALREADY_USED)).build());
responseObserver.onCompleted();
return;
}
@@ -560,7 +470,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
request.getAuthenticationProvider().getAuthenticationType().name(),
request.getAuthenticationProvider().getAuthenticationProvider(), request.getProfileId());
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.INTERNAL_SERVER_ERROR)).build());
+ .setError(newBuilder().setCause(Cause.INTERNAL_SERVER_ERROR)).build());
responseObserver.onCompleted();
return;
}
@@ -632,20 +542,20 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if ((request.getProfileId() == null) || (request.getProfileId().isEmpty())) {
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build());
+ .setError(newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build());
responseObserver.onCompleted();
return;
}
if (request.getAuthenticationProvider().getAuthenticationTypeValue() == 0) {
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_AUTH_PROVIDER_TYPE)).build());
+ .setError(newBuilder().setCause(Cause.MISSING_AUTH_PROVIDER_TYPE)).build());
responseObserver.onCompleted();
return;
}
if (request.getAuthenticationProvider().getAuthenticationProvider() == null
|| request.getAuthenticationProvider().getAuthenticationProvider().isEmpty()) {
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.MISSING_AUTH_PROVIDER_IDENTIFIER)).build());
+ .setError(newBuilder().setCause(Cause.MISSING_AUTH_PROVIDER_IDENTIFIER)).build());
responseObserver.onCompleted();
return;
}
@@ -653,7 +563,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
Cause cause = validator.validateDeleteAuthenticationProviderRequest(request);
if (cause != null) {
responseObserver
- .onNext(StatusResponse.newBuilder().setError(ErrorResponse.newBuilder().setCause(cause)).build());
+ .onNext(StatusResponse.newBuilder().setError(newBuilder().setCause(cause)).build());
responseObserver.onCompleted();
return;
}
@@ -663,7 +573,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if (profile == null) {
logger.error("Profile id {} missing in DB.", request.getProfileId());
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.PROFILE_NOT_FOUND)).build());
+ .setError(newBuilder().setCause(Cause.PROFILE_NOT_FOUND)).build());
responseObserver.onCompleted();
return;
}
@@ -677,7 +587,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
"Error deleting authentication provider {} from profile with id {}. Check the number of authentication providers.",
request.getAuthenticationProvider(), request.getProfileId());
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.ERROR_DELETING_AUTH_PROVIDER)).build());
+ .setError(newBuilder().setCause(Cause.ERROR_DELETING_AUTH_PROVIDER)).build());
responseObserver.onCompleted();
return;
}
@@ -697,7 +607,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
request.getAuthenticationProvider().getAuthenticationType().name(),
request.getAuthenticationProvider().getAuthenticationProvider(), request.getProfileId());
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(Cause.INTERNAL_SERVER_ERROR)).build());
+ .setError(newBuilder().setCause(Cause.INTERNAL_SERVER_ERROR)).build());
responseObserver.onCompleted();
return;
}
@@ -745,10 +655,22 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
return;
}
+ private void sendErrorMessageForAccountsResponse(StreamObserver responseObserver, Cause cause) {
+ responseObserver.onNext(AccountsResponse.newBuilder()
+ .setError(newBuilder().setCause(cause)).build());
+ responseObserver.onCompleted();
+ }
+
+ private void sendErrorMessageForAccountResponse(StreamObserver responseObserver, Cause cause) {
+ responseObserver.onNext(AccountResponse.newBuilder()
+ .setError(newBuilder().setCause(cause)).build());
+ responseObserver.onCompleted();
+ }
+
public void prepareErrorStatusResponse(StreamObserver responseObserver, Cause error,
String message) {
responseObserver.onNext(StatusResponse.newBuilder()
- .setError(ErrorResponse.newBuilder().setCause(error).setMessage(message)).build());
+ .setError(newBuilder().setCause(error).setMessage(message)).build());
responseObserver.onCompleted();
}
}
diff --git a/src/main/java/biz/nynja/account/services/decomposition/AccountsProvider.java b/src/main/java/biz/nynja/account/services/decomposition/AccountsProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..07dae8d4c2c9c32f9685af126cbb2409a30787d2
--- /dev/null
+++ b/src/main/java/biz/nynja/account/services/decomposition/AccountsProvider.java
@@ -0,0 +1,87 @@
+package biz.nynja.account.services.decomposition;
+
+import biz.nynja.account.components.AccountServiceHelper;
+import biz.nynja.account.components.Validator;
+import biz.nynja.account.grpc.*;
+import biz.nynja.account.models.Account;
+import biz.nynja.account.models.AccountByProfileId;
+import biz.nynja.account.repositories.AccountByProfileIdRepository;
+import biz.nynja.account.repositories.AccountRepository;
+import biz.nynja.account.services.AccountServiceImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+@Service
+public class AccountsProvider {
+
+ private static final Logger logger = LoggerFactory.getLogger(AccountServiceImpl.class);
+
+ private final AccountRepository accountRepository;
+ private final AccountByProfileIdRepository accountByProfileIdRepository;
+ private final Validator validator;
+ private final AccountServiceHelper accountServiceHelper;
+
+ public AccountsProvider(AccountRepository accountRepository,
+ AccountByProfileIdRepository accountByProfileIdRepository,
+ Validator validator,
+ AccountServiceHelper accountServiceHelper) {
+ this.accountRepository = accountRepository;
+ this.accountByProfileIdRepository = accountByProfileIdRepository;
+ this.validator = validator;
+ this.accountServiceHelper = accountServiceHelper;
+ }
+
+ public Optional getAccountByAuthenticationProvider(AccountByAuthenticationProviderRequest request) {
+
+ if (request.getAuthenticationType() == AuthenticationType.PHONE) {
+ request = normalizedPhoneNumber(request);
+ }
+ Account account = accountServiceHelper.getAccountByAuthenticationProviderHelper(
+ request.getAuthenticationIdentifier(), request.getAuthenticationType().toString());
+ if (account == null) {
+ logger.debug("No matching accounts found for authetntication provider {}: {}",
+ request.getAuthenticationType(), request.getAuthenticationIdentifier());
+ return Optional.empty();
+ }
+ AccountResponse response = AccountResponse.newBuilder().setAccountDetails(account.toProto()).build();
+ logger.debug("Found result for account by authentication provider {}: {}: \"{}\"",
+ request.getAuthenticationType(), request.getAuthenticationIdentifier(), response);
+ return Optional.of(response);
+ }
+
+ public Optional getAllAccountsByProfileId(AccountsByProfileIdRequest request) {
+ List listAccountsByProfileId = accountByProfileIdRepository
+ .findAllByProfileId(UUID.fromString(request.getProfileId()));
+ if (listAccountsByProfileId.size() == 0) {
+ return Optional.empty();
+ }
+ List responseList = listAccountsByProfileId.stream().map(AccountByProfileId::toProto).collect(Collectors.toList());
+ AccountsResponse response = AccountsResponse.newBuilder()
+ .setAccountsResponse(AccountsList.newBuilder().addAllAccountDetails(responseList)).build();
+ logger.debug("Returned response: \"{}\".", response);
+ return Optional.of(response);
+ }
+
+ public Optional getAccountByAccountId(AccountByAccountIdRequest request) {
+ logger.info("Getting accounts by account id: {}", request.getAccountId());
+ Account account = accountRepository.findByAccountId(UUID.fromString(request.getAccountId()));
+ if (account == null) {
+ return Optional.empty();
+ }
+ AccountResponse response = AccountResponse.newBuilder().setAccountDetails(account.toProto()).build();
+ logger.debug("Returned response: \"{}\".", response);
+ return Optional.of(response);
+ }
+
+ private AccountByAuthenticationProviderRequest normalizedPhoneNumber(AccountByAuthenticationProviderRequest request) {
+ return AccountByAuthenticationProviderRequest.newBuilder()
+ .setAuthenticationType(request.getAuthenticationType())
+ .setAuthenticationIdentifier(validator.getNormalizedPhoneNumber(request.getAuthenticationIdentifier())).build();
+ }
+}
diff --git a/src/test/java/biz/nynja/account/services/AccountServiceTests.java b/src/test/java/biz/nynja/account/services/AccountServiceTests.java
index 59f56f4e4471bbe481f0c1584888140a0da99bc6..7debd739019fa0490b82f4ed53bf3bc268fb4ae1 100644
--- a/src/test/java/biz/nynja/account/services/AccountServiceTests.java
+++ b/src/test/java/biz/nynja/account/services/AccountServiceTests.java
@@ -176,11 +176,11 @@ public class AccountServiceTests extends GrpcServerTestBase {
final AccountServiceGrpc.AccountServiceBlockingStub accountServiceBlockingStub = AccountServiceGrpc
.newBlockingStub(Optional.ofNullable(channel).orElse(inProcChannel));
- final AccountsResponse reply = accountServiceBlockingStub.getAccountByAccountId(request);
+ final AccountResponse reply = accountServiceBlockingStub.getAccountByAccountId(request);
assertNotNull("Reply should not be null", reply);
assertTrue(String.format("Reply should contain profile ID '%s'", Util.ACCOUNT_ID.toString()),
- reply.getAccountsResponse().getAccountDetails(0).getAccountId().equals(Util.ACCOUNT_ID.toString()));
+ reply.getAccountDetails().getAccountId().equals(Util.ACCOUNT_ID.toString()));
}
@Test
@@ -195,7 +195,7 @@ public class AccountServiceTests extends GrpcServerTestBase {
final AccountServiceGrpc.AccountServiceBlockingStub accountServiceBlockingStub = AccountServiceGrpc
.newBlockingStub(Optional.ofNullable(channel).orElse(inProcChannel));
- final AccountsResponse reply = accountServiceBlockingStub.getAccountByAccountId(request);
+ final AccountResponse reply = accountServiceBlockingStub.getAccountByAccountId(request);
assertNotNull("Reply should not be null", reply);
assertTrue(String.format("Reply should contain cause '%s'", Cause.ACCOUNT_NOT_FOUND),
@@ -210,7 +210,7 @@ public class AccountServiceTests extends GrpcServerTestBase {
final AccountServiceGrpc.AccountServiceBlockingStub accountServiceBlockingStub = AccountServiceGrpc
.newBlockingStub(Optional.ofNullable(channel).orElse(inProcChannel));
- final AccountsResponse reply = accountServiceBlockingStub.getAccountByAccountId(request);
+ final AccountResponse reply = accountServiceBlockingStub.getAccountByAccountId(request);
assertNotNull("Reply should not be null", reply);
assertTrue(String.format("Reply should contain cause '%s'", Cause.MISSING_ACCOUNT_ID),