Skip to content
This repository has been archived by the owner on Aug 20, 2021. It is now read-only.

feat: Allows to search subscriptions by api key #724

Merged
merged 1 commit into from Sep 2, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -35,6 +35,8 @@ public class SubscriptionQuery {

private Collection<String> applications;

private String apiKey;

private long from, to;

public Collection<String> getApis() {
Expand Down Expand Up @@ -81,6 +83,14 @@ public void setApplication(String application) {
this.applications = Collections.singleton(application);
}

public String getApiKey() {
return apiKey;
}

public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}

public long getFrom() {
return from;
}
Expand All @@ -107,11 +117,12 @@ public boolean equals(Object o) {
Objects.equals(apis, that.apis) &&
Objects.equals(plans, that.plans) &&
Objects.equals(statuses, that.statuses) &&
Objects.equals(applications, that.applications);
Objects.equals(applications, that.applications) &&
Objects.equals(apiKey, that.apiKey);
}

@Override
public int hashCode() {
return Objects.hash(apis, plans, statuses, applications, from, to);
return Objects.hash(apis, plans, statuses, applications, apiKey, from, to);
}
}
Expand Up @@ -207,6 +207,9 @@ private static class SubscriptionParam {
@ApiModelProperty(dataType = "string", allowableValues = "accepted, pending, rejected, closed", value = "Subscription status")
private ListSubscriptionStatusParam status;

@QueryParam("api_key")
private String apiKey;

public String getApi() {
return api;
}
Expand Down Expand Up @@ -239,6 +242,14 @@ public void setStatus(ListSubscriptionStatusParam status) {
this.status = status;
}

public String getApiKey() {
return apiKey;
}

public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}

private SubscriptionQuery toQuery() {
SubscriptionQuery query = new SubscriptionQuery();

Expand All @@ -256,6 +267,8 @@ private SubscriptionQuery toQuery() {
query.setApplications(applications.getValue());
}

query.setApiKey(this.apiKey);

return query;
}
}
Expand Down
Expand Up @@ -297,6 +297,9 @@ private static class SubscriptionParam {
@ApiModelProperty(dataType = "string", allowableValues = "accepted, pending, rejected, closed", value = "Subscription status")
private ListSubscriptionStatusParam status;

@QueryParam("api_key")
private String apiKey;

public ListStringParam getPlans() {
return plans;
}
Expand Down Expand Up @@ -329,6 +332,14 @@ public void setStatus(ListSubscriptionStatusParam status) {
this.status = status;
}

public String getApiKey() {
return apiKey;
}

public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}

private SubscriptionQuery toQuery() {
SubscriptionQuery query = new SubscriptionQuery();

Expand All @@ -346,6 +357,9 @@ private SubscriptionQuery toQuery() {
query.setStatuses(status.getStatus());
}

if (apiKey != null) {
query.setApiKey(apiKey);
}
return query;
}
}
Expand Down
Expand Up @@ -45,11 +45,14 @@
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static io.gravitee.repository.management.model.Audit.AuditProperties.API;
import static io.gravitee.repository.management.model.Audit.AuditProperties.APPLICATION;
import static io.gravitee.repository.management.model.Subscription.AuditEvent.*;
import static java.lang.System.lineSeparator;
import static java.util.Collections.emptyList;
import static java.util.stream.Collectors.toList;

/**
* @author David BRASSELY (david.brassely at graviteesource.com)
Expand Down Expand Up @@ -119,7 +122,7 @@ public Collection<SubscriptionEntity> findByApplicationAndPlan(String applicatio
query.setApplication(application);
} else if (isAuthenticated()) {
Set<ApplicationListItem> applications = applicationService.findByUser(getAuthenticatedUsername());
query.setApplications(applications.stream().map(ApplicationListItem::getId).collect(Collectors.toList()));
query.setApplications(applications.stream().map(ApplicationListItem::getId).collect(toList()));
}

return search(query);
Expand Down Expand Up @@ -702,10 +705,15 @@ public Collection<SubscriptionEntity> search(SubscriptionQuery query) {
.collect(Collectors.toSet()));
}

List<SubscriptionEntity> subscriptions = subscriptionRepository.search(builder.build())
.stream().map(this::convert).collect(Collectors.toList());
return subscriptions;

Stream<SubscriptionEntity> subscriptionsStream =
subscriptionRepository.search(builder.build()).stream().map(this::convert);
if (query.getApiKey() != null && !query.getApiKey().isEmpty()) {
subscriptionsStream = subscriptionsStream.filter(subscriptionEntity -> {
final Set<ApiKeyEntity> apiKeys = apiKeyService.findBySubscription(subscriptionEntity.getId());
return apiKeys.stream().anyMatch(apiKeyEntity -> apiKeyEntity.getKey().equals(query.getApiKey()));
});
}
return subscriptionsStream.collect(toList());
} catch (TechnicalException ex) {
logger.error("An error occurs while trying to search for subscriptions: {}", query, ex);
throw new TechnicalManagementException(
Expand Down Expand Up @@ -739,11 +747,20 @@ public Page<SubscriptionEntity> search(SubscriptionQuery query, Pageable pageabl
.pageSize(pageable.getPageSize())
.build());

List<SubscriptionEntity> content = pageSubscription.getContent()
.stream().map(this::convert).collect(Collectors.toList());
Stream<SubscriptionEntity> subscriptionsStream = pageSubscription.getContent().stream().map(this::convert);

return new Page<>(content, pageSubscription.getPageNumber() + 1,
(int) pageSubscription.getPageElements(), pageSubscription.getTotalElements());
if (query.getApiKey() != null && !query.getApiKey().isEmpty()) {
subscriptionsStream = subscriptionsStream.filter(subscriptionEntity -> {
final Set<ApiKeyEntity> apiKeys = apiKeyService.findBySubscription(subscriptionEntity.getId());
return apiKeys.stream().anyMatch(apiKeyEntity -> apiKeyEntity.getKey().equals(query.getApiKey()));
});
final Optional<SubscriptionEntity> sub = subscriptionsStream.findAny();
List<SubscriptionEntity> subscriptionEntities = sub.map(Collections::singletonList).orElse(emptyList());
return new Page<>(subscriptionEntities, 1, subscriptionEntities.size(), subscriptionEntities.size());
} else {
return new Page<>(subscriptionsStream.collect(toList()), pageSubscription.getPageNumber() + 1,
(int) pageSubscription.getPageElements(), pageSubscription.getTotalElements());
}
} catch (TechnicalException ex) {
logger.error("An error occurs while trying to search for pageable subscriptions: {}", query, ex);
throw new TechnicalManagementException(
Expand Down