backend-api, UserMapStore: заполнение BaseRequest.userId
This commit is contained in:
parent
3140ea911e
commit
9aeb6ca6ee
2 changed files with 31 additions and 1 deletions
|
|
@ -1,14 +1,21 @@
|
|||
package ru.spcex.clearing.backendapi.service.impl;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.kafka.clients.producer.Producer;
|
||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||
import org.apache.kafka.clients.producer.RecordMetadata;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.user.User;
|
||||
import ru.spcex.clearing.backendapi.controller.response.cud.QueueSuccessResponse;
|
||||
import ru.spcex.clearing.backendapi.domain.actions.IAction;
|
||||
import ru.spcex.clearing.backendapi.errors.ActionValidationException;
|
||||
import ru.spcex.clearing.backendapi.errors.BackEndError;
|
||||
import ru.spcex.clearing.backendapi.errors.NotFound404Exception;
|
||||
import ru.spcex.clearing.backendapi.security.KeycloakUtils;
|
||||
import ru.spcex.clearing.backendapi.service.IOperator;
|
||||
import ru.spcex.clearing.backendapi.service.validation.ActionValidationProvider;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
|
|
@ -21,21 +28,39 @@ import ru.spcex.platform.utils.enumeration.EnumMessage;
|
|||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
@Service
|
||||
public class OperatorImpl implements IOperator {
|
||||
protected final Logger log = LoggerFactory.getLogger(getClass());
|
||||
private final Producer<String, Object> kafka;
|
||||
private final ImdgId idGenerator;
|
||||
private final ImdgProvider imdgProvider;
|
||||
private final ActionValidationProvider validation;
|
||||
private final Imdg<User> userImdg;
|
||||
|
||||
public OperatorImpl(Producer<String, Object> kafka, ImdgProvider imdgProvider, ActionValidationProvider validation) {
|
||||
this.kafka = kafka;
|
||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.validation = validation;
|
||||
this.userImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_User, User.class);
|
||||
}
|
||||
|
||||
|
||||
protected Long currentUserId() {
|
||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||
String username = KeycloakUtils.getUserNameFromAuthentication(authentication);
|
||||
User user = StringUtils.isEmpty(username) ? null : userImdg.getSingleObjectByFieldValues(Map.of("identifier", username));
|
||||
if (user == null) {
|
||||
log.warn("UserID not found by login \"{}\"", username);
|
||||
return null;
|
||||
//throw new IllegalStateException("cannot obtain userId from logged in user " + username);
|
||||
}
|
||||
return user.getId();
|
||||
// todo добавить кэш, с очисткой по времени
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -45,6 +70,7 @@ public class OperatorImpl implements IOperator {
|
|||
request.setId(idGenerator.nextId());
|
||||
request.setActionType(iAction.getActionType());
|
||||
request.setRequestPayload(iAction.toRequest());
|
||||
request.setUserId(currentUserId());
|
||||
//сохраняет данные о запросе в хранилище
|
||||
saveRequestToStorage(destination, request);
|
||||
Future<RecordMetadata> send = kafka.send(new ProducerRecord<>(destination, request));
|
||||
|
|
|
|||
|
|
@ -30,10 +30,14 @@ public class UserMapStore extends TemplateMapStore<User> {
|
|||
@Override
|
||||
public String[] getFields() {
|
||||
return new String[]{
|
||||
"ID", "CREATED_AT", "UPDATED_AT", "IDENTIFIER", "NAME", "FIRST_NAME", "LAST_NAME", "MIDDLE_NAME", "EMAIL",
|
||||
"ID", "CREATED_AT", "UPDATED_AT", "IDENTIFIER", "NAME", "FIRST_NAME", "LAST_NAME", "MIDDLE_NAME", "EMAIL",
|
||||
};
|
||||
}
|
||||
|
||||
public String[] getIndexingField() {
|
||||
return new String[]{"identifier"};
|
||||
}
|
||||
|
||||
@Override
|
||||
public User objectReader(ResultSet resultSet) throws SQLException {
|
||||
User object = new User();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue