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

one.credify.sdk.model.UserOidcInfo Maven / Gradle / Ivy

package one.credify.sdk.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*;
import lombok.experimental.FieldDefaults;
import one.credify.sdk.dto.UserInfoRes;
import one.credify.sdk.dto.VerifiedClaimsDto;
import one.credify.sdk.enumeration.ContentType;
import one.credify.sdk.enumeration.EkycDocumentType;
import org.apache.commons.lang3.StringUtils;

import java.util.Map;

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Setter
@FieldDefaults(level = AccessLevel.PRIVATE)
public class UserOidcInfo {
    private static final String EKYC_IMAGE_FACE_KEY = "img_face";
    private static final String EKYC_IMAGE_BACK_KEY = "img_back";
    private static final String EKYC_IMAGE_FRONT_KEY = "img_front";


    String credifyId;

    Openid openid;

    Profile profile;
    Phone phone;
    Email email;
    Address address;

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


    Ekyc ekyc;

    Ekyc idcard;

    Ekyc drivingPermit;

    String idcardOldNumber;

    Commitment commitment;

    Map customClaims;

    @NoArgsConstructor
    @AllArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class Openid {
        Ext ext;
        String transactionId;
        String signingPublicKey;
        String txn;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class Ext {
        Integer offerRank;
        Map claimTokens;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class Profile {
        String birthdate;
        String familyName;
        String gender;
        String givenName;
        String middleName;
        String name;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class AdvanceProfile {
        String currentHousingType;
        String educationLevel;
        String maritalStatus;
        int numberOfDependents;
        String currentHousingTypeOther;
        String advancedProfileCommitment;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class Email {
        String email;
        boolean emailVerified;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class Phone {
        String phoneNumber;
        boolean phoneNumberVerified;
        String phoneCommitment;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class Income {
        String mainIncomeType;
        String payrollDate;
        String receivingSalaryMethod;
        String otherIncomes;
        Long monthlyFamilyIncome;
        Long monthlyExpenses;
        Long monthlyWageIncome;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class Address {
        String country;
        String locality;
        String region;
        String streetAddress;
        String postalCode;

        String formatted;
        String streetNumber;
        String street;
        String sublocalityLevel3;
        String sublocalityLevel2;
        String sublocality;
        String countryCode;
    }


    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class Employment {
        String occupation;
        String otherOccupation;
        String laborContractType;
        String department;
        Integer workingTime;
        String position;
        String companyName;
        String companyPhoneNumber;
        String companyTaxNumber;
        String companyRegistrationType;
        String companyIndustry;
        String companyIndustryOther;
        String companyRegistrationTypeOther;
        Address workAddress;
        Address companyAddress;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class BankAccount {
        String accountOwner;
        String accountNumber;
        String bank;
        String branch;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class ReferencePerson {
        String name;
        String phoneNumber;
        String relationship;
    }

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

    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class Commitment {
        String phoneCommitment;
        String emailCommitment;
        String profileCommitment;
        String addressCommitment;
        String permanentAddressCommitment;
        String advancedProfileCommitment;
        String employmentCommitment;
        String incomeCommitment;
        String bankAccountCommitment;
        String primaryReferencePersonCommitment;
        String secondaryReferencePersonCommitment;
        String spouseCommitment;
        String ekycCommitment;
        String idcardCommitment;
        String drivingPermitCommitment;

        Map customClaimCommitments;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class Ekyc {
        String dateOfExpiry;
        String dateOfIssuance;
        String documentNumber;
        String issuer;
        String formatted;
        String locality;
        String region;
        String birthdate;
        String name;
        String nationality;
        EkycDocumentType type;
        EkycAttachment imageFace;
        EkycAttachment imageBack;
        EkycAttachment imageFront;

        public void updateEkycInfo(UserInfoRes.EkycInterface ekycDto) throws Exception {
            VerifiedClaimsDto.Evidence evidence = ekycDto.getEvidence();
            VerifiedClaimsDto.Claims ekycClaims = ekycDto.getClaims();
            if (evidence != null) {
                if (evidence.getAttachments() != null) {
                    evidence.getAttachments().forEach(attachment -> {
                        switch (attachment.getDesc()) {
                            case EKYC_IMAGE_FACE_KEY:
                                this.setImageFace(UserOidcInfo.EkycAttachment.builder()
                                        .type(ContentType.getType(attachment.getContentType()))
                                        .content(attachment.getContent())
                                        .build());
                                break;
                            case EKYC_IMAGE_BACK_KEY:
                                this.setImageBack(UserOidcInfo.EkycAttachment.builder()
                                        .type(ContentType.getType(attachment.getContentType()))
                                        .content(attachment.getContent())
                                        .build());
                                break;
                            case EKYC_IMAGE_FRONT_KEY:
                                this.setImageFront(UserOidcInfo.EkycAttachment.builder()
                                        .type(ContentType.getType(attachment.getContentType()))
                                        .content(attachment.getContent())
                                        .build());
                                break;
                        }
                    });

                    VerifiedClaimsDto.DocumentDetail documentDetail = evidence.getDocumentDetails();
                    if (documentDetail != null) {
                        this.setType(EkycDocumentType.getType(documentDetail.getType()));

                        if (StringUtils.isEmpty(this.getDateOfExpiry())) {
                            this.setDateOfExpiry(documentDetail.getDateOfExpiry());
                        }
                        if (StringUtils.isEmpty(this.getDocumentNumber())) {
                            this.setDocumentNumber(documentDetail.getDocumentNumber());
                        }
                        if (StringUtils.isEmpty(this.getDateOfIssuance())) {
                            this.setDateOfIssuance(documentDetail.getDateOfIssuance());
                        }
                        if (StringUtils.isEmpty(this.getIssuer()) && documentDetail.getIssuer() != null) {
                            this.setIssuer(documentDetail.getIssuer().getName());
                        }
                    }
                }

            }
            if (ekycClaims != null) {
                this.setName(ekycClaims.getName());
                this.setBirthdate(ekycClaims.getBirthdate());
                if (ekycClaims.getAddress() != null) {
                    this.setFormatted(ekycClaims.getAddress().getFormatted());
                    this.setLocality(ekycClaims.getAddress().getLocality());
                    this.setRegion(ekycClaims.getAddress().getRegion());
                }
                if (ekycClaims.getNationalities() != null && ekycClaims.getNationalities().size() > 0) {
                    this.setNationality(ekycClaims.getNationalities().get(0));
                }
            }
        }
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @Getter
    @Setter
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class EkycAttachment {
        String content;
        ContentType type;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy