use of io.gravitee.rest.api.model.promotion.PromotionEntity in project gravitee-management-rest-api by gravitee-io.
the class PromotionTasksServiceImplTest method shouldGetPromotionTasks_withApiUpdate_andApiCreation.
@Test
public void shouldGetPromotionTasks_withApiUpdate_andApiCreation() throws JsonProcessingException {
PromotionEntity promotionEntity1 = getAPromotionEntity();
PromotionEntity promotionEntity2 = getAPromotionEntity();
when(promotionService.search(argThat(query -> query != null && query.getStatuses().get(0) == PromotionEntityStatus.TO_BE_VALIDATED), any(), any())).thenReturn(new Page<>(List.of(promotionEntity1, promotionEntity2), 0, 0, 0));
when(environmentService.findByOrganization(any())).thenReturn(singletonList(getAnEnvironmentEntity()));
PromotionEntity previousPromotionEntity = getAPromotionEntity();
previousPromotionEntity.setTargetApiId("api#target");
when(promotionService.search(argThat(query -> query != null && query.getStatuses().get(0) == PromotionEntityStatus.ACCEPTED), any(), any())).thenReturn(new Page<>(singletonList(previousPromotionEntity), 0, 0, 0));
when(permissionService.hasPermission(RolePermission.ENVIRONMENT_API, "env#1", UPDATE)).thenReturn(true);
when(permissionService.hasPermission(RolePermission.ENVIRONMENT_API, "env#1", CREATE)).thenReturn(false);
when(objectMapper.readValue(promotionEntity1.getApiDefinition(), ApiEntity.class)).thenReturn(getAnApiEntity());
when(objectMapper.readValue(promotionEntity2.getApiDefinition(), ApiEntity.class)).thenReturn(getAnApiEntity());
when(apiService.exists("api#target")).thenReturn(true);
final List<TaskEntity> result = cut.getPromotionTasks("org#1");
assertThat(result).hasSize(2);
}
use of io.gravitee.rest.api.model.promotion.PromotionEntity in project gravitee-management-rest-api by gravitee-io.
the class PromoteApiOperationHandler method handle.
@Override
public Single<BridgeReply> handle(BridgeCommand bridgeCommand) {
BridgeSimpleReply reply = new BridgeSimpleReply();
reply.setCommandId(bridgeCommand.getId());
final PromotionEntity promotionEntity;
try {
promotionEntity = objectMapper.readValue(bridgeCommand.getPayload().getContent(), PromotionEntity.class);
} catch (JsonProcessingException e) {
logger.warn("Problem while deserializing promotion request for environment {}", bridgeCommand.getEnvironmentId());
reply.setCommandStatus(CommandStatus.ERROR);
reply.setMessage("Problem while deserializing promotion request for environment [" + bridgeCommand.getEnvironmentId() + "]");
return Single.just(reply);
}
promotionEntity.setStatus(PromotionEntityStatus.TO_BE_VALIDATED);
PromotionEntity promotion = promotionService.createOrUpdate(promotionEntity);
reply.setCommandStatus(CommandStatus.SUCCEEDED);
reply.setOrganizationId(bridgeCommand.getOrganizationId());
reply.setEnvironmentId(bridgeCommand.getTarget().getEnvironmentId());
reply.setInstallationId(installationService.get().getId());
try {
reply.setPayload(objectMapper.writeValueAsString(promotion));
} catch (JsonProcessingException e) {
logger.warn("Problem while serializing promotion request for environment {}", promotion.getId());
reply.setCommandStatus(CommandStatus.ERROR);
reply.setMessage("Problem while serializing promotion request for environment [" + bridgeCommand.getEnvironmentId() + "]");
return Single.just(reply);
}
return Single.just(reply);
}
use of io.gravitee.rest.api.model.promotion.PromotionEntity in project gravitee-management-rest-api by gravitee-io.
the class ProcessPromotionOperationHandler method handle.
@Override
public Single<BridgeReply> handle(BridgeCommand bridgeCommand) {
BridgeSimpleReply reply = new BridgeSimpleReply();
reply.setCommandId(bridgeCommand.getId());
final PromotionEntity promotionEntity;
try {
promotionEntity = objectMapper.readValue(bridgeCommand.getPayload().getContent(), PromotionEntity.class);
} catch (JsonProcessingException e) {
logger.warn("Problem while deserializing promotion for environment {}", bridgeCommand.getEnvironmentId());
reply.setCommandStatus(CommandStatus.ERROR);
reply.setMessage("Problem while deserializing promotion for environment [" + bridgeCommand.getEnvironmentId() + "]");
return Single.just(reply);
}
PromotionEntity promotion = promotionService.createOrUpdate(promotionEntity);
reply.setCommandStatus(CommandStatus.SUCCEEDED);
reply.setOrganizationId(bridgeCommand.getOrganizationId());
reply.setEnvironmentId(bridgeCommand.getTarget().getEnvironmentId());
reply.setInstallationId(installationService.get().getId());
try {
reply.setPayload(objectMapper.writeValueAsString(promotion));
} catch (JsonProcessingException e) {
logger.warn("Problem while serializing promotion for environment {}", promotion.getId());
reply.setCommandStatus(CommandStatus.ERROR);
reply.setMessage("Problem while serializing promotion for environment [" + bridgeCommand.getEnvironmentId() + "]");
return Single.just(reply);
}
return Single.just(reply);
}
use of io.gravitee.rest.api.model.promotion.PromotionEntity in project gravitee-management-rest-api by gravitee-io.
the class PromotionsResource method searchPromotions.
@POST
@Path("_search")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Search for Promotion")
@ApiResponses({ @ApiResponse(code = 200, message = "List promotions matching request parameters", response = PromotionEntity.class, responseContainer = "List"), @ApiResponse(code = 500, message = "Internal server error") })
public Response searchPromotions(@ApiParam(name = "statuses", required = true) @NotNull @QueryParam("statuses") List<String> statuses, @ApiParam(name = "apiId", required = true) @NotNull @QueryParam("apiId") String apiId) {
PromotionQuery promotionQuery = new PromotionQuery();
promotionQuery.setStatuses(statuses.stream().map(PromotionEntityStatus::valueOf).collect(toList()));
promotionQuery.setApiId(apiId);
List<PromotionEntity> promotions = promotionService.search(promotionQuery, new SortableImpl("created_at", false), null).getContent();
return Response.ok().entity(promotions).build();
}
use of io.gravitee.rest.api.model.promotion.PromotionEntity in project gravitee-management-rest-api by gravitee-io.
the class PromotionTasksServiceImpl method getPromotionTasksForEnvironments.
@NotNull
private List<TaskEntity> getPromotionTasksForEnvironments(List<EnvironmentEntity> environments, boolean selectUpdatePromotion) {
if (environments.isEmpty()) {
return emptyList();
}
List<String> envCockpitIds = environments.stream().map(EnvironmentEntity::getCockpitId).filter(Objects::nonNull).collect(toList());
final PromotionQuery promotionQuery = new PromotionQuery();
promotionQuery.setStatuses(Collections.singletonList(PromotionEntityStatus.TO_BE_VALIDATED));
promotionQuery.setTargetEnvCockpitIds(envCockpitIds);
final Page<PromotionEntity> promotionsPage = promotionService.search(promotionQuery, new SortableImpl("created_at", false), null);
final PromotionQuery previousPromotionsQuery = new PromotionQuery();
previousPromotionsQuery.setStatuses(Collections.singletonList(PromotionEntityStatus.ACCEPTED));
previousPromotionsQuery.setTargetEnvCockpitIds(envCockpitIds);
previousPromotionsQuery.setTargetApiExists(true);
List<PromotionEntity> previousPromotions = promotionService.search(previousPromotionsQuery, new SortableImpl("created_at", false), null).getContent();
final Map<String, List<String>> promotionByApiWithTargetApiId = previousPromotions.stream().collect(groupingBy(PromotionEntity::getApiId, Collectors.mapping(PromotionEntity::getTargetApiId, toList())));
return promotionsPage.getContent().stream().map(promotionEntity -> {
Optional<String> foundTargetApiId = promotionByApiWithTargetApiId.getOrDefault(promotionEntity.getApiId(), emptyList()).stream().filter(StringUtils::hasText).findFirst();
boolean isUpdate = foundTargetApiId.isPresent() && apiService.exists(foundTargetApiId.get());
return convert(promotionEntity, isUpdate, foundTargetApiId);
}).filter(taskEntity -> ((Boolean) ((Map<String, Object>) taskEntity.getData()).getOrDefault("isApiUpdate", false) == selectUpdatePromotion)).collect(toList());
}
Aggregations