diff --git a/pom.xml b/pom.xml
index e3c914b8c50481e00def69206f602fdf6187ffaf..ad5011adebf767aa79b6645cb5d78ad47b931ec5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -192,11 +192,42 @@
+
+
+
+ kr.motd.maven
+ os-maven-plugin
+ 1.6.1
+
+
org.springframework.boot
spring-boot-maven-plugin
+
+
+ org.xolstice.maven.plugins
+ protobuf-maven-plugin
+ 0.6.1
+
+
+ com.google.protobuf:protoc:3.3.0:exe:${os.detected.classifier}
+
+ grpc-java
+
+ io.grpc:protoc-gen-grpc-java:1.4.0:exe:${os.detected.classifier}
+
+
+
+
+
+ compile
+ compile-custom
+
+
+
+
diff --git a/src/main/java/biz/nynja/account/components/AccountServiceHelper.java b/src/main/java/biz/nynja/account/components/AccountServiceHelper.java
index c47fa789bc087d4b2cb4b4839c5007de28c3ad57..b8b4071254c5f46af095b93d16e4b62867eb7d1c 100644
--- a/src/main/java/biz/nynja/account/components/AccountServiceHelper.java
+++ b/src/main/java/biz/nynja/account/components/AccountServiceHelper.java
@@ -3,6 +3,7 @@
*/
package biz.nynja.account.components;
+import biz.nynja.account.grpc.AuthenticationType;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +21,10 @@ public class AccountServiceHelper {
public Account getAccountByAuthenticationProviderHelper(String authenticationIdentifier,
String type) {
+ if (AuthenticationType.EMAIL.toString().equals(type)) {
+ authenticationIdentifier = authenticationIdentifier.toLowerCase();
+ }
+
List accounts = accountByAuthenticationProviderRepository
.findAllByAuthenticationProvider(authenticationIdentifier);
diff --git a/src/main/java/biz/nynja/account/models/AccountBuilder.java b/src/main/java/biz/nynja/account/models/AccountBuilder.java
index 6d7e3d53a095e8f264a2285d73e8513d695d738a..858dd863e2acc6c96fde53e39ec2d2cc2cd45877 100644
--- a/src/main/java/biz/nynja/account/models/AccountBuilder.java
+++ b/src/main/java/biz/nynja/account/models/AccountBuilder.java
@@ -4,6 +4,7 @@
package biz.nynja.account.models;
import biz.nynja.account.grpc.AccessStatus;
+import biz.nynja.account.grpc.AuthenticationType;
import biz.nynja.account.grpc.CompletePendingAccountCreationRequest;
import biz.nynja.account.grpc.UpdateAccountRequest;
import biz.nynja.account.validation.Validators;
@@ -21,8 +22,12 @@ public class AccountBuilder {
newAccount.setAccountId(pendingAccount.getAccountId());
newAccount.setProfileId(pendingAccount.getProfileId());
newAccount.setAccountMark(request.getAccountMark());
- newAccount.setAuthenticationProvider(pendingAccount.getAuthenticationProvider());
newAccount.setAuthenticationProviderType(pendingAccount.getAuthenticationProviderType());
+ if (AuthenticationType.EMAIL.toString().equals(pendingAccount.getAuthenticationProviderType())) {
+ newAccount.setAuthenticationProvider(pendingAccount.getAuthenticationProvider().toLowerCase());
+ } else {
+ newAccount.setAuthenticationProvider(pendingAccount.getAuthenticationProvider());
+ }
newAccount.setFirstName(request.getFirstName());
newAccount.setLastName(request.getLastName());
newAccount.setAvatar(request.getAvatar());
diff --git a/src/main/java/biz/nynja/account/permissions/PermissionsInterceptor.java b/src/main/java/biz/nynja/account/permissions/PermissionsInterceptor.java
index 63c7b1de41e34d79b0b3cf34e1424473204e5455..b66e9fbb54460935eb3d9b96eb9eecddb31e2f12 100644
--- a/src/main/java/biz/nynja/account/permissions/PermissionsInterceptor.java
+++ b/src/main/java/biz/nynja/account/permissions/PermissionsInterceptor.java
@@ -10,6 +10,7 @@ import java.util.Base64;
import java.util.Optional;
import java.util.UUID;
+import biz.nynja.account.services.AdminService2Impl;
import org.lognet.springboot.grpc.GRpcGlobalInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,6 +53,9 @@ public class PermissionsInterceptor implements ServerInterceptor {
private static final Class SERVICE_CLASS = AccountServiceImpl.class;
private static final Class ADMIN_SERVICE_CLASS = AdminServiceImpl.class;
+ // Added by Jayendra
+ private static final Class ADMIN_SERVICE2_CLASS = AdminService2Impl.class;
+
public static final Metadata.Key ACCESS_TOKEN_METADATA = Metadata.Key.of("Authorization",
ASCII_STRING_MARSHALLER);
public static final Context.Key ACCESS_TOKEN_CTX = Context.key("accessToken");
@@ -160,7 +164,8 @@ public class PermissionsInterceptor implements ServerInterceptor {
// Get the rpc method called
Method[] allMethods = SERVICE_CLASS.getDeclaredMethods();
Method[] adminMethods = ADMIN_SERVICE_CLASS.getDeclaredMethods();
-
+ Method[] admin2Methods = ADMIN_SERVICE2_CLASS.getDeclaredMethods();
+
for (Method method : allMethods) {
if (method.getName().equals(rpc)) {
return method;
@@ -172,7 +177,13 @@ public class PermissionsInterceptor implements ServerInterceptor {
return method;
}
}
-
+
+ for (Method method : admin2Methods) {
+ if (method.getName().equals(rpc)) {
+ return method;
+ }
+ }
+
return null;
}
diff --git a/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java b/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java
index 0a703de65f807707ac084ed391895cbcef7c2aaa..ae9259913541cc91b5269574cb87fd000b9764a1 100644
--- a/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java
+++ b/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java
@@ -3,6 +3,7 @@
*/
package biz.nynja.account.repositories;
+import biz.nynja.account.grpc.AuthenticationType;
import java.time.DateTimeException;
import java.time.Instant;
import java.util.HashSet;
@@ -983,8 +984,10 @@ public class AccountRepositoryAdditionalImpl implements AccountRepositoryAdditio
@Override
public Optional getAccountByLoginOption(AuthenticationProvider loginOption)
throws IncorrectAccountCountException {
+ String loginOptionValue = AuthenticationType.EMAIL.toString().equals(loginOption.getType()) ?
+ loginOption.getValue().toLowerCase() : loginOption.getValue();
ProfileByAuthenticationProvider profile = profileByAuthenticationProviderRepository
- .findByAuthenticationProviderAndAuthenticationProviderType(loginOption.getValue(),
+ .findByAuthenticationProviderAndAuthenticationProviderType(loginOptionValue,
loginOption.getType());
if (profile == null) {
return Optional.empty();
@@ -1008,8 +1011,10 @@ public class AccountRepositoryAdditionalImpl implements AccountRepositoryAdditio
@Override
public Optional searchAccountByLoginOption(AuthenticationProvider loginOption)
throws IncorrectAccountCountException {
+ String loginOptionValue = AuthenticationType.EMAIL.toString().equals(loginOption.getType()) ?
+ loginOption.getValue().toLowerCase() : loginOption.getValue();
ProfileByAuthenticationProvider profileByAuthProvider = profileByAuthenticationProviderRepository
- .findByAuthenticationProviderAndAuthenticationProviderType(loginOption.getValue(),
+ .findByAuthenticationProviderAndAuthenticationProviderType(loginOptionValue,
loginOption.getType());
if (profileByAuthProvider == null) {
return Optional.empty();
diff --git a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java
index f5bcaee78ce470e8bc58f7369430c3947036f73c..6eda54cf602eb8a74d426a5aa08f516dbe803e9c 100644
--- a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java
+++ b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java
@@ -6,7 +6,6 @@ package biz.nynja.account.services;
import static biz.nynja.account.validation.Validators.account;
import static biz.nynja.account.validation.Validators.authenticationProvider;
import static biz.nynja.account.validation.Validators.pendingAccount;
-import static biz.nynja.account.validation.Validators.phoneValidator;
import static biz.nynja.account.validation.Validators.util;
import java.util.List;
@@ -480,11 +479,11 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if (cause.isPresent()) {
response = CreatePendingAccountResponse.newBuilder()
.setError(ErrorResponse.newBuilder().setCause(cause.get())).build();
- logger.info("ERROR: Creating pending account for provider {} and accoutn Id {}.",
+ logger.info("ERROR: Creating pending account for provider {} and account Id {}.",
request.getAuthenticationProvider(), response.getPendingAccountDetails().getAccountId());
} else {
response = accountCreator.retrieveCreatePendingAccountResponse(request);
- logger.info("SUCCESS: Created pending account for provider {} and accoutn Id {}.",
+ logger.info("SUCCESS: Created pending account for provider {} and account Id {}.",
request.getAuthenticationProvider(), response.getPendingAccountDetails().getAccountId());
}
@@ -498,8 +497,9 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
public void completePendingAccountCreation(CompletePendingAccountCreationRequest request,
StreamObserver responseObserver) {
- logger.info("Complete pending account creation for account id {} and username {} ...", request.getAccountId(),
- request.getUsername().toLowerCase());
+ logger.info("Complete pending account creation for account id {} and username {} ...",
+ request.getAccountId(),
+ request.getUsername());
logger.debug("Complete pending account creation...: {} ...", request);
AccountResponse response = accountCreator.retrieveCompletePendingAccountResponse(request);
@@ -686,6 +686,15 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
AddAuthenticationProviderRequest newRequest = AddAuthenticationProviderRequest.newBuilder()
.setProfileId(request.getProfileId()).setAuthenticationProvider(newAuthProviderDetails).build();
request = newRequest;
+ } else if (request.getAuthenticationProvider().getAuthenticationType() == AuthenticationType.EMAIL) {
+ var lowercase = request.getAuthenticationProvider().getAuthenticationProvider().toLowerCase();
+ request = request.toBuilder()
+ .setAuthenticationProvider(
+ request
+ .getAuthenticationProvider()
+ .toBuilder()
+ .setAuthenticationProvider(lowercase))
+ .build();
}
// Make sure that the requested profile id for update exists in DB.
@@ -906,6 +915,9 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas
if (request.getAuthenticationProvider().getAuthenticationType() == AuthenticationType.PHONE) {
authenticationProviderToDelete.setValue(phoneNumberNormalizer
.getNormalizedPhoneNumber(request.getAuthenticationProvider().getAuthenticationProvider()));
+ } else if (request.getAuthenticationProvider().getAuthenticationType() == AuthenticationType.EMAIL) {
+ authenticationProviderToDelete.setValue(
+ request.getAuthenticationProvider().getAuthenticationProvider().toLowerCase());
}
Optional existingAuthProviderToDelete = AuthenticationProvider
diff --git a/src/main/java/biz/nynja/account/services/AdminService2Impl.java b/src/main/java/biz/nynja/account/services/AdminService2Impl.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f08369a5872a189f2aa8427c8530d16d0295266
--- /dev/null
+++ b/src/main/java/biz/nynja/account/services/AdminService2Impl.java
@@ -0,0 +1,814 @@
+package biz.nynja.account.services;
+
+
+import biz.nynja.account.models.Account;
+import biz.nynja.account.permissions.PerformPermissionCheck;
+import biz.nynja.account.permissions.Permitted;
+import biz.nynja.account.permissions.RoleConstants;
+import biz.nynja.account.services.admin.repository.AdminAccountRepository;
+import biz.nynja.account2.admin.grpc.*;
+import com.google.protobuf.ProtocolStringList;
+import io.grpc.stub.StreamObserver;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * AdminService2Impl contains endpoints for market admin
+ * panel to filter accounts while broadcasting message
+ * This endpoints are permitted to Token with role admin
+ *
+ * This service contains endpoints which doesn't exists in AdminService
+ *
+ * @author Jayendra
+ * @since 2019-12-04
+ *
+ */
+
+@GRpcService
+public class AdminService2Impl extends AdminAccountService2Grpc.AdminAccountService2ImplBase {
+
+ @Autowired
+ private AdminAccountRepository accountService;
+
+ private static final Logger logger = LoggerFactory.getLogger(AdminService2Impl.class);
+
+ @Override
+ @Permitted(role = RoleConstants.ANY)
+ public void searchByAccountId(SearchByAccountIdRequest request, StreamObserver responseObserver) {
+
+ logger.info("Search Account By Account Id Endpoint.");
+ logger.info("");
+
+ String accountId = request.getAccountId();
+ logger.info("Account-Id : " + accountId);
+
+ List accountsList = null;
+ String nextPageState = null;
+ ErrorResponse errorResponse = null;
+
+
+ accountsList = accountService.getAccountByAccountId(UUID.fromString(accountId));
+ logger.info("Accounts-list : {}", accountsList);
+
+
+ if (accountsList == null) {
+ logger.info("Account list in null.");
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else if (accountsList.size() == 0) {
+ logger.info("Account list size is zero.");
+
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else {
+
+ AccountsList.Builder accountsListBuilder = AccountsList.newBuilder();
+ for (Account account : accountsList) {
+
+ System.out.println("");
+ System.out.println("Account : ");
+ System.out.println(account);
+ System.out.println("");
+
+ accountsListBuilder.addAccountDetails(AccountDetails.newBuilder().setFirstName((account.getFirstName() == null) ? "" : account.getFirstName())
+ .setLastName((account.getLastName() == null) ? "" : account.getLastName()).setProfileId((account.getProfileId() == null) ? "" : account.getProfileId().toString())
+ .setAccountId(account.getAccountId().toString()).setAuthenticationprovider((account.getAuthenticationProvider() == null) ? "" : account.getAuthenticationProvider())
+ .setAuthenticationprovidertype((account.getAuthenticationProviderType() == null) ? "" : account.getAuthenticationProviderType())
+ .setAccountMark((account.getAccountMark() != null) ? account.getAccountMark() : "").setAccountName((account.getAccountName() != null) ? account.getAccountName() : "")
+ .setAvatar((account.getAvatar() != null) ? account.getAvatar() : "").setCreationTimestamp((account.getCreationTimestamp() != null) ? account.getCreationTimestamp() : 0)
+ .setQrCode((account.getQrCode() != null) ? account.getQrCode() : "")
+ .setUsername(account.getUsername()).build());
+ }
+
+ accountsListBuilder.build();
+
+ AccountsResponse response = (errorResponse == null) ? AccountsResponse.newBuilder().setAccountsList(accountsListBuilder)
+ .build() : AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ }
+ }
+
+ @Override
+ @Permitted(role = RoleConstants.ANY)
+ public void getAccountsByCreationTime(GetAccountsByCreationTime request,
+ StreamObserver responseObserver) {
+
+ logger.info("");
+ logger.info("Get accounts by creation time endpoint.");
+
+ int limit = request.getLimit();
+ String pageState = request.getPageState();
+ int pagination = request.getPagination(); // Do pagination 'Yes' or 'No'
+ long fromCreationTime = request.getFromCreationTime();
+ long toCreationTime = request.getToCreationTime();
+
+ logger.info("Limit : {}", limit);
+ logger.info("PageState : {}", pageState);
+ logger.info("Pagination : {}", pagination);
+ logger.info("FromCreationTime : {}", fromCreationTime);
+ logger.info("ToCreationTime : {}", toCreationTime);
+ logger.info("");
+
+ List accountsList = null;
+ String nextPageState = null;
+ ErrorResponse errorResponse = null;
+
+ // Fetching records on basis of pagination.
+ if (pagination == 1) {
+ logger.info("Fetching records on basis of pagination.");
+
+
+ Map accountsMap = (pageState.equals("nil")) ? accountService.getAccountsByCreationTimeStampPagination(fromCreationTime, toCreationTime, limit, null) : accountService.getAccountsByCreationTimeStampPagination(fromCreationTime, toCreationTime, limit, pageState);
+
+ if(accountsMap == null){
+
+ logger.info("No accounts found");
+ logger.info("");
+
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ }
+
+ accountsList = (List) accountsMap.get("accounts");
+ nextPageState = accountsMap.get("pageState").toString();
+
+ logger.info("Next page state : " + nextPageState);
+
+
+ if (accountsList == null) {
+ logger.info("Account list in null.");
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else if (accountsList.size() == 0) {
+ logger.info("Account list size is zero.");
+
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else {
+
+ AccountsList.Builder accountsListBuilder = AccountsList.newBuilder();
+
+ for (Account account : accountsList) {
+
+ accountsListBuilder.addAccountDetails(AccountDetails.newBuilder().setFirstName((account.getFirstName() == null) ? "" : account.getFirstName())
+ .setLastName((account.getLastName() == null) ? "" : account.getLastName()).setProfileId((account.getProfileId() == null) ? "" : account.getProfileId().toString())
+ .setAccountId(account.getAccountId().toString()).setAuthenticationprovider((account.getAuthenticationProvider() == null) ? "" : account.getAuthenticationProvider())
+ .setAuthenticationprovidertype((account.getAuthenticationProviderType() == null) ? "" : account.getAuthenticationProviderType())
+ .setAccountMark((account.getAccountMark() != null) ? account.getAccountMark() : "").setAccountName((account.getAccountName() != null) ? account.getAccountName() : "")
+ .setAvatar((account.getAvatar() != null) ? account.getAvatar() : "").setCreationTimestamp((account.getCreationTimestamp() != null) ? account.getCreationTimestamp() : 0)
+ .setQrCode((account.getQrCode() != null) ? account.getQrCode() : "")
+ .setUsername(account.getUsername()).build());
+ }
+
+ if (nextPageState != null) {
+ accountsListBuilder.setNextPageState(nextPageState);
+ }
+
+ accountsListBuilder.build();
+
+ AccountsResponse response = (errorResponse == null) ? AccountsResponse.newBuilder().setAccountsList(accountsListBuilder)
+ .build() : AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+
+ }
+
+ } else {
+ logger.info("Not fetching records on basis of pagination.");
+
+ accountsList = accountService.getAccountsByCreationTimeStamp(fromCreationTime, toCreationTime);
+ logger.info("Accounts-list : {}", accountsList);
+
+ if (accountsList == null) {
+ logger.info("Account list in null.");
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else if (accountsList.size() == 0) {
+ logger.info("Account list size is zero.");
+
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else {
+
+ AccountsList.Builder accountsListBuilder = AccountsList.newBuilder();
+ for (Account account : accountsList) {
+
+ accountsListBuilder.addAccountDetails(AccountDetails.newBuilder().setFirstName((account.getFirstName() == null) ? "" : account.getFirstName())
+ .setLastName((account.getLastName() == null) ? "" : account.getLastName()).setProfileId((account.getProfileId() == null) ? "" : account.getProfileId().toString())
+ .setAccountId(account.getAccountId().toString()).setAuthenticationprovider((account.getAuthenticationProvider() == null) ? "" : account.getAuthenticationProvider())
+ .setAuthenticationprovidertype((account.getAuthenticationProviderType() == null) ? "" : account.getAuthenticationProviderType())
+ .setAccountMark((account.getAccountMark() != null) ? account.getAccountMark() : "").setAccountName((account.getAccountName() != null) ? account.getAccountName() : "")
+ .setAvatar((account.getAvatar() != null) ? account.getAvatar() : "").setCreationTimestamp((account.getCreationTimestamp() != null) ? account.getCreationTimestamp() : 0)
+ .setQrCode((account.getQrCode() != null) ? account.getQrCode() : "")
+ .setUsername(account.getUsername()).build());
+ }
+
+ accountsListBuilder.build();
+
+ AccountsResponse response = (errorResponse == null) ? AccountsResponse.newBuilder().setAccountsList(accountsListBuilder)
+ .build() : AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ }
+
+ }
+
+ }
+
+ @Override
+ @Permitted(role = RoleConstants.ANY)
+ public void getAccounts(GetAllAccountsRequest request,
+ StreamObserver responseObserver) {
+
+ logger.info("");
+ logger.info("Get all accounts endpoint.");
+
+ ProtocolStringList accountIdsList = request.getAccountIdsList();
+
+ // List accountIdsList = null;
+ int allAccounts = request.getAllAccounts();
+ int pagination = request.getPagination();
+ String pageState = request.getPageState();
+ int limit = request.getLimit();
+
+ logger.info("Request Parameters");
+ logger.info("accountIdsList : " + accountIdsList);
+ logger.info("allAccounts : " + allAccounts);
+ logger.info("pagination : " + pagination);
+ logger.info("pageState : " + pageState);
+ logger.info("limit : " + limit);
+
+ /*System.out.println("");
+ System.out.println("====================");
+ System.out.println("Request Parameters :");
+ System.out.println("====================");
+ System.out.println("");
+ System.out.println("accountIdsList : " + accountIdsList);
+ System.out.println("allAccounts : " + allAccounts);
+ System.out.println("pagination : " + pagination);
+ System.out.println("pageState : " + pageState);
+ System.out.println("limit : " + limit);
+ System.out.println("");
+ System.out.println("------------");*/
+
+ List accountsList = null;
+ String nextPageState = null;
+ ErrorResponse errorResponse = null;
+
+
+ if (!accountIdsList.isEmpty()) {
+ logger.info("Fetching details on basis of given account Ids.");
+ System.out.println("Fetching details on basis of given account Ids.");
+ System.out.println("");
+
+ // Set accountIds = new HashSet<>(accountIdsList.size());
+
+ UUID[] accountIds = new UUID[accountIdsList.size()];
+
+ for (int i = 0; i <= accountIdsList.size() - 1; i++) {
+ accountIds[i] = UUID.fromString(accountIdsList.get(i));
+ }
+
+ accountsList = accountService.getAccountByIds(accountIds);
+ } else if (pagination == 1) {
+
+ logger.info("Fetching details on basis of pagination.");
+ System.out.println("");
+ System.out.println("Fetching details on basis of pagination.");
+
+ if (pageState == null || pageState.equals("") || limit <= 0) {
+
+ logger.info("Invalid input for pagination");
+ logger.info("pageState : " + pageState);
+ logger.info("Limit : " + limit);
+ System.out.println("");
+ System.out.println("Invalid input for pagination");
+ System.out.println("limit : " + limit);
+ System.out.println("pageState : " + pageState);
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.INVALID_INPUT).setMessage("Your input is not valid.")
+ .build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ }
+
+ Map accountsMap = (pageState.equals("nil")) ? accountService.getAccountsByPagination(limit, null) : accountService.getAccountsByPagination(limit, pageState);
+
+ if(accountsMap == null){
+
+ logger.info("No accounts found");
+ logger.info("");
+
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ }
+
+ accountsList = (List) accountsMap.get("accounts");
+ nextPageState = accountsMap.get("pageState").toString();
+
+ logger.info("Next page state : " + nextPageState);
+ System.out.println("Next page state : " + nextPageState);
+
+ } else {
+ logger.info("Fetching all account Details.");
+ System.out.println("Fetching all account Details.");
+ System.out.println("");
+
+ accountsList = accountService.getAllAccounts();
+ }
+
+ logger.info("Accounts list size : " + accountsList.size());
+ System.out.println("Accounts list size : " + accountsList.size());
+ System.out.println("");
+
+ if (accountsList.size() <= 0) {
+ logger.info("No account details found : ");
+ System.out.println("No account details found : ");
+ System.out.println("");
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ }
+
+ AccountsList.Builder accountsListBuilder = AccountsList.newBuilder();
+
+ for (Account account : accountsList) {
+
+ /* accountsListBuilder.addAccountDetails(AccountDetails.newBuilder().setFirstName(account.getFirstName())
+ .setLastName(account.getLastName()).setProfileId(account.getProfileId().toString())
+ .setAccountId(account.getAccountId().toString()).setAuthenticationprovider(account.getAuthenticationProvider())
+ .setAuthenticationprovidertype(account.getAuthenticationProviderType())
+ .setUsername(account.getUsername()).build());*/
+
+ accountsListBuilder.addAccountDetails(AccountDetails.newBuilder().setFirstName((account.getFirstName() == null) ? "" : account.getFirstName())
+ .setLastName((account.getLastName() == null) ? "" : account.getLastName()).setProfileId((account.getProfileId() == null) ? "" : account.getProfileId().toString())
+ .setAccountId(account.getAccountId().toString()).setAuthenticationprovider((account.getAuthenticationProvider() == null) ? "" : account.getAuthenticationProvider())
+ .setAuthenticationprovidertype((account.getAuthenticationProviderType() == null) ? "" : account.getAuthenticationProviderType())
+ .setAccountMark((account.getAccountMark() != null) ? account.getAccountMark() : "").setAccountName((account.getAccountName() != null) ? account.getAccountName() : "")
+ .setAvatar((account.getAvatar() != null) ? account.getAvatar() : "").setCreationTimestamp((account.getCreationTimestamp() != null) ? account.getCreationTimestamp() : 0)
+ .setQrCode((account.getQrCode() != null) ? account.getQrCode() : "")
+ .setUsername(account.getUsername()).build());
+ }
+
+ if (nextPageState != null) {
+ accountsListBuilder.setNextPageState(nextPageState);
+ }
+
+ accountsListBuilder.build();
+
+ AccountsResponse response = (errorResponse == null) ? AccountsResponse.newBuilder().setAccountsList(accountsListBuilder)
+ .build() : AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+
+ }
+
+
+ @Override
+ @Permitted(role = RoleConstants.ANY)
+ public void searchByUsername(SearchByUsernameRequest request,
+ StreamObserver responseObserver) {
+
+ logger.info("Search By Username Endpoint.");
+ logger.info("");
+
+ String username = request.getUsername();
+ logger.info("Username : " + username);
+
+ List accountsList = null;
+ String nextPageState = null;
+ ErrorResponse errorResponse = null;
+
+
+ accountsList = accountService.getAccountByUsername(username);
+ logger.info("Accounts-list : {}", accountsList);
+
+
+ if (accountsList == null) {
+ logger.info("Account list in null.");
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else if (accountsList.size() == 0) {
+ logger.info("Account list size is zero.");
+
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else {
+
+ AccountsList.Builder accountsListBuilder = AccountsList.newBuilder();
+ for (Account account : accountsList) {
+
+ System.out.println("");
+ System.out.println("Account : ");
+ System.out.println(account);
+ System.out.println("");
+
+ accountsListBuilder.addAccountDetails(AccountDetails.newBuilder().setFirstName((account.getFirstName() == null) ? "" : account.getFirstName())
+ .setLastName((account.getLastName() == null) ? "" : account.getLastName()).setProfileId((account.getProfileId() == null) ? "" : account.getProfileId().toString())
+ .setAccountId(account.getAccountId().toString()).setAuthenticationprovider((account.getAuthenticationProvider() == null) ? "" : account.getAuthenticationProvider())
+ .setAuthenticationprovidertype((account.getAuthenticationProviderType() == null) ? "" : account.getAuthenticationProviderType())
+ .setAccountMark((account.getAccountMark() != null) ? account.getAccountMark() : "").setAccountName((account.getAccountName() != null) ? account.getAccountName() : "")
+ .setAvatar((account.getAvatar() != null) ? account.getAvatar() : "").setCreationTimestamp((account.getCreationTimestamp() != null) ? account.getCreationTimestamp() : 0)
+ .setQrCode((account.getQrCode() != null) ? account.getQrCode() : "")
+ .setUsername(account.getUsername()).build());
+ }
+
+ accountsListBuilder.build();
+
+ AccountsResponse response = (errorResponse == null) ? AccountsResponse.newBuilder().setAccountsList(accountsListBuilder)
+ .build() : AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ }
+
+ }
+
+ @Override
+ @Permitted(role = RoleConstants.ANY)
+ public void searchByFirstname(SearchByFirstNameRequest request,
+ StreamObserver responseObserver) {
+
+ logger.info("Search By FirstName Endpoint.");
+ logger.info("");
+
+ String firstName = request.getFirstName();
+
+ logger.info("Firstname : " + firstName);
+
+ List accountsList = null;
+ String nextPageState = null;
+ ErrorResponse errorResponse = null;
+
+ accountsList = accountService.getAccountByFirstname(firstName);
+ logger.info("Accounts-list : {}", accountsList);
+
+
+
+ if (accountsList == null) {
+ logger.info("Account list in null.");
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else if (accountsList.size() == 0) {
+ logger.info("Account list size is zero.");
+
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else {
+
+ AccountsList.Builder accountsListBuilder = AccountsList.newBuilder();
+ for (Account account : accountsList) {
+
+ accountsListBuilder.addAccountDetails(AccountDetails.newBuilder().setFirstName((account.getFirstName() == null) ? "" : account.getFirstName())
+ .setLastName((account.getLastName() == null) ? "" : account.getLastName()).setProfileId((account.getProfileId() == null) ? "" : account.getProfileId().toString())
+ .setAccountId(account.getAccountId().toString()).setAuthenticationprovider((account.getAuthenticationProvider() == null) ? "" : account.getAuthenticationProvider())
+ .setAuthenticationprovidertype((account.getAuthenticationProviderType() == null) ? "" : account.getAuthenticationProviderType())
+ .setAccountMark((account.getAccountMark() != null) ? account.getAccountMark() : "").setAccountName((account.getAccountName() != null) ? account.getAccountName() : "")
+ .setAvatar((account.getAvatar() != null) ? account.getAvatar() : "").setCreationTimestamp((account.getCreationTimestamp() != null) ? account.getCreationTimestamp() : 0)
+ .setQrCode((account.getQrCode() != null) ? account.getQrCode() : "")
+ .setUsername(account.getUsername()).build());
+ }
+
+ accountsListBuilder.build();
+
+ AccountsResponse response = (errorResponse == null) ? AccountsResponse.newBuilder().setAccountsList(accountsListBuilder)
+ .build() : AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ }
+
+
+ }
+
+ @Override
+ @Permitted(role = RoleConstants.ANY)
+ public void searchByLastname(SearchByLastNameRequest request,
+ StreamObserver responseObserver) {
+
+ logger.info("Search By LastName Endpoint.");
+ logger.info("");
+
+ String lastName = request.getLastName();
+
+ logger.info("Lastname : " + lastName);
+
+ List accountsList = null;
+ String nextPageState = null;
+ ErrorResponse errorResponse = null;
+
+ accountsList = accountService.getAccountByLastname(lastName);
+ logger.info("Accounts-list : {}", accountsList);
+
+
+ if (accountsList == null) {
+ logger.info("Account list in null.");
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else if (accountsList.size() == 0) {
+ logger.info("Account list size is zero.");
+
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else {
+
+ AccountsList.Builder accountsListBuilder = AccountsList.newBuilder();
+ for (Account account : accountsList) {
+
+ accountsListBuilder.addAccountDetails(AccountDetails.newBuilder().setFirstName((account.getFirstName() == null) ? "" : account.getFirstName())
+ .setLastName((account.getLastName() == null) ? "" : account.getLastName()).setProfileId((account.getProfileId() == null) ? "" : account.getProfileId().toString())
+ .setAccountId(account.getAccountId().toString()).setAuthenticationprovider((account.getAuthenticationProvider() == null) ? "" : account.getAuthenticationProvider())
+ .setAuthenticationprovidertype((account.getAuthenticationProviderType() == null) ? "" : account.getAuthenticationProviderType())
+ .setAccountMark((account.getAccountMark() != null) ? account.getAccountMark() : "").setAccountName((account.getAccountName() != null) ? account.getAccountName() : "")
+ .setAvatar((account.getAvatar() != null) ? account.getAvatar() : "").setCreationTimestamp((account.getCreationTimestamp() != null) ? account.getCreationTimestamp() : 0)
+ .setQrCode((account.getQrCode() != null) ? account.getQrCode() : "")
+ .setUsername(account.getUsername()).build());
+ }
+
+ accountsListBuilder.build();
+
+ AccountsResponse response = (errorResponse == null) ? AccountsResponse.newBuilder().setAccountsList(accountsListBuilder)
+ .build() : AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ }
+
+ }
+
+ @Override
+ @Permitted(role = RoleConstants.ANY)
+ public void searchByPhoneNumber(SearchByPhoneNumberRequest request,
+ StreamObserver responseObserver) {
+
+ logger.info("Search By PhoneNumber Endpoint.");
+ logger.info("");
+
+ String phoneNumber = request.getPhoneNumber();
+
+ logger.info("Phonenumber : " + phoneNumber);
+
+ List accountsList = null;
+ String nextPageState = null;
+ ErrorResponse errorResponse = null;
+
+ accountsList = accountService.getAccountByAuthenticationProvider(phoneNumber);
+ logger.info("Accounts-list : {}", accountsList);
+
+
+ if (accountsList == null) {
+ logger.info("Account list in null.");
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else if (accountsList.size() == 0) {
+ logger.info("Account list size is zero.");
+
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else {
+
+ AccountsList.Builder accountsListBuilder = AccountsList.newBuilder();
+ for (Account account : accountsList) {
+
+ accountsListBuilder.addAccountDetails(AccountDetails.newBuilder().setFirstName((account.getFirstName() == null) ? "" : account.getFirstName())
+ .setLastName((account.getLastName() == null) ? "" : account.getLastName()).setProfileId((account.getProfileId() == null) ? "" : account.getProfileId().toString())
+ .setAccountId(account.getAccountId().toString()).setAuthenticationprovider((account.getAuthenticationProvider() == null) ? "" : account.getAuthenticationProvider())
+ .setAuthenticationprovidertype((account.getAuthenticationProviderType() == null) ? "" : account.getAuthenticationProviderType())
+ .setAccountMark((account.getAccountMark() != null) ? account.getAccountMark() : "").setAccountName((account.getAccountName() != null) ? account.getAccountName() : "")
+ .setAvatar((account.getAvatar() != null) ? account.getAvatar() : "").setCreationTimestamp((account.getCreationTimestamp() != null) ? account.getCreationTimestamp() : 0)
+ .setQrCode((account.getQrCode() != null) ? account.getQrCode() : "")
+ .setUsername(account.getUsername()).build());
+ }
+
+ accountsListBuilder.build();
+
+ AccountsResponse response = (errorResponse == null) ? AccountsResponse.newBuilder().setAccountsList(accountsListBuilder)
+ .build() : AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ }
+ }
+
+ @Override
+ @Permitted(role = RoleConstants.ANY)
+ public void searchByEmail(SearchByEmailRequest request,
+ StreamObserver responseObserver) {
+
+ logger.info("Search By Email Endpoint.");
+ logger.info("");
+
+ String email = request.getEmail().toLowerCase();
+
+ logger.info("Email : " + email);
+
+ List accountsList = null;
+ String nextPageState = null;
+ ErrorResponse errorResponse = null;
+
+ accountsList = accountService.getAccountByAuthenticationProvider(email);
+ logger.info("Account-list : {}", accountsList);
+
+
+
+ if (accountsList == null) {
+ logger.info("Account list in null.");
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else if (accountsList.size() == 0) {
+ logger.info("Account list size is zero.");
+
+
+ errorResponse = ErrorResponse.newBuilder().setCause(ErrorResponse.Cause.ACCOUNTS_NOT_FOUND)
+ .setMessage("Accounts are not found").build();
+
+ AccountsResponse response = AccountsResponse.newBuilder().setError(errorResponse).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ } else {
+
+ AccountsList.Builder accountsListBuilder = AccountsList.newBuilder();
+ for (Account account : accountsList) {
+
+ accountsListBuilder.addAccountDetails(AccountDetails.newBuilder().setFirstName((account.getFirstName() == null) ? "" : account.getFirstName())
+ .setLastName((account.getLastName() == null) ? "" : account.getLastName()).setProfileId((account.getProfileId() == null) ? "" : account.getProfileId().toString())
+ .setAccountId(account.getAccountId().toString()).setAuthenticationprovider((account.getAuthenticationProvider() == null) ? "" : account.getAuthenticationProvider())
+ .setAuthenticationprovidertype((account.getAuthenticationProviderType() == null) ? "" : account.getAuthenticationProviderType())
+ .setAccountMark((account.getAccountMark() != null) ? account.getAccountMark() : "").setAccountName((account.getAccountName() != null) ? account.getAccountName() : "")
+ .setAvatar((account.getAvatar() != null) ? account.getAvatar() : "").setCreationTimestamp((account.getCreationTimestamp() != null) ? account.getCreationTimestamp() : 0)
+ .setQrCode((account.getQrCode() != null) ? account.getQrCode() : "")
+ .setUsername(account.getUsername()).build());
+ }
+
+ accountsListBuilder.build();
+
+ AccountsResponse response = (errorResponse == null) ? AccountsResponse.newBuilder().setAccountsList(accountsListBuilder)
+ .build() : AccountsResponse.newBuilder().setError(errorResponse).build();
+
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+ return;
+
+ }
+ }
+
+
+}
diff --git a/src/main/java/biz/nynja/account/services/admin/repository/AdminAccountRepository.java b/src/main/java/biz/nynja/account/services/admin/repository/AdminAccountRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..faf8afc50983dd4188d47da4871ce077ecd9e748
--- /dev/null
+++ b/src/main/java/biz/nynja/account/services/admin/repository/AdminAccountRepository.java
@@ -0,0 +1,212 @@
+package biz.nynja.account.services.admin.repository;
+
+import biz.nynja.account.models.Account;
+import com.datastax.driver.core.PagingState;
+import com.datastax.driver.core.Statement;
+import com.datastax.driver.core.querybuilder.QueryBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.cassandra.core.CassandraTemplate;
+import org.springframework.data.cassandra.core.query.CassandraPageRequest;
+import org.springframework.data.cassandra.core.query.Criteria;
+import org.springframework.data.cassandra.core.query.Query;
+import org.springframework.data.domain.Slice;
+import org.springframework.stereotype.Service;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * This Admin Account Repository contains account search functions for
+ * market admin panel to filter accounts while broadcasting message
+ *
+ * @author Jayendra
+ * @since 2019-12-04
+ */
+
+
+@Service
+public class AdminAccountRepository {
+
+ @Autowired
+ private CassandraTemplate cassandraTemplate;
+
+ private static final Class ENTITY_CLASS = Account.class;
+ private static final Logger logger = LoggerFactory.getLogger(AdminAccountRepository.class);
+
+
+ public List getAccountByAccountId(UUID accountId) {
+
+ Statement statement = QueryBuilder.select().from("account")
+ .where(QueryBuilder.eq("accountid", accountId));
+
+ return cassandraTemplate.select(statement, ENTITY_CLASS);
+ }
+
+ public List getAccountByAuthenticationProvider(String authenticationprovider) {
+
+ Statement statement = QueryBuilder.select().from("accountbyauthenticationprovider")
+ .where(QueryBuilder.eq("authenticationprovider", authenticationprovider));
+
+ return cassandraTemplate.select(statement, ENTITY_CLASS);
+
+ }
+
+ public List getAccountByUsername(String username) {
+
+ Statement statement = QueryBuilder.select().from("accountbyusername")
+ .where(QueryBuilder.eq("username", username));
+
+ return cassandraTemplate.select(statement, ENTITY_CLASS);
+
+ }
+
+ public List getAccountByFirstname(String firstname) {
+
+ Statement statement = QueryBuilder.select().from("accountbyfirstname")
+ .where(QueryBuilder.eq("firstname", firstname));
+
+ return cassandraTemplate.select(statement, ENTITY_CLASS);
+
+ }
+
+ public List getAccountByLastname(String lastname) {
+
+ Statement statement = QueryBuilder.select().from("accountbylastname")
+ .where(QueryBuilder.eq("lastname", lastname));
+
+ return cassandraTemplate.select(statement, ENTITY_CLASS);
+
+ }
+
+
+ public List getAllAccounts() {
+ String getAllAccounts = "SELECT * FROM " + cassandraTemplate.getTableName(ENTITY_CLASS).toString() + "";
+ return (List) cassandraTemplate.select(getAllAccounts, ENTITY_CLASS);
+ }
+
+ public List getAccountByIds(UUID[] acccountIds) {
+
+ Query query = Query.query(Criteria.where("accountid").in(acccountIds));
+ return (List) cassandraTemplate.select(query, ENTITY_CLASS);
+ }
+
+
+ public long getAllAccountsSize() {
+
+ return cassandraTemplate.count(ENTITY_CLASS);
+
+ }
+
+ public List getAccountsByCreationTimeStamp(long fromCreationTime, long toCreationTime) {
+
+ Statement statement = QueryBuilder.select().from("accountbycreationtimestamp")
+ .where(QueryBuilder.gte("creationtimestamp", fromCreationTime))
+ .and(QueryBuilder.lte("creationtimestamp", toCreationTime)).allowFiltering();
+
+ return cassandraTemplate.select(statement, ENTITY_CLASS);
+ }
+
+
+ public Map getAccountsByCreationTimeStampPagination(long fromCreationTime, long toCreationTime, int fetchSize, String pageState) {
+
+ Statement statement = QueryBuilder.select().from("accountbycreationtimestamp")
+ .where(QueryBuilder.gte("creationtimestamp", fromCreationTime))
+ .and(QueryBuilder.lte("creationtimestamp", toCreationTime)).allowFiltering().setFetchSize(fetchSize);
+
+ if (pageState != null) {
+ statement.setPagingState(PagingState.fromString(pageState));
+ }
+
+ Slice accounts = cassandraTemplate.slice(statement, ENTITY_CLASS);
+ List accountsList = accounts.getContent();
+
+
+ if (accountsList != null) {
+ logger.info("Content Size : {}", accountsList.size());
+ }
+
+ logger.info("Accounts has next : {}", accounts.hasNext());
+
+ Map accountsPagedData = new HashMap<>(2);
+
+ String nextPageState = null;
+
+ if (accountsList == null || accountsList.size() == 0) {
+ logger.info("No more content in accounts pagination");
+ System.out.println("");
+ System.out.println("No more data in accounts pagination");
+ return null;
+
+ } else if (accountsList.size() < fetchSize) {
+ logger.info("No more content in next page");
+ System.out.println("");
+ System.out.println("No more data in next page");
+
+ nextPageState = "end";
+
+ } else {
+
+ CassandraPageRequest next = (CassandraPageRequest) accounts.nextPageable();
+ nextPageState = next.getPagingState().toString();
+ }
+
+ accountsPagedData.put("pageState", nextPageState);
+ accountsPagedData.put("accounts", accountsList);
+
+ return accountsPagedData;
+
+ }
+
+
+ public Map getAccountsByPagination(int fetchSize, String pageState) {
+
+ com.datastax.driver.core.Statement select = QueryBuilder.select().from(cassandraTemplate.getTableName(ENTITY_CLASS).toString()).setFetchSize(fetchSize);
+
+ if (pageState != null) {
+ select.setPagingState(PagingState.fromString(pageState));
+ }
+
+ Slice accounts = cassandraTemplate.slice(select, ENTITY_CLASS);
+ List accountsList = accounts.getContent();
+
+ if (accountsList != null) {
+ logger.info("Content Size : {}", accountsList.size());
+ }
+ logger.info("Accounts has next : {}", accounts.hasNext());
+
+
+ Map accountsPagedData = new HashMap<>(2);
+
+ String nextPageState = null;
+
+ if (accountsList == null || accountsList.size() == 0) {
+ logger.info("No more content in accounts pagination");
+ System.out.println("");
+ System.out.println("No more data in accounts pagination");
+ return null;
+
+ } else if (accountsList.size() < fetchSize) {
+ logger.info("No more content in next page");
+ System.out.println("");
+ System.out.println("No more data in next page");
+
+ nextPageState = "end";
+
+ } else {
+
+ CassandraPageRequest next = (CassandraPageRequest) accounts.nextPageable();
+ nextPageState = next.getPagingState().toString();
+ }
+
+ accountsPagedData.put("pageState", nextPageState);
+ accountsPagedData.put("accounts", accountsList);
+
+ return accountsPagedData;
+ }
+
+
+}
+
diff --git a/src/main/java/biz/nynja/account/services/decomposition/AccountCreator.java b/src/main/java/biz/nynja/account/services/decomposition/AccountCreator.java
index cdcb8ea11eb4fbb575cc122c8e353a2f7d260d5a..38980c69a04da1486e86f234154dc6565455d395 100644
--- a/src/main/java/biz/nynja/account/services/decomposition/AccountCreator.java
+++ b/src/main/java/biz/nynja/account/services/decomposition/AccountCreator.java
@@ -68,6 +68,11 @@ public class AccountCreator {
phoneNumberNormalizer.getNormalizedPhoneNumber(request.getAuthenticationProvider()))
.build();
request = newRequest;
+ } else if (request.getAuthenticationType() == AuthenticationType.EMAIL) {
+ request = request
+ .toBuilder()
+ .setAuthenticationProvider(request.getAuthenticationProvider().toLowerCase())
+ .build();
}
CreatePendingAccountResponse response = updateAndValidatePendingAccountCreation(request);
diff --git a/src/main/proto/admin_account2.proto b/src/main/proto/admin_account2.proto
new file mode 100644
index 0000000000000000000000000000000000000000..86e35723565b2dc2db8ebaee91dcac0d0bfbcd45
--- /dev/null
+++ b/src/main/proto/admin_account2.proto
@@ -0,0 +1,144 @@
+syntax = "proto3";
+
+option java_package = "biz.nynja.account2.admin.grpc";
+option java_multiple_files = true;
+
+
+/* Each user could have one or more roles listed bellow: */
+enum Role {
+ UNKNOWN_ROLE = 0;
+ USER = 1; // regular user
+ ACCOUNT_ADMIN = 2; // this role must be treated as account admin
+ AUTH_SERVICE = 3; // role used by the authentication service
+ AUTHENTICATION_ADMIN = 4; // this role must be treated as authentication admin
+}
+
+message Date {
+ int32 year = 1; // year in format YYYY i.e 2019
+ int32 month = 2; //month: from 1(January) to 12(December)
+ int32 day = 3; // valid day with value from 1 to 31
+}
+
+
+enum AccessStatus {
+ UNKNOWN_ACCESS_STATUS = 0;
+ ENABLED = 1; // Regular running user.
+ SUSPENDED = 2; // Behaves exactly as deleted for certain period.
+ DISABLED = 3; // All requests from such user are discarded including login.
+}
+
+enum ContactType {
+ MISSING_CONTACT_TYPE = 0;
+ PHONE_CONTACT = 1;
+ EMAIL_CONTACT = 2;
+ FACEBOOK_CONTACT = 3;
+ GOOGLEPLUS_CONTACT = 4;
+ TWITTER_CONTACT = 5;
+}
+
+message ContactDetails {
+ ContactType type = 1;
+ string value = 2; // depends on the contact type. For example phone number when type is PHONE etc.
+ /* The label is not mandatory. It could be used only when type field is set to 'PHONE_CONTACT'.
+ * The value of this label should clarify the phone number: for example "work", "home" etc. */
+ string label = 3;
+ string countrySelector = 4; // This is country selector for phone number contact info (selectors like BG, US and so on)
+}
+
+message AccountDetails {
+ string accountId = 1; // account id
+ string profileId = 2; // profile id
+ string firstName = 3; // User's first name
+ string lastName = 4; // User's last name
+ string username = 5; // Unique identifier
+ string authenticationprovider = 6;
+ string authenticationprovidertype = 7;
+ AccessStatus accessStatus = 8;
+ string accountMark = 9;
+ string accountName = 10;
+ string avatar = 11;
+ Date birthday = 12;
+ repeated ContactDetails contactsInfo = 13; // Contacts that belong to the account
+ int64 creationTimestamp = 14; // Creation timestamp is set when account is created.
+ int64 lastUpdateTimestamp = 15; // Update timestamp is '0' if account is never updated.
+ string qrCode = 16; // Unique identifier that is used for generation of the QR
+ repeated Role roles = 17; // Array of Roles that belongs to the account
+}
+
+message AccountsList {
+ repeated AccountDetails accountDetails = 1;
+ string nextPageState = 2; // pageState of next page if pagination is enabled in request.
+
+}
+
+message AccountsResponse {
+ oneof result {
+ ErrorResponse error = 1;
+ AccountsList accountsList = 2;
+ }
+}
+
+message ErrorResponse {
+ enum Cause {
+ INTERNAL_SERVER_ERROR = 0;
+ INVALID_INPUT = 1;
+ ACCOUNTS_NOT_FOUND = 2;
+ }
+ Cause cause = 1;
+ string message = 2;
+}
+
+message GetAllAccountsRequest {
+
+ repeated string accountIds = 1; // Fetch details by given accountids
+ int32 allAccounts = 2; // Fetch all account details
+ int32 pagination = 3; // Do pagination 1 -> true, 0 -> false
+ int32 limit = 4; // (required only in case of pagination) Number of records in a page
+ string pageState = 5; // (required only in case of pagination) Defines next page, pageState = 'nil' incase of first page.
+
+}
+
+message SearchByUsernameRequest {
+ string username = 1;
+}
+
+message SearchByFirstNameRequest {
+ string firstName = 1;
+}
+
+message SearchByLastNameRequest {
+ string lastName = 1;
+}
+
+message SearchByPhoneNumberRequest {
+ string phoneNumber = 1;
+}
+
+message SearchByEmailRequest {
+ string email = 1;
+}
+
+message SearchByAccountIdRequest {
+ string accountId = 1;
+}
+
+message GetAccountsByCreationTime {
+ int64 fromCreationTime = 1;
+ int64 toCreationTime = 2;
+ int32 pagination = 3; // Do pagination 1 -> true, 0 -> false
+ int32 limit = 4; // (required only in case of pagination) Number of records in a page
+ string pageState = 5; // (required only in case of pagination) Defines next page, pageState = 'nil' incase of first page.
+}
+
+service AdminAccountService2 {
+ rpc getAccounts (GetAllAccountsRequest) returns (AccountsResponse);
+ rpc getAccountsByCreationTime (GetAccountsByCreationTime) returns (AccountsResponse);
+ rpc searchByUsername (SearchByUsernameRequest) returns (AccountsResponse);
+ rpc searchByFirstname (SearchByFirstNameRequest) returns (AccountsResponse);
+ rpc searchByLastname (SearchByLastNameRequest) returns (AccountsResponse);
+ rpc searchByPhoneNumber (SearchByPhoneNumberRequest) returns (AccountsResponse);
+ rpc searchByEmail (SearchByEmailRequest) returns (AccountsResponse);
+ rpc searchByAccountId (SearchByAccountIdRequest) returns (AccountsResponse);
+}
+
+
diff --git a/src/test/java/biz/nynja/account/services/AccountServiceTests.java b/src/test/java/biz/nynja/account/services/AccountServiceTests.java
index 148df8dd1465d7bf09e2d816b99ff2bae34cad22..b1a1f30ced5c9015b41a8b4c9ec400a9d49e82cb 100644
--- a/src/test/java/biz/nynja/account/services/AccountServiceTests.java
+++ b/src/test/java/biz/nynja/account/services/AccountServiceTests.java
@@ -111,7 +111,7 @@ import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
/**
- * AccountService unit tests.
+ * AdminAccountRepository unit tests.
*/
@RunWith(SpringRunner.class)