diff --git a/ledgers-app/src/main/java/de/adorsys/ledgers/app/server/SwaggerConfig.java b/ledgers-app/src/main/java/de/adorsys/ledgers/app/server/SwaggerConfig.java index a8a938d05..17bfd87e7 100644 --- a/ledgers-app/src/main/java/de/adorsys/ledgers/app/server/SwaggerConfig.java +++ b/ledgers-app/src/main/java/de/adorsys/ledgers/app/server/SwaggerConfig.java @@ -21,7 +21,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - @Configuration @RequiredArgsConstructor public class SwaggerConfig implements WebMvcConfigurer { diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/AccessScope.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/AccessScope.java index 08a6f28ba..ca929a86a 100644 --- a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/AccessScope.java +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/AccessScope.java @@ -11,4 +11,5 @@ public enum AccessScope { WRITE, EXECUTE, DELETE; + } diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/AgentAccess.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/AgentAccess.java new file mode 100644 index 000000000..40db25d8e --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/AgentAccess.java @@ -0,0 +1,13 @@ +package de.adorsys.ledgers.baam.db.domain; + +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +@Entity +@Table(name = "agent_access") +public class AgentAccess extends BankAccountAccess { + + public AgentAccess() { + super(); + } +} diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/AuditorAccess.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/AuditorAccess.java new file mode 100644 index 000000000..c4b547319 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/AuditorAccess.java @@ -0,0 +1,17 @@ +package de.adorsys.ledgers.baam.db.domain; + +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +@Entity +@Table(name = "auditor_access") +public class AuditorAccess extends BankAccountAccess { + + public AuditorAccess() { + super(); + this.setStatus(AccessStatus.ACTIVE); // By default, AuditorAccess is active + this.setWeight(1.0); // Weight is always 1 for Auditor Access + } + +} + diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/BankAccountAccess.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/BankAccountAccess.java index b3123268b..a6d6316b8 100644 --- a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/BankAccountAccess.java +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/BankAccountAccess.java @@ -38,4 +38,9 @@ public abstract class BankAccountAccess { private String policies; // Policies associated with the access + public BankAccountAccess(@NotNull String accountId, @NotNull String entityId) { + this.accountId = accountId; + this.entityId = entityId; + } + } diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/ConsentType.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/ConsentType.java new file mode 100644 index 000000000..9f08df4f5 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/ConsentType.java @@ -0,0 +1,35 @@ +package de.adorsys.ledgers.baam.db.domain; + +/** + * Enum representing different types of consents in the context of open banking. + * These consents define the scope of access granted to third-party service providers. + */ +public enum ConsentType { + + /* + * The need to implement Other Open Banking Services may call for the creation of more ConsentTypes + */ + + /** + * Consent allowing the third party to access account information such as + * balances, transaction histories, and account details without modifying them. + * This is typically used by Account Information Service Providers (AISP). + */ + ACCOUNT_INFORMATION_CONSENT, + + /** + * Consent allowing the third party to initiate payments from the account + * on behalf of the account holder. This is typically used by Payment + * Initiation Service Providers (PISP). + */ + PAYMENT_INITIATION_CONSENT, + + /** + * Consent allowing the third party to verify whether the account has + * sufficient funds for a particular transaction. No additional account + * information is provided beyond the confirmation of funds. + */ + CONFIRMATION_OF_FUNDS_CONSENT + +} + diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/DelegatedAccess.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/DelegatedAccess.java new file mode 100644 index 000000000..1648b929f --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/DelegatedAccess.java @@ -0,0 +1,20 @@ +package de.adorsys.ledgers.baam.db.domain; + +import jakarta.persistence.Entity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +@Entity +public class DelegatedAccess extends BankAccountAccess { + + private DelegatedAccessType delegatedType; + + public DelegatedAccess() { + super(); + } + +} + + diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/DelegatedAccessType.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/DelegatedAccessType.java new file mode 100644 index 000000000..39316a1d6 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/DelegatedAccessType.java @@ -0,0 +1,12 @@ +package de.adorsys.ledgers.baam.db.domain; + +/** + * Enum representing different types of Power of Attorney. + */ +public enum DelegatedAccessType { + GENERAL, + LIMITED, + DURABLE, + SPRINGING +} + diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/HolderAccess.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/HolderAccess.java new file mode 100644 index 000000000..8f2daee89 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/HolderAccess.java @@ -0,0 +1,19 @@ +package de.adorsys.ledgers.baam.db.domain; + +import jakarta.persistence.*; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Entity +@Table(name = "holder_access") +@Data +@NoArgsConstructor(force = true) +public class HolderAccess extends BankAccountAccess { + + // Constructor for creating HolderAccess with full access + public HolderAccess(String entityId, String accountId) { + super(); + this.setEntityId(entityId); + this.setAccountId(accountId); + } +} \ No newline at end of file diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/ManagerAccess.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/ManagerAccess.java new file mode 100644 index 000000000..4a4084ec9 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/ManagerAccess.java @@ -0,0 +1,26 @@ +package de.adorsys.ledgers.baam.db.domain; + +import jakarta.persistence.*; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; + + +import java.util.HashSet; +import java.util.Set; + + +@Entity +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ManagerAccess extends BankAccountAccess { + + + @ElementCollection + private Set managedAccessTypes = new HashSet<>(); + + @ElementCollection + private Set scopeOfAccess = new HashSet<>(); + +} diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/ThirdPartyAccess.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/ThirdPartyAccess.java new file mode 100644 index 000000000..f6987d628 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/ThirdPartyAccess.java @@ -0,0 +1,26 @@ +package de.adorsys.ledgers.baam.db.domain; + +import jakarta.persistence.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +@EqualsAndHashCode(callSuper = true) +@Data +@Entity +@Table(name = "third_party_access") +public class ThirdPartyAccess extends BankAccountAccess { + + @Column(name = "consent_type") + @Enumerated(EnumType.STRING) + private ConsentType consentType; + + @Column(name = "expiration_date") + private LocalDateTime expirationDate; + + @Column(name = "max_transaction_amount") + private Double maxTransactionAmount; + +} + diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/TypeOfManagedAccess.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/TypeOfManagedAccess.java new file mode 100644 index 000000000..ce23593c7 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/domain/TypeOfManagedAccess.java @@ -0,0 +1,8 @@ +package de.adorsys.ledgers.baam.db.domain; + +public enum TypeOfManagedAccess { + AGENT_ACCESS, + AUDITOR_ACCESS, + POA_ACCESS; + +} \ No newline at end of file diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/AgentAccessRepository.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/AgentAccessRepository.java new file mode 100644 index 000000000..4983ca562 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/AgentAccessRepository.java @@ -0,0 +1,11 @@ +package de.adorsys.ledgers.baam.db.repository; + +import de.adorsys.ledgers.baam.db.domain.AgentAccess; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AgentAccessRepository extends JpaRepository { + +} + diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/AuditorAccessRepository.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/AuditorAccessRepository.java new file mode 100644 index 000000000..f7eab8206 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/AuditorAccessRepository.java @@ -0,0 +1,10 @@ +package de.adorsys.ledgers.baam.db.repository; + +import de.adorsys.ledgers.baam.db.domain.AuditorAccess; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AuditorAccessRepository extends JpaRepository { + +} diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/DelegatedAccessRepository.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/DelegatedAccessRepository.java new file mode 100644 index 000000000..ae81fd822 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/DelegatedAccessRepository.java @@ -0,0 +1,13 @@ +package de.adorsys.ledgers.baam.db.repository; + +import de.adorsys.ledgers.baam.db.domain.DelegatedAccess; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface DelegatedAccessRepository extends JpaRepository { + + List findByAccountId(String accountId); +} diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/HolderAccessRepository.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/HolderAccessRepository.java new file mode 100644 index 000000000..6095cfa53 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/HolderAccessRepository.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2018-2023 adorsys GmbH and Co. KG + * All rights are reserved. + */ + +package de.adorsys.ledgers.baam.db.repository; + +import de.adorsys.ledgers.baam.db.domain.HolderAccess; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface HolderAccessRepository extends JpaRepository { +} diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/ManagerAccessRepository.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/ManagerAccessRepository.java new file mode 100644 index 000000000..b0ad9dd89 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/ManagerAccessRepository.java @@ -0,0 +1,13 @@ +package de.adorsys.ledgers.baam.db.repository; + + +import de.adorsys.ledgers.baam.db.domain.ManagerAccess; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + + + +@Repository +public interface ManagerAccessRepository extends JpaRepository { + +} \ No newline at end of file diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/ThirdPartyAccessRepository.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/ThirdPartyAccessRepository.java new file mode 100644 index 000000000..7cf4ede1c --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/main/java/de/adorsys/ledgers/baam/db/repository/ThirdPartyAccessRepository.java @@ -0,0 +1,11 @@ +package de.adorsys.ledgers.baam.db.repository; + +import de.adorsys.ledgers.baam.db.domain.ThirdPartyAccess; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ThirdPartyAccessRepository extends JpaRepository { + +} + diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/AgentAccessRepositoryIT.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/AgentAccessRepositoryIT.java new file mode 100644 index 000000000..416ca6e34 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/AgentAccessRepositoryIT.java @@ -0,0 +1,51 @@ +package de.adorsys.ledgers.baam.db.repository; + +import com.github.springtestdbunit.DbUnitTestExecutionListener; +import de.adorsys.ledgers.baam.db.domain.*; +import de.adorsys.ledgers.baam.db.test.BaamRepositoryApplication; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; +import org.springframework.test.context.transaction.TransactionalTestExecutionListener; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@SpringBootTest(classes = BaamRepositoryApplication.class) +@ExtendWith(SpringExtension.class) +@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, + TransactionalTestExecutionListener.class, + DbUnitTestExecutionListener.class}) + +public class AgentAccessRepositoryIT { + + @Autowired + private AgentAccessRepository agentAccessRepository; + + @Test + void test_create_ok() { + // Given + agentAccessRepository.deleteAll(); // Clean up any existing records + AgentAccess agentAccess = new AgentAccess(); + agentAccess.setId("1"); + agentAccess.setAccountId("1L"); + agentAccess.setEntityId("2L"); + agentAccess.setScope(AccessScope.EXECUTE); // Example action scope + agentAccess.setWeight(0.5); // Partial authority + agentAccess.setConditions(AccessCondition.AMOUNT_RESTRICTED); // Example condition + agentAccess.setStatus(AccessStatus.ACTIVE); // Agent is active + agentAccess.setPolicies("Payment-Only Policy"); // Example policy + + // When + AgentAccess savedAccess = agentAccessRepository.save(agentAccess); + + // Retrieve the saved object + AgentAccess result = agentAccessRepository.findById(savedAccess.getId()).orElse(null); + + // Then + assertNotNull(result); + } +} diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/AuditorAccessRepositoryIT.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/AuditorAccessRepositoryIT.java new file mode 100644 index 000000000..8eb32a978 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/AuditorAccessRepositoryIT.java @@ -0,0 +1,51 @@ +package de.adorsys.ledgers.baam.db.repository; + +import com.github.springtestdbunit.DbUnitTestExecutionListener; +import de.adorsys.ledgers.baam.db.domain.AccessStatus; +import de.adorsys.ledgers.baam.db.domain.AuditorAccess; +import de.adorsys.ledgers.baam.db.test.BaamRepositoryApplication; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; +import org.springframework.test.context.transaction.TransactionalTestExecutionListener; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@SpringBootTest(classes = BaamRepositoryApplication.class) +@ExtendWith(SpringExtension.class) +@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, + TransactionalTestExecutionListener.class, + DbUnitTestExecutionListener.class}) +public class AuditorAccessRepositoryIT { + + @Autowired + private AuditorAccessRepository auditorAccessRepository; + + @Test + void test_createAuditorAccess_ok() { + // Given + auditorAccessRepository.deleteAll(); // Clean up any existing records + + AuditorAccess auditorAccess = new AuditorAccess(); + auditorAccess.setId("1"); + auditorAccess.setAccountId("100L"); + auditorAccess.setEntityId("200L"); + auditorAccess.setStatus(AccessStatus.ACTIVE); // Setting status explicitly + + // When + AuditorAccess savedAccess = auditorAccessRepository.save(auditorAccess); + + // Retrieve the saved object + AuditorAccess result = auditorAccessRepository.findById(savedAccess.getId()).orElse(null); + + // Then + assertNotNull(result); + assertEquals("100L", result.getAccountId()); + assertEquals(AccessStatus.ACTIVE, result.getStatus()); + } +} diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/DelegatedAccessRepositoryTest.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/DelegatedAccessRepositoryTest.java new file mode 100644 index 000000000..11e99a1c8 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/DelegatedAccessRepositoryTest.java @@ -0,0 +1,70 @@ +package de.adorsys.ledgers.baam.db.repository; + +import com.github.springtestdbunit.DbUnitTestExecutionListener; +import de.adorsys.ledgers.baam.db.domain.DelegatedAccess; +import de.adorsys.ledgers.baam.db.domain.DelegatedAccessType; +import de.adorsys.ledgers.baam.db.test.BaamRepositoryApplication; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; +import org.springframework.test.context.transaction.TransactionalTestExecutionListener; + +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest(classes = BaamRepositoryApplication.class) + +@ExtendWith(SpringExtension.class) +@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, + TransactionalTestExecutionListener.class, + DbUnitTestExecutionListener.class}) +class DelegatedAccessRepositoryTest { + + @Autowired + private DelegatedAccessRepository delegatedAccessRepository; + + private DelegatedAccess delegatedAccess; + + @BeforeEach + void setUp() { + // Create a valid DelegatedAccess instance + delegatedAccess = new DelegatedAccess(); + delegatedAccess.setId("1"); + delegatedAccess.setAccountId("1"); + delegatedAccess.setDelegatedType(DelegatedAccessType.GENERAL); + delegatedAccess.setAccountId("accountId123"); + } + + @Test + void testSaveDelegatedAccess() { + // Save DelegatedAccess and verify it was saved + DelegatedAccess savedDelegatedAccess = delegatedAccessRepository.save(delegatedAccess); + assertNotNull(savedDelegatedAccess.getId(), "Saved DelegatedAccess should have an ID"); + assertEquals(DelegatedAccessType.GENERAL, savedDelegatedAccess.getDelegatedType(), "DelegatedAccess type should be GENERAL"); + } + + @Test + void testFindDelegatedAccessById() { + // Save DelegatedAccess and retrieve it by ID + DelegatedAccess savedDelegatedAccess = delegatedAccessRepository.save(delegatedAccess); + Optional foundDelegatedAccess = delegatedAccessRepository.findById(savedDelegatedAccess.getId()); + + assertTrue(foundDelegatedAccess.isPresent(), "DelegatedAccess should be found by ID"); + } + + @Test + void testFindDelegatedAccessByAccountId() { + // Save DelegatedAccess and retrieve by account ID + delegatedAccessRepository.save(delegatedAccess); + List foundDelegatedAccess = delegatedAccessRepository.findByAccountId("accountId123"); + + assertEquals(1, foundDelegatedAccess.size(), "There should be one DelegatedAccess for account 'accountId123'"); + } +} diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/HolderAccessRepositoryIT.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/HolderAccessRepositoryIT.java new file mode 100644 index 000000000..830ba3fdb --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/HolderAccessRepositoryIT.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2018-2023 adorsys GmbH and Co. KG + * All rights are reserved. + */ + +package de.adorsys.ledgers.baam.db.repository; + +import com.github.springtestdbunit.DbUnitTestExecutionListener; +import de.adorsys.ledgers.baam.db.domain.AccessCondition; +import de.adorsys.ledgers.baam.db.domain.AccessScope; +import de.adorsys.ledgers.baam.db.test.BaamRepositoryApplication; +import de.adorsys.ledgers.baam.db.domain.HolderAccess; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; +import org.springframework.test.context.transaction.TransactionalTestExecutionListener; + + +@SpringBootTest(classes = BaamRepositoryApplication.class) // Main application class +@ExtendWith(SpringExtension.class) +@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, + TransactionalTestExecutionListener.class, + DbUnitTestExecutionListener.class}) +public class HolderAccessRepositoryIT { + + @Autowired + private HolderAccessRepository repository; + void mockTest() { + repository.deleteAll(); + HolderAccess access = new HolderAccess(); + access.setId("1"); + access.setAccountId("1L"); + access.setEntityId("1L"); + access.setWeight(1); + access.setScope(AccessScope.READ); + access.setConditions(AccessCondition.AMOUNT_RESTRICTED); + access.setPolicies("Standard Policy"); + repository.save(access); + + HolderAccess result = repository.findById(access.getId()).orElse(null); + + assert result != null; + + + + } + +} \ No newline at end of file diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/ManagerAccessRepositoryIT.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/ManagerAccessRepositoryIT.java new file mode 100644 index 000000000..2b14ed5f6 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/ManagerAccessRepositoryIT.java @@ -0,0 +1,102 @@ +package de.adorsys.ledgers.baam.db.repository; + +import de.adorsys.ledgers.baam.db.domain.AccessScope; +import de.adorsys.ledgers.baam.db.domain.AccessStatus; +import de.adorsys.ledgers.baam.db.domain.ManagerAccess; +import de.adorsys.ledgers.baam.db.domain.TypeOfManagedAccess; +import de.adorsys.ledgers.baam.db.test.BaamRepositoryApplication; +import jakarta.transaction.Transactional; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.Rollback; + +import java.util.HashSet; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest(classes = BaamRepositoryApplication.class) +@Transactional // Ensures that each test is executed within a transaction and rolled back afterwards +@Rollback // Reverts the changes made to the database after each test +public class ManagerAccessRepositoryIT { + + + @Autowired + private ManagerAccessRepository managerAccessRepository; + + // Variable to store a ManagerAccess object + private ManagerAccess managerAccess; + + @BeforeEach + public void setup() { + // Initialize a ManagerAccess object for testing + managerAccess = new ManagerAccess(); + managerAccess.setId("1"); + managerAccess.setWeight(0.8); + managerAccess.setStatus(AccessStatus.ACTIVE); + managerAccess.setManagedAccessTypes(new HashSet<>(Set.of(TypeOfManagedAccess.AGENT_ACCESS))); + managerAccess.setScopeOfAccess(new HashSet<>(Set.of(AccessScope.READ))); + } + + @Test + public void testCreateManagerAccess() { + // Save to the database via the injected repository + ManagerAccess savedManager = managerAccessRepository.save(managerAccess); + + // Verify that the object is properly saved and has a generated ID + assertThat(savedManager.getId()).isNotNull(); + } + + @Test + public void testFindManagerAccessById() { + // Save the ManagerAccess entity to the database + managerAccessRepository.save(managerAccess); + String managerId = managerAccess.getId(); + + // Retrieve the ManagerAccess object from the database using the ID + ManagerAccess foundManager = managerAccessRepository.findById(managerId).orElse(null); + + // Verify that the retrieved object matches the one that was saved + assertThat(foundManager).isNotNull(); + assertThat(foundManager.getStatus()).isEqualTo(AccessStatus.ACTIVE); + assertThat(foundManager.getManagedAccessTypes()).contains(TypeOfManagedAccess.AGENT_ACCESS); + assertThat(foundManager.getScopeOfAccess()).contains(AccessScope.READ); + } + + @Test + public void testUpdateManagerAccess() { + // Initially save a ManagerAccess + managerAccessRepository.save(managerAccess); + + // Modify the details of the ManagerAccess + + managerAccess.setStatus(AccessStatus.RESTRICTED); + + Set newScopes = new HashSet<>(); + newScopes.add(AccessScope.EXECUTE); + managerAccess.setScopeOfAccess(newScopes); + // Update the record + ManagerAccess updatedManager = managerAccessRepository.save(managerAccess); + + // Verify that the information has been updated correctly + + assertThat(updatedManager.getStatus()).isEqualTo(AccessStatus.RESTRICTED); + assertThat(updatedManager.getScopeOfAccess()).contains(AccessScope.EXECUTE); + } + + @Test + public void testDeleteManagerAccess() { + // Save a ManagerAccess to the database + managerAccessRepository.save(managerAccess); + String managerId = managerAccess.getId(); + + // Delete the record + managerAccessRepository.deleteById(managerId); + + // Verify that the entity has been successfully deleted + ManagerAccess deletedManager = managerAccessRepository.findById(managerId).orElse(null); + assertThat(deletedManager).isNull(); + } +} \ No newline at end of file diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/ThirdPartyAccessRepositoryIT.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/ThirdPartyAccessRepositoryIT.java new file mode 100644 index 000000000..fcd8282b6 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-repository/src/test/java/de/adorsys/ledgers/baam/db/repository/ThirdPartyAccessRepositoryIT.java @@ -0,0 +1,58 @@ +package de.adorsys.ledgers.baam.db.repository; + +import com.github.springtestdbunit.DbUnitTestExecutionListener; +import de.adorsys.ledgers.baam.db.domain.AccessStatus; +import de.adorsys.ledgers.baam.db.domain.ConsentType; +import de.adorsys.ledgers.baam.db.domain.ThirdPartyAccess; +import de.adorsys.ledgers.baam.db.test.BaamRepositoryApplication; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; +import org.springframework.test.context.transaction.TransactionalTestExecutionListener; + +import java.time.LocalDateTime; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@SpringBootTest(classes = BaamRepositoryApplication.class) +@ExtendWith(SpringExtension.class) +@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, + TransactionalTestExecutionListener.class, + DbUnitTestExecutionListener.class}) +public class ThirdPartyAccessRepositoryIT { + + @Autowired + private ThirdPartyAccessRepository thirdPartyAccessRepository; + + @Test + void test_createThirdPartyAccess_ok() { + // Given + thirdPartyAccessRepository.deleteAll(); // Clean up any existing records + + ThirdPartyAccess thirdPartyAccess = new ThirdPartyAccess(); + thirdPartyAccess.setId("1"); + thirdPartyAccess.setAccountId("100L"); + thirdPartyAccess.setEntityId("300L"); + thirdPartyAccess.setConsentType(ConsentType.PAYMENT_INITIATION_CONSENT); + thirdPartyAccess.setExpirationDate(LocalDateTime.now().plusDays(90)); + thirdPartyAccess.setMaxTransactionAmount(1000.00); + thirdPartyAccess.setStatus(AccessStatus.ACTIVE); + + // When + ThirdPartyAccess savedAccess = thirdPartyAccessRepository.save(thirdPartyAccess); + + // Retrieve the saved object + ThirdPartyAccess result = thirdPartyAccessRepository.findById(savedAccess.getId()).orElse(null); + + // Then + assertNotNull(result); + assertEquals("100L", result.getAccountId()); + assertEquals(ConsentType.PAYMENT_INITIATION_CONSENT, result.getConsentType()); + assertEquals(1000.00, result.getMaxTransactionAmount()); + } +} diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/pom.xml b/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/pom.xml index 8bb49a07b..fff8cd1c9 100644 --- a/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/pom.xml +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/pom.xml @@ -24,5 +24,30 @@ UTF-8 ../.. + + + de.adorsys.ledgers + ledgers-utils + 6.1-SNAPSHOT + compile + + + org.springframework + spring-web + + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + + + + de.adorsys.ledgers + ledgers-bank-account-access-repository + 6.1-SNAPSHOT + compile + + + \ No newline at end of file diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/src/main/java/de/adorsys/ledgers/baam/api/exception/BankAccountAccessHttpStatusResolve.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/src/main/java/de/adorsys/ledgers/baam/api/exception/BankAccountAccessHttpStatusResolve.java new file mode 100644 index 000000000..a99ffcd44 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/src/main/java/de/adorsys/ledgers/baam/api/exception/BankAccountAccessHttpStatusResolve.java @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2018-2023 adorsys GmbH and Co. KG + * All rights are reserved. + */ + +package de.adorsys.ledgers.baam.api.exception; + +public class BankAccountAccessHttpStatusResolve { +} diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/src/main/java/de/adorsys/ledgers/baam/api/exception/ExceptionAdvisor.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/src/main/java/de/adorsys/ledgers/baam/api/exception/ExceptionAdvisor.java new file mode 100644 index 000000000..971e5e445 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/src/main/java/de/adorsys/ledgers/baam/api/exception/ExceptionAdvisor.java @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2018-2023 adorsys GmbH and Co. KG + * All rights are reserved. + */ + +package de.adorsys.ledgers.baam.api.exception; + +public class ExceptionAdvisor { + +} diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/src/main/java/de/adorsys/ledgers/baam/api/exception/GlobalExceptionHandler.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/src/main/java/de/adorsys/ledgers/baam/api/exception/GlobalExceptionHandler.java new file mode 100644 index 000000000..f8130ceba --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/src/main/java/de/adorsys/ledgers/baam/api/exception/GlobalExceptionHandler.java @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2018-2023 adorsys GmbH and Co. KG + * All rights are reserved. + */ + +package de.adorsys.ledgers.baam.api.exception; + +public class GlobalExceptionHandler { +} diff --git a/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/src/main/java/de/adorsys/ledgers/baam/api/resource/BankAccountAccessAPI.java b/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/src/main/java/de/adorsys/ledgers/baam/api/resource/BankAccountAccessAPI.java new file mode 100644 index 000000000..9f40d8661 --- /dev/null +++ b/ledgers-bank-account-access-management/ledgers-bank-account-access-rest-api/src/main/java/de/adorsys/ledgers/baam/api/resource/BankAccountAccessAPI.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2018-2023 adorsys GmbH and Co. KG + * All rights are reserved. + */ + +package de.adorsys.ledgers.baam.api.resource; +import de.adorsys.ledgers.baam.db.domain.BankAccountAccess; +import io.swagger.v3.oas.annotations.*; +import io.swagger.v3.oas.annotations.tags.*; +import org.springframework.http.*; +import org.springframework.web.bind.annotation.*; +import java.util.*; + +@Tag(name = "Bank Account Access", description = "Provide endpoint for managing bank account access.") + +public interface BankAccountAccessAPI { + String BASE_PATH = "/bank-account-access"; + + @PostMapping + @Operation(summary = "Create Bank Account Access", description = "Creates a new bank account access entry") + ResponseEntity createAccess(@RequestBody BankAccountAccess access); + + @GetMapping("/{Id}") + @Operation(summary = "Get Bank Account Access", description = "Retrieves a bank account access entry by ID") + ResponseEntity getAccessById(@PathVariable String Id); + + @GetMapping + @Operation(summary = "Get All Bank Account Accesses details", description = "Retrieves all bank account access entries") + ResponseEntity> getAllAccesses(); + + @PutMapping("/{Id}") + @Operation(summary = "Update Bank Account Access", description = "Updates an existing bank account access entry") + ResponseEntity updateAccess(@PathVariable String Id, @RequestBody BankAccountAccess access); + + @DeleteMapping("/{Id}") + @Operation(summary = "Delete Bank Account Access", description = "Deletes a bank account access entry by ID") + ResponseEntity deleteAccess(@PathVariable String Id); +} diff --git a/ledgers-user-management/ledgers-user-management-service-api/src/main/java/de/adorsys/ledgers/um/api/service/UserService.java b/ledgers-user-management/ledgers-user-management-service-api/src/main/java/de/adorsys/ledgers/um/api/service/UserService.java index 923810cf8..5a084ba3f 100644 --- a/ledgers-user-management/ledgers-user-management-service-api/src/main/java/de/adorsys/ledgers/um/api/service/UserService.java +++ b/ledgers-user-management/ledgers-user-management-service-api/src/main/java/de/adorsys/ledgers/um/api/service/UserService.java @@ -7,11 +7,18 @@ //NOPMD -import de.adorsys.ledgers.um.api.domain.*; -import org.springframework.data.domain.*; - -import java.time.*; -import java.util.*; +import de.adorsys.ledgers.um.api.domain.UserBO; +import de.adorsys.ledgers.um.api.domain.ScaUserDataBO; +import de.adorsys.ledgers.um.api.domain.AccountAccessBO; +import de.adorsys.ledgers.um.api.domain.AisConsentBO; +import de.adorsys.ledgers.um.api.domain.UserExtendedBO; +import de.adorsys.ledgers.um.api.domain.UserRoleBO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; public interface UserService {