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;
|
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.Producer;
|
||||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||||
import org.apache.kafka.clients.producer.RecordMetadata;
|
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 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.controller.response.cud.QueueSuccessResponse;
|
||||||
import ru.spcex.clearing.backendapi.domain.actions.IAction;
|
import ru.spcex.clearing.backendapi.domain.actions.IAction;
|
||||||
import ru.spcex.clearing.backendapi.errors.ActionValidationException;
|
import ru.spcex.clearing.backendapi.errors.ActionValidationException;
|
||||||
import ru.spcex.clearing.backendapi.errors.BackEndError;
|
import ru.spcex.clearing.backendapi.errors.BackEndError;
|
||||||
import ru.spcex.clearing.backendapi.errors.NotFound404Exception;
|
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.IOperator;
|
||||||
import ru.spcex.clearing.backendapi.service.validation.ActionValidationProvider;
|
import ru.spcex.clearing.backendapi.service.validation.ActionValidationProvider;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
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 ru.spcex.platform.utils.validation.IValidator;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class OperatorImpl implements IOperator {
|
public class OperatorImpl implements IOperator {
|
||||||
|
protected final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
private final Producer<String, Object> kafka;
|
private final Producer<String, Object> kafka;
|
||||||
private final ImdgId idGenerator;
|
private final ImdgId idGenerator;
|
||||||
private final ImdgProvider imdgProvider;
|
private final ImdgProvider imdgProvider;
|
||||||
private final ActionValidationProvider validation;
|
private final ActionValidationProvider validation;
|
||||||
|
private final Imdg<User> userImdg;
|
||||||
|
|
||||||
public OperatorImpl(Producer<String, Object> kafka, ImdgProvider imdgProvider, ActionValidationProvider validation) {
|
public OperatorImpl(Producer<String, Object> kafka, ImdgProvider imdgProvider, ActionValidationProvider validation) {
|
||||||
this.kafka = kafka;
|
this.kafka = kafka;
|
||||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.validation = validation;
|
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
|
@Override
|
||||||
|
|
@ -45,6 +70,7 @@ public class OperatorImpl implements IOperator {
|
||||||
request.setId(idGenerator.nextId());
|
request.setId(idGenerator.nextId());
|
||||||
request.setActionType(iAction.getActionType());
|
request.setActionType(iAction.getActionType());
|
||||||
request.setRequestPayload(iAction.toRequest());
|
request.setRequestPayload(iAction.toRequest());
|
||||||
|
request.setUserId(currentUserId());
|
||||||
//сохраняет данные о запросе в хранилище
|
//сохраняет данные о запросе в хранилище
|
||||||
saveRequestToStorage(destination, request);
|
saveRequestToStorage(destination, request);
|
||||||
Future<RecordMetadata> send = kafka.send(new ProducerRecord<>(destination, request));
|
Future<RecordMetadata> send = kafka.send(new ProducerRecord<>(destination, request));
|
||||||
|
|
|
||||||
|
|
@ -30,10 +30,14 @@ public class UserMapStore extends TemplateMapStore<User> {
|
||||||
@Override
|
@Override
|
||||||
public String[] getFields() {
|
public String[] getFields() {
|
||||||
return new String[]{
|
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
|
@Override
|
||||||
public User objectReader(ResultSet resultSet) throws SQLException {
|
public User objectReader(ResultSet resultSet) throws SQLException {
|
||||||
User object = new User();
|
User object = new User();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue