Загрузка данных


import lombok.experimental.UtilityClass;
import org.springframework.util.CollectionUtils;
import ru.vtb.dc.cc.api.v1.dto.QuestionOutput;
import ru.vtb.dc.cc.api.v1.dto.QuestionRequest;
import ru.vtb.dc.question.api.v1.dto.ClientIdDto;
import ru.vtb.dc.question.api.v1.dto.FullMember;
import ru.vtb.dc.question.api.v1.dto.MemberDto;
import ru.vtb.dc.question.api.v1.dto.QuestionFileDto;
import ru.vtb.dc.question.api.v1.dto.QuestionResponse;
import ru.vtb.dc.question.api.v1.dto.QuestionType;

import java.util.List;
import java.util.stream.Collectors;

@UtilityClass
public class ExternalQuestionMapper {

    public static ru.vtb.dc.question.api.v1.dto.QuestionRequest map(QuestionRequest questionRequest) {
        ru.vtb.dc.question.api.v1.dto.QuestionRequest request = ru.vtb.dc.question.api.v1.dto.QuestionRequest.builder()
                .name(questionRequest.getName())
                .agendaId(questionRequest.getAgendaId())
                .changeDecisionLabel(questionRequest.getChangeDecisionLabel())
                .committee(questionRequest.getCommittee())
                .committeeCode(questionRequest.getCommitteeCode())
                .committeeShortName(questionRequest.getCommitteeShortName())
                .coveringLetter(questionRequest.getCoveringLetter())
                .decisionClassifier(questionRequest.getDecisionClassifier())
                .formType(questionRequest.getFormType())
                .deadline(questionRequest.getDeadline())
                .isChangeable(questionRequest.isChangeable())
                .isCancelable(questionRequest.isCancelable())
                .isAdditionalQuestion(questionRequest.isAdditionalQuestion())
                .isClosed(questionRequest.isClosed())
                .isNotSet(questionRequest.isNotSet())
                .isStrict810(questionRequest.getIsStrict810())
                .parentId(questionRequest.getParentId())
                .processId(questionRequest.getProcessId())
                .projectInfo(questionRequest.getProjectInfo())
                .questionNumber(questionRequest.getQuestionNumber())
                .questionVersion(questionRequest.getQuestionVersion())
                .status(questionRequest.getStatus())
                .type(QuestionType.valueOf(questionRequest.getType().name()))
                .build();

        if (!CollectionUtils.isEmpty(questionRequest.getMembers())) {
            request.setMembers(
                    questionRequest.getMembers().stream()
                            .map(fullMember ->
                                    MemberDto.builder()
                                            .userName(fullMember.getUserName())
                                            .role(fullMember.getRole())
                                            .build())
                            .collect(Collectors.toList())
            );
        }

        if (!CollectionUtils.isEmpty(questionRequest.getClientIds())) {
            request.setClientIds(
                    questionRequest.getClientIds().stream()
                            .map(it ->
                                    ClientIdDto.builder()
                                            .slxId(it.getSlxId())
                                            .mdmCode(it.getMdmCode())
                                            .build())
                            .collect(Collectors.toList())
            );
        }

        return request;
    }

    public static QuestionOutput map(
            QuestionResponse questionResponse,
            List<FullMember> members,
            List<QuestionFileDto> questionFileDtoList
    ) {
        return QuestionOutput.builder()
                .id(questionResponse.getQuestionId())
                .parentId(questionResponse.getParentId())
                .status(questionResponse.getStatus())
                .questionVersion(questionResponse.getQuestionVersion())
                .questionNumber(questionResponse.getQuestionNumber())
                .type(ru.vtb.dc.cc.api.v1.dto.QuestionType.valueOf(questionResponse.getType().name()))
                .name(questionResponse.getName())
                .coveringLetter(questionResponse.getCoveringLetter())
                .startDate(questionResponse.getStartDate())
                .deadline(questionResponse.getDeadline())
                .members(members.stream()
                        .map(fullMemberResponse ->
                                ru.vtb.dc.cc.api.v1.dto.FullMember.builder()
                                        .questionId(questionResponse.getQuestionId())
                                        .role(fullMemberResponse.getRole())
                                        .division(fullMemberResponse.getDivision())
                                        .fullName(fullMemberResponse.getFullName())
                                        .isCustom(fullMemberResponse.isCustom())
                                        .memberId(fullMemberResponse.getMemberId())
                                        .userName(fullMemberResponse.getUserName())
                                        .position(fullMemberResponse.getPosition())
                                        .build())
                        .collect(Collectors.toList()))
                .documents(questionFileDtoList.stream()
                        .map(questionFileDto ->
                                ru.vtb.dc.cc.api.v1.dto.QuestionFileDto.builder()
                                        .id(questionFileDto.getId())
                                        .cxkId(questionFileDto.getCxkId())
                                        .questionId(questionFileDto.getQuestionId())
                                        .documentType(questionFileDto.getDocumentType())
                                        .documentTypeName(questionFileDto.getDocumentTypeName())
                                        .active(questionFileDto.getActive())
                                        .deleteDate(questionFileDto.getDeleteDate())
                                        .addDate(questionFileDto.getAddDate())
                                        .documentUrl(questionFileDto.getDocumentUrl())
                                        .fileName(questionFileDto.getFileName())
                                        .initiator(questionFileDto.getInitiator())
                                        .size(questionFileDto.getSize())
                                        .build())
                        .collect(Collectors.toList()))
                .processId(questionResponse.getProcessId())
                .projectInfo(questionResponse.getProjectInfo())
                .decisionClassifier(questionResponse.getDecisionClassifier())
                .committee(questionResponse.getCommittee())
                .committeeCode(questionResponse.getCommitteeCode())
                .committeeShortName(questionResponse.getCommitteeShortName())
                .agendaId(questionResponse.getAgendaId())
                .isCancelable(questionResponse.getIsCancelable())
                .isChangeable(questionResponse.getIsChangeable())
                .isClosed(questionResponse.isClosed())
                .isNotSet(questionResponse.isNotSet())
                .isAdditionalQuestion(questionResponse.isAdditionalQuestion())
                .isStrict810(questionResponse.getIsStrict810())
                .changeDecisionLabel(questionResponse.getChangeDecisionLabel())
                .formType(questionResponse.getFormType())
                .callbackUrl(questionResponse.getCallbackUrl())
                .build();
    }
}