Search in sources :

Example 1 with SubscriptionQuery

use of io.gravitee.management.model.subscription.SubscriptionQuery in project gravitee-management-rest-api by gravitee-io.

the class ScheduledSubscriptionsServiceTest method shouldCloseOutdatedSubscriptions.

@Test
public void shouldCloseOutdatedSubscriptions() {
    ApiEntity apiEntity = mock(ApiEntity.class);
    when(apiEntity.getId()).thenReturn("API_ID");
    SubscriptionEntity endDateInThePast = createSubscription("end_date_in_the_past", SubscriptionStatus.ACCEPTED, new Date(0));
    SubscriptionEntity noEndDate = createSubscription("no_end_date", SubscriptionStatus.ACCEPTED, null);
    SubscriptionEntity endDateInTheFuture = createSubscription("end_date_in_the_future", SubscriptionStatus.ACCEPTED, new Date(Long.MAX_VALUE));
    when(apiService.findAll()).thenReturn(Collections.singleton(apiEntity));
    SubscriptionQuery query = new SubscriptionQuery();
    query.setApi(apiEntity.getId());
    query.setStatuses(Collections.singleton(SubscriptionStatus.ACCEPTED));
    when(subscriptionService.search(query)).thenReturn(new HashSet<>(Arrays.asList(endDateInThePast, noEndDate, endDateInTheFuture)));
    service.run();
    verify(apiService, times(1)).findAll();
    verify(subscriptionService, times(1)).search(query);
    verify(subscriptionService, times(1)).close("end_date_in_the_past");
    verify(subscriptionService, never()).close("no_end_date");
    verify(subscriptionService, never()).close("end_date_in_the_future");
}
Also used : ApiEntity(io.gravitee.management.model.ApiEntity) SubscriptionEntity(io.gravitee.management.model.SubscriptionEntity) SubscriptionQuery(io.gravitee.management.model.subscription.SubscriptionQuery) Date(java.util.Date) Test(org.junit.Test)

Example 2 with SubscriptionQuery

use of io.gravitee.management.model.subscription.SubscriptionQuery in project gravitee-management-rest-api by gravitee-io.

the class ApiSubscriptionsResource method listApiSubscriptions.

@GET
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "List subscriptions for the API", notes = "User must have the READ_SUBSCRIPTION permission to use this service")
@ApiResponses({ @ApiResponse(code = 200, message = "Paged result of API's subscriptions", response = PagedResult.class), @ApiResponse(code = 500, message = "Internal server error") })
@Permissions({ @Permission(value = RolePermission.API_SUBSCRIPTION, acls = RolePermissionAction.READ) })
public PagedResult<SubscriptionEntity> listApiSubscriptions(@BeanParam SubscriptionParam subscriptionParam, @Valid @BeanParam Pageable pageable) {
    // Transform query parameters to a subscription query
    SubscriptionQuery subscriptionQuery = subscriptionParam.toQuery();
    Page<SubscriptionEntity> subscriptions = subscriptionService.search(subscriptionQuery, pageable.toPageable());
    PagedResult<SubscriptionEntity> result = new PagedResult<>(subscriptions, pageable.getSize());
    result.setMetadata(subscriptionService.getMetadata(subscriptions.getContent()).getMetadata());
    return result;
}
Also used : SubscriptionQuery(io.gravitee.management.model.subscription.SubscriptionQuery) PagedResult(io.gravitee.management.rest.model.PagedResult) Permissions(io.gravitee.management.rest.security.Permissions)

Example 3 with SubscriptionQuery

use of io.gravitee.management.model.subscription.SubscriptionQuery in project gravitee-management-rest-api by gravitee-io.

the class ApplicationServiceImpl method update.

@Override
public ApplicationEntity update(String applicationId, UpdateApplicationEntity updateApplicationEntity) {
    try {
        LOGGER.debug("Update application {}", applicationId);
        if (updateApplicationEntity.getGroups() != null && !updateApplicationEntity.getGroups().isEmpty()) {
            // throw a NotFoundException if the group doesn't exist
            groupService.findByIds(updateApplicationEntity.getGroups());
        }
        Optional<Application> optApplicationToUpdate = applicationRepository.findById(applicationId);
        if (!optApplicationToUpdate.isPresent()) {
            throw new ApplicationNotFoundException(applicationId);
        }
        // If clientId is set, check for uniqueness
        String clientId = updateApplicationEntity.getClientId();
        if (clientId != null && !clientId.trim().isEmpty()) {
            LOGGER.debug("Check that client_id is unique among all applications");
            final Set<Application> applications = applicationRepository.findAll(ApplicationStatus.ACTIVE);
            final Optional<Application> byClientId = applications.stream().filter(application -> clientId.equals(application.getClientId())).findAny();
            if (byClientId.isPresent() && !byClientId.get().getId().equals(optApplicationToUpdate.get().getId())) {
                LOGGER.error("An application already exists with the same client_id");
                throw new ClientIdAlreadyExistsException(clientId);
            }
        }
        Application application = convert(updateApplicationEntity);
        application.setId(applicationId);
        application.setStatus(ApplicationStatus.ACTIVE);
        application.setCreatedAt(optApplicationToUpdate.get().getCreatedAt());
        application.setUpdatedAt(new Date());
        Application updatedApplication = applicationRepository.update(application);
        // Audit
        auditService.createApplicationAuditLog(updatedApplication.getId(), Collections.emptyMap(), APPLICATION_CREATED, updatedApplication.getUpdatedAt(), optApplicationToUpdate.get(), updatedApplication);
        // Set correct client_id for all subscriptions
        SubscriptionQuery subQuery = new SubscriptionQuery();
        subQuery.setApplication(applicationId);
        subQuery.setStatuses(Collections.singleton(SubscriptionStatus.ACCEPTED));
        subscriptionService.search(subQuery).forEach(new Consumer<SubscriptionEntity>() {

            @Override
            public void accept(SubscriptionEntity subscriptionEntity) {
                UpdateSubscriptionEntity updateSubscriptionEntity = new UpdateSubscriptionEntity();
                updateSubscriptionEntity.setId(subscriptionEntity.getId());
                updateSubscriptionEntity.setStartingAt(subscriptionEntity.getStartingAt());
                updateSubscriptionEntity.setEndingAt(subscriptionEntity.getEndingAt());
                subscriptionService.update(updateSubscriptionEntity, application.getClientId());
            }
        });
        return convert(Collections.singleton(updatedApplication)).iterator().next();
    } catch (TechnicalException ex) {
        LOGGER.error("An error occurs while trying to update application {}", applicationId, ex);
        throw new TechnicalManagementException(String.format("An error occurs while trying to update application %s", applicationId), ex);
    }
}
Also used : SubscriptionQuery(io.gravitee.management.model.subscription.SubscriptionQuery) java.util(java.util) HookScope(io.gravitee.management.service.notification.HookScope) TechnicalException(io.gravitee.repository.exceptions.TechnicalException) LoggerFactory(org.slf4j.LoggerFactory) MembershipRepository(io.gravitee.repository.management.api.MembershipRepository) Autowired(org.springframework.beans.factory.annotation.Autowired) UUID(io.gravitee.common.utils.UUID) io.gravitee.management.model(io.gravitee.management.model) GenericNotificationConfigEntity(io.gravitee.management.model.notification.GenericNotificationConfigEntity) SystemRole(io.gravitee.management.model.permissions.SystemRole) ApplicationRepository(io.gravitee.repository.management.api.ApplicationRepository) Collections.singletonMap(java.util.Collections.singletonMap) ApplicationNotFoundException(io.gravitee.management.service.exceptions.ApplicationNotFoundException) APPLICATION_CREATED(io.gravitee.repository.management.model.Application.AuditEvent.APPLICATION_CREATED) Logger(org.slf4j.Logger) Collections.emptySet(java.util.Collections.emptySet) TechnicalManagementException(io.gravitee.management.service.exceptions.TechnicalManagementException) SubscriptionNotClosableException(io.gravitee.management.service.exceptions.SubscriptionNotClosableException) Collectors(java.util.stream.Collectors) APPLICATION_ARCHIVED(io.gravitee.repository.management.model.Application.AuditEvent.APPLICATION_ARCHIVED) Consumer(java.util.function.Consumer) ClientIdAlreadyExistsException(io.gravitee.management.service.exceptions.ClientIdAlreadyExistsException) Component(org.springframework.stereotype.Component) io.gravitee.repository.management.model(io.gravitee.repository.management.model) io.gravitee.management.service(io.gravitee.management.service) ApplicationHook(io.gravitee.management.service.notification.ApplicationHook) TechnicalException(io.gravitee.repository.exceptions.TechnicalException) SubscriptionQuery(io.gravitee.management.model.subscription.SubscriptionQuery) ClientIdAlreadyExistsException(io.gravitee.management.service.exceptions.ClientIdAlreadyExistsException) ApplicationNotFoundException(io.gravitee.management.service.exceptions.ApplicationNotFoundException) TechnicalManagementException(io.gravitee.management.service.exceptions.TechnicalManagementException)

Example 4 with SubscriptionQuery

use of io.gravitee.management.model.subscription.SubscriptionQuery in project gravitee-management-rest-api by gravitee-io.

the class SubscriptionServiceImpl method findByApi.

@Override
public Collection<SubscriptionEntity> findByApi(String api) {
    logger.debug("Find subscriptions by api {}", api);
    SubscriptionQuery query = new SubscriptionQuery();
    query.setApi(api);
    return search(query);
}
Also used : SubscriptionQuery(io.gravitee.management.model.subscription.SubscriptionQuery)

Example 5 with SubscriptionQuery

use of io.gravitee.management.model.subscription.SubscriptionQuery in project gravitee-management-rest-api by gravitee-io.

the class SubscriptionServiceImpl method findByPlan.

@Override
public Collection<SubscriptionEntity> findByPlan(String plan) {
    logger.debug("Find subscriptions by plan {}", plan);
    SubscriptionQuery query = new SubscriptionQuery();
    query.setPlan(plan);
    return search(query);
}
Also used : SubscriptionQuery(io.gravitee.management.model.subscription.SubscriptionQuery)

Aggregations

SubscriptionQuery (io.gravitee.management.model.subscription.SubscriptionQuery)9 SubscriptionEntity (io.gravitee.management.model.SubscriptionEntity)3 Permissions (io.gravitee.management.rest.security.Permissions)3 ApiEntity (io.gravitee.management.model.ApiEntity)2 PagedResult (io.gravitee.management.rest.model.PagedResult)2 Date (java.util.Date)2 Collectors (java.util.stream.Collectors)2 MediaType (io.gravitee.common.http.MediaType)1 UUID (io.gravitee.common.utils.UUID)1 io.gravitee.management.model (io.gravitee.management.model)1 ApplicationEntity (io.gravitee.management.model.ApplicationEntity)1 GenericNotificationConfigEntity (io.gravitee.management.model.notification.GenericNotificationConfigEntity)1 RolePermission (io.gravitee.management.model.permissions.RolePermission)1 RolePermissionAction (io.gravitee.management.model.permissions.RolePermissionAction)1 SystemRole (io.gravitee.management.model.permissions.SystemRole)1 Permission (io.gravitee.management.rest.security.Permission)1 io.gravitee.management.service (io.gravitee.management.service)1 ApplicationService (io.gravitee.management.service.ApplicationService)1 SubscriptionService (io.gravitee.management.service.SubscriptionService)1 ApplicationNotFoundException (io.gravitee.management.service.exceptions.ApplicationNotFoundException)1