public Future getOrAcceptInvitation()

in server/src/main/java/com/epam/aidial/core/server/controller/InvitationController.java [46:84]


    public Future<?> getOrAcceptInvitation(String invitationId) {
        boolean accept = Boolean.parseBoolean(context.getRequest().getParam("accept"));
        if (accept) {
            proxy.getVertx()
                    .executeBlocking(() -> {
                        String bucketLocation = BucketBuilder.buildInitiatorBucket(context);
                        String bucket = encryptionService.encrypt(bucketLocation);
                        ResourceDescriptor invitationResource = invitationService.getInvitationResource(invitationId);
                        if (invitationResource == null) {
                            throw new ResourceNotFoundException();
                        }
                        return lockService.underBucketLock(invitationResource.getBucketLocation(), () -> {
                            shareService.acceptSharedResources(bucket, bucketLocation, invitationId);
                            return null;
                        });
                    }, false)
                    .onSuccess(ignore -> context.respond(HttpStatus.OK))
                    .onFailure(error -> {
                        if (error instanceof ResourceNotFoundException) {
                            context.respond(HttpStatus.NOT_FOUND, "No invitation found for ID " + invitationId);
                        } else if (error instanceof IllegalArgumentException) {
                            context.respond(HttpStatus.BAD_REQUEST, error.getMessage());
                        } else {
                            context.respond(HttpStatus.INTERNAL_SERVER_ERROR, error.getMessage());
                        }
                    });
        } else {
            proxy.getVertx()
                    .executeBlocking(() -> invitationService.getInvitation(invitationId), false)
                    .onSuccess(invitation -> {
                        if (invitation == null) {
                            context.respond(HttpStatus.NOT_FOUND, "No invitation found for ID " + invitationId);
                        } else {
                            context.respond(HttpStatus.OK, invitation);
                        }
                    }).onFailure(error -> context.respond(HttpStatus.INTERNAL_SERVER_ERROR, error.getMessage()));
        }
        return Future.succeededFuture();
    }