backend-api, UserMapStore: заполнение BaseRequest.userId

This commit is contained in:
AKurakin 2023-04-05 12:33:20 +03:00
parent 3140ea911e
commit 9aeb6ca6ee
2 changed files with 31 additions and 1 deletions

View file

@ -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));

View file

@ -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();