Class TransferService

java.lang.Object
es.kukenan.smartfi.microservice.transfer.service.TransferService

@Component public class TransferService extends Object
Core transfer communication.
  • Field Details

    • TRANSFER_DETAIL_REPORT_PARAMETER_ALIAS

      private static final String TRANSFER_DETAIL_REPORT_PARAMETER_ALIAS
      Transfer detail report parameter alias.
      See Also:
    • TRANSFER_DETAIL_REPORT_PARAMETER_PRODUCT_NAME

      private static final String TRANSFER_DETAIL_REPORT_PARAMETER_PRODUCT_NAME
      Transfer detail report parameter product name.
      See Also:
    • REPORT_PATH

      private static final Map<String,String> REPORT_PATH
      Report path mapper by transfer mode.
    • SCHEDULED_REPORT_PATH

      private static final String SCHEDULED_REPORT_PATH
      Periodic report path.
      See Also:
    • log

      private final es.kukenan.smartfi.logger.WalletLogger log
      Logger.
    • jwtService

      @Autowired protected es.kukenan.smartfi.common.service.jwt.JwtService jwtService
      JWT service for create a bearer to call products.
    • transferCacheName

      @Value("${cache.transfer}") private String transferCacheName
      cache name established.
    • kbEntityCode

      @Value("${transfer.kb.entity.code}") private String kbEntityCode
      bc code Entity Account.
    • bfEntityCode

      @Value("${transfer.bf.entity.code}") private String bfEntityCode
      bf code Entity Account.
    • kafkaController

      @Autowired private KafkaController kafkaController
      Amqp controller.
    • userRepository

      @Autowired private UserRepository userRepository
      User repopsitory.
    • userBackofficeRepository

      @Autowired private UserBackofficeRepository userBackofficeRepository
      User backoffice repository.
    • currencyRepository

      @Autowired private CurrencyRepository currencyRepository
      Currency repository.
    • backofficeClientManager

      @Autowired private BackofficeClientManager backofficeClientManager
      Backoffice client manager.
    • accountTypeRepository

      @Autowired private AccountTypeRepository accountTypeRepository
      AccountTypeRepository.
    • cacheOperation

      @Autowired private CacheOperation cacheOperation
      cache operation.
    • transferSpringCacheName

      @Value("${cache.spring.transfer}") private String transferSpringCacheName
      spring cache name established.
    • moveMoneyService

      @Autowired private MoveMoneyService moveMoneyService
      transfer Service.
    • transferOperation

      @Autowired private TransferOperation transferOperation
      transfer Operation.
    • transferExecutedEventMapper

      @Autowired private TransferExecutedEventMapper transferExecutedEventMapper
      Move money executed mapper.
    • transferSuccessfulEventMapper

      @Autowired private TransferSuccessfulEventMapper transferSuccessfulEventMapper
      Transfer successful event mapper.
    • threadPoolTaskExecutor

      @Autowired private org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor threadPoolTaskExecutor
      Thread pool task executor.
    • reportsGenerator

      @Autowired private es.kukenan.smartfi.reports.generator.ReportsGenerator reportsGenerator
      Reports generator.
  • Constructor Details

    • TransferService

      public TransferService()
  • Method Details

    • getLimits

      @Cacheable(cacheResolver="cacheResolver", key="\'transfer-limits/\' + #sessionId", unless="#result==null", condition="#cacheable") public es.kukenan.smartfi.microservice.transfer.api.transfer.limits.LimitsDto getLimits(String sessionId, String userId, Integer backofficeId, Boolean cacheable)
      Get transfer limits for a user.
      Parameters:
      sessionId - user identifier
      userId - user identifier
      backofficeId - backoffice identifier
      cacheable - cacheable candidate
      Returns:
      the transfer limits
    • getFrequencyTypes

      @Cacheable(cacheNames="spring-cache-transfer", cacheResolver="springCacheResolver", key="\'transfer-frequency-types/\' + #backofficeId", unless="#result==null") public es.kukenan.smartfi.microservice.transfer.api.transfer.TransfersDataCatalogDto getFrequencyTypes(String backofficeId)
      Get transfer frequency types for a backoffice.
      Parameters:
      backofficeId - backoffice identifier
      Returns:
      the transfer frequency types
    • getModes

      @Cacheable(cacheNames="spring-cache-transfer", cacheResolver="springCacheResolver", key="\'transfer-modes/\' + #backofficeId", unless="#result==null") public es.kukenan.smartfi.microservice.transfer.api.transfer.TransfersDataCatalogDto getModes(String backofficeId)
      Get transfer modes for a backoffice.
      Parameters:
      backofficeId - backoffice identifier
      Returns:
      the transfer modes
    • initializeTransfer

      public int initializeTransfer(String userId, es.kukenan.smartfi.microservice.transfer.api.transfer.TransferRequestDto transferRequestDto, es.kukenan.smartfi.common.security.WalletAuthentication auth)
      Generate idOperation Transfer.
      Parameters:
      userId - user identifier.
      transferRequestDto - transferRequestDto.
      auth - auth.
      Returns:
      idOperation
    • transfers

      public es.kukenan.smartfi.microservice.transfer.api.transfer.TransferResponseDto transfers(String sessionId, String userId, String userJwtToken, String companyId, es.kukenan.smartfi.microservice.transfer.api.transfer.TransferRequestDto body, Integer backofficeId, String userIP, String userAgent, String idOperacion, String contractId)
      Post transfer for a user.
      Parameters:
      sessionId - user identifier
      userId - user identifier
      userJwtToken - user token
      companyId - from token
      body - request body
      backofficeId - backofficeId value
      userIP - user real ip
      userAgent - user-agent header
      idOperacion - idOperacion.
      contractId - contract identifier.
      Returns:
      the transfer detail.
    • exchange

      public es.kukenan.smartfi.microservice.transfer.api.transfer.TransferResponseDto exchange(String sessionId, String userId, String userJwtToken, String companyId, es.kukenan.smartfi.microservice.transfer.api.exchange.ExchangeTransferRequestDto body, Integer backofficeId, String userIP, String userAgent, String idOperacion, String contractId)
      Post exchange Code for a user.
      Parameters:
      sessionId - user identifier
      userId - user identifier
      userJwtToken - user token
      companyId - from token
      body - request body
      backofficeId - backofficeId value
      userIP - user real ip
      userAgent - user-agent header
      idOperacion - idOperacion.
      contractId - contract identifier.
      Returns:
      the transfer detail.
    • getFavorites

      public List<es.kukenan.smartfi.microservice.transfer.api.transfer.favorite.TransferFavoriteDto> getFavorites(String userId, String userJwtToken, Integer backofficeId, String contractId)
      Get favorites for a user.
      Parameters:
      userId - user identifier
      userJwtToken - user token
      backofficeId - backofficer identifier
      contractId - contract identifier.
      Returns:
      the transfer favorites
    • getFavourites

      public es.kukenan.smartfi.microservice.transfer.api.transfer.favorite.TransferFavoritesResponseDto getFavourites(String sessionId, String userId, String userJwtToken, Integer backofficeId, String productId, Optional<String> paginationKey)
      Retrieves Product Favourite Transfers for a user.
      Parameters:
      sessionId - session id.
      userId - user identifier.
      userJwtToken - user token.
      backofficeId - backoffice identifier.
      productId - product id.
      paginationKey - pagination key used to request next result page.
      Returns:
      Product Favourite Transfers TransferFavoritesResponseDto.
    • createFavorite

      public es.kukenan.smartfi.microservice.transfer.api.transfer.TransferResponseDto createFavorite(String sessionId, String userIP, String userAgent, String userId, String userJwtToken, Integer backofficeId, String companyId, es.kukenan.smartfi.microservice.transfer.api.transfer.TransferRequestDto request, String contractid)
      Create a new favorite for a user.
      Parameters:
      sessionId - session id
      userIP - user real ip
      userAgent - user-agent header
      userId - user real ip
      userJwtToken - user token
      backofficeId - backofficeId value
      companyId - from token
      request - body request
      contractid - contract identifier
      Returns:
      the favorite detail.
    • deleteScheduled

      public es.kukenan.smartfi.microservice.transfer.api.transfer.TransferResponseDto deleteScheduled(String transferID, String userId, Integer backofficeId, String userIP, String userAgent, String userToken, String operationId)
      Delete a scheduled.
      Parameters:
      transferID - transfer identifier
      userId - user identifier
      backofficeId - backofficeId value
      userIP - user real ip
      userAgent - user-agent header
      userToken - auth info.
      operationId - operation identifier.
      Returns:
      the favorite detail.
    • initializeDeleteScheduled

      public int initializeDeleteScheduled(String transferID, String userId, es.kukenan.smartfi.common.security.WalletAuthentication auth)
      initialize delete Scheduled transfer.
      Parameters:
      transferID - transfer identifier
      userId - user identifier
      auth - auth info.
      Returns:
      the favorite detail.
    • deleteTransfer

      public es.kukenan.smartfi.microservice.transfer.api.transfer.TransferResponseDto deleteTransfer(String transferID, String userId, Integer backofficeId, String userIP, String userAgent)
      Delete a scheduled.
      Parameters:
      transferID - transfer identifier
      userId - user identifier
      backofficeId - backofficeId value
      userIP - user real ip
      userAgent - user-agent header
      Returns:
      the favorite detail.
    • getTransfers

      public es.kukenan.smartfi.microservice.transfer.api.transfer.TransfersResponseDto getTransfers(String userId, Integer backofficeId, String type, Optional<String> mode, String dateFrom, String dateTo, String productId, String paginationKey, String jwtToken)
      Get transfers for a user.
      Parameters:
      userId - user identifier
      backofficeId - backofficer identifier
      type - transfer type
      mode - transfer mode
      dateFrom - date from interval
      dateTo - date to interval
      productId - product uuid
      paginationKey - pagination key used to request next result page.
      jwtToken - jwt token.
      Returns:
      the transfers
    • getTransfers

      public es.kukenan.smartfi.microservice.transfer.api.transfer.TransfersResponseDto getTransfers(String sessionId, String userId, String userJwtToken, Integer backofficeId, String productId, String type, Optional<String> mode, String dateFrom, String dateTo, Optional<String> paginationKey)
      Retrieves Product Transfers for a user.
      Parameters:
      sessionId - session id.
      userId - user identifier.
      userJwtToken - user token.
      backofficeId - backoffice identifier.
      productId - product id.
      type - transfer type.
      mode - transfer mode.
      dateFrom - date from interval.
      dateTo - date to interval.
      paginationKey - pagination key used to request next result page.
      Returns:
      Product Transfers TransfersResponseDto.
    • getTransferDetail

      public org.springframework.http.ResponseEntity<es.kukenan.smartfi.microservice.transfer.api.transfer.TransferDto> getTransferDetail(String userId, Integer backofficeId, String type, String mode, String dateFrom, String dateTo, String productId, String paginationKey, String sessionId, String jwtToken, String transferId)
      Get transfers detail for a user.
      Parameters:
      userId - user identifier
      backofficeId - backofficer identifier
      type - transfer type
      mode - transfer mode
      dateFrom - date from interval
      dateTo - date to interval
      productId - product uuid
      paginationKey - pagination key used to request next result page.
      sessionId - session id.
      jwtToken - jwt token.
      transferId - transfer id.
      Returns:
      the transfers
    • printLogIsEnabled

      private void printLogIsEnabled(es.kukenan.smartfi.microservice.transfer.api.transfer.TransfersResponseDto response)
    • getTransferForAllModes

      private TransferDomain getTransferForAllModes(BackofficeClient backofficeClient, Integer backofficeId, String userCoreId, String type, String dateFrom, String dateTo, String productId, String paginationKey, String jwtToken, User user, String transferId)
    • deleteFavorite

      public es.kukenan.smartfi.microservice.transfer.api.transfer.TransferResponseDto deleteFavorite(String transferID, String userId, Integer backofficeId, String userIP, String userAgent)
      Delete a favorite.
      Parameters:
      transferID - transfer identifier
      userId - user identifier
      backofficeId - backofficeId value
      userIP - user real ip
      userAgent - user-agent header
      Returns:
      the favorite detail.
    • getUserBackoffice

      private UserBackoffice getUserBackoffice(Integer backofficeId, User user)
    • findUser

      private User findUser(String userId)
    • normalizeCharNotPermittedRequest

      private void normalizeCharNotPermittedRequest(es.kukenan.smartfi.microservice.transfer.api.transfer.TransferRequestDto body)
      Normalize Char not permitted in reason and beneficiary name in the request.
      Parameters:
      body - request
    • validateTransferRequestDto

      private void validateTransferRequestDto(String sessionId, String userId, String companyId, es.kukenan.smartfi.microservice.transfer.api.transfer.TransferRequestDto body, Integer backofficeId, es.kukenan.smartfi.microservice.transfer.api.products.ProductOriginDto origin, List<es.kukenan.smartfi.microservice.transfer.api.products.ProductOriginDto> origins)
      Validate body request. If is not valid then throw an UnexpectedException
      Parameters:
      sessionId - user identifier
      userId - user identifier
      companyId - from token
      body - request body
      backofficeId - backofficeId value
      origin - request origin account
      origins - origin accounts list
    • validateExchangeRequestDto

      private void validateExchangeRequestDto(String sessionId, String userId, es.kukenan.smartfi.microservice.transfer.api.exchange.ExchangeTransferRequestDto body)
      Validate body request. If is not valid then throw an UnexpectedException
      Parameters:
      sessionId - user identifier
      userId - user identifier
      body - ExchangeTransferRequestDto
    • validateFavoriteTransferRequestDto

      private void validateFavoriteTransferRequestDto(String alias, Integer transferMode, Integer backofficeId)
      Validate body request. If is not valid then throw an UnexpectedException
      Parameters:
      alias - param
      transferMode - param
      backofficeId - backofficeId value
    • validateTransferScheduledRequestDto

      private void validateTransferScheduledRequestDto(String sessionId, String userId, String companyId, es.kukenan.smartfi.microservice.transfer.api.transfer.TransferRequestDto body, Integer backofficeId, es.kukenan.smartfi.microservice.transfer.api.products.ProductOriginDto origin, List<es.kukenan.smartfi.microservice.transfer.api.products.ProductOriginDto> origins)
      Validate body request. If is not valid then throw an UnexpectedException
      Parameters:
      sessionId - user identifier
      userId - user identifier
      companyId - from token
      body - request body
      backofficeId - backofficeId value
      origin - request origin account
      origins - origin accounts list
    • validateTransferFavoriteRequestDto

      private void validateTransferFavoriteRequestDto(String sessionId, String userId, String companyId, Integer backofficeId, es.kukenan.smartfi.microservice.transfer.api.transfer.favorite.TransferFavoriteRequestDto body, es.kukenan.smartfi.microservice.transfer.api.products.ProductOriginDto origin, List<es.kukenan.smartfi.microservice.transfer.api.products.ProductOriginDto> origins)
      Validate body request. If is not valid then throw an UnexpectedException
      Parameters:
      sessionId - session identifier
      userId - user identifier
      companyId - from token
      backofficeId - backofficeId value
      body - request body
      origin - request origin account
      origins - origin accounts list
    • getLimitsDto

      private es.kukenan.smartfi.microservice.transfer.api.transfer.limits.LimitsDto getLimitsDto(String sessionId, String userId, Integer backofficeId)
    • getTransfersFrecuencyDto

      private es.kukenan.smartfi.microservice.transfer.api.transfer.TransfersDataCatalogDto getTransfersFrecuencyDto(Object transferFrecuencyFromCache, Integer backofficeId)
    • getTransferModesDto

      private es.kukenan.smartfi.microservice.transfer.api.transfer.TransfersDataCatalogDto getTransferModesDto(Object transferModesFromCache, Integer backofficeId)
    • findProduct

      private es.kukenan.smartfi.microservice.transfer.api.products.ProductOriginDto findProduct(List<es.kukenan.smartfi.microservice.transfer.api.products.ProductOriginDto> products, String id)
    • findProductByCore

      private es.kukenan.smartfi.microservice.transfer.api.products.ProductOriginDto findProductByCore(List<es.kukenan.smartfi.microservice.transfer.api.products.ProductOriginDto> products, String id)
    • toRequestFavorite

      private es.kukenan.smartfi.microservice.transfer.api.transfer.favorite.TransferFavoriteRequestDto toRequestFavorite(es.kukenan.smartfi.microservice.transfer.api.transfer.TransferRequestDto body)
    • modifyScheduledTransfer

      public es.kukenan.smartfi.microservice.transfer.api.transfer.TransferResponseDto modifyScheduledTransfer(String sessionId, String userId, es.kukenan.smartfi.common.security.WalletAuthentication userJwtToken, String companyId, es.kukenan.smartfi.microservice.transfer.api.transfer.TransferRequestDto body, Integer backofficeId, String userIP, String userAgent, String transferId, String operationId)
      Modify transfer for a user and transferId.
      Parameters:
      sessionId - session identifier
      userId - user identifier
      userJwtToken - user token
      companyId - from token
      body - request body
      backofficeId - backofficeId value
      userIP - user real ip
      userAgent - user-agent header
      transferId - transferId header
      operationId - operation identifier.
      Returns:
      the transfer detail.
    • initializeModifyScheduled

      public int initializeModifyScheduled(String transferID, String userId, es.kukenan.smartfi.common.security.WalletAuthentication auth, es.kukenan.smartfi.microservice.transfer.api.transfer.TransferRequestDto request)
      initialize modify Scheduled transfer.
      Parameters:
      transferID - transfer identifier
      userId - user identifier
      auth - auth info.
      request - request data.
      Returns:
      the favorite detail.
    • validateFavoriteTransfer

      public es.kukenan.smartfi.microservice.transfer.api.transfer.TransferResponseDto validateFavoriteTransfer(String userId, String companyId, String alias, Integer transferMode, Integer backofficeId, String userIP, String userAgent)
      Simulate transfer for a user.
      Parameters:
      userId - user identifier
      companyId - from token
      alias - alias param
      transferMode - alias param
      backofficeId - backofficeId value
      userIP - user real ip
      userAgent - user-agent header
      Returns:
      the transfer detail.
    • getTransferReport

      public es.kukenan.smartfi.microservice.transfer.api.transfer.TransferReportResponseDto getTransferReport(String sessionId, String userId, Integer backofficeId, String type, String mode, String reference, String reportType, Boolean isPeriodic, String jwtToken)
      Generate transfer report.
      Parameters:
      sessionId - session id.
      userId - user identifier
      backofficeId - backofficer identifier
      type - transfer type
      mode - transfer mode
      reference - Skyline transfer reference
      reportType - Report type
      isPeriodic - is periodic transfer flag indicator
      jwtToken - token
      Returns:
      The report in bytes array
    • generateDocument

      private <T> es.kukenan.smartfi.microservice.transfer.api.transfer.TransferReportResponseDto generateDocument(Optional<T> transfer, es.kukenan.smartfi.reports.enums.ReportType reportType, String reportPath, String sessionId, String userId, String companyId, String jwtToken, String msgError, Optional<es.kukenan.smartfi.microservice.transfer.api.transfer.common.OrdererDto> ordererDto)
    • createBearerToken

      private String createBearerToken(es.kukenan.smartfi.common.security.WalletAuthentication kukenanWalletAuthentication)
    • convertAmountCurrencyIdToCode

      private void convertAmountCurrencyIdToCode(es.kukenan.smartfi.microservice.transfer.api.common.AmountDto amountDto)
      Converts the amount currency id to its code.
      Parameters:
      amountDto - amount which currency id is going to be converted AmountDto.
    • getFavouriteTransfers

      private <T> T getFavouriteTransfers(String userId, Integer backofficeId, BiFunction<BackofficeClient,UserBackoffice,T> getFavouritesFunction)
      Retrieves Favourite Transfers for a user.
      Type Parameters:
      T - Favourite Transfers return type.
      Parameters:
      userId - user identifier.
      backofficeId - backoffice identifier.
      getFavouritesFunction - specific retrieve Favourite Transfers function.
      Returns:
      Favourite Transfers.
    • retrieveTransfers

      private es.kukenan.smartfi.microservice.transfer.api.transfer.TransfersResponseDto retrieveTransfers(String userId, Integer backofficeId, BiFunction<BackofficeClient,UserBackoffice,TransferDomain> getTransfersFunction)
      Retrieves Transfers for a user.
      Parameters:
      userId - user identifier.
      backofficeId - backoffice identifier.
      getTransfersFunction - specific Retrieve Transfers function.
      Returns:
      Transfers TransferRequestDto.
    • findProductOrigin

      private es.kukenan.smartfi.microservice.transfer.api.products.ProductOriginDto findProductOrigin(String sessionId, String userId, String userJwtToken, String productId)
      Finds origin product.
      Parameters:
      sessionId - session id.
      userId - user identifier.
      userJwtToken - user token.
      productId - product id.
      Returns:
      origin product found ProductOriginDto.
    • findProductByOrigin

      private es.kukenan.smartfi.microservice.transfer.api.products.ProductOriginDto findProductByOrigin(String sessionId, String userId, String userJwtToken, String coreId)
      Finds product by origin.
      Parameters:
      sessionId - session id.
      userId - user identifier.
      userJwtToken - user token.
      coreId - core product id.
      Returns:
      origin product found ProductOriginDto.
    • getTransferModes

      private Supplier<es.kukenan.smartfi.microservice.transfer.api.transfer.TransfersDataCatalogDto> getTransferModes(Integer backofficeId)
      Retrieves Get Transfer Modes supplier.
      Parameters:
      backofficeId - backoffice identifier.
      Returns:
      Get Transfer Modes supplier TransfersDataCatalogDto.