meta get all method unified exapmle

This commit is contained in:
ialbert 2022-11-07 11:56:55 +03:00
parent fac3f80184
commit 1adc00a11e
5 changed files with 73 additions and 13 deletions

View file

@ -15,14 +15,14 @@ import ru.spcex.clearing.backendapi.controller.request.cud.securities.MoneyMarke
import ru.spcex.clearing.backendapi.controller.request.cud.securities.MoneyMarketSecurityUpdateAction;
import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse;
import ru.spcex.clearing.backendapi.controller.response.cud.CudResponse;
import ru.spcex.clearing.backendapi.controller.response.entity.securities.MoneyMarketSecurityBackendGetAll;
import ru.spcex.clearing.backendapi.meta.GetResponseFactory;
import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse;
import ru.spcex.clearing.backendapi.service.IOperator;
import ru.spcex.clearing.backendapi.service.IStateLoader;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ExecutionException;
@Controller
@ -70,17 +70,14 @@ public class CudMoneyMarketSecurityController extends AbstractQueueController {
return processRequest(Consts.DESTINATION_MONEY_MARKET_SECURITY_DELETE, deleteAction);
}
@Autowired
private GetResponseFactory responseFactory;
@ApiOperation(value = "get all money market securities.")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = MoneyMarketSecurityBackendGetAll.class)})
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)})
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public MoneyMarketSecurityBackendGetAll getAll() {
Collection<MoneyMarketSecurity> all = stateLoader.getAll(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class);
MoneyMarketSecurityBackendGetAll response = new MoneyMarketSecurityBackendGetAll();
response.fromEntity(responseFactory.responseFromObjectCollection(all));
public CommonGetAllResponse getAll() {
Collection<Map<String, Object>> all = stateLoader.getAllMetaTransform(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class);
CommonGetAllResponse response = new CommonGetAllResponse();
response.fromEntity(all);
return response;
}
}

View file

@ -0,0 +1,46 @@
package ru.spcex.clearing.backendapi.controller.response.entity;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@ApiModel(description = "Ответ при получении массива объектов.")
public class CommonGetAllResponse extends BasicSpcexResponse {
@JsonProperty
@ApiModelProperty(value = "Полезная нагрузка")
private GetAllCommonPayload payload = new GetAllCommonPayload();
private static class GetAllCommonPayload {
private List<Map<String, Object>> items = new ArrayList<>();
public List<Map<String, Object>> getItems() {
return items;
}
public void setItems(List<Map<String, Object>> items) {
this.items = items;
}
}
public GetAllCommonPayload getPayload() {
return payload;
}
public void setPayload(GetAllCommonPayload payload) {
this.payload = payload;
}
public void fromEntity(Collection<Map<String, Object>> anyObjectFields) {
var payload = this.getPayload();
for (Map<String, Object> moneyMarketSecurity : anyObjectFields) {
payload.getItems().add(moneyMarketSecurity);
}
}
}

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.backendapi.service;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
/**
@ -11,4 +12,5 @@ import java.util.Optional;
public interface IStateLoader {
<T extends SpcexObjectBase> Optional<T> getById(Long id, String mapName, Class<T> clazz);
<T extends SpcexObjectBase> Collection<T> getAll(String mapName, Class<T> clazz);
<T extends SpcexObjectBase> Collection<Map<String, Object>> getAllMetaTransform(String mapName, Class<T> clazz);
}

View file

@ -2,6 +2,7 @@ package ru.spcex.clearing.backendapi.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ru.spcex.clearing.backendapi.meta.GetResponseFactory;
import ru.spcex.clearing.backendapi.service.IStateLoader;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import ru.spcex.platform.imdg.api.Imdg;
@ -16,9 +17,11 @@ import java.util.concurrent.ConcurrentHashMap;
public class StateLoaderImpl implements IStateLoader {
private final Map<String, Imdg<?>> allImdgMaps;
private final ImdgProvider imdgProvider;
private final GetResponseFactory responseFactory;
@Autowired
public StateLoaderImpl(ImdgProvider imdgProvider) {
public StateLoaderImpl(ImdgProvider imdgProvider, GetResponseFactory responseFactory) {
this.responseFactory = responseFactory;
this.allImdgMaps = new ConcurrentHashMap<>();
this.imdgProvider = imdgProvider;
}
@ -35,6 +38,12 @@ public class StateLoaderImpl implements IStateLoader {
return imdg.getAllValues();
}
@Override
public <T extends SpcexObjectBase> Collection<Map<String, Object>> getAllMetaTransform(String mapName, Class<T> clazz) {
Collection<T> all = getAll(mapName, clazz);
return responseFactory.responseFromObjectCollection(all);
}
@SuppressWarnings("unchecked")
private <T extends SpcexObjectBase> Imdg<T> getImdg(String mapName, Class<T> clazz) {
return (Imdg<T>) allImdgMaps.computeIfAbsent(mapName, (mapName1) -> imdgProvider.getImdg(mapName, clazz));

View file

@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ru.spcex.clearing.backendapi.service.impl.OperatorImpl;
import ru.spcex.clearing.backendapi.service.validation.ActionValidationProvider;
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
@Configuration
@ -17,8 +18,13 @@ public class IOperator {
@Autowired
@Bean
public OperatorImpl createIOperator(Producer<String, Object> kafka) {
return new OperatorImpl(kafka, hazelcastServiceTest);
public OperatorImpl createIOperator(Producer<String, Object> kafka, ActionValidationProvider validationProvider) {
return new OperatorImpl(kafka, hazelcastServiceTest, validationProvider);
}
@Bean
public ActionValidationProvider validationForActions() {
return new ActionValidationProvider(hazelcastServiceTest);
}
}