Загрузка данных
@Query("""
SELECT DISTINCT m2.userName
FROM Member m1 JOIN Member m2 ON m1.questionId = m2.questionId
JOIN QuestionCreditcom q ON q.id = m1.questionId
WHERE m1.userName = :userName AND m2.role = 'INITIATOR' AND q.type IN :types
""")
Set<String> findInitiatorUserNamesForMemberAndTypes(@Param("userName") String userName, @Param("types") Set<QuestionType> types);
AvailableCommitteesResponse getAvailableCommittees(Set<QuestionStage> stages, Set<QuestionType> types);
List<CollectionInitiatorResponse.Initiator> getAvailableInitiators();
/**
* То же самое, что {@link #getAvailableInitiators()}, но дополнительно ограничивает вопросы,
* из которых берутся инициаторы, заданным набором типов вопроса.
*
* @param types типы вопросов, среди которых ищутся инициаторы; {@code null}/пусто — без ограничения по типу.
*/
List<CollectionInitiatorResponse.Initiator> getAvailableInitiators(Set<QuestionType> types);
if (actualStatuses == null) {
committees = CollectionUtils.isEmpty(types)
? questionCreditcomRepository.findDistinctCommitteesByQuestionIds(currentUserQuestions, checkStrict810)
: questionCreditcomRepository.findDistinctCommitteesByQuestionIdsAndTypes(currentUserQuestions, types, checkStrict810);
} else if (actualStatuses.isEmpty()) {
committees = Collections.emptyList();
} else {
committees = CollectionUtils.isEmpty(types)
? questionCreditcomRepository.findDistinctCommitteesByQuestionIdsAndStatuses(currentUserQuestions,
actualStatuses, checkStrict810)
: questionCreditcomRepository.findDistinctCommitteesByQuestionIdsAndStatusesAndTypes(currentUserQuestions,
actualStatuses, types, checkStrict810);
}
@Query("""
SELECT DISTINCT new ru.vtb.dc.question.api.v1.dto.CommitteeInfoDto(
q.committeeCode,
q.committeeShortName,
q.committee
)
FROM QuestionCreditcom q
WHERE q.id IN :questionIds
AND q.type IN :types
AND q.isDeleted = FALSE
AND q.committeeShortName IS NOT NULL
AND (:checkStrict810 = FALSE OR q.isStrict810 = FALSE)
ORDER BY q.committeeShortName
""")
List<CommitteeInfoDto> findDistinctCommitteesByQuestionIdsAndTypes(
@Param("questionIds") Set<UUID> questionIds,
@Param("types") Set<QuestionType> types,
@Param("checkStrict810") boolean checkStrict810
);
@Query("""
SELECT DISTINCT new ru.vtb.dc.question.api.v1.dto.CommitteeInfoDto(
q.committeeCode,
q.committeeShortName,
q.committee
)
FROM QuestionCreditcom q
WHERE q.id IN :questionIds
AND q.type IN :types
AND q.isDeleted = FALSE
AND q.committeeShortName IS NOT NULL
AND q.status IN :statuses
AND (:checkStrict810 = FALSE OR q.isStrict810 = FALSE)
ORDER BY q.committeeShortName
""")
List<CommitteeInfoDto> findDistinctCommitteesByQuestionIdsAndStatusesAndTypes(
@Param("questionIds") Set<UUID> questionIds,
@Param("statuses") Set<String> statuses,
@Param("types") Set<QuestionType> types,
@Param("checkStrict810") boolean checkStrict810
);
@PreAuthorize("isAuthenticated()")
@GetMapping("v1/questions/smb/committees")
public AvailableCommitteesResponse getAvailableCommittees(
@RequestParam(value = "stages", required = false) Set<QuestionStage> stages) {
getCounter.increment();
return questionSmbService.getAvailableCommittees(stages);
}
@PreAuthorize("isAuthenticated()")
@GetMapping("v1/questions/smb/initiators")
public CollectionInitiatorResponse getAvailableInitiators() {
getCounter.increment();
return CollectionInitiatorResponse.builder()
.initiators(questionSmbService.getAvailableInitiators())
.build();
}
/**
* Список уникальных комитетов из SMB-вопросов, доступных текущему пользователю. В отличие от
* {@code CreditcomWorkSpaceService.getAvailableCommittees}, не включает комитеты из КИБ-вопросов,
* недоступных на дашборде ФРКК.
*/
AvailableCommitteesResponse getAvailableCommittees(Set<QuestionStage> stages);
/**
* Список уникальных инициаторов из SMB-вопросов, доступных текущему пользователю.
*/
List<CollectionInitiatorResponse.Initiator> getAvailableInitiators();
@Override
public AvailableCommitteesResponse getAvailableCommittees(Set<QuestionStage> stages) {
return creditcomWorkSpaceService.getAvailableCommittees(stages, SMB_TYPES);
}
@Override
public List<CollectionInitiatorResponse.Initiator> getAvailableInitiators() {
return creditcomWorkSpaceService.getAvailableInitiators(SMB_TYPES);
}