static

in server/src/main/java/com/epam/aidial/core/server/controller/ControllerSelector.java [83:333]


    static {
        // GET routes
        get(PATTERN_DEPLOYMENT, (proxy, context, pathMatcher) -> {
            DeploymentController controller = new DeploymentController(context);
            String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));
            return () -> controller.getDeployment(deploymentId);
        });
        get(PATTERN_DEPLOYMENTS, (proxy, context, pathMatcher) -> {
            DeploymentController controller = new DeploymentController(context);
            return controller::getDeployments;
        });
        get(PATTERN_MODEL, (proxy, context, pathMatcher) -> {
            ModelController controller = new ModelController(context);
            String modelId = UrlUtil.decodePath(pathMatcher.group(1));
            return () -> controller.getModel(modelId);
        });
        get(PATTERN_MODELS, (proxy, context, pathMatcher) -> {
            ModelController controller = new ModelController(context);
            return controller::getModels;
        });
        get(PATTERN_ADDON, (proxy, context, pathMatcher) -> {
            AddonController controller = new AddonController(context);
            String addonId = UrlUtil.decodePath(pathMatcher.group(1));
            return () -> controller.getAddon(addonId);
        });
        get(PATTERN_ADDONS, (proxy, context, pathMatcher) -> {
            AddonController controller = new AddonController(context);
            return controller::getAddons;
        });
        get(PATTERN_ASSISTANT, (proxy, context, pathMatcher) -> {
            AssistantController controller = new AssistantController(context);
            String assistantId = UrlUtil.decodePath(pathMatcher.group(1));
            return () -> controller.getAssistant(assistantId);
        });
        get(PATTERN_ASSISTANTS, (proxy, context, pathMatcher) -> {
            AssistantController controller = new AssistantController(context);
            return controller::getAssistants;
        });
        get(PATTERN_APPLICATION, (proxy, context, pathMatcher) -> {
            ApplicationController controller = new ApplicationController(context);
            String application = UrlUtil.decodePath(pathMatcher.group(1));
            return () -> controller.getApplication(application);
        });
        get(PATTERN_APPLICATIONS, (proxy, context, pathMatcher) -> {
            ApplicationController controller = new ApplicationController(context);
            return controller::getApplications;
        });
        get(PATTERN_FILES_METADATA, (proxy, context, pathMatcher) -> {
            FileMetadataController controller = new FileMetadataController(proxy, context);
            String path = context.getRequest().path();
            return () -> controller.handle(resourcePath(path));
        });
        get(PATTERN_FILES, (proxy, context, pathMatcher) -> {
            DownloadFileController controller = new DownloadFileController(proxy, context);
            String path = context.getRequest().path();
            return () -> controller.handle(resourcePath(path));
        });
        get(PATTERN_RESOURCE, (proxy, context, pathMatcher) -> {
            ResourceController controller = new ResourceController(proxy, context, false);
            String path = context.getRequest().path();
            return () -> controller.handle(resourcePath(path));
        });
        get(PATTERN_RESOURCE_METADATA, (proxy, context, pathMatcher) -> {
            ResourceController controller = new ResourceController(proxy, context, true);
            String path = context.getRequest().path();
            return () -> controller.handle(resourcePath(path));
        });
        get(PATTERN_BUCKET, (proxy, context, pathMatcher) -> {
            BucketController controller = new BucketController(proxy, context);
            return controller::getBucket;
        });
        get(INVITATION, (proxy, context, pathMatcher) -> {
            String invitationId = UrlUtil.decodePath(pathMatcher.group(1));
            InvitationController controller = new InvitationController(proxy, context);
            return () -> controller.getOrAcceptInvitation(invitationId);
        });
        get(INVITATIONS, (proxy, context, pathMatcher) -> {
            InvitationController controller = new InvitationController(proxy, context);
            return controller::getInvitations;
        });
        get(DEPLOYMENT_LIMITS, (proxy, context, pathMatcher) -> {
            String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));
            LimitController controller = new LimitController(proxy, context);
            return () -> controller.getLimits(deploymentId);
        });
        get(PATTERN_CONFIGURATION, (proxy, context, pathMatcher) -> {
            String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));
            Function<Deployment, String> getter = (model) -> Optional.ofNullable(model)
                    .map(Deployment::getFeatures)
                    .map(Features::getConfigurationEndpoint)
                    .orElse(null);

            DeploymentFeatureController controller = new DeploymentFeatureController(proxy, context);
            return () -> controller.handle(deploymentId, getter, false);
        });
        get(USER_INFO, (proxy, context, pathMatcher) -> new UserInfoController(context));
        get(APP_SCHEMAS, (proxy, context, pathMatcher) -> {
            ApplicationTypeSchemaController controller = new ApplicationTypeSchemaController(context);
            String operation = pathMatcher.group(1);
            return switch (operation) {
                case "schemas" -> controller::handleListSchemas;
                case "meta_schema" -> controller::handleGetMetaSchema;
                case "schema" -> controller::handleGetSchema;
                default -> null;
            };
        });

        // POST routes
        post(PATTERN_POST_DEPLOYMENT, (proxy, context, pathMatcher) -> {
            String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));
            String deploymentApi = UrlUtil.decodePath(pathMatcher.group(2));
            DeploymentPostController controller = new DeploymentPostController(proxy, context);
            return () -> controller.handle(deploymentId, deploymentApi);
        });
        post(PATTERN_RATE_RESPONSE, (proxy, context, pathMatcher) -> {
            String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));

            Function<Deployment, String> getter = (model) -> Optional.ofNullable(model)
                    .map(Deployment::getFeatures)
                    .map(Features::getRateEndpoint)
                    .orElse(null);

            DeploymentFeatureController controller = new DeploymentFeatureController(proxy, context);
            return () -> controller.handle(deploymentId, getter, false);
        });
        post(PATTERN_TOKENIZE, (proxy, context, pathMatcher) -> {
            String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));

            Function<Deployment, String> getter = (model) -> Optional.ofNullable(model)
                    .map(Deployment::getFeatures)
                    .map(Features::getTokenizeEndpoint)
                    .orElse(null);

            DeploymentFeatureController controller = new DeploymentFeatureController(proxy, context);
            return () -> controller.handle(deploymentId, getter, true);
        });
        post(PATTERN_TRUNCATE_PROMPT, (proxy, context, pathMatcher) -> {
            String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));

            Function<Deployment, String> getter = (model) -> Optional.ofNullable(model)
                    .map(Deployment::getFeatures)
                    .map(Features::getTruncatePromptEndpoint)
                    .orElse(null);

            DeploymentFeatureController controller = new DeploymentFeatureController(proxy, context);
            return () -> controller.handle(deploymentId, getter, true);
        });
        post(SHARE_RESOURCE_OPERATIONS, (proxy, context, pathMatcher) -> {
            String operation = pathMatcher.group(1);
            ShareController.Operation op = ShareController.Operation.valueOf(operation.toUpperCase());

            ShareController controller = new ShareController(proxy, context);
            return () -> controller.handle(op);
        });
        post(PUBLICATIONS, (proxy, context, pathMatcher) -> {
            String operation = pathMatcher.group(1);
            PublicationController controller = new PublicationController(proxy, context);

            return switch (operation) {
                case "list" -> controller::listPublications;
                case "get" -> controller::getPublication;
                case "create" -> controller::createPublication;
                case "delete" -> controller::deletePublication;
                case "approve" -> controller::approvePublication;
                case "reject" -> controller::rejectPublication;
                default -> null;
            };
        });
        post(PUBLICATION_RULES, (proxy, context, pathMatcher) -> {
            PublicationController controller = new PublicationController(proxy, context);
            return controller::listRules;
        });
        post(RESOURCE_OPERATIONS, (proxy, context, pathMatcher) -> {
            String operation = pathMatcher.group(1);
            ResourceOperationController controller = new ResourceOperationController(proxy, context);

            return switch (operation) {
                case "move" -> controller::move;
                case "subscribe" -> controller::subscribe;
                default -> null;
            };
        });
        post(PUBLISHED_RESOURCES, (proxy, context, pathMatcher) -> {
            PublicationController controller = new PublicationController(proxy, context);
            return controller::listPublishedResources;
        });
        post(NOTIFICATIONS, (proxy, context, pathMatcher) -> {
            String operation = pathMatcher.group(1);
            NotificationController controller = new NotificationController(proxy, context);

            return switch (operation) {
                case "list" -> controller::listNotifications;
                case "delete" -> controller::deleteNotification;
                default -> null;
            };
        });
        post(APPLICATIONS, (proxy, context, pathMatcher) -> {
            String operation = pathMatcher.group(1);
            ApplicationController controller = new ApplicationController(context);

            return switch (operation) {
                case "deploy" -> controller::deployApplication;
                case "undeploy" -> controller::undeployApplication;
                case "logs" -> controller::getApplicationLogs;
                default -> null;
            };
        });
        post(CODE_INTERPRETER, (proxy, context, pathMatcher) -> {
            String operation = pathMatcher.group(1);
            CodeInterpreterController controller = new CodeInterpreterController(context);

            return switch (operation) {
                case "open_session" -> controller::openSession;
                case "close_session" -> controller::closeSession;
                case "execute_code" -> controller::executeCode;
                case "upload_file" -> controller::uploadFile;
                case "download_file" -> controller::downloadFile;
                case "list_files" -> controller::listFiles;
                case "transfer_input_file" -> controller::transferInputFile;
                case "transfer_output_file" -> controller::transferOutputFile;
                default -> null;
            };
        });
        // DELETE routes
        delete(PATTERN_FILES, (proxy, context, pathMatcher) -> {
            ResourceController controller = new ResourceController(proxy, context, false);
            String path = context.getRequest().path();
            return () -> controller.handle(resourcePath(path));
        });
        delete(PATTERN_RESOURCE, (proxy, context, pathMatcher) -> {
            ResourceController controller = new ResourceController(proxy, context, false);
            String path = context.getRequest().path();
            return () -> controller.handle(resourcePath(path));
        });
        delete(INVITATION, (proxy, context, pathMatcher) -> {
            String invitationId = UrlUtil.decodePath(pathMatcher.group(1));
            InvitationController controller = new InvitationController(proxy, context);
            return () -> controller.deleteInvitation(invitationId);
        });
        // PUT routes
        put(PATTERN_FILES, (proxy, context, pathMatcher) -> {
            UploadFileController controller = new UploadFileController(proxy, context);
            String path = context.getRequest().path();
            return () -> controller.handle(resourcePath(path));
        });
        put(PATTERN_RESOURCE, (proxy, context, pathMatcher) -> {
            ResourceController controller = new ResourceController(proxy, context, false);
            String path = context.getRequest().path();
            return () -> controller.handle(resourcePath(path));
        });
    }