Class CitizenServiceImpl

java.lang.Object
it.gov.pagopa.onboarding.citizen.service.CitizenServiceImpl
All Implemented Interfaces:
CitizenService

@Service public class CitizenServiceImpl extends Object implements CitizenService

Implementation of CitizenService.

  • Constructor Details

  • Method Details

    • createCitizenConsent

      public reactor.core.publisher.Mono<CitizenConsentDTO> createCitizenConsent(String fiscalCode, String tppId)

      Creates or reuses a consent for the given fiscal code and TPP id.

      Flow:

      1. Log input (hashed fiscal code, tppId).
      2. Validate TPP existence (remote call).
      3. Load existing citizen aggregate.
      4. If present and missing the consent, add enabled consent and persist.
      5. If absent, create aggregate, persist, add to Bloom filter.
      6. Reduce map to the requested TPP and return DTO.

      Errors:

      • TPP_NOT_FOUND if remote TPP is missing.
      • Repository errors propagate.
      Specified by:
      createCitizenConsent in interface CitizenService
      Parameters:
      fiscalCode - plain fiscal code (hashed only in logs)
      tppId - TPP identifier
      Returns:
      Mono<CitizenConsentDTO> DTO limited to the requested consent
    • switchState

      public reactor.core.publisher.Mono<CitizenConsentDTO> switchState(String fiscalCode, String tppId)

      Toggles the consent state for the specified TPP.

      Flow:

      1. Log input.
      2. Load aggregate or error.
      3. Validate consent presence.
      4. Flip state, update timestamp, persist.
      5. Return DTO with only toggled consent.

      Errors:

      • CITIZEN_NOT_ONBOARDED if aggregate or consent is missing.
      Specified by:
      switchState in interface CitizenService
      Parameters:
      fiscalCode - plain fiscal code
      tppId - TPP identifier
      Returns:
      Mono<CitizenConsentDTO> DTO containing toggled consent
    • getCitizenConsentStatus

      public reactor.core.publisher.Mono<CitizenConsentDTO> getCitizenConsentStatus(String fiscalCode, String tppId)

      Retrieves consent status for a fiscal code and TPP id.

      Errors:

      • CITIZEN_NOT_ONBOARDED if consent is missing.
      Specified by:
      getCitizenConsentStatus in interface CitizenService
      Parameters:
      fiscalCode - plain fiscal code
      tppId - TPP identifier
      Returns:
      Mono<CitizenConsentDTO> consent DTO
    • getTppEnabledList

      public reactor.core.publisher.Mono<List<String>> getTppEnabledList(String fiscalCode)

      Retrieves enabled TPP ids for a fiscal code (empty if citizen missing).

      Flow:

      1. Log start.
      2. Fetch aggregate (empty completion if absent).
      3. Filter enabled consents.
      4. Collect TPP ids.

      Errors:

      • No mapped errors; missing citizen -> empty.
      Specified by:
      getTppEnabledList in interface CitizenService
      Parameters:
      fiscalCode - plain fiscal code
      Returns:
      Mono<List<String>> list of enabled TPP ids (may be empty)
    • getCitizenConsentsList

      public reactor.core.publisher.Mono<CitizenConsentDTO> getCitizenConsentsList(String fiscalCode)

      Retrieves all consents for a fiscal code.

      Flow:

      1. Log start.
      2. Fetch aggregate; if absent -> error.
      3. Map to DTO.

      Errors:

      • Missing citizen - CITIZEN_NOT_ONBOARDED.
      Specified by:
      getCitizenConsentsList in interface CitizenService
      Parameters:
      fiscalCode - plain fiscal code
      Returns:
      Mono<CitizenConsentDTO> full consent DTO
    • getCitizenConsentsListEnabled

      public reactor.core.publisher.Mono<CitizenConsentDTO> getCitizenConsentsListEnabled(String fiscalCode)

      Retrieves only enabled consents for a fiscal code.

      Flow:

      1. Log start.
      2. Fetch aggregate; if absent -> error.
      3. Filter enabled consents.
      4. Map to DTO.

      Errors:

      • Missing citizen - CITIZEN_NOT_ONBOARDED.
      Specified by:
      getCitizenConsentsListEnabled in interface CitizenService
      Parameters:
      fiscalCode - plain fiscal code
      Returns:
      Mono<CitizenConsentDTO> DTO with only enabled consents
    • getCitizenEnabled

      public reactor.core.publisher.Mono<List<CitizenConsentDTO>> getCitizenEnabled(String tppId)

      Retrieves citizens with an enabled consent for a TPP id.

      Flow:

      1. Stream citizens with enabled consent for tppId.
      2. Map each to DTO.
      3. Collect into list.

      Errors:

      • Repository errors propagate.
      Specified by:
      getCitizenEnabled in interface CitizenService
      Parameters:
      tppId - TPP identifier
      Returns:
      Mono<List<CitizenConsentDTO>> list (possibly empty)
    • deleteCitizenConsent

      public reactor.core.publisher.Mono<CitizenConsentDTO> deleteCitizenConsent(String fiscalCode)

      Deletes the citizen consent aggregate by fiscal code.

      Flow:

      1. Fetch aggregate; if absent -> error.
      2. Delete by id.
      3. Return DTO snapshot.

      Errors:

      • Missing citizen - CITIZEN_NOT_ONBOARDED.
      Specified by:
      deleteCitizenConsent in interface CitizenService
      Parameters:
      fiscalCode - plain fiscal code
      Returns:
      Mono<CitizenConsentDTO> deleted consent DTO
    • getCitizenInBloomFilter

      public reactor.core.publisher.Mono<Boolean> getCitizenInBloomFilter(String fiscalCode)

      Checks if a fiscal code is in the Bloom filter and has at least one enabled consent with an active TPP.

      Flow:

      1. Check Bloom filter membership (false if absent).
      2. If present, query DB for citizen consents.
      3. Filter consents with tppState = true.
      4. Call TPP service to verify which TPPs are still active.
      5. Return true if at least one active TPP or not active with a whitelistRecipient not empty exists.

      Errors:

      • Repository and TPP connector errors propagate.
      Specified by:
      getCitizenInBloomFilter in interface CitizenService
      Parameters:
      fiscalCode - plain fiscal code
      Returns:
      Mono<Boolean> true if present in Bloom filter and at least one enabled consent with active TPP exists