This is an automated email from the ASF dual-hosted git repository. Aman-Mittal pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/fineract-consumer-facing.git
commit 7a49aa3ac039f2025984b8b937fa6fe37efb9444 Merge: 0196feb 4501284 Author: Aman-Mittal <[email protected]> AuthorDate: Sun Jul 19 13:42:30 2026 +0530 Merge pull request #39 from edk12564/main Beneficiaries implementation and bugfixes consumer/build.gradle | 21 +- consumer/compose.yaml | 13 + .../api/AuthenticationCommandController.java | 43 +- .../command/data/AuthenticationConstants.java | 3 +- .../authentication/command/data/LogoutCommand.java | 3 + .../command/data/SessionCommandData.java | 4 - .../service/AuthenticationCommandServiceImpl.java | 93 +-- .../api/BeneficiariesCommandController.java | 133 +++++ .../data/BeneficiaryChallengeCommandData.java} | 11 +- .../command/data/BeneficiaryCommandData.java} | 19 +- .../command/data/BeneficiaryConstants.java} | 18 +- .../data/ConfirmAddBeneficiaryCommand.java} | 22 +- .../data/ConfirmAddBeneficiaryCommandRequest.java} | 41 +- .../data/ConfirmUpdateBeneficiaryCommand.java} | 16 +- .../ConfirmUpdateBeneficiaryCommandRequest.java} | 28 +- .../data/InitiateAddBeneficiaryCommand.java} | 20 +- .../InitiateAddBeneficiaryCommandRequest.java} | 33 +- .../data/InitiateUpdateBeneficiaryCommand.java} | 14 +- .../InitiateUpdateBeneficiaryCommandRequest.java} | 22 +- .../command/data/ResolvedBeneficiaryAccount.java} | 14 +- .../beneficiaries/command/domain/Beneficiary.java | 113 ++++ .../command/domain/BeneficiaryAccountType.java} | 12 +- .../BeneficiaryAccountInvalidException.java} | 11 +- .../BeneficiaryDuplicateNameException.java} | 11 +- .../exception/BeneficiaryNotFoundException.java} | 11 +- .../BeneficiaryStepUpInvalidException.java} | 11 +- .../BeneficiaryUpstreamUnavailableException.java} | 11 +- .../repository/BeneficiaryCommandRepository.java} | 27 +- .../service/BeneficiariesCommandService.java | 41 ++ .../service/BeneficiariesCommandServiceImpl.java | 332 +++++++++++ .../query/api/BeneficiariesQueryController.java | 53 ++ .../query/data/BeneficiaryQueryData.java} | 18 +- .../query/data/BeneficiaryTemplateQueryData.java} | 13 +- .../query/domain/BeneficiaryAccountType.java} | 12 +- .../query/domain/BeneficiaryQueryEntity.java | 108 ++++ .../repository/BeneficiaryQueryRepository.java} | 24 +- .../query/service/BeneficiariesQueryService.java} | 25 +- .../service/BeneficiariesQueryServiceImpl.java | 87 +++ .../infrastructure/access/data/ActionPolicies.java | 83 +++ .../access/data/ActionPolicy.java} | 19 +- .../access/data/ConsumerAction.java} | 32 +- .../data/OwnedAccounts.java} | 14 +- .../access/data/ResourceType.java} | 12 +- .../exception/AccessKycRequiredException.java} | 10 +- .../exception/AccessPolicyMissingException.java} | 10 +- .../AccessScopeInsufficientException.java} | 10 +- .../access/filter/DeviceFingerprintFilter.java | 102 ++++ .../access/service/AccessPolicyEvaluator.java | 82 +++ .../infrastructure/access/service/JwtDenylist.java | 64 +++ .../access/service/OwnedAccountsCache.java | 129 +++++ .../configs/AuthenticationProperties.java | 3 +- .../consumer/infrastructure/configs/JwtConfig.java | 24 +- .../infrastructure/configs/OpenApiConfig.java | 11 +- .../infrastructure/configs/SecurityConfig.java | 21 +- .../fineractclient/FineractCaller.java | 45 ++ .../infrastructure/jwt/{ => data}/IssuedJwt.java | 2 +- .../infrastructure/jwt/{ => data}/JwtClaims.java | 4 +- .../jwt/{ => service}/JwtIssuer.java | 5 +- .../infrastructure/stepup/StepUpTokenService.java | 11 +- .../infrastructure/web/AccessPolicyEvaluator.java | 64 --- .../{UserClientResolver.java => EmailMasking.java} | 28 +- .../infrastructure/web/UserClientResolver.java | 5 + ....java => LoanCommandAccessDeniedException.java} | 4 +- ...tion.java => LoanCommandNotFoundException.java} | 4 +- ...> LoanCommandUpstreamUnavailableException.java} | 4 +- .../command/service/LoansCommandServiceImpl.java | 75 +-- .../loans/query/api/LoansQueryController.java | 32 +- .../data/LoanApplicationTemplateQueryData.java | 2 - ...on.java => LoanQueryAccessDeniedException.java} | 6 +- ...eption.java => LoanQueryNotFoundException.java} | 4 +- ... => LoanQueryUpstreamUnavailableException.java} | 4 +- .../loans/query/service/LoansQueryService.java | 19 +- .../loans/query/service/LoansQueryServiceImpl.java | 114 ++-- .../consumer/otp/command/data/OtpConstants.java | 1 + .../consumer/otp/command/data/PendingOtp.java | 5 - .../command/repository/OtpCommandRepository.java | 30 +- .../otp/command/service/OtpCommandServiceImpl.java | 27 +- .../service/RegistrationCommandServiceImpl.java | 10 +- ...va => SavingsCommandAccessDeniedException.java} | 4 +- .../command/service/SavingsCommandServiceImpl.java | 44 +- .../savings/query/api/SavingsQueryController.java | 23 +- .../data/SavingsApplicationTemplateQueryData.java | 2 - ...java => SavingsQueryAccessDeniedException.java} | 6 +- .../savings/query/service/SavingsQueryService.java | 13 +- .../query/service/SavingsQueryServiceImpl.java | 71 +-- .../transfers/command/data/TransferConstants.java | 2 - ...TransferBeneficiaryLimitExceededException.java} | 10 +- .../service/TransfersCommandServiceImpl.java | 60 +- .../user/query/data/UserCredentialsQueryData.java | 2 +- .../consumer/user/query/data/UserQueryData.java | 2 +- .../user/query/domain/UserQueryEntity.java | 65 +++ .../query/domain/UserStatus.java} | 12 +- .../user/query/repository/UserQueryRepository.java | 10 +- consumer/src/main/resources/application.properties | 11 +- .../changes/003-create-beneficiaries.yaml | 103 ++++ .../db/changelog/db.changelog-master.yaml | 2 + .../AuthenticationCommandServiceImplTest.java | 107 +++- .../BeneficiariesCommandServiceImplTest.java | 630 +++++++++++++++++++++ .../service/BeneficiariesQueryServiceImplTest.java | 178 ++++++ .../cucumber/clients/AuthenticationClient.java | 26 +- .../cucumber/helpers/ConsumerApiClientFactory.java | 52 ++ .../consumer/cucumber/helpers/FineractSeeder.java | 25 +- .../consumer/cucumber/helpers/LoginHelper.java | 29 +- .../consumer/cucumber/steps/AbacDenialSteps.java | 104 ++++ .../cucumber/steps/BeneficiariesSteps.java | 264 +++++++++ .../consumer/cucumber/steps/LoansSteps.java | 22 +- .../consumer/cucumber/steps/LoginSteps.java | 57 +- .../consumer/cucumber/steps/SavingsSteps.java | 22 +- .../consumer/cucumber/steps/TransfersSteps.java | 13 +- .../access/filter/DeviceFingerprintFilterTest.java | 154 +++++ .../access/service/AccessPolicyEvaluatorTest.java | 241 ++++++++ .../access/service/JwtDenylistTest.java | 108 ++++ .../access/service/OwnedAccountsCacheTest.java | 199 +++++++ .../jwt/{ => service}/JwtIssuerTest.java | 8 +- .../infrastructure/web/EmailMaskingTest.java | 57 ++ .../service/LoansCommandServiceImplTest.java | 68 ++- .../query/service/LoansQueryServiceImplTest.java | 65 ++- .../repository/OtpCommandRepositoryTest.java | 88 +++ .../command/service/OtpCommandServiceImplTest.java | 149 +++++ .../service/SavingsCommandServiceImplTest.java | 27 +- .../query/service/SavingsQueryServiceImplTest.java | 48 +- .../service/TransfersCommandServiceImplTest.java | 210 +++++-- .../query/service/UserQueryServiceImplTest.java | 2 +- .../resources/features/abac-denial.feature} | 17 +- .../test/resources/features/beneficiaries.feature | 48 ++ consumer/src/test/resources/features/login.feature | 11 +- frontend/playwright/tests/transfers.spec.ts | 3 +- frontend/public/i18n/en.json | 51 +- frontend/public/i18n/hi.json | 51 +- frontend/src/app/app.routes.ts | 7 + frontend/src/app/core/auth/auth.service.ts | 28 +- frontend/src/app/core/auth/device-fingerprint.ts | 30 +- .../src/app/core/interceptors/auth.interceptor.ts | 14 +- .../src/app/core/interceptors/error.interceptor.ts | 8 + .../beneficiaries/beneficiaries.component.ts | 452 +++++++++++++++ .../beneficiaries/beneficiaries.store.spec.ts | 107 ++++ .../features/beneficiaries/beneficiaries.store.ts | 88 +++ .../src/app/features/loans/loan-apply.component.ts | 1 - .../src/app/features/loans/loans-list.component.ts | 5 - .../app/features/savings/savings-list.component.ts | 5 - frontend/src/app/layout/shell.component.ts | 3 + 141 files changed, 5966 insertions(+), 980 deletions(-)
