All Downloads are FREE. Search and download functionalities are using the official Maven repository.

one.credify.sdk.dto.UserInfoRes Maven / Gradle / Ivy

package one.credify.sdk.dto;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import lombok.experimental.FieldDefaults;

import java.util.Map;

@NoArgsConstructor
@Getter
@Setter
@FieldDefaults(level = AccessLevel.PRIVATE)
@JsonIgnoreProperties(ignoreUnknown = true)
public class UserInfoRes {
    @JsonProperty("_claim_names")
    Map claimNames;

    @JsonProperty("_claim_sources")
    Map claimSources;

    String sub;
    @JsonProperty("auth_time")
    long authTime;
    long iat;
    long rat;
    String[] aud;

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class ClaimSourceValue {
        @JsonProperty("JWT")
        String jwt;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class UserInfo {
        // standard claims
        Profile profile;
        Phone phone;
        Email email;
        Address address;

        // non basic standard claims
        AdvanceProfile advanceProfile;
        Address permanentAddress;
        Employment employment;
        Income income;
        BankAccount bankAccount;
        ReferencePerson primaryReferencePerson;
        ReferencePerson secondaryReferencePerson;
        Spouse spouse;

        Ekyc ekyc;
        DrivingPermit drivingPermit;
        Idcard idcard;

        OpenidDto openid;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Ext {
        @JsonProperty("offer_rank")
        int offerRank;
        @JsonProperty("claim_tokens")
        Map claimTokens;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class OpenidDto {
        Ext ext;
        @JsonProperty("transaction_id")
        String transactionId;
        @JsonProperty("signing_public_key")
        String signingPublicKey;
        String txn;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Profile {
        String birthdate;
        @JsonProperty("family_name")
        String familyName;
        String gender;
        @JsonProperty("given_name")
        String givenName;
        @JsonProperty("middle_name")
        String middleName;
        String name;
        @JsonProperty("profile_commitment")
        String profileCommitment;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class AdvanceProfile {
        @JsonProperty("current_housing_type")
        String currentHousingType;
        @JsonProperty("education_level")
        String educationLevel;
        @JsonProperty("marital_status")
        String maritalStatus;
        @JsonProperty("number_of_dependents")
        int numberOfDependents;
        @JsonProperty("current_housing_type_other")
        String currentHousingTypeOther;
        @JsonProperty("advanced_profile_commitment")
        String advancedProfileCommitment;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Email {
        @JsonProperty("email")
        String email;
        @JsonProperty("email_verified")
        boolean emailVerified;
        @JsonProperty("email_commitment")
        String emailCommitment;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Phone {
        @JsonProperty("phone_number")
        String phoneNumber;
        @JsonProperty("phone_number_verified")
        boolean phoneNumberVerified;
        @JsonProperty("phone_commitment")
        String phoneCommitment;
    }


    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Income {
        @JsonProperty("main_income_type")
        String mainIncomeType;
        @JsonProperty("monthly_wage_income")
        Long monthlyWageIncome;
        @JsonProperty("payroll_date")
        String payrollDate;
        @JsonProperty("receiving_salary_method")
        String receivingSalaryMethod;
        @JsonProperty("monthly_family_income")
        Long monthlyFamilyIncome;
        @JsonProperty("monthly_expenses")
        Long monthlyExpenses;
        @JsonProperty("other_incomes")
        String otherIncomes;
        @JsonProperty("income_commitment")
        String incomeCommitment;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Employment {
        String occupation;
        @JsonProperty("other_occupation")
        String otherOccupation;
        @JsonProperty("labor_contract_type")
        String laborContractType;
        String department;
        @JsonProperty("working_time")
        String workingTime;
        String position;
        @JsonProperty("company_name")
        String companyName;
        @JsonProperty("company_phone_number")
        String companyPhoneNumber;
        @JsonProperty("company_tax_number")
        String companyTaxNumber;
        @JsonProperty("company_registration_type")
        String companyRegistrationType;
        @JsonProperty("company_industry")
        String companyIndustry;
        @JsonProperty("work_address")
        Address workAddress;
        @JsonProperty("company_address")
        Address companyAddress;
        @JsonProperty("company_industry_other")
        String companyIndustryOther;
        @JsonProperty("company_registration_type_other")
        String companyRegistrationTypeOther;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class BankAccount {
        @JsonProperty("account_owner")
        String accountOwner;
        @JsonProperty("account_number")
        String accountNumber;
        String bank;
        String branch;
    }

    // REFERENCE PERSON INFO CLASS
    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PROTECTED)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class ReferencePerson {
        String name;
        @JsonProperty("phone_number")
        String phoneNumber;
        String relationship;
    }


    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Spouse {
        String name;
        @JsonProperty("phone_number")
        String phoneNumber;
        @JsonProperty("idcard_number")
        String idCardNumber;
    }

    // ADDRESS INFO CLASS
    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PROTECTED)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Address {
        String country;
        String locality;
        String region;
        @JsonProperty("street_address")
        String streetAddress;
        String postalCode;

        String formatted;
        @JsonProperty("street_number")
        String streetNumber;
        String street;
        @JsonProperty("sublocality_level_3")
        String sublocalityLevel3;
        @JsonProperty("sublocality_level_2")
        String sublocalityLevel2;
        String sublocality;
        @JsonProperty("country_code")
        String countryCode;
    }


    // EKYC INFO CLASS
    public interface EkycInterface {
        VerifiedClaimsDto.Evidence getEvidence();

        VerifiedClaimsDto.Claims getClaims();
    }

    @AllArgsConstructor
    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class DrivingPermit implements EkycInterface {
        @JsonProperty("driving_permit_commitment")
        String drivingPermitCommitment;

        @JsonProperty("driving_permit")
        VerifiedClaimsDto drivingPermit;

        @JsonProperty("driving_permit_number")
        String drivingPermitNumber;

        @JsonProperty("driving_permit_issuer")
        String drivingPermitIssuer;

        @JsonProperty("driving_permit_date_of_issuance")
        String drivingPermitDateOfIssuance;

        @JsonProperty("driving_permit_date_of_expiry")
        String drivingPermitDateOfExpiry;


        public VerifiedClaimsDto.Evidence getEvidence() {
            if (drivingPermit == null) {
                return null;
            }
            return drivingPermit.getEvidence();
        }

        public VerifiedClaimsDto.Claims getClaims() {
            if (drivingPermit == null) {
                return null;
            }
            return drivingPermit.getClaims();
        }
    }

    @AllArgsConstructor
    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Idcard implements EkycInterface {
        @JsonProperty("idcard_commitment")
        String idcardCommitment;

        @JsonProperty("idcard")
        VerifiedClaimsDto idcard;

        @JsonProperty("idcard_old_number")
        String idcardOldNumber;

        @JsonProperty("idcard_number")
        String idcardNumber;

        @JsonProperty("idcard_issuer")
        String idcardIssuer;

        @JsonProperty("idcard_date_of_issuance")
        String idcardDateOfIssuance;

        @JsonProperty("idcard_date_of_expiry")
        String idcardDateOfExpiry;

        public VerifiedClaimsDto.Evidence getEvidence() {
            if (idcard == null) {
                return null;
            }
            return idcard.getEvidence();
        }

        public VerifiedClaimsDto.Claims getClaims() {
            if (idcard == null) {
                return null;
            }
            return idcard.getClaims();
        }
    }

    @AllArgsConstructor
    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Ekyc implements EkycInterface {
        @JsonProperty("ekyc_commitment")
        String ekycCommitment;

        @JsonProperty("verified_claims")
        VerifiedClaimsDto verifiedClaims;

        public VerifiedClaimsDto.Evidence getEvidence() {
            if (verifiedClaims == null) {
                return null;
            }
            return verifiedClaims.getEvidence();
        }

        public VerifiedClaimsDto.Claims getClaims() {
            if (verifiedClaims == null) {
                return null;
            }
            return verifiedClaims.getClaims();
        }
    }


    // Special data profile
    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class EmploymentDto {
        Employment employment;
        @JsonProperty("employment_commitment")
        String employmentCommitment;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class PrimaryReferencePersonDto {
        @JsonProperty("primary_reference_person")
        ReferencePerson primaryReferencePerson;
        @JsonProperty("primary_reference_person_commitment")
        String primaryReferencePersonCommitment;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class SecondaryReferencePersonDto {
        @JsonProperty("secondary_reference_person")
        ReferencePerson secondaryReferencePerson;
        @JsonProperty("secondary_reference_person_commitment")
        String secondaryReferencePersonCommitment;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class BankAccountDto {
        @JsonProperty("bank_account")
        BankAccount bankAccount;
        @JsonProperty("bank_account_commitment")
        String bankAccountCommitment;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class SpouseDto {
        Spouse spouse;
        @JsonProperty("spouse_commitment")
        String spouseCommitment;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class AddressDto {
        Address address;
        @JsonProperty("address_commitment")
        String addressCommitment;
    }

    @NoArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class PermanentAddressDto {
        @JsonProperty("permanent_address")
        Address permanentAddress;
        @JsonProperty("permanent_address_commitment")
        String permanentAddressCommitment;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy