diff --git a/dal/hibernate-dal/hibernate-cache/src/main/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountLocksRepository.java b/dal/hibernate-dal/hibernate-cache/src/main/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountLocksRepository.java index 91a81cb..88005ab 100644 --- a/dal/hibernate-dal/hibernate-cache/src/main/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountLocksRepository.java +++ b/dal/hibernate-dal/hibernate-cache/src/main/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountLocksRepository.java @@ -8,7 +8,7 @@ import com.nexblocks.authguard.dal.model.AccountLockDO; import java.util.Collection; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class HibernateAccountLocksRepository extends AbstractHibernateRepository @@ -24,11 +24,10 @@ public HibernateAccountLocksRepository(final ReactiveQueryExecutor queryExecutor } @Override - public CompletableFuture> findByAccountId(final long accountId) { + public Uni> findByAccountId(final long accountId) { return queryExecutor .getAList(session -> session.createNamedQuery(GET_BY_ACCOUNT_ID, AccountLockDO.class) .setParameter(ACCOUNT_ID_FIELD, accountId)) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } } diff --git a/dal/hibernate-dal/hibernate-cache/src/main/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountTokensRepository.java b/dal/hibernate-dal/hibernate-cache/src/main/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountTokensRepository.java index a4e1545..86f372e 100644 --- a/dal/hibernate-dal/hibernate-cache/src/main/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountTokensRepository.java +++ b/dal/hibernate-dal/hibernate-cache/src/main/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountTokensRepository.java @@ -8,7 +8,7 @@ import com.nexblocks.authguard.dal.model.AccountTokenDO; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class HibernateAccountTokensRepository extends AbstractHibernateRepository implements AccountTokensRepository { @@ -22,21 +22,20 @@ public HibernateAccountTokensRepository(final ReactiveQueryExecutor queryExecuto } @Override - public CompletableFuture> getByToken(final String token) { + public Uni> getByToken(final String token) { return queryExecutor.getSingleResult(session -> session.createNamedQuery(GET_BY_TOKEN, AccountTokenDO.class) - .setParameter(TOKEN_FIELD, token)) - .subscribeAsCompletionStage(); + .setParameter(TOKEN_FIELD, token)); } @Override - public CompletableFuture> deleteToken(final String token) { + public Uni> deleteToken(final String token) { return getByToken(token) - .thenCompose(opt -> { + .flatMap(opt -> { if (opt.isPresent()) { - return delete(opt.get().getId()).subscribeAsCompletionStage(); + return delete(opt.get().getId()); } - return CompletableFuture.completedFuture(Optional.empty()); + return Uni.createFrom().item(Optional.empty()); }); } } diff --git a/dal/hibernate-dal/hibernate-cache/src/main/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateSessionsRepository.java b/dal/hibernate-dal/hibernate-cache/src/main/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateSessionsRepository.java index 07237a1..eea825b 100644 --- a/dal/hibernate-dal/hibernate-cache/src/main/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateSessionsRepository.java +++ b/dal/hibernate-dal/hibernate-cache/src/main/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateSessionsRepository.java @@ -9,7 +9,7 @@ import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class HibernateSessionsRepository extends AbstractHibernateRepository implements SessionsRepository { @@ -23,30 +23,28 @@ public HibernateSessionsRepository(final ReactiveQueryExecutor queryExecutor) { } @Override - public CompletableFuture> getByToken(final String token) { + public Uni> getByToken(final String token) { return queryExecutor.getSingleResult(session -> session.createNamedQuery(GET_BY_TOKEN, SessionDO.class) - .setParameter(TOKEN_FIELD, token)) - .subscribeAsCompletionStage(); + .setParameter(TOKEN_FIELD, token)); } @Override - public CompletableFuture> deleteByToken(final String sessionToken) { + public Uni> deleteByToken(final String sessionToken) { return getByToken(sessionToken) - .thenCompose(opt -> { + .flatMap(opt -> { if (opt.isPresent()) { - return delete(opt.get().getId()).subscribeAsCompletionStage(); + return delete(opt.get().getId()); } - return CompletableFuture.completedFuture(Optional.empty()); + return Uni.createFrom().item(Optional.empty()); }); } @Override - public CompletableFuture> findByAccountId(final long accountId, final String domain) { + public Uni> findByAccountId(final long accountId, final String domain) { return queryExecutor.getAList(session -> session.createNamedQuery(GET_BY_ACCOUNT_ID, SessionDO.class) .setParameter(CommonFields.DOMAIN, domain) - .setParameter(CommonFields.ACCOUNT_ID, accountId)) - .subscribeAsCompletionStage(); + .setParameter(CommonFields.ACCOUNT_ID, accountId)); } } diff --git a/dal/hibernate-dal/hibernate-cache/src/test/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountLocksRepositoryTest.java b/dal/hibernate-dal/hibernate-cache/src/test/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountLocksRepositoryTest.java index 5c9dbf1..3ddb1ba 100644 --- a/dal/hibernate-dal/hibernate-cache/src/test/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountLocksRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-cache/src/test/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountLocksRepositoryTest.java @@ -55,13 +55,13 @@ void getByToken() { .build(); final AccountLockDO persisted = repository.save(accountLock).subscribeAsCompletionStage().join(); - final Collection retrieved = repository.findByAccountId(accountLock.getAccountId()).join(); + final Collection retrieved = repository.findByAccountId(accountLock.getAccountId()).subscribeAsCompletionStage().join(); assertThat(retrieved).containsOnly(persisted); } @Test void getByTokenNonExistent() { - assertThat(repository.findByAccountId(0).join()).isEmpty(); + assertThat(repository.findByAccountId(0).subscribeAsCompletionStage().join()).isEmpty(); } } \ No newline at end of file diff --git a/dal/hibernate-dal/hibernate-cache/src/test/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountTokensRepositoryTest.java b/dal/hibernate-dal/hibernate-cache/src/test/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountTokensRepositoryTest.java index 48b08c7..21845ba 100644 --- a/dal/hibernate-dal/hibernate-cache/src/test/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountTokensRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-cache/src/test/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateAccountTokensRepositoryTest.java @@ -71,13 +71,13 @@ void getByToken() { .build(); final AccountTokenDO persisted = repository.save(accountToken).subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getByToken(token).join(); + final Optional retrieved = repository.getByToken(token).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @Test void getByTokenNonExistent() { - assertThat(repository.getByToken("nothing").join()).isEmpty(); + assertThat(repository.getByToken("nothing").subscribeAsCompletionStage().join()).isEmpty(); } } \ No newline at end of file diff --git a/dal/hibernate-dal/hibernate-cache/src/test/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateSessionsRepositoryTest.java b/dal/hibernate-dal/hibernate-cache/src/test/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateSessionsRepositoryTest.java index af5117e..312bf0c 100644 --- a/dal/hibernate-dal/hibernate-cache/src/test/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateSessionsRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-cache/src/test/java/com/nexblocks/authguard/dal/hibernate/cache/HibernateSessionsRepositoryTest.java @@ -45,7 +45,7 @@ public void getByToken() { .build(); final SessionDO persisted = repository.save(session).subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getByToken(token).join(); + final Optional retrieved = repository.getByToken(token).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } diff --git a/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/ByteArrayTypeContributor.java b/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/ByteArrayTypeContributor.java new file mode 100644 index 0000000..b1cf3f6 --- /dev/null +++ b/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/ByteArrayTypeContributor.java @@ -0,0 +1,22 @@ +package com.nexblocks.authguard.dal.hibernate.common; + +import org.hibernate.boot.model.TypeContributions; +import org.hibernate.boot.model.TypeContributor; +import org.hibernate.service.ServiceRegistry; +import org.hibernate.type.BasicType; +import org.hibernate.type.descriptor.java.PrimitiveByteArrayJavaType; +import org.hibernate.type.descriptor.jdbc.VarbinaryJdbcType; +import org.hibernate.type.internal.BasicTypeImpl; + + +public class ByteArrayTypeContributor implements TypeContributor { + @Override + public void contribute(TypeContributions typeContributions, ServiceRegistry serviceRegistry) { + BasicType byteArrayType = new BasicTypeImpl<>( + new PrimitiveByteArrayJavaType(), + new VarbinaryJdbcType() + ); + + typeContributions.contributeType(byteArrayType); + } +} diff --git a/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/QueryExecutor.java b/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/QueryExecutor.java index 43d0ca3..65aca67 100644 --- a/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/QueryExecutor.java +++ b/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/QueryExecutor.java @@ -7,7 +7,7 @@ import jakarta.persistence.NoResultException; import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Consumer; import java.util.function.Function; @@ -20,27 +20,27 @@ public QueryExecutor(final SessionProvider sessionProvider) { this.sessionProvider = sessionProvider; } - public CompletableFuture persistAndReturn(final T entity) { + public Uni persistAndReturn(final T entity) { return doInNewTransaction(session -> session.persist(entity)) - .thenApply(ignored -> entity); + .map(ignored -> entity); } - public CompletableFuture> updateAndReturn(final T entity) { + public Uni> updateAndReturn(final T entity) { return doInNewTransaction(session -> session.update(entity)) - .thenApply(ignored -> Optional.of(entity)); + .map(ignored -> Optional.of(entity)); } - public CompletableFuture> getById(final String id, final Class entityType) { + public Uni> getById(final String id, final Class entityType) { return inNewTransaction(session -> session.get(entityType, id)) - .thenApply(Optional::ofNullable); + .map(Optional::ofNullable); } - public CompletableFuture> getById(final Long id, final Class entityType) { + public Uni> getById(final Long id, final Class entityType) { return inNewTransaction(session -> session.get(entityType, id)) - .thenApply(Optional::ofNullable); + .map(Optional::ofNullable); } - public CompletableFuture> getSingleResult(final Function> sessionQuery) { + public Uni> getSingleResult(final Function> sessionQuery) { return inNewTransaction(session -> { final Query query = sessionQuery.apply(session); @@ -52,14 +52,14 @@ public CompletableFuture> getSingleResult(final Function CompletableFuture> getAList(final Function> sessionQuery) { + public Uni> getAList(final Function> sessionQuery) { return inNewTransaction(session -> { final Query query = sessionQuery.apply(session); return query.getResultList(); }); } - public CompletableFuture> getAList(final Function> sessionQuery, + public Uni> getAList(final Function> sessionQuery, final int limit) { return inNewTransaction(session -> { final Query query = sessionQuery.apply(session); @@ -69,33 +69,32 @@ public CompletableFuture> getAList(final Function> }); } - public CompletableFuture> deleteById(final String id, final Class entityType) { + public Uni> deleteById(final String id, final Class entityType) { return getById(id, entityType) - .thenCompose(retrieved -> { + .flatMap(retrieved -> { if (retrieved.isPresent()) { return doInNewTransaction(session -> session.delete(retrieved.get())) - .thenApply(ignored -> retrieved); + .map(ignored -> retrieved); } else { - return CompletableFuture.completedFuture(Optional.empty()); + return Uni.createFrom().item(Optional.empty()); } }); } - public CompletableFuture> deleteById(final Long id, final Class entityType) { + public Uni> deleteById(final Long id, final Class entityType) { return getById(id, entityType) - .thenCompose(retrieved -> { + .flatMap(retrieved -> { if (retrieved.isPresent()) { return doInNewTransaction(session -> session.delete(retrieved.get())) - .thenApply(ignored -> retrieved); + .map(ignored -> retrieved); } else { - return CompletableFuture.completedFuture(Optional.empty()); + return Uni.createFrom().item(Optional.empty()); } }); } - CompletableFuture doInNewTransaction(final Consumer consumer) { - return CompletableFuture.runAsync(() -> { - + Uni doInNewTransaction(final Consumer consumer) { + return Uni.createFrom().item(() -> { try (Session session = sessionProvider.newBlockingSession()) { session.beginTransaction(); @@ -103,11 +102,13 @@ CompletableFuture doInNewTransaction(final Consumer consumer) { session.getTransaction().commit(); } + + return null; }); } - CompletableFuture inNewTransaction(final Function function) { - return CompletableFuture.supplyAsync(() -> { + Uni inNewTransaction(final Function function) { + return Uni.createFrom().item(() -> { final Session session = sessionProvider.newBlockingSession(); session.beginTransaction(); diff --git a/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/ReactiveQueryExecutor.java b/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/ReactiveQueryExecutor.java index 2b27a2a..22c9c67 100644 --- a/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/ReactiveQueryExecutor.java +++ b/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/ReactiveQueryExecutor.java @@ -1,23 +1,25 @@ package com.nexblocks.authguard.dal.hibernate.common; +import com.google.inject.Inject; import io.smallrye.mutiny.Uni; -import jakarta.inject.Inject; import org.hibernate.reactive.mutiny.Mutiny; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Optional; import java.util.function.Function; public class ReactiveQueryExecutor { private final Mutiny.SessionFactory sessionFactory; - @Inject public ReactiveQueryExecutor(final Mutiny.SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } + public Mutiny.SessionFactory getSessionFactory() { + return sessionFactory; + } + @Inject public ReactiveQueryExecutor(final SessionProvider sessionProvider) { this.sessionFactory = sessionProvider.getFactory(); diff --git a/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/SessionProvider.java b/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/SessionProvider.java index fcd0999..367a1a3 100644 --- a/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/SessionProvider.java +++ b/dal/hibernate-dal/hibernate-common/src/main/java/com/nexblocks/authguard/dal/hibernate/common/SessionProvider.java @@ -25,6 +25,12 @@ public SessionProvider(final Properties hibernateProperties) { final Configuration configuration = entityMapping(new Configuration()) .addProperties(hibernateProperties); + Properties extra = new Properties(); + +// extra.put("hibernate.type_contributors", ByteArrayTypeContributor.class.getCanonicalName()); + + configuration.addProperties(extra); + factory = configuration.buildSessionFactory( new ReactiveServiceRegistryBuilder() .applySettings(configuration.getProperties() ) diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAccountsRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAccountsRepository.java index 09391e2..60bf58b 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAccountsRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAccountsRepository.java @@ -6,12 +6,15 @@ import com.nexblocks.authguard.dal.model.AccountDO; import com.nexblocks.authguard.dal.model.UserIdentifierDO; import com.nexblocks.authguard.dal.persistence.AccountsRepository; +import com.nexblocks.authguard.service.exceptions.ServiceConflictException; +import com.nexblocks.authguard.service.exceptions.codes.ErrorCode; import io.smallrye.mutiny.Uni; +import org.hibernate.exception.ConstraintViolationException; import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionException; import java.util.stream.Collectors; public class HibernateAccountsRepository extends AbstractHibernateRepository @@ -30,17 +33,27 @@ public class HibernateAccountsRepository extends AbstractHibernateRepository save(final AccountDO entity) { - return super.save(entity); + public Uni save(final AccountDO account) { + return super.save(account) + .onFailure() + .transform(e -> { + if (e instanceof ConstraintViolationException constraintException) { + return mapException(constraintException); + } + + return e; + }); } @Override @@ -48,7 +61,7 @@ public Uni> update(final AccountDO entity) { return super.getById(entity.getId()) .map(Optional::get) .map(existing -> { - final Set newIdentifiers = entity.getIdentifiers() + Set newIdentifiers = entity.getIdentifiers() .stream() .map(UserIdentifierDO::getIdentifier) .collect(Collectors.toSet()); @@ -61,7 +74,7 @@ public Uni> update(final AccountDO entity) { }) .flatMap(difference -> super.update(entity) .map(ignored -> difference)) - .flatMap(identifiers -> Uni.createFrom().completionStage(userIdentifiersRepository.deleteAll(identifiers))) + .flatMap(userIdentifiersRepository::deleteAll) .map(ignored -> Optional.of(entity)); } @@ -71,17 +84,15 @@ public Uni> getById(final long id) { } @Override - public CompletableFuture> getByExternalId(final String externalId) { - return queryExecutor.getSingleResult(GET_BY_EXTERNAL_ID, AccountDO.class, EXTERNAL_ID_FIELD, externalId) - .subscribeAsCompletionStage(); + public Uni> getByExternalId(final String externalId) { + return queryExecutor.getSingleResult(GET_BY_EXTERNAL_ID, AccountDO.class, EXTERNAL_ID_FIELD, externalId); } @Override - public CompletableFuture> getByEmail(final String email, final String domain) { + public Uni> getByEmail(final String email, final String domain) { return queryExecutor.getSingleResult(GET_BY_EMAIL, AccountDO.class, EMAIL_FIELD, email, - DOMAIN_FIELD, domain) - .subscribeAsCompletionStage(); + DOMAIN_FIELD, domain); } @Override @@ -97,4 +108,75 @@ public Uni> getByRole(final String role, final String domain) { ROLE_FIELD, role, DOMAIN_FIELD, domain); } + + private RuntimeException mapExceptions(final Throwable e) { + final Throwable effectiveException = e instanceof CompletionException + ? e.getCause() + : e; + + if (effectiveException.getCause() != null && effectiveException.getCause() instanceof ConstraintViolationException) { + return mapException((ConstraintViolationException) effectiveException.getCause()); + } + + return new RuntimeException(e); + } + + private RuntimeException mapException(final ConstraintViolationException e) { + // check the constraint name first + final String constraintName = e.getConstraintName(); + RuntimeException mappedException; + + if (constraintName != null) { + mappedException = mapConstraintName(constraintName.toLowerCase()); + + if (mappedException != null) { + return mappedException; + } + } + + // then the first cause message + final String outerCauseMessage = Optional.of(e.getCause()) + .map(Throwable::getMessage) + .map(String::toLowerCase) + .orElse(null); + + if (outerCauseMessage != null) { + mappedException = mapConstraintName(outerCauseMessage); + + if (mappedException != null) { + return mappedException; + } + } + + // then the inner cause message + final String innerCauseMessage = Optional.of(e.getCause()) + .map(Throwable::getCause) + .map(Throwable::getMessage) + .map(String::toLowerCase) + .orElse(null); + + if (innerCauseMessage != null) { + mappedException = mapConstraintName(innerCauseMessage); + + if (mappedException != null) { + return mappedException; + } + } + + return new RuntimeException(e); + } + + private RuntimeException mapConstraintName(final String constraintName) { + if (constraintName.contains("email_dup")) { + return new ServiceConflictException(ErrorCode.ACCOUNT_DUPLICATE_EMAILS, "Email already exists"); + } else if (constraintName.contains("backup_email_dup")) { + return new ServiceConflictException(ErrorCode.ACCOUNT_DUPLICATE_EMAILS, "Backup email already exists"); + } else if (constraintName.contains("phone_number_dup")) { + return new ServiceConflictException(ErrorCode.ACCOUNT_DUPLICATE_PHONE_NUMBER, "Phone number already exists"); + } else if (constraintName.contains("identifier_dup")) { + return new ServiceConflictException(ErrorCode.IDENTIFIER_ALREADY_EXISTS, "Identifier already exists"); + } + + return null; + } } diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateApiKeysRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateApiKeysRepository.java index 453105d..386db13 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateApiKeysRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateApiKeysRepository.java @@ -11,7 +11,7 @@ import java.util.Collection; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class HibernateApiKeysRepository extends AbstractHibernateRepository diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAppsRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAppsRepository.java index 7a9f3fa..bcf21cc 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAppsRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAppsRepository.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class HibernateAppsRepository extends AbstractHibernateRepository @@ -38,17 +38,15 @@ public Uni> getById(final long id) { } @Override - public CompletableFuture> getByExternalId(final String externalId) { + public Uni> getByExternalId(final String externalId) { return queryExecutor.getSingleResult(session -> session.createNamedQuery(GET_BY_EXTERNAL_ID, AppDO.class) - .setParameter(EXTERNAL_ID_FIELD, externalId)) - .subscribeAsCompletionStage(); + .setParameter(EXTERNAL_ID_FIELD, externalId)); } @Override - public CompletableFuture> getAllForAccount(final long accountId, final Page page) { + public Uni> getAllForAccount(final long accountId, final Page page) { return queryExecutor.getAList(session -> session.createNamedQuery(GET_BY_ACCOUNT_ID, AppDO.class) .setParameter(ACCOUNT_ID_FIELD, accountId) - .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()) - .subscribeAsCompletionStage(); + .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()); } } diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateClientsRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateClientsRepository.java index 9b159d8..6cbb885 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateClientsRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateClientsRepository.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class HibernateClientsRepository extends AbstractHibernateRepository @@ -42,33 +42,29 @@ public Uni> getById(final long id) { } @Override - public CompletableFuture> getByExternalId(final String externalId) { + public Uni> getByExternalId(final String externalId) { return queryExecutor.getSingleResult(session -> session.createNamedQuery(GET_BY_EXTERNAL_ID, ClientDO.class) - .setParameter(EXTERNAL_ID_FIELD, externalId)) - .subscribeAsCompletionStage(); + .setParameter(EXTERNAL_ID_FIELD, externalId)); } @Override - public CompletableFuture> getAllForAccount(final long accountId, final Page page) { + public Uni> getAllForAccount(final long accountId, final Page page) { return queryExecutor.getAList(session -> session.createNamedQuery(GET_BY_ACCOUNT_ID, ClientDO.class) .setParameter(ACCOUNT_ID_FIELD, accountId) - .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()) - .subscribeAsCompletionStage(); + .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()); } @Override - public CompletableFuture> getByType(final String clientType, final Page page) { + public Uni> getByType(final String clientType, final Page page) { return queryExecutor.getAList(session -> session.createNamedQuery(GET_BY_CLIENT_TYPE, ClientDO.class) .setParameter(CLIENT_TYPE_FIELD, clientType) - .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()) - .subscribeAsCompletionStage(); + .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()); } @Override - public CompletableFuture> getByDomain(final String domain, final Page page) { + public Uni> getByDomain(final String domain, final Page page) { return queryExecutor.getAList(session -> session.createNamedQuery(GET_BY_DOMAIN, ClientDO.class) .setParameter(DOMAIN_FIELD, domain) - .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()) - .subscribeAsCompletionStage(); + .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()); } } diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCredentialsAuditRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCredentialsAuditRepository.java index 6610839..5290e22 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCredentialsAuditRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCredentialsAuditRepository.java @@ -8,7 +8,7 @@ import com.nexblocks.authguard.dal.persistence.CredentialsAuditRepository; import java.util.List; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class HibernateCredentialsAuditRepository extends AbstractHibernateRepository implements CredentialsAuditRepository { @@ -22,9 +22,8 @@ public HibernateCredentialsAuditRepository(final ReactiveQueryExecutor queryExec } @Override - public CompletableFuture> findByCredentialsId(final long credentialsId) { + public Uni> findByCredentialsId(final long credentialsId) { return queryExecutor.getAList(session -> session.createNamedQuery(GET_BY_CREDENTIALS_ID, CredentialsAuditDO.class) - .setParameter(CREDENTIALS_ID_FIELD, credentialsId)) - .subscribeAsCompletionStage(); + .setParameter(CREDENTIALS_ID_FIELD, credentialsId)); } } diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCredentialsRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCredentialsRepository.java index a78a4db..c24e30b 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCredentialsRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCredentialsRepository.java @@ -13,7 +13,7 @@ import java.util.Optional; import java.util.Set; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; import java.util.stream.Collectors; @@ -33,7 +33,7 @@ // } // // @Override -// public CompletableFuture save(final CredentialsDO entity) { +// public Uni save(final CredentialsDO entity) { // return super.save(entity) // .exceptionally(e -> { // throw mapExceptions(e); @@ -41,10 +41,10 @@ // } // // @Override -// public CompletableFuture> update(final CredentialsDO entity) { +// public Uni> update(final CredentialsDO entity) { // return super.getById(entity.getId()) -// .thenApply(Optional::get) -// .thenApply(existing -> { +// .map(Optional::get) +// .map(existing -> { // final Set newIdentifiers = entity.getIdentifiers() // .stream() // .map(UserIdentifierDO::getIdentifier) @@ -56,25 +56,25 @@ // .filter(e -> !newIdentifiers.contains(e.getIdentifier())) // .collect(Collectors.toSet()); // }) -// .thenCompose(difference -> super.update(entity) -// .thenApply(ignored -> difference)) -// .thenCompose(userIdentifiersRepository::deleteAll) -// .thenApply(ignored -> Optional.of(entity)) +// .flatMap(difference -> super.update(entity) +// .map(ignored -> difference)) +// .flatMap(userIdentifiersRepository::deleteAll) +// .map(ignored -> Optional.of(entity)) // .exceptionally(e -> { // throw mapExceptions(e); // }); // } // // @Override -// public CompletableFuture> getById(final long id) { +// public Uni> getById(final long id) { // return queryExecutor // .getSingleResult(session -> session.createNamedQuery(GET_BY_ID, CredentialsDO.class) // .setParameter(CommonFields.ID, id)) -// .thenApply(Function.identity()); +// .map(Function.identity()); // } // // @Override -// public CompletableFuture> findByIdentifier(final String identifier, final String domain) { +// public Uni> findByIdentifier(final String identifier, final String domain) { // return queryExecutor.getSingleResult(session -> session.createNamedQuery(GET_BY_IDENTIFIER, CredentialsDO.class) // .setParameter(IDENTIFIER_FIELD, identifier) // .setParameter(DOMAIN_FIELD, domain)); diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCryptoKeysRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCryptoKeysRepository.java index f70a91b..6a82c35 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCryptoKeysRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCryptoKeysRepository.java @@ -13,7 +13,7 @@ import java.time.Instant; import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class HibernateCryptoKeysRepository extends AbstractHibernateRepository @@ -36,33 +36,30 @@ public Uni> getById(final long id) { } @Override - public CompletableFuture> findByDomain(final String domain, final Page page) { + public Uni> findByDomain(final String domain, final Page page) { return queryExecutor .getAList(session -> session.createNamedQuery(GET_BY_DOMAIN, CryptoKeyDO.class) .setParameter(CommonFields.DOMAIN, domain) - .setParameter(CommonFields.CURSOR, page.getCursor()), page.getCount()) - .subscribeAsCompletionStage(); + .setParameter(CommonFields.CURSOR, page.getCursor()), page.getCount()); } @Override - public CompletableFuture> findByAccountId(final String domain, final long accountId, + public Uni> findByAccountId(final String domain, final long accountId, final Page page) { return queryExecutor .getAList(session -> session.createNamedQuery(GET_BY_ACCOUNT_ID, CryptoKeyDO.class) .setParameter(CommonFields.DOMAIN, domain) - .setParameter(CommonFields.ACCOUNT_ID, accountId) - .setParameter(CommonFields.CURSOR, page.getCursor()), page.getCount()) - .subscribeAsCompletionStage(); + .setParameter(CommonFields.ID, accountId) + .setParameter(CommonFields.CURSOR, page.getCursor()), page.getCount()); } @Override - public CompletableFuture> findByAppId(final String domain, final long appId, + public Uni> findByAppId(final String domain, final long appId, final Page page) { return queryExecutor .getAList(session -> session.createNamedQuery(GET_BY_APP_ID, CryptoKeyDO.class) .setParameter(CommonFields.DOMAIN, domain) - .setParameter(CommonFields.APP_ID, appId) - .setParameter(CommonFields.CURSOR, page.getCursor()), page.getCount()) - .subscribeAsCompletionStage(); + .setParameter(CommonFields.ID, appId) + .setParameter(CommonFields.CURSOR, page.getCursor()), page.getCount()); } } diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateEventsRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateEventsRepository.java index 438c2c3..8f48ac1 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateEventsRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateEventsRepository.java @@ -10,7 +10,7 @@ import java.time.Instant; import java.util.List; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class HibernateEventsRepository extends AbstractHibernateRepository @@ -28,16 +28,15 @@ protected HibernateEventsRepository(final ReactiveQueryExecutor queryExecutor) { } @Override - public CompletableFuture> findByDomainDescending(final String domain, final Page page) { + public Uni> findByDomainDescending(final String domain, final Page page) { return queryExecutor .getAList(session -> session.createNamedQuery(GET_BY_DOMAIN, EventDO.class) .setParameter(DOMAIN_FIELD, domain) - .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()) - .subscribeAsCompletionStage(); + .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()); } @Override - public CompletableFuture> findByDomainAndChannelDescending(final String domain, + public Uni> findByDomainAndChannelDescending(final String domain, final String channel, final Page page) { return queryExecutor @@ -45,7 +44,7 @@ public CompletableFuture> findByDomainAndChannelDescending(final S .setParameter(DOMAIN_FIELD, domain) .setParameter(CHANNEL_FIELD, channel) .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount() - ).subscribeAsCompletionStage(); + ); } } diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateExchangeAttemptsRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateExchangeAttemptsRepository.java index 2ff42b1..5e2a9fc 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateExchangeAttemptsRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateExchangeAttemptsRepository.java @@ -9,7 +9,7 @@ import java.time.Instant; import java.util.Collection; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class HibernateExchangeAttemptsRepository extends AbstractHibernateRepository @@ -28,29 +28,27 @@ protected HibernateExchangeAttemptsRepository(final ReactiveQueryExecutor queryE } @Override - public CompletableFuture> findByEntity(final long entityId) { + public Uni> findByEntity(final long entityId) { return queryExecutor .getAList(session -> session.createNamedQuery(GET_BY_ENTITY, ExchangeAttemptDO.class) .setParameter(ENTITY_ID_FIELD, entityId) ) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } @Override - public CompletableFuture> findByEntityAndTimestamp(final long entityId, + public Uni> findByEntityAndTimestamp(final long entityId, final Instant fromTimestamp) { return queryExecutor .getAList(session -> session.createNamedQuery(GET_BY_ENTITY_FROM_TIMESTAMP, ExchangeAttemptDO.class) .setParameter(ENTITY_ID_FIELD, entityId) .setParameter(TIMESTAMP_FIELD, fromTimestamp) ) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } @Override - public CompletableFuture> findByEntityAndTimestampAndExchange(final long entityId, + public Uni> findByEntityAndTimestampAndExchange(final long entityId, final Instant fromTimestamp, final String fromExchange) { return queryExecutor @@ -59,7 +57,6 @@ public CompletableFuture> findByEntityAndTimestamp .setParameter(TIMESTAMP_FIELD, fromTimestamp) .setParameter(FROM_EXCHANGE_FIELD, fromExchange) ) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } } diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateIdempotencyRecordRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateIdempotencyRecordRepository.java index fd1e218..1e0e2c3 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateIdempotencyRecordRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateIdempotencyRecordRepository.java @@ -9,7 +9,7 @@ import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class HibernateIdempotencyRecordRepository extends AbstractHibernateRepository implements IdempotentRecordsRepository { @@ -25,17 +25,15 @@ public HibernateIdempotencyRecordRepository(final ReactiveQueryExecutor queryExe } @Override - public CompletableFuture> findByKey(final String key) { + public Uni> findByKey(final String key) { return queryExecutor.getAList(session -> session.createNamedQuery(GET_BY_KEY, IdempotentRecordDO.class) - .setParameter(KEY_FIELD, key)) - .subscribeAsCompletionStage(); + .setParameter(KEY_FIELD, key)); } @Override - public CompletableFuture> findByKeyAndEntityType(final String key, final String entityType) { + public Uni> findByKeyAndEntityType(final String key, final String entityType) { return queryExecutor.getSingleResult(session -> session.createNamedQuery(GET_BY_KEY_AND_ENTITY, IdempotentRecordDO.class) .setParameter(KEY_FIELD, key) - .setParameter(ENTITY_TYPE_FIELD, entityType)) - .subscribeAsCompletionStage(); + .setParameter(ENTITY_TYPE_FIELD, entityType)); } } diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernatePermissionsRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernatePermissionsRepository.java index b450070..3d8c232 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernatePermissionsRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernatePermissionsRepository.java @@ -12,7 +12,7 @@ import java.util.Collection; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class HibernatePermissionsRepository extends AbstractHibernateRepository @@ -40,31 +40,28 @@ public Uni> getById(final long id) { } @Override - public CompletableFuture> search(final String group, final String name, final String domain) { + public Uni> search(final String group, final String name, final String domain) { return queryExecutor.getSingleResult(session -> session.createNamedQuery(GET_BY_GROUP_AND_NAME, PermissionDO.class) .setParameter(GROUP_FIELD, group) .setParameter(NAME_FIELD, name) - .setParameter(DOMAIN_FIELD, domain)) - .subscribeAsCompletionStage(); + .setParameter(DOMAIN_FIELD, domain)); } @Override - public CompletableFuture> getAll(final String domain, final Page page) { + public Uni> getAll(final String domain, final Page page) { return queryExecutor.getAList(session -> session.createNamedQuery(GET_ALL, PermissionDO.class) .setParameter(DOMAIN_FIELD, domain) .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } @Override - public CompletableFuture> getAllForGroup(final String group, final String domain, + public Uni> getAllForGroup(final String group, final String domain, final Page page) { return queryExecutor.getAList(session -> session.createNamedQuery(GET_BY_GROUP, PermissionDO.class) .setParameter(GROUP_FIELD, group) .setParameter(DOMAIN_FIELD, domain) .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } } diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateRolesRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateRolesRepository.java index dbebe40..c61ac18 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateRolesRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateRolesRepository.java @@ -12,7 +12,7 @@ import java.util.Collection; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class HibernateRolesRepository extends AbstractHibernateRepository @@ -40,28 +40,25 @@ public Uni> getById(final long id) { } @Override - public CompletableFuture> getAll(final String domain, final Page page) { + public Uni> getAll(final String domain, final Page page) { return queryExecutor.getAList(session -> session.createNamedQuery(GET_ALL, RoleDO.class) .setParameter(DOMAIN_FIELD, domain) .setParameter(CURSOR_FIELD, page.getCursor()), page.getCount()) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } @Override - public CompletableFuture> getByName(final String role, final String domain) { + public Uni> getByName(final String role, final String domain) { return queryExecutor.getSingleResult(session -> session.createNamedQuery(GET_BY_NAME, RoleDO.class) .setParameter(DOMAIN_FIELD, domain) - .setParameter(NAME_FIELD, role)) - .subscribeAsCompletionStage(); + .setParameter(NAME_FIELD, role)); } @Override - public CompletableFuture> getMultiple(final Collection roles, final String domain) { + public Uni> getMultiple(final Collection roles, final String domain) { return queryExecutor.getAList(session -> session.createNamedQuery(GET_MULTIPLE, RoleDO.class) .setParameter(NAMES_FIELD, roles) .setParameter(DOMAIN_FIELD, domain)) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } } diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateTotpKeysRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateTotpKeysRepository.java index daa35b7..5d3fd2b 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateTotpKeysRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateTotpKeysRepository.java @@ -9,7 +9,7 @@ import com.nexblocks.authguard.dal.persistence.TotpKeysRepository; import java.util.List; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class HibernateTotpKeysRepository extends AbstractHibernateRepository @@ -22,12 +22,11 @@ public HibernateTotpKeysRepository(final ReactiveQueryExecutor queryExecutor) { } @Override - public CompletableFuture> findByAccountId(final String domain, final long accountId) { + public Uni> findByAccountId(final String domain, final long accountId) { return queryExecutor .getAList(session -> session.createNamedQuery(GET_BY_ACCOUNT_ID, TotpKeyDO.class) .setParameter(CommonFields.DOMAIN, domain) .setParameter(CommonFields.ACCOUNT_ID, accountId)) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } } diff --git a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateUserIdentifiersRepository.java b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateUserIdentifiersRepository.java index 641268e..26c560b 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateUserIdentifiersRepository.java +++ b/dal/hibernate-dal/hibernate-persistence/src/main/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateUserIdentifiersRepository.java @@ -10,7 +10,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class HibernateUserIdentifiersRepository extends AbstractHibernateRepository { @Inject @@ -18,25 +18,23 @@ public HibernateUserIdentifiersRepository(final ReactiveQueryExecutor queryExecu super(UserIdentifierDO.class, queryExecutor); } - public CompletableFuture deleteAll(final Set identifiers) { + public Uni deleteAll(final Set identifiers) { List>> unis = identifiers.stream() .map(identifier -> queryExecutor.deleteById(identifier.getId(), UserIdentifierDO.class)) .toList(); if (identifiers.isEmpty()) { - return CompletableFuture.completedFuture(true) - .thenAccept(ignored -> {}); + return Uni.createFrom().item(true) + .replaceWith(Uni.createFrom().voidItem()); } return Uni.combine().all().unis(unis) .with(ignored -> true) - .subscribeAsCompletionStage() - .thenAccept(ignored -> {}); + .replaceWith(Uni.createFrom().voidItem()); } public List getAll() { return queryExecutor.getAList(session -> session.createQuery("SELECT iden FROM UserIdentifierDO iden", UserIdentifierDO.class)) - .subscribeAsCompletionStage() - .join(); + .subscribeAsCompletionStage().join(); } } diff --git a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAccountsRepositoryTest.java b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAccountsRepositoryTest.java index 7f761a7..351bfef 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAccountsRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAccountsRepositoryTest.java @@ -91,7 +91,7 @@ public void getByExternalId() { .build(); final AccountDO persisted = repository.save(account).subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getByExternalId(externalId).join(); + final Optional retrieved = repository.getByExternalId(externalId).subscribeAsCompletionStage().join(); assertThat(retrieved.isPresent()).isTrue(); assertThat(retrieved.get()).isEqualTo(persisted); @@ -121,7 +121,7 @@ public void getByEmail() { .build(); final AccountDO persisted = repository.save(account).subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getByEmail(email.getEmail(), account.getDomain()).join(); + final Optional retrieved = repository.getByEmail(email.getEmail(), account.getDomain()).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @@ -149,8 +149,7 @@ public void findByIdentifier() { .build(); final AccountDO persisted = repository.save(account).subscribeAsCompletionStage().join(); - final Optional retrieved = repository.findByIdentifier(identifier, "main") - .subscribeAsCompletionStage().join(); + final Optional retrieved = repository.findByIdentifier(identifier, "main").subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @@ -180,8 +179,7 @@ public void getByRole() { .build(); final AccountDO persisted = repository.save(account).subscribeAsCompletionStage().join(); - final List retrieved = repository.getByRole(role, account.getDomain()) - .subscribeAsCompletionStage().join(); + final List retrieved = repository.getByRole(role, account.getDomain()).subscribeAsCompletionStage().join(); assertThat(retrieved).containsOnly(persisted); } @@ -211,8 +209,7 @@ public void updateEmail() { .build(); final AccountDO persisted = repository.save(account).subscribeAsCompletionStage().join(); - final Optional retrieved = repository.update(newAccount) - .subscribeAsCompletionStage().join(); + final Optional retrieved = repository.update(newAccount).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @@ -254,13 +251,10 @@ public void updatePassword() { .build()) .build(); - final AccountDO persisted = repository.save(credentials) - .subscribeAsCompletionStage().join(); + final AccountDO persisted = repository.save(credentials).subscribeAsCompletionStage().join(); - final Optional updated = repository.update(newCredentials) - .subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getById(credentials.getId()) - .subscribeAsCompletionStage().join(); + final Optional updated = repository.update(newCredentials).subscribeAsCompletionStage().join(); + final Optional retrieved = repository.getById(credentials.getId()).subscribeAsCompletionStage().join(); assertThat(updated).contains(newCredentials); assertThat(retrieved).contains(newCredentials); @@ -306,10 +300,8 @@ public void removeIdentifier() { repository.save(credentials).subscribeAsCompletionStage().join(); - final Optional updated = repository.update(newCredentials) - .subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getById(credentials.getId()) - .subscribeAsCompletionStage().join(); + final Optional updated = repository.update(newCredentials).subscribeAsCompletionStage().join(); + final Optional retrieved = repository.getById(credentials.getId()).subscribeAsCompletionStage().join(); final List all = userIdentifiersRepository.getAll(); @@ -350,8 +342,7 @@ public void updateIdentifier() { repository.save(credentials).subscribeAsCompletionStage().join(); final AccountDO beforeUpdate = repository.getById(credentials.getId()) - .subscribeAsCompletionStage() - .join() + .subscribeAsCompletionStage().join() .get(); final AccountDO newCredentials = AccountDO.builder() @@ -371,8 +362,7 @@ public void updateIdentifier() { .hashedPassword(beforeUpdate.getHashedPassword()) .build(); - final Optional updated = repository.update(newCredentials) - .subscribeAsCompletionStage().join(); + final Optional updated = repository.update(newCredentials).subscribeAsCompletionStage().join(); final Optional retrieved = repository.getById(credentials.getId()) .map(opt -> opt.map(account -> { account.getIdentifiers().forEach(userIdentifier -> { @@ -380,8 +370,7 @@ public void updateIdentifier() { }); return account; - })) - .subscribeAsCompletionStage().join(); + })).subscribeAsCompletionStage().join(); assertThat(updated).contains(newCredentials); @@ -427,11 +416,9 @@ public void saveDuplicateEmails() { .domain("main") .build(); - repository.save(first) - .subscribeAsCompletionStage().join(); + repository.save(first).subscribeAsCompletionStage().join(); - assertThatThrownBy(() -> repository.save(second) - .subscribeAsCompletionStage().join()); + assertThatThrownBy(() -> repository.save(second).subscribeAsCompletionStage().join()); } @Test @@ -567,8 +554,7 @@ public void saveDuplicatePhoneNumbers() { repository.save(first).subscribeAsCompletionStage().join(); - assertThatThrownBy(() -> repository.save(second) - .subscribeAsCompletionStage().join()); + assertThatThrownBy(() -> repository.save(second).subscribeAsCompletionStage().join()); } @Test diff --git a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateApiKeysRepositoryTest.java b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateApiKeysRepositoryTest.java index 93295a5..4e114c1 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateApiKeysRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateApiKeysRepositoryTest.java @@ -37,10 +37,8 @@ public void saveAndGetById() { .key("saveAndGetById") .build(); - final ApiKeyDO persisted = repository.save(apiKey) - .subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getById(id) - .subscribeAsCompletionStage().join(); + final ApiKeyDO persisted = repository.save(apiKey).subscribeAsCompletionStage().join(); + final Optional retrieved = repository.getById(id).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @@ -56,10 +54,8 @@ public void getByAppId() { .key("getByAppId") .build(); - final ApiKeyDO persisted = repository.save(apiKey) - .subscribeAsCompletionStage().join(); - final Collection retrieved = repository.getByAppId(appId) - .subscribeAsCompletionStage().join(); + final ApiKeyDO persisted = repository.save(apiKey).subscribeAsCompletionStage().join(); + final Collection retrieved = repository.getByAppId(appId).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @@ -75,10 +71,8 @@ public void getByKey() { .key(key) .build(); - final ApiKeyDO persisted = repository.save(apiKey) - .subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getByKey(key) - .subscribeAsCompletionStage().join(); + final ApiKeyDO persisted = repository.save(apiKey).subscribeAsCompletionStage().join(); + final Optional retrieved = repository.getByKey(key).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @@ -92,10 +86,8 @@ public void saveAndDeleteById() { .key("saveAndDeleteById") .build(); - final ApiKeyDO persisted = repository.save(apiKey) - .subscribeAsCompletionStage().join(); - final Optional deleted = repository.delete(id) - .subscribeAsCompletionStage().join(); + final ApiKeyDO persisted = repository.save(apiKey).subscribeAsCompletionStage().join(); + final Optional deleted = repository.delete(id).subscribeAsCompletionStage().join(); assertThat(deleted).contains(persisted); } diff --git a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAppsRepositoryTest.java b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAppsRepositoryTest.java index d3d7aa9..1965c39 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAppsRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateAppsRepositoryTest.java @@ -41,10 +41,8 @@ public void saveAndGetById() { .permissions(Collections.emptySet()) .build(); - final AppDO persisted = repository.save(app) - .subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getById(id) - .subscribeAsCompletionStage().join(); + final AppDO persisted = repository.save(app).subscribeAsCompletionStage().join(); + final Optional retrieved = repository.getById(id).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @@ -61,9 +59,8 @@ public void getByExternalId() { .permissions(Collections.emptySet()) .build(); - final AppDO persisted = repository.save(app) - .subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getByExternalId(externalId).join(); + final AppDO persisted = repository.save(app).subscribeAsCompletionStage().join(); + final Optional retrieved = repository.getByExternalId(externalId).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @@ -79,9 +76,8 @@ public void getAllForAccount() { .permissions(Collections.emptySet()) .build(); - final AppDO persisted = repository.save(app) - .subscribeAsCompletionStage().join(); - final List retrieved = repository.getAllForAccount(101, LongPage.of(null, 20)).join(); + final AppDO persisted = repository.save(app).subscribeAsCompletionStage().join(); + final List retrieved = repository.getAllForAccount(101, LongPage.of(null, 20)).subscribeAsCompletionStage().join(); assertThat(retrieved).containsOnly(persisted); } diff --git a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateClientsRepositoryTest.java b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateClientsRepositoryTest.java index 13eee97..cf04ad8 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateClientsRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateClientsRepositoryTest.java @@ -40,10 +40,8 @@ public void saveAndGetById() { .clientType("NONE") .build(); - final ClientDO persisted = repository.save(client) - .subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getById(id) - .subscribeAsCompletionStage().join(); + final ClientDO persisted = repository.save(client).subscribeAsCompletionStage().join(); + final Optional retrieved = repository.getById(id).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @@ -59,9 +57,8 @@ public void getByExternalId() { .clientType("NONE") .build(); - final ClientDO persisted = repository.save(client) - .subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getByExternalId(externalId).join(); + final ClientDO persisted = repository.save(client).subscribeAsCompletionStage().join(); + final Optional retrieved = repository.getByExternalId(externalId).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @@ -77,9 +74,8 @@ public void getAllForAccount() { .clientType("NONE") .build(); - final ClientDO persisted = repository.save(client) - .subscribeAsCompletionStage().join(); - final List retrieved = repository.getAllForAccount(accountId, LongPage.of(null, 20)).join(); + final ClientDO persisted = repository.save(client).subscribeAsCompletionStage().join(); + final List retrieved = repository.getAllForAccount(accountId, LongPage.of(null, 20)).subscribeAsCompletionStage().join(); assertThat(retrieved).containsOnly(persisted); } @@ -93,9 +89,8 @@ void getByType() { .clientType("AUTH") .build(); - final ClientDO persisted = repository.save(client) - .subscribeAsCompletionStage().join(); - final List retrieved = repository.getByType("AUTH", LongPage.of(null, 20)).join(); + final ClientDO persisted = repository.save(client).subscribeAsCompletionStage().join(); + final List retrieved = repository.getByType("AUTH", LongPage.of(null, 20)).subscribeAsCompletionStage().join(); assertThat(retrieved).containsOnly(persisted); } @@ -109,9 +104,8 @@ void getByDomain() { .domain("test") .build(); - final ClientDO persisted = repository.save(client) - .subscribeAsCompletionStage().join(); - final List retrieved = repository.getByDomain("test", LongPage.of(null, 20)).join(); + final ClientDO persisted = repository.save(client).subscribeAsCompletionStage().join(); + final List retrieved = repository.getByDomain("test", LongPage.of(null, 20)).subscribeAsCompletionStage().join(); assertThat(retrieved).containsOnly(persisted); } diff --git a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCredentialsRepositoryTest.java b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCredentialsRepositoryTest.java index 591486b..7022662 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCredentialsRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCredentialsRepositoryTest.java @@ -53,8 +53,8 @@ public class HibernateCredentialsRepositoryTest { // .build()) // .build(); // -// final CredentialsDO persisted = repository.save(credentials).join(); -// final Optional retrieved = repository.getById(id).join(); +// final CredentialsDO persisted = repository.save(credentials).subscribeAsCompletionStage().join(); +// final Optional retrieved = repository.getById(id).subscribeAsCompletionStage().join(); // // assertThat(retrieved).contains(persisted); // } @@ -78,8 +78,8 @@ public class HibernateCredentialsRepositoryTest { // .build()) // .build(); // -// final CredentialsDO persisted = repository.save(credentials).join(); -// final Optional retrieved = repository.findByIdentifier(identifier, "main").join(); +// final CredentialsDO persisted = repository.save(credentials).subscribeAsCompletionStage().join(); +// final Optional retrieved = repository.findByIdentifier(identifier, "main").subscribeAsCompletionStage().join(); // // assertThat(retrieved).contains(persisted); // } @@ -112,10 +112,10 @@ public class HibernateCredentialsRepositoryTest { // .build()) // .build(); // -// final CredentialsDO persisted = repository.save(credentials).join(); +// final CredentialsDO persisted = repository.save(credentials).subscribeAsCompletionStage().join(); // -// final Optional updated = repository.update(newCredentials).join(); -// final Optional retrieved = repository.getById(credentials.getId()).join(); +// final Optional updated = repository.update(newCredentials).subscribeAsCompletionStage().join(); +// final Optional retrieved = repository.getById(credentials.getId()).subscribeAsCompletionStage().join(); // // assertThat(updated).contains(newCredentials); // assertThat(retrieved).contains(newCredentials); @@ -149,10 +149,10 @@ public class HibernateCredentialsRepositoryTest { // .build()) // .build(); // -// repository.save(credentials).join(); +// repository.save(credentials).subscribeAsCompletionStage().join(); // -// final Optional updated = repository.update(newCredentials).join(); -// final Optional retrieved = repository.getById(credentials.getId()).join(); +// final Optional updated = repository.update(newCredentials).subscribeAsCompletionStage().join(); +// final Optional retrieved = repository.getById(credentials.getId()).subscribeAsCompletionStage().join(); // // final List all = userIdentifiersRepository.getAll(); // @@ -183,10 +183,10 @@ public class HibernateCredentialsRepositoryTest { // .build()) // .build(); // -// repository.save(credentials).join(); +// repository.save(credentials).subscribeAsCompletionStage().join(); // // final CredentialsDO beforeUpdate = repository.getById(credentials.getId()) -// .join() +// .subscribeAsCompletionStage().join() // .get(); // // final CredentialsDO newCredentials = CredentialsDO.builder() @@ -203,8 +203,8 @@ public class HibernateCredentialsRepositoryTest { // .hashedPassword(beforeUpdate.getHashedPassword()) // .build(); // -// final Optional updated = repository.update(newCredentials).join(); -// final Optional retrieved = repository.getById(credentials.getId()).join(); +// final Optional updated = repository.update(newCredentials).subscribeAsCompletionStage().join(); +// final Optional retrieved = repository.getById(credentials.getId()).subscribeAsCompletionStage().join(); // // assertThat(updated).contains(newCredentials); // assertThat(retrieved).contains(newCredentials); diff --git a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCryptoKeysRepositoryTests.java b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCryptoKeysRepositoryTests.java new file mode 100644 index 0000000..deaa083 --- /dev/null +++ b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateCryptoKeysRepositoryTests.java @@ -0,0 +1,74 @@ +package com.nexblocks.authguard.dal.hibernate.persistence; + +import com.nexblocks.authguard.dal.hibernate.common.ReactiveQueryExecutor; +import com.nexblocks.authguard.dal.hibernate.common.SessionProvider; +import com.nexblocks.authguard.dal.model.CryptoKeyDO; +import com.nexblocks.authguard.dal.persistence.Page; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class HibernateCryptoKeysRepositoryTests { + private HibernateCryptoKeysRepository repository; + + @BeforeAll + public void setup() { + final SessionProvider sessionProvider = TestSessionProvider.create(); + initialize(sessionProvider); + } + + protected void initialize(final SessionProvider sessionProvider) { + repository = new HibernateCryptoKeysRepository(new ReactiveQueryExecutor(sessionProvider)); + } + + @Test + public void saveAndGetById() { + long id = Math.abs(UUID.randomUUID().getMostSignificantBits()); + + CryptoKeyDO key = CryptoKeyDO.builder() + .id(id) + .domain("main") + .accountId(101L) + .appId(201L) + .nonce(new byte[] { 1, 2, 3 }) + .createdAt(Instant.now().minusMillis(1)) + .parameters(Map.of("key", "value")) + .build(); + + CryptoKeyDO persisted = repository.save(key).subscribeAsCompletionStage().join(); + Optional retrieved = repository.getById(id).subscribeAsCompletionStage().join(); + + assertThat(retrieved).contains(persisted); + } + + @Test + public void saveAndGetByAccountId() { + long id = Math.abs(UUID.randomUUID().getMostSignificantBits()); + + CryptoKeyDO key = CryptoKeyDO.builder() + .id(id) + .domain("main") + .accountId(200L) + .appId(201L) + .nonce(new byte[] { 1, 2, 3 }) + .createdAt(Instant.now().minusMillis(1)) + .parameters(Map.of("key", "value")) + .build(); + + CryptoKeyDO persisted = repository.save(key).subscribeAsCompletionStage().join(); + List retrieved = repository.findByAccountId( + "main", 200L, Page.of(Instant.now().plusSeconds(1), 10, Instant.MAX)) + .subscribeAsCompletionStage().join(); + + assertThat(retrieved).containsExactly(persisted); + } +} diff --git a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateExchangeAttemptsRepositoryTest.java b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateExchangeAttemptsRepositoryTest.java index f0640ec..61a57d0 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateExchangeAttemptsRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateExchangeAttemptsRepositoryTest.java @@ -61,7 +61,7 @@ protected void initialize(final SessionProvider sessionProvider) { @Test public void findByEntity() { final Collection retrieved = - repository.findByEntity(ENTITY_ID).join(); + repository.findByEntity(ENTITY_ID).subscribeAsCompletionStage().join(); assertThat(retrieved).containsExactlyInAnyOrder(firstAttempt, secondAttempt); } @@ -69,7 +69,7 @@ public void findByEntity() { @Test public void findByEntityAndTimestamp() { final Collection retrieved = - repository.findByEntityAndTimestamp(ENTITY_ID, Instant.now().minus(Duration.ofMinutes(30))).join(); + repository.findByEntityAndTimestamp(ENTITY_ID, Instant.now().minus(Duration.ofMinutes(30))).subscribeAsCompletionStage().join(); assertThat(retrieved).containsOnly(secondAttempt); } @@ -80,7 +80,7 @@ public void findByEntityAndTimestampAndExchange() { .findByEntityAndTimestampAndExchange(ENTITY_ID, Instant.now().minus(Duration.ofHours(2)), FROM_EXCHANGE) - .join(); + .subscribeAsCompletionStage().join(); assertThat(retrieved).containsOnly(firstAttempt); } diff --git a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateIdempotencyRecordRepositoryTest.java b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateIdempotencyRecordRepositoryTest.java index 2aeeba1..907a98c 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateIdempotencyRecordRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateIdempotencyRecordRepositoryTest.java @@ -1,6 +1,5 @@ package com.nexblocks.authguard.dal.hibernate.persistence; -import com.nexblocks.authguard.dal.hibernate.common.QueryExecutor; import com.nexblocks.authguard.dal.hibernate.common.ReactiveQueryExecutor; import com.nexblocks.authguard.dal.hibernate.common.SessionProvider; import com.nexblocks.authguard.dal.model.IdempotentRecordDO; @@ -35,12 +34,10 @@ public void saveAndGetById() { .entityType("entity") .idempotentKey("key") .build()) - .subscribeAsCompletionStage() - .join(); + .subscribeAsCompletionStage().join(); final Optional retrieved = repository.getById(1) - .subscribeAsCompletionStage() - .join(); + .subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @@ -52,13 +49,12 @@ public void saveAndGetByKey() { final IdempotentRecordDO persisted = repository.save(IdempotentRecordDO.builder() .id(2) .entityId(102) - .entityType("by-key-entity") + .entityType("ACCOUNT") .idempotentKey(key) .build()) - .subscribeAsCompletionStage() - .join(); + .subscribeAsCompletionStage().join(); - final List retrieved = repository.findByKey(key).join(); + final List retrieved = repository.findByKey(key).subscribeAsCompletionStage().join(); assertThat(retrieved).containsOnly(persisted); } @@ -66,17 +62,16 @@ public void saveAndGetByKey() { @Test public void saveAndGetByKeyAndEntityType() { final String key = "by-key-and-entity-key"; - final String entityType = "by-key-and-entity-entity"; + final String entityType = "ACCOUNT"; final IdempotentRecordDO persisted = repository.save(IdempotentRecordDO.builder() .id(3) .entityId(103) .entityType(entityType) .idempotentKey(key) - .build()) - .subscribeAsCompletionStage().join(); + .build()).subscribeAsCompletionStage().join(); - final Optional retrieved = repository.findByKeyAndEntityType(key, entityType).join(); + final Optional retrieved = repository.findByKeyAndEntityType(key, entityType).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } diff --git a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernatePermissionsRepositoryTest.java b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernatePermissionsRepositoryTest.java index 5c430e7..0dc8801 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernatePermissionsRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernatePermissionsRepositoryTest.java @@ -35,36 +35,34 @@ protected void initialize(final SessionProvider sessionProvider) { .permissionGroup("tests") .name("first") .domain("main") - .build()) - .subscribeAsCompletionStage().join(); + .build()).subscribeAsCompletionStage().join(); second = repository.save(PermissionDO.builder() .id(Math.abs(UUID.randomUUID().getMostSignificantBits())) .permissionGroup("tests") .name("second") .domain("main") - .build()) - .subscribeAsCompletionStage().join(); + .build()).subscribeAsCompletionStage().join(); } @Test public void search() { - assertThat(repository.search("tests", "first", "main").join()).contains(first); - assertThat(repository.search("tests", "second", "main").join()).contains(second); + assertThat(repository.search("tests", "first", "main").subscribeAsCompletionStage().join()).contains(first); + assertThat(repository.search("tests", "second", "main").subscribeAsCompletionStage().join()).contains(second); } @Test public void getAll() { - assertThat(repository.getAll("main", LongPage.of(null, 20)).join()).containsOnly(first, second); + assertThat(repository.getAll("main", LongPage.of(null, 20)).subscribeAsCompletionStage().join()).containsOnly(first, second); } @Test public void getAllForGroup() { - assertThat(repository.getAllForGroup("tests", "main", LongPage.of(null, 20)).join()).containsOnly(first, second); + assertThat(repository.getAllForGroup("tests", "main", LongPage.of(null, 20)).subscribeAsCompletionStage().join()).containsOnly(first, second); } @Test public void getAllForNonexistentGroup() { - assertThat(repository.getAllForGroup("nothing", "main", LongPage.of(null, 20)).join()).isEmpty(); + assertThat(repository.getAllForGroup("nothing", "main", LongPage.of(null, 20)).subscribeAsCompletionStage().join()).isEmpty(); } } \ No newline at end of file diff --git a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateRolesRepositoryTest.java b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateRolesRepositoryTest.java index 931ea99..7e560ef 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateRolesRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateRolesRepositoryTest.java @@ -37,31 +37,29 @@ protected void initialize(final SessionProvider sessionProvider) { .id(Math.abs(UUID.randomUUID().getMostSignificantBits())) .name("first") .domain("main") - .build()) - .subscribeAsCompletionStage().join(); + .build()).subscribeAsCompletionStage().join(); second = repository.save(RoleDO.builder() .id(Math.abs(UUID.randomUUID().getMostSignificantBits())) .name("second") .domain("main") - .build()) - .subscribeAsCompletionStage().join(); + .build()).subscribeAsCompletionStage().join(); } @Test public void getAll() { - assertThat(repository.getAll("main", LongPage.of(null, 20)).join()).containsOnly(first, second); + assertThat(repository.getAll("main", LongPage.of(null, 20)).subscribeAsCompletionStage().join()).containsOnly(first, second); } @Test public void getByName() { - assertThat(repository.getByName(first.getName(), first.getDomain()).join()).contains(first); - assertThat(repository.getByName(second.getName(), second.getDomain()).join()).contains(second); + assertThat(repository.getByName(first.getName(), first.getDomain()).subscribeAsCompletionStage().join()).contains(first); + assertThat(repository.getByName(second.getName(), second.getDomain()).subscribeAsCompletionStage().join()).contains(second); } @Test public void getMultiple() { - assertThat(repository.getMultiple(Arrays.asList(first.getName(), second.getName()), "main").join()) + assertThat(repository.getMultiple(Arrays.asList(first.getName(), second.getName()), "main").subscribeAsCompletionStage().join()) .containsOnly(first, second); } } \ No newline at end of file diff --git a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateTotpKeysRepositoryTest.java b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateTotpKeysRepositoryTest.java index ef3af12..dfb009d 100644 --- a/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateTotpKeysRepositoryTest.java +++ b/dal/hibernate-dal/hibernate-persistence/src/test/java/com/nexblocks/authguard/dal/hibernate/persistence/HibernateTotpKeysRepositoryTest.java @@ -34,20 +34,18 @@ protected void initialize(final SessionProvider sessionProvider) { .accountId(1L) .encryptedKey(new byte[] { 1, 2, 3 }) .nonce(new byte[] { 4, 5, 6 }) - .build()) - .subscribeAsCompletionStage().join(); + .build()).subscribeAsCompletionStage().join(); repository.save(TotpKeyDO.builder() .id(Math.abs(UUID.randomUUID().getMostSignificantBits())) .domain("main") .accountId(2L) - .build()) - .subscribeAsCompletionStage().join(); + .build()).subscribeAsCompletionStage().join(); } @Test public void getById() { - List result = repository.findByAccountId("main", 1L).join(); + List result = repository.findByAccountId("main", 1L).subscribeAsCompletionStage().join(); assertThat(result).containsOnly(first); assertThat(result.get(0).getEncryptedKey()).containsExactly(1, 2, 3); diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/AbstractRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/AbstractRepository.java index 0afef4f..d264fae 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/AbstractRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/AbstractRepository.java @@ -9,7 +9,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class AbstractRepository implements Repository { private final Map repo; diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockAccountLocksRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockAccountLocksRepository.java index fe2a4e2..e9d28e8 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockAccountLocksRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockAccountLocksRepository.java @@ -5,15 +5,15 @@ import com.nexblocks.authguard.dal.model.AccountLockDO; import java.util.Collection; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton public class MockAccountLocksRepository extends AbstractRepository implements AccountLocksRepository { @Override - public CompletableFuture> findByAccountId(final long s) { - return CompletableFuture.completedFuture(getRepo().values() + public Uni> findByAccountId(final long s) { + return Uni.createFrom().item(getRepo().values() .stream() .filter(lock -> s == lock.getAccountId()) .collect(Collectors.toList())); diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockAccountsRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockAccountsRepository.java index e434db3..7099b9e 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockAccountsRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockAccountsRepository.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton @@ -52,8 +52,8 @@ public Uni> update(final AccountDO account) { } @Override - public CompletableFuture> getByExternalId(final String externalId) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getByExternalId(final String externalId) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(account -> account.getExternalId() != null) .filter(account -> account.getExternalId().equals(externalId)) @@ -61,8 +61,8 @@ public CompletableFuture> getByExternalId(final String exter } @Override - public CompletableFuture> getByEmail(final String email, final String domain) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getByEmail(final String email, final String domain) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(account -> account.getEmail() != null) .filter(account -> account.getEmail().getEmail().equals(email)) diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockAccountsTokensRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockAccountsTokensRepository.java index e79bba6..94295c5 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockAccountsTokensRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockAccountsTokensRepository.java @@ -5,22 +5,22 @@ import com.nexblocks.authguard.dal.model.AccountTokenDO; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; @Singleton public class MockAccountsTokensRepository extends AbstractRepository implements AccountTokensRepository { @Override - public CompletableFuture> getByToken(final String token) { - return CompletableFuture.supplyAsync(() -> getRepo().values().stream() + public Uni> getByToken(final String token) { + return Uni.createFrom().item(() -> getRepo().values().stream() .filter(accountToken -> accountToken.getToken().equals(token)) .findFirst()); } @Override - public CompletableFuture> deleteToken(final String token) { + public Uni> deleteToken(final String token) { return getByToken(token) - .thenApply(opt -> { + .map(opt -> { opt.ifPresent(accountToken -> getRepo().remove(accountToken.getId())); return opt; }); diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockApiKeysRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockApiKeysRepository.java index fad857e..e4caad9 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockApiKeysRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockApiKeysRepository.java @@ -7,7 +7,7 @@ import java.util.Collection; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockApplicationsRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockApplicationsRepository.java index 7ed97ad..154ff68 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockApplicationsRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockApplicationsRepository.java @@ -7,14 +7,14 @@ import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton public class MockApplicationsRepository extends AbstractRepository implements ApplicationsRepository { @Override - public CompletableFuture> getByExternalId(final String externalId) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getByExternalId(final String externalId) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(app -> app.getExternalId() != null) .filter(app -> app.getExternalId().equals(externalId)) @@ -22,8 +22,8 @@ public CompletableFuture> getByExternalId(final String externalI } @Override - public CompletableFuture> getAllForAccount(final long accountId, final Page page) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getAllForAccount(final long accountId, final Page page) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(app -> app.getParentAccountId().equals(accountId) && app.getId() > page.getCursor()) .limit(page.getCount()) diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockClientsRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockClientsRepository.java index 6dda2c8..8efb81d 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockClientsRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockClientsRepository.java @@ -8,14 +8,14 @@ import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton public class MockClientsRepository extends AbstractRepository implements ClientsRepository { @Override - public CompletableFuture> getByExternalId(final String externalId) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getByExternalId(final String externalId) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(app -> app.getExternalId() != null) .filter(app -> app.getExternalId().equals(externalId)) @@ -23,8 +23,8 @@ public CompletableFuture> getByExternalId(final String extern } @Override - public CompletableFuture> getAllForAccount(final long accountId, final Page page) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getAllForAccount(final long accountId, final Page page) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(client -> client.getAccountId().equals(accountId) && client.getId() > page.getCursor()) .limit(page.getCount()) @@ -32,8 +32,8 @@ public CompletableFuture> getAllForAccount(final long accountId, } @Override - public CompletableFuture> getByType(final String clientType, final Page page) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getByType(final String clientType, final Page page) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(client -> Objects.equals(client.getClientType(), clientType) && client.getId() > page.getCursor()) .limit(page.getCount()) @@ -41,8 +41,8 @@ public CompletableFuture> getByType(final String clientType, fina } @Override - public CompletableFuture> getByDomain(final String domain, final Page page) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getByDomain(final String domain, final Page page) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(client -> Objects.equals(client.getDomain(), domain) && client.getId() > page.getCursor()) .limit(page.getCount()) diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockCredentialsAuditRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockCredentialsAuditRepository.java index f024735..f2cc510 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockCredentialsAuditRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockCredentialsAuditRepository.java @@ -5,7 +5,7 @@ import com.nexblocks.authguard.dal.persistence.CredentialsAuditRepository; import java.util.List; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton @@ -13,8 +13,8 @@ public class MockCredentialsAuditRepository extends AbstractRepository> findByCredentialsId(final long credentialsId) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> findByCredentialsId(final long credentialsId) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(record -> record.getCredentialsId() == credentialsId) .collect(Collectors.toList())); diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockCredentialsRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockCredentialsRepository.java index b12dec5..fc96718 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockCredentialsRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockCredentialsRepository.java @@ -10,7 +10,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; //@Singleton //public class MockCredentialsRepository extends AbstractRepository implements CredentialsRepository { @@ -18,7 +18,7 @@ // private Map identifiersToAccountId = new HashMap<>(); // // @Override -// public CompletableFuture save(final CredentialsDO credentials) { +// public Uni save(final CredentialsDO credentials) { // credentials.getIdentifiers() // .stream() // .filter(identifier -> { @@ -34,7 +34,7 @@ // } // // @Override -// public CompletableFuture> update(final CredentialsDO credentials) { +// public Uni> update(final CredentialsDO credentials) { // credentials.getIdentifiers() // .stream() // .filter(identifier -> { @@ -52,8 +52,8 @@ // } // // @Override -// public CompletableFuture> findByIdentifier(final String identifier, final String domain) { -// return CompletableFuture.supplyAsync(() -> getRepo() +// public Uni> findByIdentifier(final String identifier, final String domain) { +// return Uni.createFrom().item(() -> getRepo() // .values() // .stream() // .filter(credentials -> hasIdentifier(credentials, identifier, domain)) diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockCryptoKeysRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockCryptoKeysRepository.java index 2afb084..104b433 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockCryptoKeysRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockCryptoKeysRepository.java @@ -10,15 +10,15 @@ import java.util.Comparator; import java.util.List; import java.util.Objects; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton public class MockCryptoKeysRepository extends AbstractRepository implements CryptoKeysRepository { @Override - public CompletableFuture> findByDomain(final String domain, final Page page) { - return CompletableFuture.completedFuture(getRepo().values() + public Uni> findByDomain(final String domain, final Page page) { + return Uni.createFrom().item(getRepo().values() .stream() .sorted(Comparator.comparing(AbstractDO::getCreatedAt).reversed()) .filter(key -> key.getCreatedAt() != null @@ -30,9 +30,9 @@ public CompletableFuture> findByDomain(final String domain, fi } @Override - public CompletableFuture> findByAccountId(final String domain, final long accountId, + public Uni> findByAccountId(final String domain, final long accountId, final Page page) { - return CompletableFuture.completedFuture(getRepo().values() + return Uni.createFrom().item(getRepo().values() .stream() .sorted(Comparator.comparing(AbstractDO::getCreatedAt).reversed()) .filter(key -> key.getCreatedAt() != null @@ -44,9 +44,9 @@ public CompletableFuture> findByAccountId(final String domain, } @Override - public CompletableFuture> findByAppId(final String domain, final long appId, + public Uni> findByAppId(final String domain, final long appId, final Page page) { - return CompletableFuture.completedFuture(getRepo().values() + return Uni.createFrom().item(getRepo().values() .stream() .sorted(Comparator.comparing(AbstractDO::getCreatedAt).reversed()) .filter(key -> key.getCreatedAt() != null diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockEventsRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockEventsRepository.java index 05f2b04..287d77c 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockEventsRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockEventsRepository.java @@ -9,16 +9,16 @@ import java.time.Instant; import java.util.Comparator; import java.util.List; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton public class MockEventsRepository extends AbstractRepository implements EventsRepository { @Override - public CompletableFuture> findByDomainDescending(final String domain, + public Uni> findByDomainDescending(final String domain, final Page page) { - return CompletableFuture.completedFuture(getRepo().values() + return Uni.createFrom().item(getRepo().values() .stream() .sorted(Comparator.comparing(AbstractDO::getCreatedAt).reversed()) .filter(event -> event.getCreatedAt() != null @@ -29,10 +29,10 @@ public CompletableFuture> findByDomainDescending(final String doma } @Override - public CompletableFuture> findByDomainAndChannelDescending(final String domain, + public Uni> findByDomainAndChannelDescending(final String domain, final String channel, final Page page) { - return CompletableFuture.completedFuture(getRepo().values() + return Uni.createFrom().item(getRepo().values() .stream() .sorted(Comparator.comparing(AbstractDO::getCreatedAt).reversed()) .filter(event -> event.getCreatedAt() != null diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockExchangeAttemptsRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockExchangeAttemptsRepository.java index b4003f9..4f766c3 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockExchangeAttemptsRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockExchangeAttemptsRepository.java @@ -6,23 +6,23 @@ import java.time.Instant; import java.util.Collection; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton public class MockExchangeAttemptsRepository extends AbstractRepository implements ExchangeAttemptsRepository { @Override - public CompletableFuture> findByEntity(final long entityId) { - return CompletableFuture.completedFuture(getRepo().values() + public Uni> findByEntity(final long entityId) { + return Uni.createFrom().item(getRepo().values() .stream() .filter(attempt -> attempt.getEntityId() == entityId) .collect(Collectors.toList())); } @Override - public CompletableFuture> findByEntityAndTimestamp(final long entityId, + public Uni> findByEntityAndTimestamp(final long entityId, final Instant fromTimestamp) { - return CompletableFuture.completedFuture(getRepo().values() + return Uni.createFrom().item(getRepo().values() .stream() .filter(attempt -> attempt.getEntityId() == entityId) .filter(attempt -> attempt.getCreatedAt().isAfter(fromTimestamp)) @@ -30,10 +30,10 @@ public CompletableFuture> findByEntityAndTimestamp } @Override - public CompletableFuture> findByEntityAndTimestampAndExchange(final long entityId, + public Uni> findByEntityAndTimestampAndExchange(final long entityId, final Instant fromTimestamp, final String exchangeFrom) { - return CompletableFuture.completedFuture(getRepo().values() + return Uni.createFrom().item(getRepo().values() .stream() .filter(attempt -> attempt.getEntityId() == entityId) .filter(attempt -> attempt.getCreatedAt().isAfter(fromTimestamp)) diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockIdempotentRecordsRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockIdempotentRecordsRepository.java index 46d6a5b..2440b4d 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockIdempotentRecordsRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockIdempotentRecordsRepository.java @@ -6,22 +6,22 @@ import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton public class MockIdempotentRecordsRepository extends AbstractRepository implements IdempotentRecordsRepository { @Override - public CompletableFuture> findByKey(final String idempotentKey) { - return CompletableFuture.completedFuture(getRepo().values().stream() + public Uni> findByKey(final String idempotentKey) { + return Uni.createFrom().item(getRepo().values().stream() .filter(record -> record.getIdempotentKey().equals(idempotentKey)) .collect(Collectors.toList())); } @Override - public CompletableFuture> findByKeyAndEntityType(final String idempotentKey, + public Uni> findByKeyAndEntityType(final String idempotentKey, final String entityType) { - return CompletableFuture.completedFuture(getRepo().values().stream() + return Uni.createFrom().item(getRepo().values().stream() .filter(record -> record.getIdempotentKey().equals(idempotentKey) && record.getEntityType().equals(entityType)) .findFirst()); diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockPermissionsRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockPermissionsRepository.java index cc83449..e9d5471 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockPermissionsRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockPermissionsRepository.java @@ -7,15 +7,15 @@ import javax.inject.Singleton; import java.util.Collection; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton public class MockPermissionsRepository extends AbstractRepository implements PermissionsRepository { @Override - public CompletableFuture> getAll(final String domain, final Page page) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getAll(final String domain, final Page page) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(permission -> permission.getDomain().equals(domain) && permission.getId() > page.getCursor()) .limit(page.getCount()) @@ -23,8 +23,8 @@ public CompletableFuture> getAll(final String domain, f } @Override - public CompletableFuture> search(final String group, final String name, final String domain) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> search(final String group, final String name, final String domain) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(permission -> permission.getPermissionGroup().equals(group) && permission.getName().equals(name) && permission.getDomain().equals(domain)) @@ -32,9 +32,9 @@ public CompletableFuture> search(final String group, fina } @Override - public CompletableFuture> getAllForGroup(final String group, final String domain, + public Uni> getAllForGroup(final String group, final String domain, final Page page) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(permission -> permission.getPermissionGroup().equals(group) && permission.getDomain().equals(domain) diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockRolesRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockRolesRepository.java index d0ba183..f2c0f27 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockRolesRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockRolesRepository.java @@ -7,14 +7,14 @@ import javax.inject.Singleton; import java.util.Collection; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton public class MockRolesRepository extends AbstractRepository implements RolesRepository { @Override - public CompletableFuture> getAll(final String domain, final Page page) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getAll(final String domain, final Page page) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(role -> role.getDomain().equals(domain) && role.getId() > page.getCursor()) .limit(page.getCount()) @@ -22,16 +22,16 @@ public CompletableFuture> getAll(final String domain, final P } @Override - public CompletableFuture> getByName(final String name, final String domain) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getByName(final String name, final String domain) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(role -> role.getName().equals(name) && role.getDomain().equals(domain)) .findFirst()); } @Override - public CompletableFuture> getMultiple(final Collection collection, final String domain) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getMultiple(final Collection collection, final String domain) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(role -> collection.contains(role.getName()) && role.getDomain().equals(domain)) .collect(Collectors.toList())); diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockSessionsRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockSessionsRepository.java index d815f48..10f68b1 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockSessionsRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockSessionsRepository.java @@ -7,32 +7,32 @@ import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton public class MockSessionsRepository extends AbstractRepository implements SessionsRepository { @Override - public CompletableFuture> getByToken(final String token) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> getByToken(final String token) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(session -> session.getSessionToken().equals(token)) .findFirst()); } @Override - public CompletableFuture> deleteByToken(final String sessionToken) { + public Uni> deleteByToken(final String sessionToken) { return getByToken(sessionToken) - .thenApply(opt -> { + .map(opt -> { opt.ifPresent(session -> getRepo().remove(session.getId())); return opt; }); } @Override - public CompletableFuture> findByAccountId(final long accountId, final String domain) { - return CompletableFuture.supplyAsync(() -> getRepo().values() + public Uni> findByAccountId(final long accountId, final String domain) { + return Uni.createFrom().item(() -> getRepo().values() .stream() .filter(session -> Objects.equals(accountId, session.getAccountId()) && Objects.equals(domain, session.getDomain())) diff --git a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockTotpKeysRepository.java b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockTotpKeysRepository.java index 2d371f4..b7129b0 100644 --- a/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockTotpKeysRepository.java +++ b/dal/memory-dal/src/main/java/com/nexblocks/authguard/dal/memory/dal/MockTotpKeysRepository.java @@ -8,7 +8,7 @@ import java.util.Comparator; import java.util.List; import java.util.Objects; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.stream.Collectors; @Singleton @@ -16,8 +16,8 @@ public class MockTotpKeysRepository extends AbstractRepository implements TotpKeysRepository { @Override - public CompletableFuture> findByAccountId(final String domain, final long accountId) { - return CompletableFuture.completedFuture(getRepo().values() + public Uni> findByAccountId(final String domain, final long accountId) { + return Uni.createFrom().item(getRepo().values() .stream() .sorted(Comparator.comparing(AbstractDO::getCreatedAt).reversed()) .filter(key -> key.getCreatedAt() != null diff --git a/dal/mongo-dal/mongo-cache/src/main/java/com/nexblocks/authguard/dal/mongo/cache/MongoAccountLocksRepository.java b/dal/mongo-dal/mongo-cache/src/main/java/com/nexblocks/authguard/dal/mongo/cache/MongoAccountLocksRepository.java index 0229fc9..beb6d8a 100644 --- a/dal/mongo-dal/mongo-cache/src/main/java/com/nexblocks/authguard/dal/mongo/cache/MongoAccountLocksRepository.java +++ b/dal/mongo-dal/mongo-cache/src/main/java/com/nexblocks/authguard/dal/mongo/cache/MongoAccountLocksRepository.java @@ -9,7 +9,7 @@ import com.nexblocks.authguard.dal.mongo.config.Defaults; import java.util.Collection; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class MongoAccountLocksRepository extends AbstractMongoRepository @@ -22,9 +22,8 @@ public MongoAccountLocksRepository(final MongoClientWrapper clientWrapper) { } @Override - public CompletableFuture> findByAccountId(final long accountId) { + public Uni> findByAccountId(final long accountId) { return facade.find(Filters.eq("accountId", accountId)) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } } diff --git a/dal/mongo-dal/mongo-cache/src/main/java/com/nexblocks/authguard/dal/mongo/cache/MongoAccountTokensRepository.java b/dal/mongo-dal/mongo-cache/src/main/java/com/nexblocks/authguard/dal/mongo/cache/MongoAccountTokensRepository.java index 17f7c56..3ce6b5e 100644 --- a/dal/mongo-dal/mongo-cache/src/main/java/com/nexblocks/authguard/dal/mongo/cache/MongoAccountTokensRepository.java +++ b/dal/mongo-dal/mongo-cache/src/main/java/com/nexblocks/authguard/dal/mongo/cache/MongoAccountTokensRepository.java @@ -9,7 +9,7 @@ import com.nexblocks.authguard.dal.mongo.config.Defaults; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class MongoAccountTokensRepository extends AbstractMongoRepository implements AccountTokensRepository { private static final String COLLECTION_KEY = "account_tokens"; @@ -20,14 +20,12 @@ public MongoAccountTokensRepository(final MongoClientWrapper clientWrapper) { } @Override - public CompletableFuture> getByToken(final String token) { - return facade.findOne(Filters.eq("token", token)) - .subscribeAsCompletionStage(); + public Uni> getByToken(final String token) { + return facade.findOne(Filters.eq("token", token)); } @Override - public CompletableFuture> deleteToken(final String token) { - return facade.deleteByFilter(Filters.eq("token", token)) - .subscribeAsCompletionStage(); + public Uni> deleteToken(final String token) { + return facade.deleteByFilter(Filters.eq("token", token)); } } diff --git a/dal/mongo-dal/mongo-cache/src/main/java/com/nexblocks/authguard/dal/mongo/cache/MongoSessionsRepository.java b/dal/mongo-dal/mongo-cache/src/main/java/com/nexblocks/authguard/dal/mongo/cache/MongoSessionsRepository.java index 06da298..45447ae 100644 --- a/dal/mongo-dal/mongo-cache/src/main/java/com/nexblocks/authguard/dal/mongo/cache/MongoSessionsRepository.java +++ b/dal/mongo-dal/mongo-cache/src/main/java/com/nexblocks/authguard/dal/mongo/cache/MongoSessionsRepository.java @@ -10,7 +10,7 @@ import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class MongoSessionsRepository extends AbstractMongoRepository implements SessionsRepository { private static final String COLLECTION_KEY = "sessions"; @@ -21,20 +21,18 @@ public MongoSessionsRepository(final MongoClientWrapper clientWrapper) { } @Override - public CompletableFuture> getByToken(final String token) { - return facade.findOne(Filters.eq("sessionToken", token)) - .subscribeAsCompletionStage(); + public Uni> getByToken(final String token) { + return facade.findOne(Filters.eq("sessionToken", token)); } @Override - public CompletableFuture> deleteByToken(final String sessionToken) { - return facade.deleteByFilter(Filters.eq("sessionToken", sessionToken)) - .subscribeAsCompletionStage(); + public Uni> deleteByToken(final String sessionToken) { + return facade.deleteByFilter(Filters.eq("sessionToken", sessionToken)); } @Override - public CompletableFuture> findByAccountId(final long accountId, final String domain) { + public Uni> findByAccountId(final long accountId, final String domain) { return facade.find(Filters.and(Filters.eq("accountId", accountId), - Filters.eq("domain", domain))).subscribeAsCompletionStage(); + Filters.eq("domain", domain))); } } diff --git a/dal/mongo-dal/mongo-common/src/main/java/com/nexblocks/authguard/dal/mongo/common/facade/SyncMongoFacade.java b/dal/mongo-dal/mongo-common/src/main/java/com/nexblocks/authguard/dal/mongo/common/facade/SyncMongoFacade.java index 047a6b4..848e95c 100644 --- a/dal/mongo-dal/mongo-common/src/main/java/com/nexblocks/authguard/dal/mongo/common/facade/SyncMongoFacade.java +++ b/dal/mongo-dal/mongo-common/src/main/java/com/nexblocks/authguard/dal/mongo/common/facade/SyncMongoFacade.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class SyncMongoFacade { // private final MongoCollection collection; @@ -24,37 +24,37 @@ public class SyncMongoFacade { // this.timeout = operationsTimeout; // } // -// public CompletableFuture save(final T document) { +// public Uni save(final T document) { // final InsertOneResult result = collection.insertOne(document); // -// return CompletableFuture.completedFuture(document); +// return Uni.createFrom().item(document); // } // -// public CompletableFuture> findById(final long id) { +// public Uni> findById(final long id) { // return findOne(Filters.eq("_id", id)); // } // -// public CompletableFuture> findOne(final Bson filter) { +// public Uni> findOne(final Bson filter) { // final T result = collection.find(filter).first(); // -// return CompletableFuture.completedFuture(Optional.ofNullable(result)); +// return Uni.createFrom().item(Optional.ofNullable(result)); // } // -// public CompletableFuture> replaceById(final long id, final T document) { +// public Uni> replaceById(final long id, final T document) { // return replaceOne(Filters.eq("_id", id), document); // } // -// public CompletableFuture> replaceOne(final Bson filter, final T document) { +// public Uni> replaceOne(final Bson filter, final T document) { // final UpdateResult publisher = collection.replaceOne(filter, document); // // if (publisher.getMatchedCount() == 0) { -// return CompletableFuture.completedFuture(Optional.empty()); +// return Uni.createFrom().item(Optional.empty()); // } // -// return CompletableFuture.completedFuture(Optional.of(document)); +// return Uni.createFrom().item(Optional.of(document)); // } // -// public CompletableFuture> find(final Bson filter) { +// public Uni> find(final Bson filter) { // final FindIterable resultIterable = collection.find(filter); // final List list = new ArrayList<>(); // @@ -62,10 +62,10 @@ public class SyncMongoFacade { // list.add(result); // } // -// return CompletableFuture.completedFuture(list); +// return Uni.createFrom().item(list); // } // -// public CompletableFuture> find(final Bson filter, final int limit) { +// public Uni> find(final Bson filter, final int limit) { // final FindIterable resultIterable = collection.find(filter).limit(limit); // final List list = new ArrayList<>(); // @@ -73,10 +73,10 @@ public class SyncMongoFacade { // list.add(result); // } // -// return CompletableFuture.completedFuture(list); +// return Uni.createFrom().item(list); // } // -// public CompletableFuture> find(final Bson filter, final Bson sort, +// public Uni> find(final Bson filter, final Bson sort, // final int limit) { // final FindIterable resultIterable = collection.find(filter) // .sort(sort) @@ -87,10 +87,10 @@ public class SyncMongoFacade { // list.add(result); // } // -// return CompletableFuture.completedFuture(list); +// return Uni.createFrom().item(list); // } // -// public CompletableFuture> findAll() { +// public Uni> findAll() { // final FindIterable resultIterable = collection.find(); // final List list = new ArrayList<>(); // @@ -98,21 +98,21 @@ public class SyncMongoFacade { // list.add(result); // } // -// return CompletableFuture.completedFuture(list); +// return Uni.createFrom().item(list); // } // -// public CompletableFuture> deleteById(final long id) { +// public Uni> deleteById(final long id) { // return delete(Filters.eq("_id", id)); // } // -// public CompletableFuture> deleteByFilter(final Bson filter) { +// public Uni> deleteByFilter(final Bson filter) { // return delete(filter); // } // -// public CompletableFuture> delete(final Bson filter) { +// public Uni> delete(final Bson filter) { // final T result = collection.findOneAndDelete(filter); // -// return CompletableFuture.completedFuture(Optional.ofNullable(result)); +// return Uni.createFrom().item(Optional.ofNullable(result)); // } // // public static class Builder { diff --git a/dal/mongo-dal/mongo-common/src/main/java/com/nexblocks/authguard/dal/mongo/common/setup/MongoClientWrapper.java b/dal/mongo-dal/mongo-common/src/main/java/com/nexblocks/authguard/dal/mongo/common/setup/MongoClientWrapper.java index 4736d5c..f8084a0 100644 --- a/dal/mongo-dal/mongo-common/src/main/java/com/nexblocks/authguard/dal/mongo/common/setup/MongoClientWrapper.java +++ b/dal/mongo-dal/mongo-common/src/main/java/com/nexblocks/authguard/dal/mongo/common/setup/MongoClientWrapper.java @@ -27,7 +27,6 @@ import static org.bson.codecs.configuration.CodecRegistries.fromProviders; import static org.bson.codecs.configuration.CodecRegistries.fromRegistries; -// TODO switch to the reactive client by just changing the import @Singleton public class MongoClientWrapper { private final MongoClient mongoClient; diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoAccountsRepository.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoAccountsRepository.java index bc205c7..338fa4a 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoAccountsRepository.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoAccountsRepository.java @@ -15,7 +15,7 @@ import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class MongoAccountsRepository extends AbstractMongoRepository implements AccountsRepository { private static final String COLLECTION_KEY = "accounts"; @@ -52,17 +52,16 @@ public Uni save(final AccountDO account) { } @Override - public CompletableFuture> getByExternalId(final String externalId) { - return facade.findOne(Filters.eq("externalId", externalId)) - .subscribeAsCompletionStage(); + public Uni> getByExternalId(final String externalId) { + return facade.findOne(Filters.eq("externalId", externalId)); } @Override - public CompletableFuture> getByEmail(final String email, final String domain) { + public Uni> getByEmail(final String email, final String domain) { return facade.findOne(Filters.and( Filters.eq("email.email", email), Filters.eq("domain", domain) - )).subscribeAsCompletionStage(); + )); } @Override diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoApiKeysRepository.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoApiKeysRepository.java index 733a3bc..3b111f6 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoApiKeysRepository.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoApiKeysRepository.java @@ -11,7 +11,7 @@ import java.util.Collection; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class MongoApiKeysRepository extends AbstractMongoRepository implements ApiKeysRepository { private static final String COLLECTION_KEY = "api_keys"; diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoApplicationsRepository.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoApplicationsRepository.java index 1e9ed74..6b6ada4 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoApplicationsRepository.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoApplicationsRepository.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class MongoApplicationsRepository extends AbstractMongoRepository implements ApplicationsRepository { private static final String COLLECTION_KEY = "apps"; @@ -22,16 +22,15 @@ public MongoApplicationsRepository(final MongoClientWrapper clientWrapper) { } @Override - public CompletableFuture> getByExternalId(final String externalId) { - return facade.findOne(Filters.eq("externalId", externalId)) - .subscribeAsCompletionStage(); + public Uni> getByExternalId(final String externalId) { + return facade.findOne(Filters.eq("externalId", externalId)); } @Override - public CompletableFuture> getAllForAccount(final long accountId, final Page page) { + public Uni> getAllForAccount(final long accountId, final Page page) { return facade.find(Filters.and( Filters.eq("parentAccountId", accountId), Filters.gt("_id", page.getCursor()) - ), page.getCount()).subscribeAsCompletionStage(); + ), page.getCount()); } } diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoClientsRepository.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoClientsRepository.java index e946778..8b29dc4 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoClientsRepository.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoClientsRepository.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class MongoClientsRepository extends AbstractMongoRepository implements ClientsRepository { private static final String COLLECTION_KEY = "clients"; @@ -22,32 +22,31 @@ public MongoClientsRepository(final MongoClientWrapper clientWrapper) { } @Override - public CompletableFuture> getByExternalId(final String externalId) { - return facade.findOne(Filters.eq("externalId", externalId)) - .subscribeAsCompletionStage(); + public Uni> getByExternalId(final String externalId) { + return facade.findOne(Filters.eq("externalId", externalId)); } @Override - public CompletableFuture> getAllForAccount(final long accountId, final Page page) { + public Uni> getAllForAccount(final long accountId, final Page page) { return facade.find(Filters.and( Filters.eq("parentAccountId", accountId), Filters.gt("_id", page.getCursor()) - ), page.getCount()).subscribeAsCompletionStage(); + ), page.getCount()); } @Override - public CompletableFuture> getByType(final String clientType, final Page page) { + public Uni> getByType(final String clientType, final Page page) { return facade.find(Filters.and( Filters.eq("clientType", clientType), Filters.gt("_id", page.getCursor()) - ), page.getCount()).subscribeAsCompletionStage(); + ), page.getCount()); } @Override - public CompletableFuture> getByDomain(final String domain, final Page page) { + public Uni> getByDomain(final String domain, final Page page) { return facade.find(Filters.and( Filters.eq("domain", domain), Filters.gt("_id", page.getCursor()) - ), page.getCount()).subscribeAsCompletionStage(); + ), page.getCount()); } } diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCredentialsAuditRepository.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCredentialsAuditRepository.java index aad8711..c55e9bd 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCredentialsAuditRepository.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCredentialsAuditRepository.java @@ -9,7 +9,7 @@ import com.nexblocks.authguard.dal.persistence.CredentialsAuditRepository; import java.util.List; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class MongoCredentialsAuditRepository extends AbstractMongoRepository implements CredentialsAuditRepository { private static final String COLLECTION_KEY = "credentials_audit"; @@ -20,8 +20,7 @@ public MongoCredentialsAuditRepository(final MongoClientWrapper clientWrapper) { } @Override - public CompletableFuture> findByCredentialsId(final long credentialsId) { - return facade.find(Filters.eq("credentialsId", credentialsId)) - .subscribeAsCompletionStage(); + public Uni> findByCredentialsId(final long credentialsId) { + return facade.find(Filters.eq("credentialsId", credentialsId)); } } diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCredentialsRepostiory.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCredentialsRepostiory.java index 420037c..9694d46 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCredentialsRepostiory.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCredentialsRepostiory.java @@ -12,7 +12,7 @@ import com.nexblocks.authguard.service.exceptions.codes.ErrorCode; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; //public class MongoCredentialsRepostiory extends AbstractMongoRepository implements CredentialsRepository { // private static final String COLLECTION_KEY = "credentials"; @@ -23,7 +23,7 @@ // } // // @Override -// public CompletableFuture save(final CredentialsDO credentials) { +// public Uni save(final CredentialsDO credentials) { // try { // return super.save(credentials); // } catch (final MongoWriteException e) { @@ -36,7 +36,7 @@ // } // // @Override -// public CompletableFuture> findByIdentifier(final String identifier, final String domain) { +// public Uni> findByIdentifier(final String identifier, final String domain) { // return facade.findOne(Filters.and( // Filters.in("identifiers.identifier", identifier), // Filters.eq("identifiers.domain", domain) diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCryptoKeysRepository.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCryptoKeysRepository.java index 83a8ada..ef4915b 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCryptoKeysRepository.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCryptoKeysRepository.java @@ -13,7 +13,7 @@ import java.time.Instant; import java.util.List; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class MongoCryptoKeysRepository extends AbstractMongoRepository implements CryptoKeysRepository { @@ -25,37 +25,37 @@ public MongoCryptoKeysRepository(final MongoClientWrapper clientWrapper) { } @Override - public CompletableFuture> findByDomain(final String domain, final Page page) { + public Uni> findByDomain(final String domain, final Page page) { Bson sort = Sorts.descending("createdAt"); return facade.find(Filters.and( Filters.eq("domain", domain), - Filters.lte("createdAt", page.getCursor()) - ), sort, page.getCount()).subscribeAsCompletionStage(); + Filters.lte("createdAt", page.getCursor().toEpochMilli()) + ), sort, page.getCount()); } @Override - public CompletableFuture> findByAccountId(final String domain, final long accountId, + public Uni> findByAccountId(final String domain, final long accountId, final Page page) { Bson sort = Sorts.descending("createdAt"); return facade.find(Filters.and( Filters.eq("domain", domain), Filters.eq("accountId", accountId), - Filters.lte("createdAt", page.getCursor()) - ), sort, page.getCount()).subscribeAsCompletionStage(); + Filters.lte("createdAt", page.getCursor().toEpochMilli()) + ), sort, page.getCount()); } @Override - public CompletableFuture> findByAppId(final String domain, final long appId, + public Uni> findByAppId(final String domain, final long appId, final Page page) { Bson sort = Sorts.descending("createdAt"); return facade.find(Filters.and( Filters.eq("domain", domain), Filters.eq("appId", appId), - Filters.lte("createdAt", page.getCursor()) - ), sort, page.getCount()).subscribeAsCompletionStage(); + Filters.lte("createdAt", page.getCursor().toEpochMilli()) + ), sort, page.getCount()); } } diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoEventsRepository.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoEventsRepository.java index 1d9c1dd..1bbbae9 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoEventsRepository.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoEventsRepository.java @@ -12,8 +12,9 @@ import org.bson.conversions.Bson; import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.List; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class MongoEventsRepository extends AbstractMongoRepository @@ -27,15 +28,15 @@ public MongoEventsRepository(final MongoClientWrapper clientWrapper) { } @Override - public CompletableFuture> findByDomainDescending(final String domain, final Page page) { + public Uni> findByDomainDescending(final String domain, final Page page) { return facade.find(Filters.and( Filters.eq("domain", domain), - Filters.gte("createdAt", page.getCursor()) - ), page.getCount()).subscribeAsCompletionStage(); + Filters.lte("createdAt", page.getCursor().truncatedTo(ChronoUnit.MILLIS)) + ), page.getCount()); } @Override - public CompletableFuture> findByDomainAndChannelDescending(final String domain, + public Uni> findByDomainAndChannelDescending(final String domain, final String channel, final Page page) { Bson sort = Sorts.descending("createdAt"); @@ -43,7 +44,7 @@ public CompletableFuture> findByDomainAndChannelDescending(final S return facade.find(Filters.and( Filters.eq("domain", domain), Filters.eq("channel", channel), - Filters.lte("createdAt", page.getCursor()) - ), sort, page.getCount()).subscribeAsCompletionStage(); + Filters.lte("createdAt", page.getCursor().truncatedTo(ChronoUnit.MILLIS)) + ), sort, page.getCount()); } } diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoExchangeAttemptsRepository.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoExchangeAttemptsRepository.java index 4098d3d..918ae2d 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoExchangeAttemptsRepository.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoExchangeAttemptsRepository.java @@ -10,7 +10,7 @@ import java.time.Instant; import java.util.Collection; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class MongoExchangeAttemptsRepository extends AbstractMongoRepository @@ -24,24 +24,23 @@ public MongoExchangeAttemptsRepository(final MongoClientWrapper clientWrapper) { } @Override - public CompletableFuture> findByEntity(final long entityId) { + public Uni> findByEntity(final long entityId) { return facade.find(Filters.eq("entityId", entityId)) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } @Override - public CompletableFuture> findByEntityAndTimestamp + public Uni> findByEntityAndTimestamp (final long entityId, final Instant fromTimestamp) { return facade.find(Filters.and( Filters.eq("entityId", entityId), Filters.gte("createdAt", fromTimestamp) - )).subscribeAsCompletionStage().thenApply(Function.identity()); + )).map(Function.identity()); } @Override - public CompletableFuture> findByEntityAndTimestampAndExchange + public Uni> findByEntityAndTimestampAndExchange (final long entityId, final Instant fromTimestamp, final String fromExchange) { @@ -49,6 +48,6 @@ public CompletableFuture> findByEntity(final long Filters.eq("entityId", entityId), Filters.gte("createdAt", fromTimestamp), Filters.eq("exchangeFrom", fromExchange) - )).subscribeAsCompletionStage().thenApply(Function.identity()); + )).map(Function.identity()); } } diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoIdempotentRecordsRepository.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoIdempotentRecordsRepository.java index bbfb538..99bb34f 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoIdempotentRecordsRepository.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoIdempotentRecordsRepository.java @@ -10,7 +10,7 @@ import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class MongoIdempotentRecordsRepository extends AbstractMongoRepository implements IdempotentRecordsRepository { @@ -22,15 +22,14 @@ public MongoIdempotentRecordsRepository(final MongoClientWrapper clientWrapper) } @Override - public CompletableFuture> findByKey(final String key) { - return facade.find(Filters.eq("idempotentKey", key)) - .subscribeAsCompletionStage(); + public Uni> findByKey(final String key) { + return facade.find(Filters.eq("idempotentKey", key)); } @Override - public CompletableFuture> findByKeyAndEntityType(final String key, + public Uni> findByKeyAndEntityType(final String key, final String entityType) { return facade.findOne(Filters.and(Filters.eq("idempotentKey", key), - Filters.eq("entityType", entityType))).subscribeAsCompletionStage(); + Filters.eq("entityType", entityType))); } } diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoPermissionsRepository.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoPermissionsRepository.java index 366614e..1503ac4 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoPermissionsRepository.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoPermissionsRepository.java @@ -1,6 +1,8 @@ package com.nexblocks.authguard.dal.mongo.persistence; import com.google.inject.Inject; +import com.mongodb.ErrorCategory; +import com.mongodb.MongoWriteException; import com.mongodb.client.model.Filters; import com.nexblocks.authguard.dal.model.PermissionDO; import com.nexblocks.authguard.dal.mongo.common.AbstractMongoRepository; @@ -11,7 +13,10 @@ import java.util.Collection; import java.util.Optional; -import java.util.concurrent.CompletableFuture; + +import com.nexblocks.authguard.service.exceptions.ServiceConflictException; +import com.nexblocks.authguard.service.exceptions.codes.ErrorCode; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class MongoPermissionsRepository extends AbstractMongoRepository implements PermissionsRepository { @@ -23,32 +28,52 @@ public MongoPermissionsRepository(final MongoClientWrapper clientWrapper) { } @Override - public CompletableFuture> search(final String group, final String name, final String domain) { + public Uni save(final PermissionDO record) { + return super.save(record) + .onFailure() + .transform(throwable -> { + if (throwable instanceof MongoWriteException) { + return mapWriteErrors((MongoWriteException) throwable); + } + + return throwable; + }); + } + + @Override + public Uni> search(final String group, final String name, final String domain) { return facade.findOne(Filters.and( - Filters.eq("group", group), + Filters.eq("permissionGroup", group), Filters.eq("name", name), Filters.eq("domain", domain) - )).subscribeAsCompletionStage(); + )); } @Override - public CompletableFuture> getAll(final String domain, final Page page) { + public Uni> getAll(final String domain, final Page page) { return facade.find(Filters.and( Filters.eq("domain", domain), Filters.gt("_id", page.getCursor()) ), page.getCount()) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } @Override - public CompletableFuture> getAllForGroup(final String group, + public Uni> getAllForGroup(final String group, final String domain, final Page page) { return facade.find(Filters.and( - Filters.eq("group", group), + Filters.eq("permissionGroup", group), Filters.eq("domain", domain), Filters.gt("_id", page.getCursor()) - ), page.getCount()).subscribeAsCompletionStage().thenApply(Function.identity()); + ), page.getCount()).map(Function.identity()); + } + + private RuntimeException mapWriteErrors(final MongoWriteException e) { + if (e.getError().getCategory() == ErrorCategory.DUPLICATE_KEY) { + return new ServiceConflictException(ErrorCode.PERMISSION_ALREADY_EXIST, "Permission already exists"); + } + + return e; } } diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoRolesRepository.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoRolesRepository.java index 250c283..5b25b7e 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoRolesRepository.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoRolesRepository.java @@ -1,6 +1,8 @@ package com.nexblocks.authguard.dal.mongo.persistence; import com.google.inject.Inject; +import com.mongodb.ErrorCategory; +import com.mongodb.MongoWriteException; import com.mongodb.client.model.Filters; import com.nexblocks.authguard.dal.model.RoleDO; import com.nexblocks.authguard.dal.mongo.common.AbstractMongoRepository; @@ -11,7 +13,10 @@ import java.util.Collection; import java.util.Optional; -import java.util.concurrent.CompletableFuture; + +import com.nexblocks.authguard.service.exceptions.ServiceConflictException; +import com.nexblocks.authguard.service.exceptions.codes.ErrorCode; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class MongoRolesRepository extends AbstractMongoRepository implements RolesRepository { @@ -23,28 +28,48 @@ public MongoRolesRepository(final MongoClientWrapper clientWrapper) { } @Override - public CompletableFuture> getAll(final String domain, final Page page) { + public Uni save(final RoleDO record) { + return super.save(record) + .onFailure() + .transform(throwable -> { + if (throwable instanceof MongoWriteException) { + return mapWriteErrors((MongoWriteException) throwable); + } + + return throwable; + }); + } + + @Override + public Uni> getAll(final String domain, final Page page) { return facade.find(Filters.and( Filters.eq("domain", domain), Filters.gt("_id", page.getCursor()) ), page.getCount()) - .subscribeAsCompletionStage() - .thenApply(Function.identity()); + .map(Function.identity()); } @Override - public CompletableFuture> getByName(final String name, final String domain) { + public Uni> getByName(final String name, final String domain) { return facade.findOne(Filters.and( Filters.eq("name", name), Filters.eq("domain", domain) - )).subscribeAsCompletionStage(); + )); } @Override - public CompletableFuture> getMultiple(final Collection roles, final String domain) { + public Uni> getMultiple(final Collection roles, final String domain) { return facade.find(Filters.and( Filters.in("name", roles), Filters.eq("domain", domain) - )).subscribeAsCompletionStage().thenApply(Function.identity()); + )).map(Function.identity()); + } + + private RuntimeException mapWriteErrors(final MongoWriteException e) { + if (e.getError().getCategory() == ErrorCategory.DUPLICATE_KEY) { + return new ServiceConflictException(ErrorCode.ROLE_ALREADY_EXISTS, "Role already exists"); + } + + return e; } } diff --git a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoTotpKeysRepository.java b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoTotpKeysRepository.java index db14e44..a76cbc6 100644 --- a/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoTotpKeysRepository.java +++ b/dal/mongo-dal/mongo-persistence/src/main/java/com/nexblocks/authguard/dal/mongo/persistence/MongoTotpKeysRepository.java @@ -9,7 +9,7 @@ import com.nexblocks.authguard.dal.persistence.TotpKeysRepository; import java.util.List; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; import java.util.function.Function; public class MongoTotpKeysRepository extends AbstractMongoRepository @@ -22,10 +22,10 @@ public MongoTotpKeysRepository(final MongoClientWrapper clientWrapper) { } @Override - public CompletableFuture> findByAccountId(final String domain, final long accountId) { + public Uni> findByAccountId(final String domain, final long accountId) { return facade.find(Filters.and( Filters.eq("domain", domain), Filters.eq("accountId", accountId) - )).subscribeAsCompletionStage(); + )); } } diff --git a/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoAccountsRepositoryTest.java b/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoAccountsRepositoryTest.java index 95e2ee4..9159424 100644 --- a/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoAccountsRepositoryTest.java +++ b/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoAccountsRepositoryTest.java @@ -81,7 +81,7 @@ public void saveAndGetByEmail() { .build(); final AccountDO persisted = repository.save(account).subscribeAsCompletionStage().join(); - final Optional retrieved = repository.getByEmail(email.getEmail(), account.getDomain()).join(); + final Optional retrieved = repository.getByEmail(email.getEmail(), account.getDomain()).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } @@ -105,8 +105,7 @@ public void saveAndGetByIdentifier() { .build(); final AccountDO persisted = repository.save(account).subscribeAsCompletionStage().join(); - final Optional retrieved = repository.findByIdentifier(email.getEmail(), account.getDomain()) - .subscribeAsCompletionStage().join(); + final Optional retrieved = repository.findByIdentifier(email.getEmail(), account.getDomain()).subscribeAsCompletionStage().join(); assertThat(retrieved).contains(persisted); } diff --git a/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCredentialsRepositoryTest.java b/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCredentialsRepositoryTest.java index de6ac22..161f625 100644 --- a/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCredentialsRepositoryTest.java +++ b/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoCredentialsRepositoryTest.java @@ -46,8 +46,8 @@ public class MongoCredentialsRepositoryTest { // .build())) // .build(); // -// final CredentialsDO persisted = repository.save(credentials).join(); -// final Optional retrieved = repository.findByIdentifier(identifier, "main").join(); +// final CredentialsDO persisted = repository.save(credentials).subscribeAsCompletionStage().join(); +// final Optional retrieved = repository.findByIdentifier(identifier, "main").subscribeAsCompletionStage().join(); // // assertThat(retrieved).contains(persisted); // } @@ -72,7 +72,7 @@ public class MongoCredentialsRepositoryTest { // .build())) // .build(); // -// repository.save(first).join(); +// repository.save(first).subscribeAsCompletionStage().join(); // // assertThatThrownBy(() -> repository.save(second)) // .isInstanceOf(ServiceConflictException.class); diff --git a/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoEventsRepositoryTest.java b/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoEventsRepositoryTest.java new file mode 100644 index 0000000..712395d --- /dev/null +++ b/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoEventsRepositoryTest.java @@ -0,0 +1,72 @@ +package com.nexblocks.authguard.dal.mongo.persistence; + +import com.nexblocks.authguard.dal.model.EventDO; +import com.nexblocks.authguard.dal.model.PermissionDO; +import com.nexblocks.authguard.dal.mongo.common.setup.MongoClientWrapper; +import com.nexblocks.authguard.dal.mongo.persistence.bootstrap.IndicesBootstrap; +import com.nexblocks.authguard.dal.persistence.LongPage; +import com.nexblocks.authguard.dal.persistence.Page; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import java.time.Duration; +import java.time.Instant; +import java.util.List; +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class MongoEventsRepositoryTest { + private MongoEventsRepository repository; + + private EventDO first; + private EventDO second; + + @BeforeAll + public void setup() { + MongoDbTestContainer.start(); + final MongoClientWrapper clientWrapper = new MongoClientWrapper(MongoDbTestContainer.configuration()); + + repository = new MongoEventsRepository(clientWrapper); + + final IndicesBootstrap bootstrap = new IndicesBootstrap(clientWrapper); + + bootstrap.run().subscribeAsCompletionStage().join(); + + initialize(); + } + + protected void initialize() { + first = repository.save(EventDO.builder() + .id(Math.abs(UUID.randomUUID().getMostSignificantBits())) + .domain("main") + .channel("roles") + .createdAt(Instant.now().minus(Duration.ofHours(3))) + .build()).subscribeAsCompletionStage().join(); + + second = repository.save(EventDO.builder() + .id(Math.abs(UUID.randomUUID().getMostSignificantBits())) + .domain("main") + .channel("roles") + .createdAt(Instant.now().minus(Duration.ofHours(1))) + .build()).subscribeAsCompletionStage().join(); + } + + @Test + void findByDomainDescending() { + Instant cursor = Instant.now().plus(Duration.ofDays(100 * 365)); + + List events = repository.findByDomainDescending("main", Page.of(cursor, 10, cursor)) + .subscribeAsCompletionStage() + .join(); + + assertThat(events).hasSize(2); + } + + @Test + void findByDomainAndChannelDescending() { + } +} \ No newline at end of file diff --git a/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoPermissionsRepositoryTest.java b/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoPermissionsRepositoryTest.java new file mode 100644 index 0000000..8088b55 --- /dev/null +++ b/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoPermissionsRepositoryTest.java @@ -0,0 +1,73 @@ +package com.nexblocks.authguard.dal.mongo.persistence; + +import com.nexblocks.authguard.dal.model.PermissionDO; +import com.nexblocks.authguard.dal.mongo.common.setup.MongoClientWrapper; +import com.nexblocks.authguard.dal.mongo.persistence.bootstrap.IndicesBootstrap; +import com.nexblocks.authguard.dal.persistence.LongPage; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class MongoPermissionsRepositoryTest { + private MongoPermissionsRepository repository; + + private PermissionDO first; + private PermissionDO second; + + @BeforeAll + public void setup() { + MongoDbTestContainer.start(); + final MongoClientWrapper clientWrapper = new MongoClientWrapper(MongoDbTestContainer.configuration()); + + repository = new MongoPermissionsRepository(clientWrapper); + + final IndicesBootstrap bootstrap = new IndicesBootstrap(clientWrapper); + + bootstrap.run().subscribeAsCompletionStage().join(); + + initialize(); + } + + protected void initialize() { + first = repository.save(PermissionDO.builder() + .id(Math.abs(UUID.randomUUID().getMostSignificantBits())) + .permissionGroup("tests") + .name("first") + .domain("main") + .build()).subscribeAsCompletionStage().join(); + + second = repository.save(PermissionDO.builder() + .id(Math.abs(UUID.randomUUID().getMostSignificantBits())) + .permissionGroup("tests") + .name("second") + .domain("main") + .build()).subscribeAsCompletionStage().join(); + } + + @Test + public void search() { + assertThat(repository.search("tests", "first", "main").subscribeAsCompletionStage().join()).contains(first); + assertThat(repository.search("tests", "second", "main").subscribeAsCompletionStage().join()).contains(second); + } + + @Test + public void getAll() { + assertThat(repository.getAll("main", LongPage.of(null, 20)).subscribeAsCompletionStage().join()).containsOnly(first, second); + } + + @Test + public void getAllForGroup() { + assertThat(repository.getAllForGroup("tests", "main", LongPage.of(null, 20)).subscribeAsCompletionStage().join()).containsOnly(first, second); + } + + @Test + public void getAllForNonexistentGroup() { + assertThat(repository.getAllForGroup("nothing", "main", LongPage.of(null, 20)).subscribeAsCompletionStage().join()).isEmpty(); + } +} \ No newline at end of file diff --git a/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoRolesRepositoryTest.java b/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoRolesRepositoryTest.java index 30bf823..83ab07c 100644 --- a/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoRolesRepositoryTest.java +++ b/dal/mongo-dal/mongo-persistence/src/test/java/com/nexblocks/authguard/dal/mongo/persistence/MongoRolesRepositoryTest.java @@ -43,18 +43,18 @@ public void setup() { @Test public void getAll() { - assertThat(repository.getAll("main", LongPage.of(null, 20)).join()).containsOnly(first, second); + assertThat(repository.getAll("main", LongPage.of(null, 20)).subscribeAsCompletionStage().join()).containsOnly(first, second); } @Test public void getByName() { - assertThat(repository.getByName(first.getName(), "main").join()).contains(first); - assertThat(repository.getByName(second.getName(), "main").join()).contains(second); + assertThat(repository.getByName(first.getName(), "main").subscribeAsCompletionStage().join()).contains(first); + assertThat(repository.getByName(second.getName(), "main").subscribeAsCompletionStage().join()).contains(second); } @Test public void getMultiple() { - assertThat(repository.getMultiple(Arrays.asList(first.getName(), second.getName()), "main").join()) + assertThat(repository.getMultiple(Arrays.asList(first.getName(), second.getName()), "main").subscribeAsCompletionStage().join()) .containsOnly(first, second); } } \ No newline at end of file diff --git a/dal/postgres-dal/postgres-persistence/src/test/java/com/nexblocks/authguard/dal/postgres/persistence/PostgresContainer.java b/dal/postgres-dal/postgres-persistence/src/test/java/com/nexblocks/authguard/dal/postgres/persistence/PostgresContainer.java index 950fb73..cbde20b 100644 --- a/dal/postgres-dal/postgres-persistence/src/test/java/com/nexblocks/authguard/dal/postgres/persistence/PostgresContainer.java +++ b/dal/postgres-dal/postgres-persistence/src/test/java/com/nexblocks/authguard/dal/postgres/persistence/PostgresContainer.java @@ -47,6 +47,8 @@ private static Properties testProperties() { properties.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect"); properties.put("hibernate.hbm2ddl.auto", "update"); properties.put("javax.persistence.schema-generation.database.action", "drop-and-create"); +// properties.put("hibernate.format_sql", "true"); +// properties.put("hibernate.show_sql", "true"); return properties; } diff --git a/dal/postgres-dal/postgres-persistence/src/test/java/com/nexblocks/authguard/dal/postgres/persistence/PostgresCryptoKeysTests.java b/dal/postgres-dal/postgres-persistence/src/test/java/com/nexblocks/authguard/dal/postgres/persistence/PostgresCryptoKeysTests.java new file mode 100644 index 0000000..8417725 --- /dev/null +++ b/dal/postgres-dal/postgres-persistence/src/test/java/com/nexblocks/authguard/dal/postgres/persistence/PostgresCryptoKeysTests.java @@ -0,0 +1,15 @@ +package com.nexblocks.authguard.dal.postgres.persistence; + +import com.nexblocks.authguard.dal.hibernate.persistence.HibernateCryptoKeysRepositoryTests; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.TestInstance; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class PostgresCryptoKeysTests extends HibernateCryptoKeysRepositoryTests { + @BeforeAll + @Override + public void setup() { + PostgresContainer.start(); + initialize(PostgresContainer.getSessionProvider()); + } +} diff --git a/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountLocksRepository.java b/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountLocksRepository.java index 9ac2b4d..0ff4e49 100644 --- a/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountLocksRepository.java +++ b/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountLocksRepository.java @@ -14,7 +14,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class RedisAccountLocksRepository implements AccountLocksRepository { private static final Logger LOG = LoggerFactory.getLogger(RedisAccountLocksRepository.class); @@ -27,11 +27,11 @@ public RedisAccountLocksRepository(final LettuceClientWrapper clientWrapper) { } @Override - public CompletableFuture> findByAccountId(final long accountId) { + public Uni> findByAccountId(final long accountId) { LOG.debug("Getting lock for account {}", accountId); return redisRepository.get(key(accountId)) - .thenApply(opt -> opt + .map(opt -> opt .map(Collections::singleton) .orElseGet(Collections::emptySet)); } @@ -49,7 +49,7 @@ public Uni save(final AccountLockDO lock) { public Uni> delete(final long accountId) { LOG.debug("Removing lock for account {}", accountId); - return Uni.createFrom().completionStage(redisRepository.delete(key(accountId))); + return redisRepository.delete(key(accountId)); } private String key(final long accountId) { diff --git a/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountTokensRepository.java b/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountTokensRepository.java index 6fb7388..ecb81b6 100644 --- a/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountTokensRepository.java +++ b/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountTokensRepository.java @@ -12,7 +12,7 @@ import java.time.Duration; import java.time.Instant; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class RedisAccountTokensRepository implements AccountTokensRepository { private static final Logger LOG = LoggerFactory.getLogger(RedisAccountTokensRepository.class); @@ -34,14 +34,14 @@ public Uni save(final AccountTokenDO accountToken) { } @Override - public CompletableFuture> getByToken(final String token) { + public Uni> getByToken(final String token) { LOG.debug("Getting account token {}", token); return redisRepository.get(token); } @Override - public CompletableFuture> deleteToken(final String token) { + public Uni> deleteToken(final String token) { return redisRepository.delete(token); } } diff --git a/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisOtpRepository.java b/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisOtpRepository.java index cd96bbe..cda3c77 100644 --- a/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisOtpRepository.java +++ b/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisOtpRepository.java @@ -12,7 +12,6 @@ import java.time.Duration; import java.time.Instant; import java.util.Optional; -import java.util.concurrent.CompletableFuture; public class RedisOtpRepository implements OtpRepository { private static final Logger LOG = LoggerFactory.getLogger(RedisOtpRepository.class); @@ -37,6 +36,6 @@ public Uni save(final OneTimePasswordDO otp) { public Uni> getById(final long id) { LOG.debug("Getting OTP {}", id); - return Uni.createFrom().completionStage(redisRepository.get(id)); + return redisRepository.get(id); } } diff --git a/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisSessionsRepository.java b/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisSessionsRepository.java index 0d7fb88..eef11cd 100644 --- a/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisSessionsRepository.java +++ b/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/RedisSessionsRepository.java @@ -13,7 +13,7 @@ import java.time.Instant; import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class RedisSessionsRepository implements SessionsRepository { private static final Logger LOG = LoggerFactory.getLogger(RedisSessionsRepository.class); @@ -40,19 +40,19 @@ public Uni> getById(final long s) { } @Override - public CompletableFuture> getByToken(final String sessionToken) { + public Uni> getByToken(final String sessionToken) { LOG.debug("Getting session {}", sessionToken); return redisRepository.get(sessionToken); } @Override - public CompletableFuture> deleteByToken(final String sessionToken) { + public Uni> deleteByToken(final String sessionToken) { return redisRepository.delete(sessionToken); } @Override - public CompletableFuture> findByAccountId(final long accountId, final String domain) { + public Uni> findByAccountId(final long accountId, final String domain) { throw new UnsupportedOperationException("Retrieving sessions by account ID isn't " + "currently supported by Redis cache implementation"); } diff --git a/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/core/RedisRepository.java b/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/core/RedisRepository.java index a88fc14..84c6cc3 100644 --- a/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/core/RedisRepository.java +++ b/dal/redis-cache/src/main/java/com/nexblocks/authguard/dal/cache/redis/core/RedisRepository.java @@ -5,7 +5,7 @@ import io.smallrye.mutiny.Uni; import java.util.Optional; -import java.util.concurrent.CompletableFuture; +import io.smallrye.mutiny.Uni; public class RedisRepository { private final EntityCodec entityCodec; @@ -16,12 +16,11 @@ public RedisRepository(final LettuceClientWrapper clientWrapper, final Class this.entityCodec = new MsgPackCodec<>(entityType); } - public CompletableFuture> get(final String key) { + public Uni> get(final String key) { final RedisAsyncCommands commands = clientWrapper.getConnection().async(); - return commands.get(key) - .toCompletableFuture() - .thenApply(value -> { + return Uni.createFrom().completionStage(commands.get(key).toCompletableFuture()) + .map(value -> { if (value == null) { return Optional.empty(); } else { @@ -30,7 +29,7 @@ public CompletableFuture> get(final String key) { }); } - public CompletableFuture> get(final long key) { + public Uni> get(final long key) { return get(String.valueOf(key)); } @@ -38,36 +37,35 @@ public Uni save(final String key, final T value, final long ttl) { final byte[] serialized = entityCodec.serialize(value); final RedisAsyncCommands commands = clientWrapper.getConnection().async(); - return Uni.createFrom().completionStage(commands.set(key, serialized) - .thenCompose(ignored -> commands.expire(key, ttl)) - .toCompletableFuture() - .thenApply(stored -> value)); + return Uni.createFrom().completionStage( + commands.set(key, serialized) + .thenCompose(ignored -> commands.expire(key, ttl)) + .toCompletableFuture() + ).map(stored -> value); } public Uni save(final String key, final T value) { final byte[] serialized = entityCodec.serialize(value); final RedisAsyncCommands commands = clientWrapper.getConnection().async(); - return Uni.createFrom().completionStage(commands.set(key, serialized) - .toCompletableFuture() - .thenApply(stored -> value)); + return Uni.createFrom().completionStage(commands.set(key, serialized).toCompletableFuture()) + .map(stored -> value); } public Uni save(final long key, final T value) { return save(String.valueOf(key), value); } - public CompletableFuture> delete(final String key) { + public Uni> delete(final String key) { final RedisAsyncCommands commands = clientWrapper.getConnection().async(); return get(key) - .thenCompose(value -> { + .flatMap(value -> { if (value.isPresent()) { - return commands.del(key) - .toCompletableFuture() - .thenApply(ignored -> value); + return Uni.createFrom().completionStage(commands.del(key).toCompletableFuture()) + .map(ignored -> value); } else { - return CompletableFuture.completedFuture(Optional.empty()); + return Uni.createFrom().item(Optional.empty()); } }); } diff --git a/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountLocksRepositoryTest.java b/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountLocksRepositoryTest.java index 5292444..2be2e6e 100644 --- a/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountLocksRepositoryTest.java +++ b/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountLocksRepositoryTest.java @@ -46,12 +46,12 @@ class RedisAccountLocksRepositoryTest { // .expiresAt(Instant.now(Clock.systemUTC()).plus(Duration.ofMinutes(5))) // .build(); // -// final AccountLockDO cached = redisAccountLocksRepository.save(lock).join(); +// final AccountLockDO cached = redisAccountLocksRepository.save(lock).subscribeAsCompletionStage().join(); // // assertThat(cached).isEqualTo(lock); // // final Collection retrieved = redisAccountLocksRepository.findByAccountId(lock.getAccountId()) -// .join(); +// .subscribeAsCompletionStage().join(); // // assertThat(retrieved).contains(lock); // } diff --git a/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountTokensRepositoryTest.java b/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountTokensRepositoryTest.java index 74af3c2..fb475ca 100644 --- a/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountTokensRepositoryTest.java +++ b/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisAccountTokensRepositoryTest.java @@ -47,12 +47,12 @@ class RedisAccountTokensRepositoryTest { // .expiresAt(Instant.now(Clock.systemUTC()).plus(Duration.ofMinutes(5))) // .build(); // -// final AccountTokenDO cached = redisAccountTokensRepository.save(accountToken).join(); +// final AccountTokenDO cached = redisAccountTokensRepository.save(accountToken).subscribeAsCompletionStage().join(); // // assertThat(cached).isEqualTo(accountToken); // // final Optional retrieved = redisAccountTokensRepository.getByToken(accountToken.getToken()) -// .join(); +// .subscribeAsCompletionStage().join(); // // assertThat(retrieved).isPresent() // .get() diff --git a/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisOtpRepositoryTest.java b/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisOtpRepositoryTest.java index 0487fea..b080ba8 100644 --- a/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisOtpRepositoryTest.java +++ b/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisOtpRepositoryTest.java @@ -49,11 +49,11 @@ class RedisOtpRepositoryTest { // .expiresAt(Instant.now(Clock.systemUTC()).plus(Duration.ofMinutes(5))) // .build(); // -// final OneTimePasswordDO cached = redisOtpRepository.save(otp).join(); +// final OneTimePasswordDO cached = redisOtpRepository.save(otp).subscribeAsCompletionStage().join(); // // assertThat(cached).isEqualTo(otp); // -// final Optional retrieved = redisOtpRepository.getById(otp.getId()).join(); +// final Optional retrieved = redisOtpRepository.getById(otp.getId()).subscribeAsCompletionStage().join(); // // assertThat(retrieved).isPresent() // .get() diff --git a/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisSessionsRepositoryTest.java b/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisSessionsRepositoryTest.java index c4830b1..50f12e0 100644 --- a/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisSessionsRepositoryTest.java +++ b/dal/redis-cache/src/test/java/com/nexblocks/authguard/dal/cache/redis/RedisSessionsRepositoryTest.java @@ -47,12 +47,12 @@ class RedisSessionsRepositoryTest { // .expiresAt(Instant.now(Clock.systemUTC()).plus(Duration.ofMinutes(5))) // .build(); // -// final SessionDO cached = redisSessionsRepository.save(session).join(); +// final SessionDO cached = redisSessionsRepository.save(session).subscribeAsCompletionStage().join(); // // assertThat(cached).isEqualTo(session); // // final Optional retrieved = redisSessionsRepository.getByToken(session.getSessionToken()) -// .join(); +// .subscribeAsCompletionStage().join(); // // assertThat(retrieved).isPresent() // .get()