From 21cb481a26b39815bed041ce26a5115be4449934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jesus?= Date: Tue, 30 Jan 2024 17:39:44 +0000 Subject: [PATCH 1/7] Created pwp module. --- src/backend/microservices/pwp/build.gradle | 46 ++ .../java/org/phyloviz/pwp/PWPApplication.java | 20 + .../pwp/config/DataRepositoryConfig.java | 92 ++++ .../org/phyloviz/pwp/config/PWPConfig.java | 126 +++++ .../http/controllers/ComputeController.java | 118 +++++ .../controllers/FileTransferController.java | 115 +++++ .../controllers/VisualizationController.java | 206 +++++++++ .../projects/ProjectsController.java | 131 ++++++ .../projects/datasets/DatasetsController.java | 171 +++++++ .../DistanceMatricesController.java | 65 +++ .../tree_views/TreeViewsController.java | 65 +++ .../datasets/trees/TreesController.java | 65 +++ .../projects/files/FilesController.java | 108 +++++ .../CreateWorkflowInputModel.java | 11 + .../CreateWorkflowOutputModel.java | 13 + .../http/models/datasets/DatasetModel.java | 34 ++ .../CreateDatasetInputModel.java | 12 + .../CreateDatasetOutputModel.java | 15 + .../DeleteDatasetOutputModel.java | 11 + .../get_dataset/GetDatasetOutputModel.java | 10 + .../get_datasets/GetDatasetsOutputModel.java | 16 + .../SetIsolateDataOfDatasetInputModel.java | 9 + .../SetIsolateDataOfDatasetOutputModel.java | 15 + .../UpdateDatasetInputModel.java | 9 + .../UpdateDatasetOutputModel.java | 23 + .../DistanceMatrixOutputModel.java | 24 + ...stanceMatrixSourceFunctionOutputModel.java | 13 + .../DistanceMatrixSourceOutputModel.java | 4 + .../DeleteDistanceMatrixOutputModel.java | 12 + .../UpdateDistanceMatrixInputModel.java | 8 + .../UpdateDistanceMatrixOutputModel.java | 17 + .../pwp/http/models/files/FilesModel.java | 19 + .../files/isolate_data/IsolateDataModel.java | 19 + .../DeleteIsolateDataOutputModel.java | 11 + .../UpdateIsolateDataInputModel.java | 8 + .../UpdateIsolateDataOutputModel.java | 17 + .../files/typing_data/TypingDataModel.java | 15 + .../DeleteTypingDataOutputModel.java | 11 + .../UpdateTypingDataInputModel.java | 8 + .../UpdateTypingDataOutputModel.java | 17 + .../http/models/get_tree_view/EdgeModel.java | 17 + .../get_tree_view/GetTreeViewOutputModel.java | 29 ++ .../http/models/get_tree_view/NodeModel.java | 28 ++ .../get_workflow/GetWorkflowOutputModel.java | 30 ++ .../GetWorkflowStatusOutputModel.java | 28 ++ .../GetWorkflowsOutputModel.java | 16 + .../isolate_data/IsolateDataRowModel.java | 22 + .../UploadIsolateDataOutputModel.java | 15 + .../GetIsolateDataRowsOutputModel.java | 18 + .../GetIsolateDataKeysOutputModel.java | 13 + .../http/models/projects/ProjectModel.java | 27 ++ .../CreateProjectInputModel.java | 9 + .../CreateProjectOutputModel.java | 13 + .../DeleteProjectOutputModel.java | 10 + .../get_project/GetProjectOutputModel.java | 10 + .../get_projects/GetProjectsOutputModel.java | 15 + .../get_projects/GetProjectsProjectModel.java | 17 + .../UpdateProjectInputModel.java | 9 + .../UpdateProjectOutputModel.java | 23 + .../SaveTreeViewInputModel.java | 20 + .../SaveTreeViewOutputModel.java | 20 + .../save_tree_view/TransformationsModel.java | 49 ++ .../tree_views/TreeViewOutputModel.java | 19 + .../tree_views/TreeViewSourceOutputModel.java | 13 + .../DeleteTreeViewOutputModel.java | 12 + .../UpdateTreeViewInputModel.java | 8 + .../UpdateTreeViewOutputModel.java | 17 + .../http/models/trees/TreeOutputModel.java | 32 ++ ...rceAlgorithmDistanceMatrixOutputModel.java | 17 + ...eSourceAlgorithmTypingDataOutputModel.java | 17 + .../trees/TreeSourceFileOutputModel.java | 15 + .../models/trees/TreeSourceOutputModel.java | 4 + .../delete_tree/DeleteTreeOutputModel.java | 12 + .../UpdateTreeInputModel.java | 8 + .../UpdateTreeOutputModel.java | 17 + .../typing_data/TypingDataProfileModel.java | 20 + .../UploadTypingDataOutputModel.java | 15 + .../GetTypingDataProfilesOutputModel.java | 21 + .../GetTypingDataSchemaOutputModel.java | 20 + .../AdministrationExceptionHandler.java | 52 +++ .../pipeline/ComputeExceptionHandler.java | 33 ++ .../FileTransferExceptionHandler.java | 32 ++ .../VisualizationExceptionHandler.java | 28 ++ .../tool_template/ToolTemplateRepository.java | 12 + .../AccessTemplateDeserializer.java | 38 ++ .../converters/AccessTemplateSerializer.java | 30 ++ ...aseInsensitiveEnumDeserializerFactory.java | 36 ++ .../CaseInsensitiveEnumSerializer.java | 12 + .../documents/GeneralTemplate.java | 21 + .../tool_template/documents/ToolTemplate.java | 41 ++ .../documents/ToolTemplateData.java | 78 ++++ .../access/AccessDetailsTemplate.java | 7 + .../documents/access/AccessTemplate.java | 35 ++ .../documents/access/AccessTypeTemplate.java | 22 + .../access/api/ApiAccessDetailsTemplate.java | 21 + .../library/DockerAutoRemoveTemplate.java | 17 + .../access/library/DockerVolumeTemplate.java | 45 ++ .../library/LibraryAccessDetailsTemplate.java | 63 +++ .../documents/library/CommandTemplate.java | 31 ++ .../documents/library/LibraryTemplate.java | 30 ++ .../mongo/ToolTemplateMongoRepository.java | 13 + .../mongo/ToolTemplateRepositoryMongo.java | 19 + .../WorkflowInstanceRepository.java | 21 + .../documents/WorkflowInstance.java | 33 ++ .../documents/WorkflowStatus.java | 7 + .../WorkflowInstanceMongoRepository.java | 20 + .../WorkflowInstanceRepositoryMongo.java | 41 ++ .../WorkflowTemplateRepository.java | 26 ++ .../documents/ActionTemplate.java | 21 + .../documents/TaskTemplate.java | 29 ++ .../documents/WorkflowTemplate.java | 84 ++++ .../documents/WorkflowTemplateData.java | 78 ++++ .../WorkflowTemplateArgumentProperties.java | 39 ++ .../WorkflowTemplateArgumentType.java | 13 + .../WorkflowTemplateMongoRepository.java | 19 + .../WorkflowTemplateRepositoryMongo.java | 25 + .../phyloviz/pwp/service/ComputeService.java | 77 ++++ .../pwp/service/ComputeServiceImpl.java | 430 ++++++++++++++++++ .../pwp/service/FileTransferService.java | 52 +++ .../pwp/service/FileTransferServiceImpl.java | 158 +++++++ .../pwp/service/VisualizationService.java | 108 +++++ .../pwp/service/VisualizationServiceImpl.java | 270 +++++++++++ .../create_workflow/CreateWorkflowOutput.java | 8 + .../dtos/dataset/CreateDatasetOutput.java | 2 +- .../service/dtos/dataset/FullDatasetInfo.java | 8 +- .../SetIsolateDataOfDatasetOutput.java | 2 +- .../dtos/dataset/UpdateDatasetOutput.java | 2 +- .../distance_matrix/DistanceMatrixInfo.java | 2 +- .../DistanceMatrixSourceFunctionInfo.java | 2 +- .../DistanceMatrixSourceInfo.java | 4 + .../UpdateDistanceMatrixOutput.java | 2 +- .../pwp/service/dtos/files/FilesInfo.java | 13 + .../files/isolate_data/IsolateDataInfo.java | 2 +- .../isolate_data/UpdateIsolateDataOutput.java | 2 +- .../files/typing_data/TypingDataInfo.java | 2 +- .../typing_data/UpdateTypingDataOutput.java | 2 +- .../dtos/get_workflow/GetWorkflowOutput.java | 18 + .../get_workflow/GetWorkflowStatusOutput.java | 17 + .../dtos/project/CreateProjectOutput.java | 2 +- .../service/dtos/project/FullProjectInfo.java | 6 +- .../dtos/project/UpdateProjectOutput.java | 2 +- .../pwp}/service/dtos/tree/TreeInfo.java | 2 +- ...TreeSourceAlgorithmDistanceMatrixInfo.java | 2 +- .../TreeSourceAlgorithmTypingDataInfo.java | 2 +- .../service/dtos/tree/TreeSourceFileInfo.java | 2 +- .../pwp/service/dtos/tree/TreeSourceInfo.java | 5 + .../service/dtos/tree/UpdateTreeOutput.java | 2 +- .../service/dtos/tree_view/TreeViewInfo.java | 2 +- .../dtos/tree_view/TreeViewSourceInfo.java | 2 +- .../dtos/tree_view/UpdateTreeViewOutput.java | 2 +- .../DatasetDoesNotExistException.java | 7 + .../DeniedFileDeletionException.java | 2 +- .../DeniedResourceDeletionException.java | 2 +- .../DistanceMatrixDoesNotExistException.java | 7 + .../exceptions/IndexingNeededException.java | 7 + .../exceptions/InvalidWorkflowException.java | 7 + .../ProjectDoesNotExistException.java | 7 + .../service/exceptions/TemplateNotFound.java | 7 + .../exceptions/TreeDoesNotExistException.java | 7 + .../TreeViewDoesNotExistException.java | 7 + .../WorkflowInstanceNotFoundException.java | 7 + ...orkflowTemplateConfigurationException.java | 7 + .../pwp/service/flowviz/FLOWViZClient.java | 39 ++ .../service/flowviz/FLOWViZClientBuilder.java | 51 +++ .../service/flowviz/FLOWViZHttpService.java | 254 +++++++++++ .../flowviz/adapters/AccessDeserializer.java | 61 +++ .../flowviz/adapters/AccessSerializer.java | 34 ++ .../adapters/LocalDateTimeDeserializer.java | 24 + .../adapters/LocalDateTimeSerializer.java | 23 + .../exceptions/AuthenticationException.java | 7 + .../ConnectionRefusedException.java | 9 + .../UnexpectedResponseException.java | 14 + .../service/flowviz/identity/Credentials.java | 9 + .../pwp/service/flowviz/identity/Token.java | 10 + .../models/get_workflow/AirflowData.java | 11 + .../get_workflow/AirflowWorkflowStatus.java | 13 + .../get_workflow/GetWorkflowResponse.java | 9 + .../models/get_workflow/WorkflowState.java | 15 + .../service/flowviz/models/tool/General.java | 13 + .../pwp/service/flowviz/models/tool/Tool.java | 19 + .../flowviz/models/tool/ToolService.java | 20 + .../flowviz/models/tool/access/Access.java | 11 + .../models/tool/access/AccessDetails.java | 4 + .../models/tool/access/AccessType.java | 12 + .../tool/access/api/ApiAccessDetails.java | 14 + .../tool/access/library/DockerAutoRemove.java | 16 + .../tool/access/library/DockerVolume.java | 17 + .../access/library/LibraryAccessDetails.java | 29 ++ .../tool/access/library/VolumeType.java | 12 + .../flowviz/models/tool/library/Command.java | 20 + .../flowviz/models/tool/library/Library.java | 19 + .../workflow/GetWorkflowTaskLogResponse.java | 8 + .../flowviz/models/workflow/Workflow.java | 28 ++ .../models/workflow/WorkflowService.java | 25 + .../flowviz/models/workflow/tasks/Action.java | 10 + .../flowviz/models/workflow/tasks/Task.java | 19 + .../pwp}/service/project/ProjectService.java | 8 +- .../service/project/ProjectServiceImpl.java | 16 +- .../project/dataset/DatasetService.java | 10 +- .../project/dataset/DatasetServiceImpl.java | 22 +- .../DistanceMatrixService.java | 6 +- .../DistanceMatrixServiceImpl.java | 8 +- .../project/dataset/tree/TreeService.java | 6 +- .../project/dataset/tree/TreeServiceImpl.java | 8 +- .../dataset/tree_view/TreeViewService.java | 6 +- .../tree_view/TreeViewServiceImpl.java | 6 +- .../project/file/IsolateDataService.java | 6 +- .../project/file/IsolateDataServiceImpl.java | 8 +- .../project/file/TypingDataService.java | 6 +- .../project/file/TypingDataServiceImpl.java | 8 +- .../pwp/src/main/resources/application.yml | 31 ++ src/backend/settings.gradle | 6 +- 212 files changed, 5816 insertions(+), 98 deletions(-) create mode 100644 src/backend/microservices/pwp/build.gradle create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/PWPApplication.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowInputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/DatasetModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetInputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/get_dataset/GetDatasetOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/get_datasets/GetDatasetsOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetInputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/FilesModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/IsolateDataModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/TypingDataModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflow/GetWorkflowOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflows/GetWorkflowsOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/ProjectModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectInputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/delete_project/DeleteProjectOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_project/GetProjectOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectInputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewSourceOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceFileOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/delete_tree/DeleteTreeOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeInputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/ComputeExceptionHandler.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/FileTransferExceptionHandler.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/VisualizationExceptionHandler.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/ToolTemplateRepository.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/GeneralTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplateData.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/ActionTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/TaskTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeService.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferService.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationService.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/create_workflow/CreateWorkflowOutput.java rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/dataset/CreateDatasetOutput.java (68%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/dataset/FullDatasetInfo.java (61%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/dataset/SetIsolateDataOfDatasetOutput.java (71%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/dataset/UpdateDatasetOutput.java (78%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/distance_matrix/DistanceMatrixInfo.java (94%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java (86%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/distance_matrix/UpdateDistanceMatrixOutput.java (67%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/FilesInfo.java rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/files/isolate_data/IsolateDataInfo.java (88%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/files/isolate_data/UpdateIsolateDataOutput.java (66%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/files/typing_data/TypingDataInfo.java (85%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/files/typing_data/UpdateTypingDataOutput.java (66%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowOutput.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowStatusOutput.java rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/project/CreateProjectOutput.java (61%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/project/FullProjectInfo.java (59%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/project/UpdateProjectOutput.java (78%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree/TreeInfo.java (96%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java (92%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java (91%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree/TreeSourceFileInfo.java (87%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceInfo.java rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree/UpdateTreeOutput.java (69%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree_view/TreeViewInfo.java (90%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree_view/TreeViewSourceInfo.java (82%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree_view/UpdateTreeViewOutput.java (68%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetDoesNotExistException.java rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/DeniedFileDeletionException.java (71%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/DeniedResourceDeletionException.java (72%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixDoesNotExistException.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IndexingNeededException.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidWorkflowException.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectDoesNotExistException.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TemplateNotFound.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeDoesNotExistException.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewDoesNotExistException.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowInstanceNotFoundException.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowTemplateConfigurationException.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClient.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClientBuilder.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZHttpService.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessDeserializer.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessSerializer.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeDeserializer.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeSerializer.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/AuthenticationException.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/ConnectionRefusedException.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/UnexpectedResponseException.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Credentials.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Token.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowData.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/GetWorkflowResponse.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/WorkflowState.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/General.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/Tool.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/ToolService.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/Access.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessDetails.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessType.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/api/ApiAccessDetails.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerAutoRemove.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerVolume.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/LibraryAccessDetails.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/VolumeType.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Command.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Library.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/Workflow.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/WorkflowService.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Action.java create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Task.java rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/ProjectService.java (85%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/ProjectServiceImpl.java (86%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/dataset/DatasetService.java (89%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/dataset/DatasetServiceImpl.java (90%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/dataset/distance_matrix/DistanceMatrixService.java (84%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java (92%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/dataset/tree/TreeService.java (85%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/dataset/tree/TreeServiceImpl.java (93%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/dataset/tree_view/TreeViewService.java (84%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/dataset/tree_view/TreeViewServiceImpl.java (94%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/file/IsolateDataService.java (60%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/file/IsolateDataServiceImpl.java (92%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/file/TypingDataService.java (60%) rename src/backend/microservices/{administration/src/main/java/org/phyloviz/pwp/administration => pwp/src/main/java/org/phyloviz/pwp}/service/project/file/TypingDataServiceImpl.java (92%) create mode 100644 src/backend/microservices/pwp/src/main/resources/application.yml diff --git a/src/backend/microservices/pwp/build.gradle b/src/backend/microservices/pwp/build.gradle new file mode 100644 index 00000000..058e284a --- /dev/null +++ b/src/backend/microservices/pwp/build.gradle @@ -0,0 +1,46 @@ +plugins { + id 'application' + id 'org.springframework.boot' version '3.0.4' + id 'io.spring.dependency-management' version '1.1.0' + id "io.freefair.lombok" version "8.0.0-rc2" +} + +group 'phylovizwebplatform' +version '0.0.1-SNAPSHOT' +sourceCompatibility = '17' + +ext { + set('jupiterVersion', "5.8.1") +} + +repositories { + mavenCentral() +} + +dependencies { + implementation project(path: ':microservices:shared-phylodb') + implementation project(path: ':microservices:shared') + + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'org.junit.jupiter:junit-jupiter-api' version { jupiterVersion } + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' version { jupiterVersion } + + implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' + implementation 'org.springframework.boot:spring-boot-starter-validation' + + implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2' + implementation 'org.zalando:problem-spring-web-starter:0.27.0' + + implementation 'com.squareup.okhttp3:okhttp:4.10.0' + implementation 'com.google.code.gson:gson:2.10.1' + implementation 'org.apache.commons:commons-text:1.10.0' + + implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.6' + testImplementation 'junit:junit:4.13.1' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/PWPApplication.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/PWPApplication.java new file mode 100644 index 00000000..d5a3eae9 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/PWPApplication.java @@ -0,0 +1,20 @@ +package org.phyloviz.pwp; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Main class for the PHYLOViZ Web Platform. + */ +@SpringBootApplication +public class PWPApplication { + + /** + * Entry point for the PHYLOViZ Web Platform. + * + * @param args arguments passed to the application + */ + public static void main(String[] args) { + SpringApplication.run(PWPApplication.class, args); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java new file mode 100644 index 00000000..db4e07d4 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java @@ -0,0 +1,92 @@ +package org.phyloviz.pwp.config; + +import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; +import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixS3DataRepository; +import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixS3DataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; +import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataS3DataRepository; +import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataPhyloDBDataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataS3DataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; +import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistryImpl; +import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; +import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistryImpl; +import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistry; +import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistryImpl; +import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; +import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistryImpl; +import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; +import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistryImpl; +import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; +import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeS3DataRepository; +import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreePhyloDBDataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeS3DataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; +import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewS3DataRepository; +import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewPhyloDBDataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewS3DataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; +import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataS3DataRepository; +import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataPhyloDBDataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataS3DataRepositorySpecificData; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Map; + +/** + * Configuration class for the Data Repositories. + */ +@Configuration +public class DataRepositoryConfig { + + @Bean + public TypingDataDataRepositoryRegistry typingDataDataRepositoryRegistry(ApplicationContext context) { + return new TypingDataDataRepositoryRegistryImpl(context, Map.of( + TypingDataDataRepositoryId.S3, TypingDataS3DataRepository.class + ), Map.of( + TypingDataDataRepositoryId.S3, TypingDataS3DataRepositorySpecificData.class, + TypingDataDataRepositoryId.PHYLODB, TypingDataPhyloDBDataRepositorySpecificData.class + )); + } + + @Bean + public IsolateDataDataRepositoryRegistry isolateDataDataRepositoryRegistry(ApplicationContext context) { + return new IsolateDataDataRepositoryRegistryImpl(context, Map.of( + IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepository.class + ), Map.of( + IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepositorySpecificData.class, + IsolateDataDataRepositoryId.PHYLODB, IsolateDataPhyloDBDataRepositorySpecificData.class + )); + } + + @Bean + public DistanceMatrixDataRepositoryRegistry distanceMatrixDataRepositoryRegistry(ApplicationContext context) { + return new DistanceMatrixDataRepositoryRegistryImpl(context, Map.of( + DistanceMatrixDataRepositoryId.S3, DistanceMatrixS3DataRepository.class + ), Map.of( + DistanceMatrixDataRepositoryId.S3, DistanceMatrixS3DataRepositorySpecificData.class + )); + } + + @Bean + public TreeDataRepositoryRegistry treeDataRepositoryRegistry(ApplicationContext context) { + return new TreeDataRepositoryRegistryImpl(context, Map.of( + TreeDataRepositoryId.S3, TreeS3DataRepository.class + ), Map.of( + TreeDataRepositoryId.S3, TreeS3DataRepositorySpecificData.class, + TreeDataRepositoryId.PHYLODB, TreePhyloDBDataRepositorySpecificData.class + )); + } + + @Bean + public TreeViewDataRepositoryRegistry treeViewDataRepositoryRegistry(ApplicationContext context) { + return new TreeViewDataRepositoryRegistryImpl(context, Map.of( + TreeViewDataRepositoryId.S3, TreeViewS3DataRepository.class + ), Map.of( + TreeViewDataRepositoryId.S3, TreeViewS3DataRepositorySpecificData.class, + TreeViewDataRepositoryId.PHYLODB, TreeViewPhyloDBDataRepositorySpecificData.class + )); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java new file mode 100644 index 00000000..d4828ea8 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java @@ -0,0 +1,126 @@ +package org.phyloviz.pwp.config; + +import org.phyloviz.pwp.repository.metadata.templates.tool_template.converters.AccessTemplateDeserializer; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.converters.AccessTemplateSerializer; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.converters.CaseInsensitiveEnumDeserializerFactory; +import org.phyloviz.pwp.service.flowviz.FLOWViZClient; +import org.phyloviz.pwp.shared.config.ResourceServerSharedConfig; +import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; +import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; +import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistry; +import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; +import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; +import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.converters.DistanceMatrixMetadataDeserializer; +import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.converters.IsolateDataMetadataDeserializer; +import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.converters.IsolateDataMetadataSerializer; +import org.phyloviz.pwp.shared.repository.metadata.tree.documents.converters.TreeMetadataDeserializer; +import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.converters.TreeViewMetadataDeserializer; +import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.converters.TreeViewMetadataSerializer; +import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.converters.TypingDataMetadataDeserializer; +import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.converters.TypingDataMetadataSerializer; +import org.phyloviz.pwp.shared_phylodb.config.ResourceServerSharedPhylodbConfig; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Primary; +import org.springframework.core.convert.ConversionService; +import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.support.GenericConversionService; +import org.springframework.data.mongodb.MongoDatabaseFactory; +import org.springframework.data.mongodb.MongoTransactionManager; +import org.springframework.data.mongodb.core.convert.*; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; + +import java.util.List; + +/** + * Configuration class for the Compute Microservice. + */ +@Configuration +@Import({ResourceServerSharedConfig.class, ResourceServerSharedPhylodbConfig.class}) +public class PWPConfig { + private final String flowVizUsername; + private final String flowVizPassword; + private final String flowVizUrl; + private final TypingDataDataRepositoryRegistry typingDataDataRepositoryRegistry; + private final IsolateDataDataRepositoryRegistry isolateDataDataRepositoryRegistry; + private final DistanceMatrixDataRepositoryRegistry distanceMatrixDataRepositoryRegistry; + private final TreeDataRepositoryRegistry treeDataRepositoryRegistry; + private final TreeViewDataRepositoryRegistry treeViewDataRepositoryRegistry; + + public PWPConfig( + @Value("${flowviz.username}") String flowVizUsername, + @Value("${flowviz.password}") String flowVizPassword, + @Value("${flowviz.url}") String flowVizUrl, + TypingDataDataRepositoryRegistry typingDataDataRepositoryRegistry, + IsolateDataDataRepositoryRegistry isolateDataDataRepositoryRegistry, + DistanceMatrixDataRepositoryRegistry distanceMatrixDataRepositoryRegistry, + TreeDataRepositoryRegistry treeDataRepositoryRegistry, + TreeViewDataRepositoryRegistry treeViewDataRepositoryRegistry + ) { + + this.flowVizUsername = flowVizUsername; + this.flowVizPassword = flowVizPassword; + this.flowVizUrl = flowVizUrl; + this.typingDataDataRepositoryRegistry = typingDataDataRepositoryRegistry; + this.isolateDataDataRepositoryRegistry = isolateDataDataRepositoryRegistry; + this.distanceMatrixDataRepositoryRegistry = distanceMatrixDataRepositoryRegistry; + this.treeDataRepositoryRegistry = treeDataRepositoryRegistry; + this.treeViewDataRepositoryRegistry = treeViewDataRepositoryRegistry; + } + + @Bean + FLOWViZClient flowVizClient() { + return FLOWViZClient + .builder() + .baseUrl(flowVizUrl) + .credentials(flowVizUsername, flowVizPassword) + .authenticate(); + } + + @Bean + MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) { + return new MongoTransactionManager(dbFactory); + } + + @Bean + @Primary + public MappingMongoConverter mappingMongoConverter( + MongoDatabaseFactory factory, + MongoMappingContext context, + BeanFactory beanFactory + ) { + DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory); + MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context); + mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null)); + mappingConverter.setCustomConversions(mongoCustomConversions(mappingConverter)); + ConversionService convService = mappingConverter.getConversionService(); + ((GenericConversionService) convService).addConverterFactory(new CaseInsensitiveEnumDeserializerFactory()); + + mappingConverter.afterPropertiesSet(); + + return mappingConverter; + } + + public MongoCustomConversions mongoCustomConversions(MongoConverter mongoConverter) { + List> converters = List.of( + new TypingDataMetadataDeserializer(mongoConverter, typingDataDataRepositoryRegistry), + new TypingDataMetadataSerializer(mongoConverter), + new IsolateDataMetadataDeserializer(mongoConverter, isolateDataDataRepositoryRegistry), + new IsolateDataMetadataSerializer(mongoConverter), + new DistanceMatrixMetadataDeserializer(mongoConverter, distanceMatrixDataRepositoryRegistry), + new TreeMetadataDeserializer(mongoConverter, treeDataRepositoryRegistry), + new TreeViewMetadataDeserializer(mongoConverter, treeViewDataRepositoryRegistry), + new TreeViewMetadataSerializer(mongoConverter), + new AccessTemplateSerializer(), + new AccessTemplateDeserializer(mongoConverter), + // https://stackoverflow.com/questions/12385920/spring-mongodb-storing-retrieving-enums-as-int-not-string/30024621#30024621 + new CaseInsensitiveEnumDeserializerFactory.CaseInsensitiveEnumDeserializer(null) + ); + + return new MongoCustomConversions(converters); + } + +} \ No newline at end of file diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java new file mode 100644 index 00000000..57cff768 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java @@ -0,0 +1,118 @@ +package org.phyloviz.pwp.http.controllers; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.http.models.create_workflow.CreateWorkflowInputModel; +import org.phyloviz.pwp.http.models.create_workflow.CreateWorkflowOutputModel; +import org.phyloviz.pwp.http.models.get_workflow.GetWorkflowOutputModel; +import org.phyloviz.pwp.http.models.get_workflow_status.GetWorkflowStatusOutputModel; +import org.phyloviz.pwp.http.models.get_workflows.GetWorkflowsOutputModel; +import org.phyloviz.pwp.service.ComputeService; +import org.phyloviz.pwp.service.dtos.create_workflow.CreateWorkflowOutput; +import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowOutput; +import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowStatusOutput; +import org.phyloviz.pwp.shared.domain.User; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * Controller for the Compute Microservice. + */ +@RestController +@RequiredArgsConstructor +public class ComputeController { + + private final ComputeService computeService; + + /** + * Create a new workflow. + * + * @param inputModel input model for the workflow + * @param projectId the project id of the project to which the workflow belongs + * @param user the user who is creating the workflow + * @return information about the created workflow + */ + @PostMapping("/projects/{projectId}/workflows") + public ResponseEntity createWorkflow( + @PathVariable String projectId, + @RequestBody CreateWorkflowInputModel inputModel, + User user + ) { + CreateWorkflowOutput createWorkflowOutput = computeService.createWorkflow( + projectId, inputModel.getType(), inputModel.getProperties(), user.getId() + ); + + return ResponseEntity + .accepted() + .body(new CreateWorkflowOutputModel(createWorkflowOutput)); + } + + /** + * Gets the status of a workflow. + * + * @param projectId the project id of the project to which the workflow belongs + * @param workflowId the id of the workflow + * @param user the user who is requesting the workflow status + * @return information about the workflow + */ + @GetMapping("/projects/{projectId}/workflows/{workflowId}/status") + public GetWorkflowStatusOutputModel getWorkflowStatus( + @PathVariable String projectId, + @PathVariable String workflowId, + User user + ) { + GetWorkflowStatusOutput getWorkflowStatusOutput = computeService.getWorkflowStatus( + projectId, workflowId, user.getId() + ); + + return new GetWorkflowStatusOutputModel(getWorkflowStatusOutput); + } + + /** + * Gets the workflow. + * + * @param projectId the project id of the project to which the workflow belongs + * @param workflowId the id of the workflow + * @param user the user who is requesting the workflow status + * @return information about the workflow + */ + @GetMapping("/projects/{projectId}/workflows/{workflowId}") + public GetWorkflowOutputModel getWorkflow( + @PathVariable String projectId, + @PathVariable String workflowId, + User user + ) { + GetWorkflowOutput getWorkflowOutput = computeService.getWorkflow( + projectId, workflowId, user.getId() + ); + + return new GetWorkflowOutputModel(getWorkflowOutput); + } + + /** + * Gets the workflows of a project. + * + * @param projectId the project id of the project to which the workflow belongs + * @param running whether to get only running workflows or not running workflows + * @param user the user who is requesting the workflows + * @return information about the workflows + */ + @GetMapping("/projects/{projectId}/workflows") + public GetWorkflowsOutputModel getWorkflows( + @PathVariable String projectId, + @RequestParam(required = false) Boolean running, + User user + ) { + List getWorkflowStatusOutputList; + + if (running == null) + getWorkflowStatusOutputList = computeService.getAllWorkflows(projectId, user.getId()); + else if (running) + getWorkflowStatusOutputList = computeService.getAllRunningWorkflows(projectId, user.getId()); + else + getWorkflowStatusOutputList = computeService.getAllNotRunningWorkflows(projectId, user.getId()); + + return new GetWorkflowsOutputModel(getWorkflowStatusOutputList); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java new file mode 100644 index 00000000..dac3c9a5 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java @@ -0,0 +1,115 @@ +package org.phyloviz.pwp.http.controllers; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.http.models.isolate_data.UploadIsolateDataOutputModel; +import org.phyloviz.pwp.http.models.typing_data.UploadTypingDataOutputModel; +import org.phyloviz.pwp.service.FileTransferService; +import org.phyloviz.pwp.shared.domain.User; +import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.UploadIsolateDataOutput; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.UploadTypingDataOutput; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +import java.net.URI; + +/** + * Controller for the File Transfer Microservice. + */ +@RestController +@RequiredArgsConstructor +public class FileTransferController { + + private final FileTransferService fileTransferService; + + /** + * Uploads a typing data. + * + * @param projectId the name of the project to which the typing data will be uploaded + * @param file the file to be uploaded + * @param user the user that is uploading the typing data + * @return information about the uploaded typing data + */ + @PostMapping(path = "/projects/{projectId}/files/typing-data", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) + public ResponseEntity uploadTypingData( + @PathVariable String projectId, + @RequestPart MultipartFile file, + @RequestPart String type, + User user + ) { + UploadTypingDataOutput uploadTypingDataOutput = fileTransferService.uploadTypingData( + projectId, file, type, user.getId() + ); + + URI location = ServletUriComponentsBuilder.fromCurrentRequest() + .path("/{typingDataId}") + .buildAndExpand(uploadTypingDataOutput.getTypingDataId()) + .toUri(); + + return ResponseEntity + .created(location) + .body(new UploadTypingDataOutputModel(uploadTypingDataOutput)); + } + + /** + * Downloads the contents of a typing data file. + * + * @param projectId the name of the project the typing data belongs to + * @param typingDataId the id of the typing data to be downloaded + * @param user the user that is downloading the typing data + * @return the contents of the typing data file + */ + @GetMapping(path = "/projects/{projectId}/files/typing-data/{typingDataId}/file") + public String downloadTypingData( + @PathVariable String projectId, + @PathVariable String typingDataId, + User user + ) { + return fileTransferService.downloadTypingData(projectId, typingDataId, user.getId()); + } + + /** + * Uploads an isolate data. + * + * @param projectId the name of the project to which the isolate data will be uploaded + * @param file the file to be uploaded + * @param user the user that is uploading the isolate data + * @return information about the uploaded isolate data + */ + @PostMapping(path = "/projects/{projectId}/files/isolate-data", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) + public ResponseEntity uploadIsolateData( + @PathVariable String projectId, + @RequestPart MultipartFile file, + User user + ) { + UploadIsolateDataOutput uploadIsolateDataOutput = fileTransferService.uploadIsolateData(projectId, file, user.getId()); + + URI location = ServletUriComponentsBuilder.fromCurrentRequest() + .path("/{isolateDataId}") + .buildAndExpand(uploadIsolateDataOutput.getIsolateDataId()) + .toUri(); + + return ResponseEntity + .created(location) + .body(new UploadIsolateDataOutputModel(uploadIsolateDataOutput)); + } + + /** + * Downloads the contents of an isolate data file. + * + * @param projectId the name of the project the isolate data belongs to + * @param isolateDataId the id of the isolate data to be downloaded + * @param user the user that is downloading the isolate data + * @return the contents of the isolate data file + */ + @GetMapping(path = "/projects/{projectId}/files/isolate-data/{isolateDataId}/file") + public String downloadIsolateData( + @PathVariable String projectId, + @PathVariable String isolateDataId, + User user + ) { + return fileTransferService.downloadIsolateData(projectId, isolateDataId, user.getId()); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java new file mode 100644 index 00000000..6e0812a9 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java @@ -0,0 +1,206 @@ +package org.phyloviz.pwp.http.controllers; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.shared.domain.User; +import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; +import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; +import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; +import org.phyloviz.pwp.http.models.get_tree_view.GetTreeViewOutputModel; +import org.phyloviz.pwp.http.models.isolate_data.get_isolate_data_rows.GetIsolateDataRowsOutputModel; +import org.phyloviz.pwp.http.models.isolate_data.get_isolate_data_schema.GetIsolateDataKeysOutputModel; +import org.phyloviz.pwp.http.models.save_tree_view.SaveTreeViewInputModel; +import org.phyloviz.pwp.http.models.save_tree_view.SaveTreeViewOutputModel; +import org.phyloviz.pwp.http.models.typing_data.get_typing_data_profiles.GetTypingDataProfilesOutputModel; +import org.phyloviz.pwp.http.models.typing_data.get_typing_data_schema.GetTypingDataSchemaOutputModel; +import org.phyloviz.pwp.service.VisualizationService; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * Controller for the Visualization Microservice. + */ +@RestController +@RequiredArgsConstructor +public class VisualizationController { + + private final VisualizationService visualizationService; + + /** + * Gets a distance matrix. + * + * @param projectId the id of the project + * @param datasetId the id of the dataset + * @param distanceMatrixId the id of the distance matrix + * @param user the user + * @return the distance matrix in string + */ + @GetMapping("/projects/{projectId}/datasets/{datasetId}/distance-matrices/{distanceMatrixId}") + public String getDistanceMatrix( + @PathVariable String projectId, + @PathVariable String datasetId, + @PathVariable String distanceMatrixId, + User user + ) { + return visualizationService.getDistanceMatrix(projectId, datasetId, distanceMatrixId, user.getId()); + } + + /** + * Gets a tree. + * + * @param projectId the id of the project + * @param datasetId the id of the dataset + * @param treeId the id of the tree + * @param user the user + * @return the tree in newick string format + */ + @GetMapping("/projects/{projectId}/datasets/{datasetId}/trees/{treeId}") + public String getTree( + @PathVariable String projectId, + @PathVariable String datasetId, + @PathVariable String treeId, + User user + ) { + return visualizationService.getTree(projectId, datasetId, treeId, user.getId()); + } + + /** + * Gets a tree view. + * + * @param projectId the id of the project + * @param datasetId the id of the dataset + * @param treeViewId the id of the tree view + * @param user the user + * @return the tree view + */ + @GetMapping("/projects/{projectId}/datasets/{datasetId}/tree-views/{treeViewId}") + public GetTreeViewOutputModel getTreeView( + @PathVariable String projectId, + @PathVariable String datasetId, + @PathVariable String treeViewId, + User user + ) { + GetTreeViewOutput getTreeViewOutput = visualizationService.getTreeView(projectId, datasetId, treeViewId, user.getId()); + + return new GetTreeViewOutputModel(getTreeViewOutput); + } + + /** + * Saves a tree view coordinates and applied transformations. + * + * @param projectId the id of the project + * @param datasetId the id of the dataset + * @param treeViewId the id of the tree view + * @param inputModel the input model + * @param user the user + * @return the tree view + */ + @PostMapping("/projects/{projectId}/datasets/{datasetId}/tree-views/{treeViewId}") + public SaveTreeViewOutputModel saveTreeView( + @PathVariable String projectId, + @PathVariable String datasetId, + @PathVariable String treeViewId, + @RequestBody SaveTreeViewInputModel inputModel, + User user + ) { + SaveTreeViewOutput saveTreeViewOutput = visualizationService.saveTreeView( + projectId, datasetId, treeViewId, + inputModel.toDto(), user.getId()); + + return new SaveTreeViewOutputModel(saveTreeViewOutput); + } + + /** + * Gets a typing data's schema. + * + * @param projectId the id of the project + * @param typingDataId the id of the typing data + * @param user the user + * @return the typing data schema + */ + @GetMapping("/projects/{projectId}/files/typing-data/{typingDataId}/schema") + public GetTypingDataSchemaOutputModel getTypingDataSchema( + @PathVariable String projectId, + @PathVariable String typingDataId, + User user + ) { + GetTypingDataSchemaOutput getTypingDataSchemaOutput = visualizationService.getTypingDataSchema( + projectId, typingDataId, user.getId() + ); + + return new GetTypingDataSchemaOutputModel(getTypingDataSchemaOutput); + } + + /** + * Gets a typing data's profiles, with pagination. + * + * @param projectId the id of the project + * @param typingDataId the id of the typing data + * @param limit the limit of profiles to return + * @param offset the offset of profiles to return + * @param user the user + * @return the typing data's profiles + */ + @GetMapping("/projects/{projectId}/files/typing-data/{typingDataId}/profiles") + public GetTypingDataProfilesOutputModel getTypingDataProfiles( + @PathVariable String projectId, + @PathVariable String typingDataId, + @RequestParam int limit, + @RequestParam int offset, + User user + ) { + GetTypingDataProfilesOutput getTypingDataProfilesOutput = visualizationService.getTypingDataProfiles( + projectId, typingDataId, limit, offset, user.getId() + ); + + return new GetTypingDataProfilesOutputModel(getTypingDataProfilesOutput); + } + + /** + * Gets the keys of an isolate data. + * + * @param projectId the id of the project + * @param isolateDataId the id of the isolate data + * @param user the user + * @return the isolate data keys + */ + @GetMapping("/projects/{projectId}/files/isolate-data/{isolateDataId}/keys") + public GetIsolateDataKeysOutputModel getIsolateDataKeys( + @PathVariable String projectId, + @PathVariable String isolateDataId, + User user + ) { + List keys = visualizationService.getIsolateDataKeys( + projectId, isolateDataId, user.getId() + ); + + return new GetIsolateDataKeysOutputModel(keys); + } + + /** + * Gets the rows of an isolate data, with pagination. + * + * @param projectId the id of the project + * @param isolateDataId the id of the isolate data + * @param limit the limit of rows to return + * @param offset the offset of rows to return + * @param user the user + * @return the isolate data rows + */ + @GetMapping("/projects/{projectId}/files/isolate-data/{isolateDataId}/rows") + public GetIsolateDataRowsOutputModel getIsolateDataRows( + @PathVariable String projectId, + @PathVariable String isolateDataId, + @RequestParam int limit, + @RequestParam int offset, + User user + ) { + GetIsolateDataRowsOutput getIsolateDataRowsOutput = visualizationService.getIsolateDataRows( + projectId, isolateDataId, limit, offset, user.getId() + ); + + return new GetIsolateDataRowsOutputModel(getIsolateDataRowsOutput); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java new file mode 100644 index 00000000..a882cfdf --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java @@ -0,0 +1,131 @@ +package org.phyloviz.pwp.http.controllers.projects; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.http.models.projects.create_project.CreateProjectInputModel; +import org.phyloviz.pwp.http.models.projects.create_project.CreateProjectOutputModel; +import org.phyloviz.pwp.http.models.projects.delete_project.DeleteProjectOutputModel; +import org.phyloviz.pwp.http.models.projects.get_project.GetProjectOutputModel; +import org.phyloviz.pwp.http.models.projects.get_projects.GetProjectsOutputModel; +import org.phyloviz.pwp.http.models.projects.update_project.UpdateProjectInputModel; +import org.phyloviz.pwp.http.models.projects.update_project.UpdateProjectOutputModel; +import org.phyloviz.pwp.service.dtos.project.CreateProjectOutput; +import org.phyloviz.pwp.service.dtos.project.FullProjectInfo; +import org.phyloviz.pwp.service.dtos.project.UpdateProjectOutput; +import org.phyloviz.pwp.service.project.ProjectService; +import org.phyloviz.pwp.shared.domain.User; +import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +import java.net.URI; +import java.util.List; + +/** + * Controller that handles requests related to projects. + */ +@RestController +@RequiredArgsConstructor +public class ProjectsController { + + private final ProjectService projectService; + + /** + * Creates a project. + * + * @param createProjectInputModel the input model containing the data of the project to be created + * @param user the user that is creating the project + * @return the output model containing the data of the created project + */ + @PostMapping("/projects") + public ResponseEntity createProject( + @RequestBody CreateProjectInputModel createProjectInputModel, + User user + ) { + CreateProjectOutput createProjectOutput = projectService.createProject( + createProjectInputModel.getName(), + createProjectInputModel.getDescription(), + user.getId() + ); + + URI location = ServletUriComponentsBuilder.fromCurrentRequest() + .path("/{projectId}") + .buildAndExpand(createProjectOutput.getProjectId()) + .toUri(); + + return ResponseEntity + .created(location) + .body(new CreateProjectOutputModel(createProjectOutput)); + } + + /** + * Gets a project. + * + * @param projectId the id of the project to be retrieved + * @param user the user that is retrieving the project + * @return the project + */ + @GetMapping("/projects/{projectId}") + public GetProjectOutputModel getProject( + @PathVariable String projectId, + User user + ) { + FullProjectInfo fullProjectInfo = projectService.getFullProjectInfo(projectId, user.getId()); + + return new GetProjectOutputModel(fullProjectInfo); + } + + /** + * Deletes a project. + * + * @param projectId the id of the project to be deleted + * @param user the user that is deleting the project + * @return the output model containing the data of the deleted project + */ + @DeleteMapping("/projects/{projectId}") + public DeleteProjectOutputModel deleteProject( + @PathVariable String projectId, + User user + ) { + projectService.deleteProject(projectId, user.getId()); + + return new DeleteProjectOutputModel(projectId); + } + + /** + * Updates a project. + * + * @param projectId the id of the project to be updated + * @param user the user that is updating the project + * @return information about the update + */ + @PatchMapping("/projects/{projectId}") + public UpdateProjectOutputModel updateProject( + @PathVariable String projectId, + @RequestBody UpdateProjectInputModel updateProjectInputModel, + User user + ) { + UpdateProjectOutput updateProjectOutput = projectService.updateProject( + updateProjectInputModel.getName(), + updateProjectInputModel.getDescription(), + projectId, user.getId() + ); + + return new UpdateProjectOutputModel(updateProjectOutput); + } + + /** + * Gets all projects belonging to a certain user. + * + * @param user the user that is retrieving the projects + * @return the projects + */ + @GetMapping("/projects") + public GetProjectsOutputModel getProjects( + User user + ) { + List projects = projectService.getProjects(user.getId()); + + return new GetProjectsOutputModel(projects); + } +} \ No newline at end of file diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java new file mode 100644 index 00000000..1da86137 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java @@ -0,0 +1,171 @@ +package org.phyloviz.pwp.http.controllers.projects.datasets; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.http.models.datasets.create_dataset.CreateDatasetInputModel; +import org.phyloviz.pwp.http.models.datasets.create_dataset.CreateDatasetOutputModel; +import org.phyloviz.pwp.http.models.datasets.delete_dataset.DeleteDatasetOutputModel; +import org.phyloviz.pwp.http.models.datasets.get_dataset.GetDatasetOutputModel; +import org.phyloviz.pwp.http.models.datasets.get_datasets.GetDatasetsOutputModel; +import org.phyloviz.pwp.http.models.datasets.set_isolate_data_of_dataset.SetIsolateDataOfDatasetInputModel; +import org.phyloviz.pwp.http.models.datasets.set_isolate_data_of_dataset.SetIsolateDataOfDatasetOutputModel; +import org.phyloviz.pwp.http.models.datasets.update_dataset.UpdateDatasetInputModel; +import org.phyloviz.pwp.http.models.datasets.update_dataset.UpdateDatasetOutputModel; +import org.phyloviz.pwp.service.dtos.dataset.CreateDatasetOutput; +import org.phyloviz.pwp.service.dtos.dataset.FullDatasetInfo; +import org.phyloviz.pwp.service.dtos.dataset.SetIsolateDataOfDatasetOutput; +import org.phyloviz.pwp.service.dtos.dataset.UpdateDatasetOutput; +import org.phyloviz.pwp.service.project.dataset.DatasetService; +import org.phyloviz.pwp.shared.domain.User; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +import java.net.URI; +import java.util.List; + +/** + * Controller that handles requests related to datasets. + */ +@RestController +@RequiredArgsConstructor +public class DatasetsController { + + private final DatasetService datasetService; + + /** + * Creates a dataset. + * + * @param projectId the id of the project to which the dataset will belong + * @param createDatasetInputModel the dataset information + * @param user the user that is creating the dataset + * @return the created dataset + */ + @PostMapping("/projects/{projectId}/datasets") + public ResponseEntity createDataset( + @PathVariable String projectId, + @RequestBody CreateDatasetInputModel createDatasetInputModel, + User user + ) { + CreateDatasetOutput createDatasetOutput = datasetService.createDataset( + createDatasetInputModel.getName(), + createDatasetInputModel.getDescription(), + createDatasetInputModel.getTypingDataId(), + createDatasetInputModel.getIsolateDataId(), + createDatasetInputModel.getIsolateDataKey(), + projectId, + user.getId() + ); + + URI location = ServletUriComponentsBuilder.fromCurrentRequest() + .path("/{datasetId}") + .buildAndExpand(createDatasetOutput.getDatasetId()) + .toUri(); + + return ResponseEntity + .created(location) + .body(new CreateDatasetOutputModel(createDatasetOutput)); + } + + /** + * Gets a dataset. + * + * @param projectId the id of the project to which the dataset belongs + * @param datasetId the id of the dataset to be retrieved + * @param user the user that is retrieving the dataset + * @return the dataset + */ + @GetMapping("/projects/{projectId}/datasets/{datasetId}") + public GetDatasetOutputModel getDataset( + @PathVariable String projectId, + @PathVariable String datasetId, + User user + ) { + FullDatasetInfo fullDatasetInfo = datasetService.getFullDatasetInfo(projectId, datasetId, user.getId()); + + return new GetDatasetOutputModel(fullDatasetInfo); + } + + /** + * Deletes a dataset. + * + * @param projectId the id of the project to which the dataset belongs + * @param datasetId the id of the dataset to be deleted + * @param user the user that is deleting the dataset + * @return the deleted dataset + */ + @DeleteMapping("/projects/{projectId}/datasets/{datasetId}") + public DeleteDatasetOutputModel deleteDataset( + @PathVariable String projectId, + @PathVariable String datasetId, + User user + ) { + datasetService.deleteDataset(projectId, datasetId, user.getId()); + + return new DeleteDatasetOutputModel(projectId, datasetId); + } + + /** + * Updates a dataset. + * + * @param projectId the id of the project to which the dataset belongs + * @param datasetId the id of the dataset to be updated + * @param inputModel the input model with the dataset information to be updated + * @param user the user that is updating the dataset + * @return information about the update + */ + @PatchMapping("/projects/{projectId}/datasets/{datasetId}") + public UpdateDatasetOutputModel updateDataset( + @PathVariable String projectId, + @PathVariable String datasetId, + @RequestBody UpdateDatasetInputModel inputModel, + User user + ) { + UpdateDatasetOutput updateDatasetOutput = datasetService.updateDataset( + inputModel.getName(), inputModel.getDescription(), + projectId, datasetId, user.getId() + ); + + return new UpdateDatasetOutputModel(updateDatasetOutput); + } + + /** + * Sets the isolate data of a dataset. + * + * @param projectId the id of the project to which the dataset belongs + * @param datasetId the id of the dataset to be updated + * @param inputModel the input model with the isolate data information to be set + * @param user the user that is updating the dataset + * @return information about the update + */ + @PostMapping("/projects/{projectId}/datasets/{datasetId}/isolateData") + public SetIsolateDataOfDatasetOutputModel setIsolateDataOfDataset( + @PathVariable String projectId, + @PathVariable String datasetId, + @RequestBody SetIsolateDataOfDatasetInputModel inputModel, + User user + ) { + SetIsolateDataOfDatasetOutput setIsolateDataOfDatasetOutput = datasetService.setIsolateDataOfDataset( + inputModel.getIsolateDataId(), inputModel.getIsolateDataKey(), + projectId, datasetId, user.getId() + ); + + return new SetIsolateDataOfDatasetOutputModel(setIsolateDataOfDatasetOutput); + } + + /** + * Gets all datasets belonging to a certain project. + * + * @param projectId the id of the project to which the datasets belong + * @param user the user that is retrieving the datasets + * @return the datasets + */ + @GetMapping("/projects/{projectId}/datasets") + public GetDatasetsOutputModel getDatasets( + @PathVariable String projectId, + User user + ) { + List fullDatasetInfos = datasetService.getFullDatasetInfos(projectId, user.getId()); + + return new GetDatasetsOutputModel(fullDatasetInfos); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java new file mode 100644 index 00000000..7067fa88 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java @@ -0,0 +1,65 @@ +package org.phyloviz.pwp.http.controllers.projects.datasets.distance_matrices; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.http.models.distance_matrices.delete_distance_matrix.DeleteDistanceMatrixOutputModel; +import org.phyloviz.pwp.http.models.distance_matrices.update_distance_matrix.UpdateDistanceMatrixInputModel; +import org.phyloviz.pwp.http.models.distance_matrices.update_distance_matrix.UpdateDistanceMatrixOutputModel; +import org.phyloviz.pwp.service.dtos.distance_matrix.UpdateDistanceMatrixOutput; +import org.phyloviz.pwp.service.project.dataset.distance_matrix.DistanceMatrixService; +import org.phyloviz.pwp.shared.domain.User; +import org.springframework.web.bind.annotation.*; + +/** + * Controller that handles requests related to distance matrices. + */ +@RestController +@RequiredArgsConstructor +public class DistanceMatricesController { + + private final DistanceMatrixService distanceMatrixService; + + /** + * Deletes a distance matrix. + * + * @param projectId the id of the project that contains the distance matrix + * @param datasetId the id of the dataset that contains the distance matrix + * @param distanceMatrixId the id of the distance matrix to be deleted + * @param user the user that is deleting the distance matrix + * @return information about the deleted distance matrix + */ + @DeleteMapping("/projects/{projectId}/datasets/{datasetId}/distance-matrices/{distanceMatrixId}") + public DeleteDistanceMatrixOutputModel deleteDistanceMatrix( + @PathVariable String projectId, + @PathVariable String datasetId, + @PathVariable String distanceMatrixId, + User user + ) { + distanceMatrixService.deleteDistanceMatrix(projectId, datasetId, distanceMatrixId, user.getId()); + + return new DeleteDistanceMatrixOutputModel(projectId, datasetId, distanceMatrixId); + } + + /** + * Updates a distance matrix. + * + * @param projectId the id of the project that contains the distance matrix + * @param datasetId the id of the dataset that contains the distance matrix + * @param distanceMatrixId the id of the distance matrix to be updated + * @param user the user that is updating the distance matrix + * @return information about the updated distance matrix + */ + @PatchMapping("/projects/{projectId}/datasets/{datasetId}/distance-matrices/{distanceMatrixId}") + public UpdateDistanceMatrixOutputModel updateDistanceMatrix( + @PathVariable String projectId, + @PathVariable String datasetId, + @PathVariable String distanceMatrixId, + @RequestBody UpdateDistanceMatrixInputModel updateDistanceMatrixInputModel, + User user + ) { + UpdateDistanceMatrixOutput updateDistanceMatrixOutput = distanceMatrixService.updateDistanceMatrix( + updateDistanceMatrixInputModel.getName(), projectId, datasetId, distanceMatrixId, user.getId() + ); + + return new UpdateDistanceMatrixOutputModel(updateDistanceMatrixOutput); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java new file mode 100644 index 00000000..036bee98 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java @@ -0,0 +1,65 @@ +package org.phyloviz.pwp.http.controllers.projects.datasets.tree_views; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.http.models.tree_views.delete_tree_view.DeleteTreeViewOutputModel; +import org.phyloviz.pwp.http.models.tree_views.update_tree_view.UpdateTreeViewInputModel; +import org.phyloviz.pwp.http.models.tree_views.update_tree_view.UpdateTreeViewOutputModel; +import org.phyloviz.pwp.service.dtos.tree_view.UpdateTreeViewOutput; +import org.phyloviz.pwp.service.project.dataset.tree_view.TreeViewService; +import org.phyloviz.pwp.shared.domain.User; +import org.springframework.web.bind.annotation.*; + +/** + * Controller that handles requests related to tree views. + */ +@RestController +@RequiredArgsConstructor +public class TreeViewsController { + + private final TreeViewService treeViewService; + + /** + * Deletes a tree view. + * + * @param projectId the id of the project that contains the tree view + * @param datasetId the id of the dataset that contains the tree view + * @param treeViewId the id of the tree view to be deleted + * @param user the user that is deleting the tree view + * @return information about the deleted tree view + */ + @DeleteMapping("/projects/{projectId}/datasets/{datasetId}/tree-views/{treeViewId}") + public DeleteTreeViewOutputModel deleteTreeView( + @PathVariable String projectId, + @PathVariable String datasetId, + @PathVariable String treeViewId, + User user + ) { + treeViewService.deleteTreeView(projectId, datasetId, treeViewId, user.getId()); + + return new DeleteTreeViewOutputModel(projectId, datasetId, treeViewId); + } + + /** + * Updates a tree view. + * + * @param projectId the id of the project that contains the tree view + * @param datasetId the id of the dataset that contains the tree view + * @param treeViewId the id of the tree view to be updated + * @param user the user that is updating the tree view + * @return information about the updated tree view + */ + @PatchMapping("/projects/{projectId}/datasets/{datasetId}/tree-views/{treeViewId}") + public UpdateTreeViewOutputModel updateTreeView( + @PathVariable String projectId, + @PathVariable String datasetId, + @PathVariable String treeViewId, + @RequestBody UpdateTreeViewInputModel updateTreeViewInputModel, + User user + ) { + UpdateTreeViewOutput updateTreeViewOutput = treeViewService.updateTreeView( + updateTreeViewInputModel.getName(), projectId, datasetId, treeViewId, user.getId() + ); + + return new UpdateTreeViewOutputModel(updateTreeViewOutput); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java new file mode 100644 index 00000000..18220fce --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java @@ -0,0 +1,65 @@ +package org.phyloviz.pwp.http.controllers.projects.datasets.trees; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.http.models.trees.delete_tree.DeleteTreeOutputModel; +import org.phyloviz.pwp.http.models.trees.update_tree_view.UpdateTreeInputModel; +import org.phyloviz.pwp.http.models.trees.update_tree_view.UpdateTreeOutputModel; +import org.phyloviz.pwp.service.dtos.tree.UpdateTreeOutput; +import org.phyloviz.pwp.service.project.dataset.tree.TreeService; +import org.phyloviz.pwp.shared.domain.User; +import org.springframework.web.bind.annotation.*; + +/** + * Controller that handles requests related to trees. + */ +@RestController +@RequiredArgsConstructor +public class TreesController { + + private final TreeService treeService; + + /** + * Deletes a tree. + * + * @param projectId the id of the project that contains the tree + * @param datasetId the id of the dataset that contains the tree + * @param treeId the id of the tree to be deleted + * @param user the user that is deleting the tree + * @return information about the deleted tree + */ + @DeleteMapping("/projects/{projectId}/datasets/{datasetId}/trees/{treeId}") + public DeleteTreeOutputModel deleteTree( + @PathVariable String projectId, + @PathVariable String datasetId, + @PathVariable String treeId, + User user + ) { + treeService.deleteTree(projectId, datasetId, treeId, user.getId()); + + return new DeleteTreeOutputModel(projectId, datasetId, treeId); + } + + /** + * Updates a tree. + * + * @param projectId the id of the project that contains the tree + * @param datasetId the id of the dataset that contains the tree + * @param treeId the id of the tree to be updated + * @param user the user that is updating the tree + * @return information about the updated tree + */ + @PatchMapping("/projects/{projectId}/datasets/{datasetId}/trees/{treeId}") + public UpdateTreeOutputModel updateTree( + @PathVariable String projectId, + @PathVariable String datasetId, + @PathVariable String treeId, + @RequestBody UpdateTreeInputModel updateTreeInputModel, + User user + ) { + UpdateTreeOutput updateTreeOutput = treeService.updateTree( + updateTreeInputModel.getName(), projectId, datasetId, treeId, user.getId() + ); + + return new UpdateTreeOutputModel(updateTreeOutput); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java new file mode 100644 index 00000000..61c21113 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java @@ -0,0 +1,108 @@ +package org.phyloviz.pwp.http.controllers.projects.files; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.http.models.files.isolate_data.delete_isolate_data.DeleteIsolateDataOutputModel; +import org.phyloviz.pwp.http.models.files.isolate_data.update_isolate_data.UpdateIsolateDataInputModel; +import org.phyloviz.pwp.http.models.files.isolate_data.update_isolate_data.UpdateIsolateDataOutputModel; +import org.phyloviz.pwp.http.models.files.typing_data.delete_typing_data.DeleteTypingDataOutputModel; +import org.phyloviz.pwp.http.models.files.typing_data.update_typing_data.UpdateTypingDataInputModel; +import org.phyloviz.pwp.http.models.files.typing_data.update_typing_data.UpdateTypingDataOutputModel; +import org.phyloviz.pwp.service.dtos.files.isolate_data.UpdateIsolateDataOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.UpdateTypingDataOutput; +import org.phyloviz.pwp.service.project.file.IsolateDataService; +import org.phyloviz.pwp.service.project.file.TypingDataService; +import org.phyloviz.pwp.shared.domain.User; +import org.springframework.web.bind.annotation.*; + +/** + * Controller that handles requests related to files. + */ +@RestController +@RequiredArgsConstructor +public class FilesController { + + private final TypingDataService typingDataService; + private final IsolateDataService isolateDataService; + + /** + * Deletes a typing data file. + * + * @param projectId the id of the project to which the typing data file belongs + * @param typingDataId the id of the typing data file to be deleted + * @param user the user that is deleting the typing data file + * @return information about the deleted typing data file + */ + @DeleteMapping("/projects/{projectId}/files/typing-data/{typingDataId}") + public DeleteTypingDataOutputModel deleteTypingData( + @PathVariable String projectId, + @PathVariable String typingDataId, + User user + ) { + typingDataService.deleteTypingData(projectId, typingDataId, user.getId()); + + return new DeleteTypingDataOutputModel(projectId, typingDataId); + } + + /** + * Deletes an isolate data file. + * + * @param projectId the id of the project to which the isolate data file belongs + * @param isolateDataId the id of the isolate data file to be deleted + * @param user the user that is deleting the isolate data file + * @return information about the deleted isolate data file + */ + @DeleteMapping("/projects/{projectId}/files/isolate-data/{isolateDataId}") + public DeleteIsolateDataOutputModel deleteIsolateData( + @PathVariable String projectId, + @PathVariable String isolateDataId, + User user + ) { + isolateDataService.deleteIsolateData(projectId, isolateDataId, user.getId()); + + return new DeleteIsolateDataOutputModel(projectId, isolateDataId); + } + + /** + * Updates a typing data file. + * + * @param projectId the id of the project to which the typing data file belongs + * @param typingDataId the id of the typing data file to be updated + * @param user the user that is updating the typing data file + * @return information about the updated typing data file + */ + @PatchMapping("/projects/{projectId}/files/typing-data/{typingDataId}") + public UpdateTypingDataOutputModel updateTypingData( + @PathVariable String projectId, + @PathVariable String typingDataId, + @RequestBody UpdateTypingDataInputModel updateTypingDataInputModel, + User user + ) { + UpdateTypingDataOutput updateTypingDataOutput = typingDataService.updateTypingData( + updateTypingDataInputModel.getName(), projectId, typingDataId, user.getId() + ); + + return new UpdateTypingDataOutputModel(updateTypingDataOutput); + } + + /** + * Updates a isolate data file. + * + * @param projectId the id of the project to which the isolate data file belongs + * @param isolateDataId the id of the isolate data file to be updated + * @param user the user that is updating the isolate data file + * @return information about the updated isolate data file + */ + @PatchMapping("/projects/{projectId}/files/isolate-data/{isolateDataId}") + public UpdateIsolateDataOutputModel updateIsolateData( + @PathVariable String projectId, + @PathVariable String isolateDataId, + @RequestBody UpdateIsolateDataInputModel updateIsolateDataInputModel, + User user + ) { + UpdateIsolateDataOutput updateIsolateDataOutput = isolateDataService.updateIsolateData( + updateIsolateDataInputModel.getName(), projectId, isolateDataId, user.getId() + ); + + return new UpdateIsolateDataOutputModel(updateIsolateDataOutput); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowInputModel.java new file mode 100644 index 00000000..4ceb74b1 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowInputModel.java @@ -0,0 +1,11 @@ +package org.phyloviz.pwp.http.models.create_workflow; + +import lombok.Data; + +import java.util.Map; + +@Data +public class CreateWorkflowInputModel { + private String type; + private Map properties; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowOutputModel.java new file mode 100644 index 00000000..ad2c1f0b --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowOutputModel.java @@ -0,0 +1,13 @@ +package org.phyloviz.pwp.http.models.create_workflow; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.create_workflow.CreateWorkflowOutput; + +@Data +public class CreateWorkflowOutputModel { + private String workflowId; + + public CreateWorkflowOutputModel(CreateWorkflowOutput createWorkflowOutput) { + this.workflowId = createWorkflowOutput.getWorkflowId(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/DatasetModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/DatasetModel.java new file mode 100644 index 00000000..de07ad68 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/DatasetModel.java @@ -0,0 +1,34 @@ +package org.phyloviz.pwp.http.models.datasets; + +import lombok.Data; +import org.phyloviz.pwp.http.models.distance_matrices.DistanceMatrixOutputModel; +import org.phyloviz.pwp.http.models.tree_views.TreeViewOutputModel; +import org.phyloviz.pwp.http.models.trees.TreeOutputModel; +import org.phyloviz.pwp.service.dtos.dataset.FullDatasetInfo; + +import java.util.List; + +@Data +public class DatasetModel { + private String datasetId; + private String name; + private String description; + private String typingDataId; + private String isolateDataId; + private String isolateDataKey; + private List distanceMatrices; + private List trees; + private List treeViews; + + public DatasetModel(FullDatasetInfo fullDatasetInfo) { + this.datasetId = fullDatasetInfo.getDatasetId(); + this.name = fullDatasetInfo.getName(); + this.description = fullDatasetInfo.getDescription(); + this.typingDataId = fullDatasetInfo.getTypingDataId(); + this.isolateDataId = fullDatasetInfo.getIsolateDataId(); + this.isolateDataKey = fullDatasetInfo.getIsolateDataKey(); + this.distanceMatrices = fullDatasetInfo.getDistanceMatrices().stream().map(DistanceMatrixOutputModel::new).toList(); + this.trees = fullDatasetInfo.getTrees().stream().map(TreeOutputModel::new).toList(); + this.treeViews = fullDatasetInfo.getTreeViews().stream().map(TreeViewOutputModel::new).toList(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetInputModel.java new file mode 100644 index 00000000..c999b01a --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetInputModel.java @@ -0,0 +1,12 @@ +package org.phyloviz.pwp.http.models.datasets.create_dataset; + +import lombok.Data; + +@Data +public class CreateDatasetInputModel { + private String name; + private String description; + private String typingDataId; + private String isolateDataId; + private String isolateDataKey; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetOutputModel.java new file mode 100644 index 00000000..bbb76d76 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetOutputModel.java @@ -0,0 +1,15 @@ +package org.phyloviz.pwp.http.models.datasets.create_dataset; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.dataset.CreateDatasetOutput; + +@Data +public class CreateDatasetOutputModel { + private String projectId; + private String datasetId; + + public CreateDatasetOutputModel(CreateDatasetOutput createDatasetOutput) { + this.projectId = createDatasetOutput.getProjectId(); + this.datasetId = createDatasetOutput.getDatasetId(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java new file mode 100644 index 00000000..f7602487 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java @@ -0,0 +1,11 @@ +package org.phyloviz.pwp.http.models.datasets.delete_dataset; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class DeleteDatasetOutputModel { + private String projectId; + private String datasetId; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/get_dataset/GetDatasetOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/get_dataset/GetDatasetOutputModel.java new file mode 100644 index 00000000..c761e188 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/get_dataset/GetDatasetOutputModel.java @@ -0,0 +1,10 @@ +package org.phyloviz.pwp.http.models.datasets.get_dataset; + +import org.phyloviz.pwp.http.models.datasets.DatasetModel; +import org.phyloviz.pwp.service.dtos.dataset.FullDatasetInfo; + +public class GetDatasetOutputModel extends DatasetModel { + public GetDatasetOutputModel(FullDatasetInfo fullDatasetInfo) { + super(fullDatasetInfo); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/get_datasets/GetDatasetsOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/get_datasets/GetDatasetsOutputModel.java new file mode 100644 index 00000000..85cdbd23 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/get_datasets/GetDatasetsOutputModel.java @@ -0,0 +1,16 @@ +package org.phyloviz.pwp.http.models.datasets.get_datasets; + +import lombok.Data; +import org.phyloviz.pwp.http.models.datasets.DatasetModel; +import org.phyloviz.pwp.service.dtos.dataset.FullDatasetInfo; + +import java.util.List; + +@Data +public class GetDatasetsOutputModel { + private List datasets; + + public GetDatasetsOutputModel(List fullDatasetInfos) { + this.datasets = fullDatasetInfos.stream().map(DatasetModel::new).toList(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java new file mode 100644 index 00000000..7a3e3de6 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java @@ -0,0 +1,9 @@ +package org.phyloviz.pwp.http.models.datasets.set_isolate_data_of_dataset; + +import lombok.Data; + +@Data +public class SetIsolateDataOfDatasetInputModel { + private String isolateDataId; + private String isolateDataKey; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java new file mode 100644 index 00000000..d703aa87 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java @@ -0,0 +1,15 @@ +package org.phyloviz.pwp.http.models.datasets.set_isolate_data_of_dataset; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.dataset.SetIsolateDataOfDatasetOutput; + +@Data +public class SetIsolateDataOfDatasetOutputModel { + private String isolateDataId; + private String isolateDataKey; + + public SetIsolateDataOfDatasetOutputModel(SetIsolateDataOfDatasetOutput setIsolateDataOfDatasetOutput) { + this.isolateDataId = String.format("Set to '%s'", setIsolateDataOfDatasetOutput.getIsolateDataId()); + this.isolateDataKey = String.format("Set to '%s'", setIsolateDataOfDatasetOutput.getIsolateDataKey()); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetInputModel.java new file mode 100644 index 00000000..d51fd2e6 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetInputModel.java @@ -0,0 +1,9 @@ +package org.phyloviz.pwp.http.models.datasets.update_dataset; + +import lombok.Data; + +@Data +public class UpdateDatasetInputModel { + private String name; + private String description; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java new file mode 100644 index 00000000..f07fdeff --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java @@ -0,0 +1,23 @@ +package org.phyloviz.pwp.http.models.datasets.update_dataset; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.dataset.UpdateDatasetOutput; + +@Data +public class UpdateDatasetOutputModel { + private String name; + private String description; + + public UpdateDatasetOutputModel(UpdateDatasetOutput updateDatasetOutput) { + if (updateDatasetOutput.getNewName() != null) { + this.name = String.format("Changed from '%s' to '%s'", updateDatasetOutput.getPreviousName(), updateDatasetOutput.getNewName()); + } else { + this.name = "No changes"; + } + if (updateDatasetOutput.getNewDescription() != null) { + this.description = String.format("Changed from '%s' to '%s'", updateDatasetOutput.getPreviousDescription(), updateDatasetOutput.getNewDescription()); + } else { + this.description = "No changes"; + } + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixOutputModel.java new file mode 100644 index 00000000..5d2cfee3 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixOutputModel.java @@ -0,0 +1,24 @@ +package org.phyloviz.pwp.http.models.distance_matrices; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.distance_matrix.DistanceMatrixInfo; +import org.phyloviz.pwp.service.dtos.distance_matrix.DistanceMatrixSourceFunctionInfo; + +@Data +public class DistanceMatrixOutputModel { + private String distanceMatrixId; + private String name; + private String sourceType; + private DistanceMatrixSourceOutputModel source; + + public DistanceMatrixOutputModel(DistanceMatrixInfo distanceMatrixInfo) { + this.distanceMatrixId = distanceMatrixInfo.getDistanceMatrixId(); + this.name = distanceMatrixInfo.getName(); + this.sourceType = distanceMatrixInfo.getSourceType().name().toLowerCase(); + this.source = switch (distanceMatrixInfo.getSourceType()) { + case FUNCTION -> new DistanceMatrixSourceFunctionOutputModel( + (DistanceMatrixSourceFunctionInfo) distanceMatrixInfo.getSource() + ); + }; + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java new file mode 100644 index 00000000..26f39ec0 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java @@ -0,0 +1,13 @@ +package org.phyloviz.pwp.http.models.distance_matrices; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.distance_matrix.DistanceMatrixSourceFunctionInfo; + +@Data +public class DistanceMatrixSourceFunctionOutputModel implements DistanceMatrixSourceOutputModel { + private String function; + + public DistanceMatrixSourceFunctionOutputModel(DistanceMatrixSourceFunctionInfo distanceMatrixSourceFunctionInfo) { + this.function = distanceMatrixSourceFunctionInfo.getFunction(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java new file mode 100644 index 00000000..ed68b7bc --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java @@ -0,0 +1,4 @@ +package org.phyloviz.pwp.http.models.distance_matrices; + +public interface DistanceMatrixSourceOutputModel { +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java new file mode 100644 index 00000000..a913a3b2 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java @@ -0,0 +1,12 @@ +package org.phyloviz.pwp.http.models.distance_matrices.delete_distance_matrix; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class DeleteDistanceMatrixOutputModel { + private String projectId; + private String datasetId; + private String distanceMatrixId; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java new file mode 100644 index 00000000..1cbcdfa2 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java @@ -0,0 +1,8 @@ +package org.phyloviz.pwp.http.models.distance_matrices.update_distance_matrix; + +import lombok.Data; + +@Data +public class UpdateDistanceMatrixInputModel { + private String name; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java new file mode 100644 index 00000000..03d71c47 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java @@ -0,0 +1,17 @@ +package org.phyloviz.pwp.http.models.distance_matrices.update_distance_matrix; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.distance_matrix.UpdateDistanceMatrixOutput; + +@Data +public class UpdateDistanceMatrixOutputModel { + private String name; + + public UpdateDistanceMatrixOutputModel(UpdateDistanceMatrixOutput updateDistanceMatrixOutput) { + if (updateDistanceMatrixOutput.getNewName() != null) { + this.name = String.format("Changed from '%s' to '%s'", updateDistanceMatrixOutput.getPreviousName(), updateDistanceMatrixOutput.getNewName()); + } else { + this.name = "No changes"; + } + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/FilesModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/FilesModel.java new file mode 100644 index 00000000..fe17ed1a --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/FilesModel.java @@ -0,0 +1,19 @@ +package org.phyloviz.pwp.http.models.files; + +import lombok.Data; +import org.phyloviz.pwp.http.models.files.isolate_data.IsolateDataModel; +import org.phyloviz.pwp.http.models.files.typing_data.TypingDataModel; +import org.phyloviz.pwp.service.dtos.files.FilesInfo; + +import java.util.List; + +@Data +public class FilesModel { + private List typingData; + private List isolateData; + + public FilesModel(FilesInfo filesInfo) { + this.typingData = filesInfo.getTypingData().stream().map(TypingDataModel::new).toList(); + this.isolateData = filesInfo.getIsolateData().stream().map(IsolateDataModel::new).toList(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/IsolateDataModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/IsolateDataModel.java new file mode 100644 index 00000000..45fb36d6 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/IsolateDataModel.java @@ -0,0 +1,19 @@ +package org.phyloviz.pwp.http.models.files.isolate_data; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.files.isolate_data.IsolateDataInfo; + +import java.util.List; + +@Data +public class IsolateDataModel { + private String isolateDataId; + private String name; + private List keys; + + public IsolateDataModel(IsolateDataInfo isolateDataInfo) { + this.isolateDataId = isolateDataInfo.getIsolateDataId(); + this.name = isolateDataInfo.getName(); + this.keys = isolateDataInfo.getKeys(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java new file mode 100644 index 00000000..f76db29b --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java @@ -0,0 +1,11 @@ +package org.phyloviz.pwp.http.models.files.isolate_data.delete_isolate_data; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class DeleteIsolateDataOutputModel { + private String projectId; + private String isolateDataId; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java new file mode 100644 index 00000000..9580f76c --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java @@ -0,0 +1,8 @@ +package org.phyloviz.pwp.http.models.files.isolate_data.update_isolate_data; + +import lombok.Data; + +@Data +public class UpdateIsolateDataInputModel { + private String name; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java new file mode 100644 index 00000000..d6540ec8 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java @@ -0,0 +1,17 @@ +package org.phyloviz.pwp.http.models.files.isolate_data.update_isolate_data; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.files.isolate_data.UpdateIsolateDataOutput; + +@Data +public class UpdateIsolateDataOutputModel { + private String name; + + public UpdateIsolateDataOutputModel(UpdateIsolateDataOutput updateIsolateDataOutput) { + if (updateIsolateDataOutput.getNewName() != null) { + this.name = String.format("Changed from '%s' to '%s'", updateIsolateDataOutput.getPreviousName(), updateIsolateDataOutput.getNewName()); + } else { + this.name = "No changes"; + } + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/TypingDataModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/TypingDataModel.java new file mode 100644 index 00000000..612f1cc8 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/TypingDataModel.java @@ -0,0 +1,15 @@ +package org.phyloviz.pwp.http.models.files.typing_data; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.files.typing_data.TypingDataInfo; + +@Data +public class TypingDataModel { + private String typingDataId; + private String name; + + public TypingDataModel(TypingDataInfo typingDataInfo) { + this.typingDataId = typingDataInfo.getTypingDataId(); + this.name = typingDataInfo.getName(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java new file mode 100644 index 00000000..153f1220 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java @@ -0,0 +1,11 @@ +package org.phyloviz.pwp.http.models.files.typing_data.delete_typing_data; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class DeleteTypingDataOutputModel { + private String projectId; + private String typingDataId; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java new file mode 100644 index 00000000..61b9285d --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java @@ -0,0 +1,8 @@ +package org.phyloviz.pwp.http.models.files.typing_data.update_typing_data; + +import lombok.Data; + +@Data +public class UpdateTypingDataInputModel { + private String name; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java new file mode 100644 index 00000000..f79538f4 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java @@ -0,0 +1,17 @@ +package org.phyloviz.pwp.http.models.files.typing_data.update_typing_data; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.files.typing_data.UpdateTypingDataOutput; + +@Data +public class UpdateTypingDataOutputModel { + private String name; + + public UpdateTypingDataOutputModel(UpdateTypingDataOutput updateTypingDataOutput) { + if (updateTypingDataOutput.getNewName() != null) { + this.name = String.format("Changed from '%s' to '%s'", updateTypingDataOutput.getPreviousName(), updateTypingDataOutput.getNewName()); + } else { + this.name = "No changes"; + } + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java new file mode 100644 index 00000000..a8cb56da --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java @@ -0,0 +1,17 @@ +package org.phyloviz.pwp.http.models.get_tree_view; + +import lombok.Data; +import org.phyloviz.pwp.shared.service.dtos.tree_view.Edge; + +@Data +public class EdgeModel { + private String from; + private String to; + private long weight; + + public EdgeModel(Edge edge) { + this.from = edge.getFrom(); + this.to = edge.getTo(); + this.weight = edge.getWeight(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java new file mode 100644 index 00000000..079d3ebd --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java @@ -0,0 +1,29 @@ +package org.phyloviz.pwp.http.models.get_tree_view; + +import lombok.Data; +import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; +import org.phyloviz.pwp.http.models.save_tree_view.TransformationsModel; + +import java.util.List; + +/** + * Output model for the get tree view endpoint. + */ +@Data +public class GetTreeViewOutputModel { + private List nodes; + private int nodesTotalCount; + private List edges; + private int edgesTotalCount; + private TransformationsModel transformations; + + public GetTreeViewOutputModel(GetTreeViewOutput getTreeViewOutput) { + this.nodes = getTreeViewOutput.getNodes().stream().map(NodeModel::new).toList(); + this.nodesTotalCount = getTreeViewOutput.getNodesTotalCount(); + this.edges = getTreeViewOutput.getEdges().stream().map(EdgeModel::new).toList(); + this.edgesTotalCount = getTreeViewOutput.getEdgesTotalCount(); + this.transformations = getTreeViewOutput.getTransformations() != null ? + new TransformationsModel(getTreeViewOutput.getTransformations()) + : null; + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java new file mode 100644 index 00000000..df5c35c5 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java @@ -0,0 +1,28 @@ +package org.phyloviz.pwp.http.models.get_tree_view; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.phyloviz.pwp.shared.service.dtos.tree_view.Node; + +import java.util.List; + +/** + * Model for a tree node. + */ +@Data +@NoArgsConstructor +public class NodeModel { + private String st; + private double[] coordinates; + private List profile; + + public NodeModel(Node node) { + this.st = node.getSt(); + this.coordinates = node.getCoordinates(); + this.profile = node.getProfile(); + } + + public Node toDto() { + return new Node(st, coordinates, profile); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflow/GetWorkflowOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflow/GetWorkflowOutputModel.java new file mode 100644 index 00000000..5a87e87e --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflow/GetWorkflowOutputModel.java @@ -0,0 +1,30 @@ +package org.phyloviz.pwp.http.models.get_workflow; + +import lombok.Data; +import org.phyloviz.pwp.repository.metadata.templates.workflow_instances.documents.WorkflowStatus; +import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowOutput; + +import java.util.Map; + +@Data +public class GetWorkflowOutputModel { + private String workflowId; + private String type; + private String name; + private WorkflowStatus status; + private String failureReason; + private Map logs; + private double progress; + private Map data; + + public GetWorkflowOutputModel(GetWorkflowOutput getWorkflowOutput) { + this.workflowId = getWorkflowOutput.getWorkflowId(); + this.type = getWorkflowOutput.getType(); + this.name = getWorkflowOutput.getName(); + this.status = getWorkflowOutput.getStatus(); + this.failureReason = getWorkflowOutput.getFailureReason(); + this.logs = getWorkflowOutput.getLogs(); + this.progress = getWorkflowOutput.getProgress(); + this.data = getWorkflowOutput.getData(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java new file mode 100644 index 00000000..3a963d2e --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java @@ -0,0 +1,28 @@ +package org.phyloviz.pwp.http.models.get_workflow_status; + +import lombok.Data; +import org.phyloviz.pwp.repository.metadata.templates.workflow_instances.documents.WorkflowStatus; +import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowStatusOutput; + +import java.util.Map; + +@Data +public class GetWorkflowStatusOutputModel { + private String workflowId; + private String type; + private String name; + private WorkflowStatus status; + private String failureReason; + private double progress; + private Map data; + + public GetWorkflowStatusOutputModel(GetWorkflowStatusOutput getWorkflowStatusOutput) { + this.workflowId = getWorkflowStatusOutput.getWorkflowId(); + this.type = getWorkflowStatusOutput.getType(); + this.name = getWorkflowStatusOutput.getName(); + this.status = getWorkflowStatusOutput.getStatus(); + this.failureReason = getWorkflowStatusOutput.getFailureReason(); + this.progress = getWorkflowStatusOutput.getProgress(); + this.data = getWorkflowStatusOutput.getData(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflows/GetWorkflowsOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflows/GetWorkflowsOutputModel.java new file mode 100644 index 00000000..9ab8c118 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflows/GetWorkflowsOutputModel.java @@ -0,0 +1,16 @@ +package org.phyloviz.pwp.http.models.get_workflows; + +import lombok.Data; +import org.phyloviz.pwp.http.models.get_workflow_status.GetWorkflowStatusOutputModel; +import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowStatusOutput; + +import java.util.List; + +@Data +public class GetWorkflowsOutputModel { + private List workflows; + + public GetWorkflowsOutputModel(List getWorkflowStatusOutput) { + this.workflows = getWorkflowStatusOutput.stream().map(GetWorkflowStatusOutputModel::new).toList(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java new file mode 100644 index 00000000..035899d0 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java @@ -0,0 +1,22 @@ +package org.phyloviz.pwp.http.models.isolate_data; + +import lombok.Data; +import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.IsolateDataRow; + +import java.util.Map; + +/** + * Model for the isolate data. + */ +@Data +public class IsolateDataRowModel { + private String id; + private String profileId; + private Map row; + + public IsolateDataRowModel(IsolateDataRow isolateDataRow) { + this.id = isolateDataRow.getId(); + this.profileId = isolateDataRow.getProfileId(); + this.row = isolateDataRow.getRow(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java new file mode 100644 index 00000000..e87443c2 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java @@ -0,0 +1,15 @@ +package org.phyloviz.pwp.http.models.isolate_data; + +import lombok.Data; +import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.UploadIsolateDataOutput; + +@Data +public class UploadIsolateDataOutputModel { + private String projectId; + private String isolateDataId; + + public UploadIsolateDataOutputModel(UploadIsolateDataOutput uploadIsolateDataOutput) { + this.projectId = uploadIsolateDataOutput.getProjectId(); + this.isolateDataId = uploadIsolateDataOutput.getIsolateDataId(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java new file mode 100644 index 00000000..99286656 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java @@ -0,0 +1,18 @@ +package org.phyloviz.pwp.http.models.isolate_data.get_isolate_data_rows; + +import lombok.Data; +import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; +import org.phyloviz.pwp.http.models.isolate_data.IsolateDataRowModel; + +import java.util.List; + +@Data +public class GetIsolateDataRowsOutputModel { + private List rows; + private int totalCount; + + public GetIsolateDataRowsOutputModel(GetIsolateDataRowsOutput getIsolateDataRowsOutput) { + this.rows = getIsolateDataRowsOutput.getRows().stream().map(IsolateDataRowModel::new).toList(); + this.totalCount = getIsolateDataRowsOutput.getTotalCount(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java new file mode 100644 index 00000000..f39b58c0 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java @@ -0,0 +1,13 @@ +package org.phyloviz.pwp.http.models.isolate_data.get_isolate_data_schema; + +import lombok.Data; + +import java.util.List; + +/** + * Output model for the GetIsolateDataKeys endpoint. + */ +@Data +public class GetIsolateDataKeysOutputModel { + private final List keys; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/ProjectModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/ProjectModel.java new file mode 100644 index 00000000..2f27f0ac --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/ProjectModel.java @@ -0,0 +1,27 @@ +package org.phyloviz.pwp.http.models.projects; + +import lombok.Data; +import org.phyloviz.pwp.http.models.datasets.DatasetModel; +import org.phyloviz.pwp.http.models.files.FilesModel; +import org.phyloviz.pwp.service.dtos.project.FullProjectInfo; + +import java.util.List; + +@Data +public class ProjectModel { + private String projectId; + private String name; + private String description; + private String owner; + private List datasets; + private FilesModel files; + + public ProjectModel(FullProjectInfo fullProjectInfo) { + this.projectId = fullProjectInfo.getProjectId(); + this.name = fullProjectInfo.getName(); + this.description = fullProjectInfo.getDescription(); + this.owner = fullProjectInfo.getOwner(); + this.datasets = fullProjectInfo.getDatasets().stream().map(DatasetModel::new).toList(); + this.files = new FilesModel(fullProjectInfo.getFiles()); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectInputModel.java new file mode 100644 index 00000000..2066de50 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectInputModel.java @@ -0,0 +1,9 @@ +package org.phyloviz.pwp.http.models.projects.create_project; + +import lombok.Data; + +@Data +public class CreateProjectInputModel { + private String name; + private String description; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectOutputModel.java new file mode 100644 index 00000000..bcb57a0f --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectOutputModel.java @@ -0,0 +1,13 @@ +package org.phyloviz.pwp.http.models.projects.create_project; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.project.CreateProjectOutput; + +@Data +public class CreateProjectOutputModel { + private String projectId; + + public CreateProjectOutputModel(CreateProjectOutput createProjectOutput) { + this.projectId = createProjectOutput.getProjectId(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/delete_project/DeleteProjectOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/delete_project/DeleteProjectOutputModel.java new file mode 100644 index 00000000..ecb892da --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/delete_project/DeleteProjectOutputModel.java @@ -0,0 +1,10 @@ +package org.phyloviz.pwp.http.models.projects.delete_project; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class DeleteProjectOutputModel { + private String projectId; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_project/GetProjectOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_project/GetProjectOutputModel.java new file mode 100644 index 00000000..99b78139 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_project/GetProjectOutputModel.java @@ -0,0 +1,10 @@ +package org.phyloviz.pwp.http.models.projects.get_project; + +import org.phyloviz.pwp.http.models.projects.ProjectModel; +import org.phyloviz.pwp.service.dtos.project.FullProjectInfo; + +public class GetProjectOutputModel extends ProjectModel { + public GetProjectOutputModel(FullProjectInfo fullProjectInfo) { + super(fullProjectInfo); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java new file mode 100644 index 00000000..ea3e1135 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java @@ -0,0 +1,15 @@ +package org.phyloviz.pwp.http.models.projects.get_projects; + +import lombok.Data; +import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; + +import java.util.List; + +@Data +public class GetProjectsOutputModel { + private List projects; + + public GetProjectsOutputModel(List projects) { + this.projects = projects.stream().map(GetProjectsProjectModel::new).toList(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java new file mode 100644 index 00000000..b809ec73 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java @@ -0,0 +1,17 @@ +package org.phyloviz.pwp.http.models.projects.get_projects; + +import lombok.Data; +import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; + +@Data +public class GetProjectsProjectModel { + private String projectId; + private String name; + private String description; + + public GetProjectsProjectModel(Project project) { + this.projectId = project.getId(); + this.name = project.getName(); + this.description = project.getDescription(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectInputModel.java new file mode 100644 index 00000000..3908ab79 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectInputModel.java @@ -0,0 +1,9 @@ +package org.phyloviz.pwp.http.models.projects.update_project; + +import lombok.Data; + +@Data +public class UpdateProjectInputModel { + private String name; + private String description; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectOutputModel.java new file mode 100644 index 00000000..edeab13a --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectOutputModel.java @@ -0,0 +1,23 @@ +package org.phyloviz.pwp.http.models.projects.update_project; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.project.UpdateProjectOutput; + +@Data +public class UpdateProjectOutputModel { + private String name; + private String description; + + public UpdateProjectOutputModel(UpdateProjectOutput updateProjectOutput) { + if (updateProjectOutput.getNewName() != null) { + this.name = String.format("Changed from '%s' to '%s'", updateProjectOutput.getPreviousName(), updateProjectOutput.getNewName()); + } else { + this.name = "No changes"; + } + if (updateProjectOutput.getNewDescription() != null) { + this.description = String.format("Changed from '%s' to '%s'", updateProjectOutput.getPreviousDescription(), updateProjectOutput.getNewDescription()); + } else { + this.description = "No changes"; + } + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java new file mode 100644 index 00000000..9d6bd808 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java @@ -0,0 +1,20 @@ +package org.phyloviz.pwp.http.models.save_tree_view; + +import lombok.Data; +import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewInput; +import org.phyloviz.pwp.http.models.get_tree_view.NodeModel; + +import java.util.List; + +/** + * Input model for the save tree view endpoint. + */ +@Data +public class SaveTreeViewInputModel { + private List nodes; + private TransformationsModel transformations; + + public SaveTreeViewInput toDto() { + return new SaveTreeViewInput(nodes.stream().map(NodeModel::toDto).toList(), transformations.toDto()); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java new file mode 100644 index 00000000..7306e5c8 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java @@ -0,0 +1,20 @@ +package org.phyloviz.pwp.http.models.save_tree_view; + +import lombok.Data; +import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; + +/** + * Output model for the save tree view endpoint. + */ +@Data +public class SaveTreeViewOutputModel { + private String projectId; + private String datasetId; + private String treeViewId; + + public SaveTreeViewOutputModel(SaveTreeViewOutput saveTreeViewOutput) { + this.projectId = saveTreeViewOutput.getProjectId(); + this.datasetId = saveTreeViewOutput.getDatasetId(); + this.treeViewId = saveTreeViewOutput.getTreeViewId(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java new file mode 100644 index 00000000..f82b7447 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java @@ -0,0 +1,49 @@ +package org.phyloviz.pwp.http.models.save_tree_view; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.phyloviz.pwp.shared.service.dtos.tree_view.Transformations; + +/** + * Transformations model for the Tree View. + */ +@Data +@NoArgsConstructor +public class TransformationsModel { + private double linkSpring; + private double linkDistance; + private double gravity; + private double repulsion; + private double friction; + private double repulsionTheta; + private double decay; + private double nodeSize; + private boolean nodeLabel; + private double nodeLabelSize; + private double linkWidth; + private boolean linkLabel; + private double linkLabelSize; + private String linkLabelType; + + public TransformationsModel(Transformations transformations) { + this.linkSpring = transformations.getLinkSpring(); + this.linkDistance = transformations.getLinkDistance(); + this.gravity = transformations.getGravity(); + this.repulsion = transformations.getRepulsion(); + this.friction = transformations.getFriction(); + this.repulsionTheta = transformations.getRepulsionTheta(); + this.decay = transformations.getDecay(); + this.nodeSize = transformations.getNodeSize(); + this.nodeLabel = transformations.isNodeLabel(); + this.nodeLabelSize = transformations.getNodeLabelSize(); + this.linkWidth = transformations.getLinkWidth(); + this.linkLabel = transformations.isLinkLabel(); + this.linkLabelSize = transformations.getLinkLabelSize(); + this.linkLabelType = transformations.getLinkLabelType(); + } + + public Transformations toDto() { + return new Transformations(linkSpring, linkDistance, gravity, repulsion, friction, repulsionTheta, decay, + nodeSize, nodeLabel, nodeLabelSize, linkWidth, linkLabel, linkLabelSize, linkLabelType); + } +} \ No newline at end of file diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewOutputModel.java new file mode 100644 index 00000000..d859e5f7 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewOutputModel.java @@ -0,0 +1,19 @@ +package org.phyloviz.pwp.http.models.tree_views; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.tree_view.TreeViewInfo; + +@Data +public class TreeViewOutputModel { + private String treeViewId; + private String name; + private String layout; + private TreeViewSourceOutputModel source; + + public TreeViewOutputModel(TreeViewInfo treeViewInfo) { + this.treeViewId = treeViewInfo.getTreeViewId(); + this.name = treeViewInfo.getName(); + this.layout = treeViewInfo.getLayout(); + this.source = new TreeViewSourceOutputModel(treeViewInfo.getSource()); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewSourceOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewSourceOutputModel.java new file mode 100644 index 00000000..de18543e --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewSourceOutputModel.java @@ -0,0 +1,13 @@ +package org.phyloviz.pwp.http.models.tree_views; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.tree_view.TreeViewSourceInfo; + +@Data +public class TreeViewSourceOutputModel { + private String treeId; + + public TreeViewSourceOutputModel(TreeViewSourceInfo treeViewSourceInfo) { + this.treeId = treeViewSourceInfo.getTreeId(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java new file mode 100644 index 00000000..2fd571d4 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java @@ -0,0 +1,12 @@ +package org.phyloviz.pwp.http.models.tree_views.delete_tree_view; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class DeleteTreeViewOutputModel { + private String projectId; + private String datasetId; + private String treeViewId; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java new file mode 100644 index 00000000..8c256b09 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java @@ -0,0 +1,8 @@ +package org.phyloviz.pwp.http.models.tree_views.update_tree_view; + +import lombok.Data; + +@Data +public class UpdateTreeViewInputModel { + private String name; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java new file mode 100644 index 00000000..ef8a18d6 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java @@ -0,0 +1,17 @@ +package org.phyloviz.pwp.http.models.tree_views.update_tree_view; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.tree_view.UpdateTreeViewOutput; + +@Data +public class UpdateTreeViewOutputModel { + private String name; + + public UpdateTreeViewOutputModel(UpdateTreeViewOutput updateTreeViewOutput) { + if (updateTreeViewOutput.getNewName() != null) { + this.name = String.format("Changed from '%s' to '%s'", updateTreeViewOutput.getPreviousName(), updateTreeViewOutput.getNewName()); + } else { + this.name = "No changes"; + } + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeOutputModel.java new file mode 100644 index 00000000..0c51274c --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeOutputModel.java @@ -0,0 +1,32 @@ +package org.phyloviz.pwp.http.models.trees; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.tree.TreeInfo; +import org.phyloviz.pwp.service.dtos.tree.TreeSourceAlgorithmDistanceMatrixInfo; +import org.phyloviz.pwp.service.dtos.tree.TreeSourceAlgorithmTypingDataInfo; +import org.phyloviz.pwp.service.dtos.tree.TreeSourceFileInfo; + +@Data +public class TreeOutputModel { + private String treeId; + private String name; + private String sourceType; + private TreeSourceOutputModel source; + + public TreeOutputModel(TreeInfo treeInfo) { + this.treeId = treeInfo.getTreeId(); + this.name = treeInfo.getName(); + this.sourceType = treeInfo.getSourceType().name().toLowerCase(); + this.source = switch (treeInfo.getSourceType()) { + case ALGORITHM_DISTANCE_MATRIX -> new TreeSourceAlgorithmDistanceMatrixOutputModel( + (TreeSourceAlgorithmDistanceMatrixInfo) treeInfo.getSource() + ); + case ALGORITHM_TYPING_DATA -> new TreeSourceAlgorithmTypingDataOutputModel( + (TreeSourceAlgorithmTypingDataInfo) treeInfo.getSource() + ); + case FILE -> new TreeSourceFileOutputModel( + (TreeSourceFileInfo) treeInfo.getSource() + ); + }; + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java new file mode 100644 index 00000000..7e73f793 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java @@ -0,0 +1,17 @@ +package org.phyloviz.pwp.http.models.trees; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.tree.TreeSourceAlgorithmDistanceMatrixInfo; + +@Data +public class TreeSourceAlgorithmDistanceMatrixOutputModel implements TreeSourceOutputModel { + private String algorithm; + private String distanceMatrixId; + private String parameters; + + public TreeSourceAlgorithmDistanceMatrixOutputModel(TreeSourceAlgorithmDistanceMatrixInfo treeSourceAlgorithmDistanceMatrixInfo) { + this.algorithm = treeSourceAlgorithmDistanceMatrixInfo.getAlgorithm(); + this.distanceMatrixId = treeSourceAlgorithmDistanceMatrixInfo.getDistanceMatrixId(); + this.parameters = treeSourceAlgorithmDistanceMatrixInfo.getParameters(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java new file mode 100644 index 00000000..b1160394 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java @@ -0,0 +1,17 @@ +package org.phyloviz.pwp.http.models.trees; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.tree.TreeSourceAlgorithmTypingDataInfo; + +@Data +public class TreeSourceAlgorithmTypingDataOutputModel implements TreeSourceOutputModel { + private String algorithm; + private String typingDataId; + private String parameters; + + public TreeSourceAlgorithmTypingDataOutputModel(TreeSourceAlgorithmTypingDataInfo treeSourceAlgorithmTypingDataInfo) { + this.algorithm = treeSourceAlgorithmTypingDataInfo.getAlgorithm(); + this.typingDataId = treeSourceAlgorithmTypingDataInfo.getTypingDataId(); + this.parameters = treeSourceAlgorithmTypingDataInfo.getParameters(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceFileOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceFileOutputModel.java new file mode 100644 index 00000000..b520418d --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceFileOutputModel.java @@ -0,0 +1,15 @@ +package org.phyloviz.pwp.http.models.trees; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.tree.TreeSourceFileInfo; + +@Data +public class TreeSourceFileOutputModel implements TreeSourceOutputModel { + private String fileType; + private String fileName; + + public TreeSourceFileOutputModel(TreeSourceFileInfo treeSourceFileInfo) { + this.fileType = treeSourceFileInfo.getFileType(); + this.fileName = treeSourceFileInfo.getFileName(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceOutputModel.java new file mode 100644 index 00000000..85ee2169 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceOutputModel.java @@ -0,0 +1,4 @@ +package org.phyloviz.pwp.http.models.trees; + +public interface TreeSourceOutputModel { +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/delete_tree/DeleteTreeOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/delete_tree/DeleteTreeOutputModel.java new file mode 100644 index 00000000..75f04bc7 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/delete_tree/DeleteTreeOutputModel.java @@ -0,0 +1,12 @@ +package org.phyloviz.pwp.http.models.trees.delete_tree; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class DeleteTreeOutputModel { + private String projectId; + private String datasetId; + private String treeId; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeInputModel.java new file mode 100644 index 00000000..8d4ffe92 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeInputModel.java @@ -0,0 +1,8 @@ +package org.phyloviz.pwp.http.models.trees.update_tree_view; + +import lombok.Data; + +@Data +public class UpdateTreeInputModel { + private String name; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeOutputModel.java new file mode 100644 index 00000000..84db3043 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeOutputModel.java @@ -0,0 +1,17 @@ +package org.phyloviz.pwp.http.models.trees.update_tree_view; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.tree.UpdateTreeOutput; + +@Data +public class UpdateTreeOutputModel { + private String name; + + public UpdateTreeOutputModel(UpdateTreeOutput updateTreeOutput) { + if (updateTreeOutput.getNewName() != null) { + this.name = String.format("Changed from '%s' to '%s'", updateTreeOutput.getPreviousName(), updateTreeOutput.getNewName()); + } else { + this.name = "No changes"; + } + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java new file mode 100644 index 00000000..25d4252c --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java @@ -0,0 +1,20 @@ +package org.phyloviz.pwp.http.models.typing_data; + +import lombok.Data; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.TypingDataProfile; + +import java.util.List; + +/** + * Model for a profile. + */ +@Data +public class TypingDataProfileModel { + private String id; + private List profile; + + public TypingDataProfileModel(TypingDataProfile typingDataProfile) { + this.id = typingDataProfile.getId(); + this.profile = typingDataProfile.getProfile().stream().toList(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java new file mode 100644 index 00000000..6f72fc63 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java @@ -0,0 +1,15 @@ +package org.phyloviz.pwp.http.models.typing_data; + +import lombok.Data; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.UploadTypingDataOutput; + +@Data +public class UploadTypingDataOutputModel { + private String projectId; + private String typingDataId; + + public UploadTypingDataOutputModel(UploadTypingDataOutput uploadTypingDataOutput) { + this.projectId = uploadTypingDataOutput.getProjectId(); + this.typingDataId = uploadTypingDataOutput.getTypingDataId(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java new file mode 100644 index 00000000..c7f0b26a --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java @@ -0,0 +1,21 @@ +package org.phyloviz.pwp.http.models.typing_data.get_typing_data_profiles; + +import lombok.Data; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; +import org.phyloviz.pwp.http.models.typing_data.TypingDataProfileModel; + +import java.util.List; + +/** + * Output model for the get typing data profiles endpoint. + */ +@Data +public class GetTypingDataProfilesOutputModel { + private List profiles; + private int totalCount; + + public GetTypingDataProfilesOutputModel(GetTypingDataProfilesOutput getTypingDataProfilesOutput) { + this.profiles = getTypingDataProfilesOutput.getProfiles().stream().map(TypingDataProfileModel::new).toList(); + this.totalCount = getTypingDataProfilesOutput.getTotalCount(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java new file mode 100644 index 00000000..bb544120 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java @@ -0,0 +1,20 @@ +package org.phyloviz.pwp.http.models.typing_data.get_typing_data_schema; + +import lombok.Data; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; + +import java.util.List; + +/** + * Output model for the get typing data profiles endpoint. + */ +@Data +public class GetTypingDataSchemaOutputModel { + private final String type; + private final List loci; + + public GetTypingDataSchemaOutputModel(GetTypingDataSchemaOutput getTypingDataSchemaOutput) { + this.type = getTypingDataSchemaOutput.getType(); + this.loci = getTypingDataSchemaOutput.getLoci(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java new file mode 100644 index 00000000..f2dbbebe --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java @@ -0,0 +1,52 @@ +package org.phyloviz.pwp.http.pipeline; + +import org.phyloviz.pwp.service.exceptions.DeniedFileDeletionException; +import org.phyloviz.pwp.service.exceptions.DeniedResourceDeletionException; +import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; +import org.phyloviz.pwp.shared.service.exceptions.IsolateDataDoesNotExistException; +import org.phyloviz.pwp.shared.service.exceptions.TypingDataDoesNotExistException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.zalando.problem.Problem; +import org.zalando.problem.Status; + +@RestControllerAdvice +public class AdministrationExceptionHandler { + + /** + * Handles Bad Request Exceptions. + * + * @param e the exception + * @return a Problem with the status Bad Request + */ + @ExceptionHandler(value = { + InvalidArgumentException.class, + IsolateDataDoesNotExistException.class, + TypingDataDoesNotExistException.class + }) + public Problem handleBadRequestException(Exception e) { + return Problem.builder() + .withTitle("Bad Request") + .withDetail(e.getMessage()) + .withStatus(Status.BAD_REQUEST) + .build(); + } + + /** + * Handles Denied Deletion Exceptions. + * + * @param e the exception + * @return a Problem with the status Bad Request + */ + @ExceptionHandler(value = { + DeniedFileDeletionException.class, + DeniedResourceDeletionException.class + }) + public Problem handleDeniedDeletionException(Exception e) { + return Problem.builder() + .withTitle("Denied Deletion") + .withDetail(e.getMessage()) + .withStatus(Status.BAD_REQUEST) + .build(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/ComputeExceptionHandler.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/ComputeExceptionHandler.java new file mode 100644 index 00000000..65d41fc4 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/ComputeExceptionHandler.java @@ -0,0 +1,33 @@ +package org.phyloviz.pwp.http.pipeline; + +import org.phyloviz.pwp.service.exceptions.*; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.zalando.problem.Problem; +import org.zalando.problem.Status; + +@RestControllerAdvice +public class ComputeExceptionHandler { + + /** + * Handles Bad Request Exceptions. + * + * @param e the exception + * @return a Problem with the status Bad Request + */ + @ExceptionHandler(value = { + InvalidWorkflowException.class, + DatasetDoesNotExistException.class, + DistanceMatrixDoesNotExistException.class, + TreeDoesNotExistException.class, + TreeViewDoesNotExistException.class, + WorkflowInstanceNotFoundException.class + }) + public Problem handleBadRequestException(Exception e) { + return Problem.builder() + .withTitle("Bad Request") + .withDetail(e.getMessage()) + .withStatus(Status.BAD_REQUEST) + .build(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/FileTransferExceptionHandler.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/FileTransferExceptionHandler.java new file mode 100644 index 00000000..bd8bf39a --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/FileTransferExceptionHandler.java @@ -0,0 +1,32 @@ +package org.phyloviz.pwp.http.pipeline; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.multipart.MaxUploadSizeExceededException; +import org.zalando.problem.Problem; +import org.zalando.problem.Status; + +@RestControllerAdvice +public class FileTransferExceptionHandler { + + @Value("${spring.servlet.multipart.max-file-size}") + private String maxUploadSize; + + /** + * Handles Multipart Max Upload Size Exceptions. + * + * @param e the exception + * @return a Problem with the status Bad Request + */ + @ExceptionHandler(value = { + MaxUploadSizeExceededException.class + }) + public Problem handleMultipartMaxUploadException(Exception e) { + return Problem.builder() + .withTitle("Bad Request") + .withDetail("Maximum file upload size exceeded (Max is " + maxUploadSize + ")") + .withStatus(Status.BAD_REQUEST) + .build(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/VisualizationExceptionHandler.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/VisualizationExceptionHandler.java new file mode 100644 index 00000000..1c518895 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/VisualizationExceptionHandler.java @@ -0,0 +1,28 @@ +package org.phyloviz.pwp.http.pipeline; + +import org.phyloviz.pwp.service.exceptions.IndexingNeededException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.zalando.problem.Problem; +import org.zalando.problem.Status; + +@RestControllerAdvice +public class VisualizationExceptionHandler { + + /** + * Handles Indexing Needed Exceptions. + * + * @param e the exception + * @return a Problem with the status Bad Request + */ + @ExceptionHandler(value = { + IndexingNeededException.class + }) + public Problem handleIndexingNeededException(Exception e) { + return Problem.builder() + .withTitle("Indexing Needed") + .withDetail(e.getMessage()) + .withStatus(Status.BAD_REQUEST) + .build(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/ToolTemplateRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/ToolTemplateRepository.java new file mode 100644 index 00000000..e218f094 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/ToolTemplateRepository.java @@ -0,0 +1,12 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template; + +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.ToolTemplate; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface ToolTemplateRepository { + + Optional findByName(String name); +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java new file mode 100644 index 00000000..3fb4dc2e --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java @@ -0,0 +1,38 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.converters; + +import lombok.RequiredArgsConstructor; +import org.bson.Document; +import org.jetbrains.annotations.NotNull; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.AccessDetailsTemplate; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.AccessTemplate; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.AccessTypeTemplate; +import org.phyloviz.pwp.shared.repository.metadata.DocumentConversionException; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.mongodb.core.convert.MongoConverter; + +@ReadingConverter +@RequiredArgsConstructor +public class AccessTemplateDeserializer implements Converter { + private final MongoConverter mongoConverter; + + @Override + public AccessTemplate convert(@NotNull Document document) { + try { + AccessTypeTemplate type = AccessTypeTemplate.valueOf(document.getString("_type").toUpperCase()); + + Class detailsClass = type.getDetailsClass(); + Document detailsDocument = (Document) document.get("details"); + AccessDetailsTemplate details = mongoConverter.read(detailsClass, detailsDocument); + + return AccessTemplate.builder() + .type(type) + .details(details) + .build(); + + } catch (Exception e) { + throw new DocumentConversionException("Error converting Document to AccessTemplate:" + e); + } + } +} + diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java new file mode 100644 index 00000000..31c13648 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java @@ -0,0 +1,30 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.converters; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.JsonObject; +import lombok.SneakyThrows; +import org.bson.Document; +import org.jetbrains.annotations.NotNull; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.AccessDetailsTemplate; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.AccessTemplate; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.WritingConverter; + + +@WritingConverter +public class AccessTemplateSerializer implements Converter { + + private final ObjectMapper objectMapper = new ObjectMapper(); + + @SneakyThrows + @Override + public Document convert(@NotNull AccessTemplate accessTemplate) { + JsonObject json = new JsonObject(); + json.addProperty("_type", accessTemplate.getType().toString()); + AccessDetailsTemplate details = accessTemplate.getDetails(); + + json.addProperty("details", objectMapper.writeValueAsString(details)); + + return Document.parse(json.toString()); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java new file mode 100644 index 00000000..f8aed5a6 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java @@ -0,0 +1,36 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.converters; + +import org.jetbrains.annotations.NotNull; +import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.converter.ConverterFactory; +import org.springframework.data.convert.ReadingConverter; + +public class CaseInsensitiveEnumDeserializerFactory implements ConverterFactory { + @NotNull + @Override + public Converter getConverter(@NotNull Class targetType) { + Class enumType = targetType; + while (enumType != null && !enumType.isEnum()) + enumType = enumType.getSuperclass(); + + if (enumType == null) + throw new IllegalArgumentException("The target type " + targetType.getName() + " does not refer to an enum"); + + return new CaseInsensitiveEnumDeserializer(enumType); + } + + @ReadingConverter + public static class CaseInsensitiveEnumDeserializer> implements Converter> { + private final Class enumType; + + public CaseInsensitiveEnumDeserializer(Class enumType) { + this.enumType = enumType; + } + + @Override + public Enum convert(String source) { + return Enum.valueOf(enumType, source.toUpperCase()); + } + } +} + diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java new file mode 100644 index 00000000..8b24481e --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java @@ -0,0 +1,12 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.converters; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.WritingConverter; + +@WritingConverter +public class CaseInsensitiveEnumSerializer implements Converter, String> { + @Override + public String convert(Enum source) { + return source.name().toLowerCase(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/GeneralTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/GeneralTemplate.java new file mode 100644 index 00000000..ce67e44d --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/GeneralTemplate.java @@ -0,0 +1,21 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.documents; + +import lombok.Builder; +import lombok.Data; +import org.phyloviz.pwp.service.flowviz.models.tool.General; + +@Data +@Builder +public class GeneralTemplate { + + private final String name; + + private final String description; + + public General build(ToolTemplateData data) { + return General.builder() + .name(name + "-" + data.getWorkflowId()) + .description(description) + .build(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplate.java new file mode 100644 index 00000000..98407c50 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplate.java @@ -0,0 +1,41 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.documents; + + +import lombok.Builder; +import lombok.Data; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.AccessTemplate; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.library.LibraryTemplate; +import org.phyloviz.pwp.service.flowviz.models.tool.Tool; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +import java.util.List; + +@Data +@Builder +@Document(collection = "tool-templates") +public class ToolTemplate { + // TODO: Maybe remove this duplicated GeneralTemplate/General code? doing this so there's no coupling between the two + private final GeneralTemplate general; + private final AccessTemplate access; + private final List library; + @Id + private String id; + + public Tool buildApiTool(ToolTemplateData data) { + return Tool.builder() + .general(general.build(data)) + .access(access.build()) + .library(library.stream().map(LibraryTemplate::build).toList()) + .build(); + } + + public Tool buildLibraryTool(ToolTemplateData data) { + return Tool.builder() + .general(general.build(data)) + .access(access.build(data)) + .library(library.stream().map(LibraryTemplate::build).toList()) + .build(); + } + +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplateData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplateData.java new file mode 100644 index 00000000..ccf254d2 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplateData.java @@ -0,0 +1,78 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.documents; + +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +public class ToolTemplateData { + @Getter + private final String projectId; + + @Getter + private final String workflowId; + + private final Map values; + + private ToolTemplateData(String projectId, String workflowId, Map values) { + this.projectId = projectId; + this.workflowId = workflowId; + this.values = values; + } + + public static ToolTemplateDataBuilder builder() { + return new ToolTemplateDataBuilder(); + } + + public Map toMap() { + HashMap map = new HashMap<>(values); + map.put("projectId", projectId); + map.put("workflowId", workflowId); + + return map; + } + + public void put(String key, String value) { + values.put(key, value); + } + + public Map getValues() { + return Map.copyOf(values); + } + + public static class ToolTemplateDataBuilder { + private final Map values = new HashMap<>(); + private String projectId; + private String workflowId; + + public ToolTemplateDataBuilder projectId(String projectId) { + this.projectId = projectId; + return this; + } + + public ToolTemplateDataBuilder workflowId(String workflowId) { + this.workflowId = workflowId; + return this; + } + + public ToolTemplateDataBuilder put(String key, String value) { + values.put(key, value); + return this; + } + + public ToolTemplateDataBuilder putAll(Map properties) { + this.values.putAll(properties); + return this; + } + + public ToolTemplateData build() { + if (projectId == null) + throw new IllegalStateException("ProjectId is required"); + + if (workflowId == null) + throw new IllegalStateException("WorkflowId is required"); + + return new ToolTemplateData(projectId, workflowId, values); + } + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java new file mode 100644 index 00000000..ab7d7d9f --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access; + +import org.phyloviz.pwp.service.flowviz.models.tool.access.AccessDetails; + +public interface AccessDetailsTemplate { + AccessDetails build(); +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java new file mode 100644 index 00000000..6cac5aa3 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java @@ -0,0 +1,35 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access; + +import lombok.Builder; +import lombok.Data; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.ToolTemplateData; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.library.LibraryAccessDetailsTemplate; +import org.phyloviz.pwp.service.flowviz.models.tool.access.Access; +import org.springframework.data.mongodb.core.mapping.Field; + +@Data +@Builder +public class AccessTemplate { + @Field("_type") + private final AccessTypeTemplate type; + + private final AccessDetailsTemplate details; + + public Access build(ToolTemplateData data) { + if (!(details instanceof LibraryAccessDetailsTemplate libraryDetails)) + throw new IllegalArgumentException("Details must be of type LibraryAccessTemplate to instantiate template with volumes"); + + return Access.builder() + .type(type.build()) + .details(libraryDetails.build(data)) + .build(); + } + + public Access build() { + return Access.builder() + .type(type.build()) + .details(details.build()) + .build(); + } + +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java new file mode 100644 index 00000000..47bc0aec --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java @@ -0,0 +1,22 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.api.ApiAccessDetailsTemplate; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.library.LibraryAccessDetailsTemplate; +import org.phyloviz.pwp.service.flowviz.models.tool.access.AccessType; + +@RequiredArgsConstructor +public enum AccessTypeTemplate { + LIBRARY(LibraryAccessDetailsTemplate.class), + API(ApiAccessDetailsTemplate.class); + + @Getter + private final Class detailsClass; + + public AccessType build() { + return AccessType.valueOf(this.name()); + } +} + + diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java new file mode 100644 index 00000000..ec5ae289 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java @@ -0,0 +1,21 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.api; + +import lombok.Data; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.AccessDetailsTemplate; +import org.phyloviz.pwp.service.flowviz.models.tool.access.api.ApiAccessDetails; + +@Data +public class ApiAccessDetailsTemplate implements AccessDetailsTemplate { + + private final String url; + + private final String apiKey; + + @Override + public ApiAccessDetails build() { + return ApiAccessDetails.builder() + .url(url) + .apiKey(apiKey) + .build(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java new file mode 100644 index 00000000..c7d0b20e --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java @@ -0,0 +1,17 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.library; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.service.flowviz.models.tool.access.library.DockerAutoRemove; + +@Getter +@RequiredArgsConstructor +public enum DockerAutoRemoveTemplate { + NEVER, + SUCCESS, + FORCE; + + public DockerAutoRemove build() { + return DockerAutoRemove.valueOf(this.name()); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java new file mode 100644 index 00000000..88f8e352 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java @@ -0,0 +1,45 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.library; + +import lombok.Builder; +import lombok.Data; +import org.apache.commons.text.StringSubstitutor; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.ToolTemplateData; +import org.phyloviz.pwp.service.flowviz.models.tool.access.library.DockerVolume; +import org.phyloviz.pwp.service.flowviz.models.tool.access.library.VolumeType; +import org.springframework.data.mongodb.core.mapping.Field; + +import java.util.Map; + +@Data +@Builder +public class DockerVolumeTemplate { + private final String source; + + private final String target; + + @Field("_type") + private final VolumeType type; + + public DockerVolume buildDockerVolume(ToolTemplateData data) { + + Map toolValues = data.toMap(); + + StringSubstitutor sub = new StringSubstitutor(toolValues) + .setEnableUndefinedVariableException(true); + + return DockerVolume.builder() + .source(sub.replace(this.source)) + .target(sub.replace(this.target)) + .type(type) + .build(); + } + + public DockerVolume buildDockerVolume() { + return DockerVolume.builder() + .source(source) + .target(target) + .type(type) + .build(); + } + +} \ No newline at end of file diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java new file mode 100644 index 00000000..be85097a --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java @@ -0,0 +1,63 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.library; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.ToolTemplateData; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.AccessDetailsTemplate; +import org.phyloviz.pwp.service.flowviz.models.tool.access.library.LibraryAccessDetails; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +public class LibraryAccessDetailsTemplate implements AccessDetailsTemplate { + + private final String address; + + private final String dockerUrl; + + private final String dockerImage; + + private final String dockerContainer; + + private final DockerAutoRemoveTemplate dockerAutoRemove; + + private final String dockerNetworkMode; + + private final String dockerApiVersion; + + private final List dockerVolumes; + + public LibraryAccessDetails build(ToolTemplateData data) { + + return LibraryAccessDetails.builder() + .address(address) + .dockerUrl(dockerUrl) + .dockerImage(dockerImage) + .dockerContainer(dockerContainer) + .dockerAutoRemove(dockerAutoRemove.build()) + .dockerNetworkMode(dockerNetworkMode) + .dockerApiVersion(dockerApiVersion) + .dockerVolumes(dockerVolumes.stream() + .map(dockerVolumeTemplate -> dockerVolumeTemplate.buildDockerVolume(data)).toList()) + .build(); + } + + @Override + public LibraryAccessDetails build() { + return LibraryAccessDetails.builder() + .address(address) + .dockerUrl(dockerUrl) + .dockerImage(dockerImage) + .dockerContainer(dockerContainer) + .dockerAutoRemove(dockerAutoRemove.build()) + .dockerNetworkMode(dockerNetworkMode) + .dockerApiVersion(dockerApiVersion) + .dockerVolumes(dockerVolumes.stream().map(DockerVolumeTemplate::buildDockerVolume).toList()) + .build(); + } + + +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java new file mode 100644 index 00000000..35a8fce4 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java @@ -0,0 +1,31 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.library; + +import lombok.Builder; +import lombok.Data; +import org.phyloviz.pwp.service.flowviz.models.tool.library.Command; + +import java.util.List; + +@Data +@Builder +public class CommandTemplate { + + private final String name; + + private final List invocation; + + private final List allowedValues; + private final List allowedCommandSets; + private final String description; + + public Command build() { + return Command.builder() + .name(name) + .invocation(this.invocation != null ? List.copyOf(this.invocation) : List.of()) + .allowedValues(this.allowedValues != null ? List.copyOf(this.allowedValues) : List.of()) + .allowedCommandSets(this.allowedCommandSets != null ? List.copyOf(this.allowedCommandSets) : List.of()) + .description(description) + .build(); + } + +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java new file mode 100644 index 00000000..fc1c7f47 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java @@ -0,0 +1,30 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.library; + +import lombok.Builder; +import lombok.Data; +import org.phyloviz.pwp.service.flowviz.models.tool.library.Library; + +import java.util.List; + +@Data +@Builder +public class LibraryTemplate { + + private final String name; + private final int order; + + private final String invocation; + private final boolean allowCommandRep; + + private final List commands; + + public Library build() { + return Library.builder() + .order(order) + .name(name) + .invocation(invocation) + .allowCommandRep(allowCommandRep) + .commands(commands.stream().map(CommandTemplate::build).toList()) + .build(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java new file mode 100644 index 00000000..21638123 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java @@ -0,0 +1,13 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.mongo; + +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.ToolTemplate; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface ToolTemplateMongoRepository extends MongoRepository { + + Optional findToolTemplateByGeneralName(String name); +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java new file mode 100644 index 00000000..521dd7c4 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java @@ -0,0 +1,19 @@ +package org.phyloviz.pwp.repository.metadata.templates.tool_template.mongo; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.ToolTemplateRepository; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.ToolTemplate; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +@RequiredArgsConstructor +public class ToolTemplateRepositoryMongo implements ToolTemplateRepository { + private final ToolTemplateMongoRepository toolTemplateMongoRepository; + + @Override + public Optional findByName(String name) { + return toolTemplateMongoRepository.findToolTemplateByGeneralName(name); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java new file mode 100644 index 00000000..e0e24efc --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java @@ -0,0 +1,21 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_instances; + +import org.phyloviz.pwp.repository.metadata.templates.workflow_instances.documents.WorkflowInstance; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface WorkflowInstanceRepository { + + Optional findById(String id); + + List findAllByProjectId(String projectId); + + List findAllByProjectIdAndNotRunning(String projectId); + + List findAllByProjectIdAndRunning(String projectId); + + WorkflowInstance save(WorkflowInstance workflowInstance); +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java new file mode 100644 index 00000000..18eacec8 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java @@ -0,0 +1,33 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_instances.documents; + +import lombok.Data; +import org.phyloviz.pwp.service.flowviz.models.workflow.Workflow; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +import java.util.Map; + +@Data +@Document(collection = "workflow-instances") +public class WorkflowInstance { + @Id + private String id; + + private String projectId; + + private String type; + + private String name; + + private Workflow workflow; + + private WorkflowStatus status; + + private String failureReason; + + private Map logs; + + private double progress; + + private Map data; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java new file mode 100644 index 00000000..0ef3a6e2 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_instances.documents; + +public enum WorkflowStatus { + RUNNING, + SUCCESS, + FAILED +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java new file mode 100644 index 00000000..7ff28a50 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java @@ -0,0 +1,20 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_instances.mongo; + +import org.phyloviz.pwp.repository.metadata.templates.workflow_instances.documents.WorkflowInstance; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface WorkflowInstanceMongoRepository extends MongoRepository { + + List findAllByProjectId(String projectId); + + @Query("{ 'projectId' : ?0, 'status' : { $in: ['SUCCESS', 'FAILED'] } }") + List findAllByProjectIdAndNotRunning(String projectId); + + @Query("{ 'projectId' : ?0, 'status' : 'RUNNING' }") + List findAllByProjectIdAndRunning(String projectId); +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java new file mode 100644 index 00000000..6b5d5d2c --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java @@ -0,0 +1,41 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_instances.mongo; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.repository.metadata.templates.workflow_instances.WorkflowInstanceRepository; +import org.phyloviz.pwp.repository.metadata.templates.workflow_instances.documents.WorkflowInstance; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +@RequiredArgsConstructor +public class WorkflowInstanceRepositoryMongo implements WorkflowInstanceRepository { + + private final WorkflowInstanceMongoRepository workflowInstanceMongoRepository; + + @Override + public Optional findById(String id) { + return workflowInstanceMongoRepository.findById(id); + } + + @Override + public List findAllByProjectId(String projectId) { + return workflowInstanceMongoRepository.findAllByProjectId(projectId); + } + + @Override + public List findAllByProjectIdAndNotRunning(String projectId) { + return workflowInstanceMongoRepository.findAllByProjectIdAndNotRunning(projectId); + } + + @Override + public List findAllByProjectIdAndRunning(String projectId) { + return workflowInstanceMongoRepository.findAllByProjectIdAndRunning(projectId); + } + + @Override + public WorkflowInstance save(WorkflowInstance workflowInstance) { + return workflowInstanceMongoRepository.save(workflowInstance); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java new file mode 100644 index 00000000..6521fba5 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java @@ -0,0 +1,26 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_template; + +import org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents.WorkflowTemplate; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface WorkflowTemplateRepository { + + /** + * Finds a workflow template by its type. + * + * @param type the type of the workflow template + * @return the workflow template + */ + Optional findByType(String type); + + /** + * Finds all workflow templates. + * + * @return the list of workflow templates + */ + List findAll(); +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/ActionTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/ActionTemplate.java new file mode 100644 index 00000000..ac9a9260 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/ActionTemplate.java @@ -0,0 +1,21 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents; + +import lombok.Builder; +import lombok.Data; +import org.apache.commons.text.StringSubstitutor; +import org.phyloviz.pwp.service.flowviz.models.workflow.tasks.Action; + +@Data +@Builder +public class ActionTemplate { + private final String command; + + public Action buildAction(WorkflowTemplateData workflowTemplateData) { + StringSubstitutor sub = new StringSubstitutor(workflowTemplateData.toMap()) + .setEnableUndefinedVariableException(true); + + return Action.builder() + .command(sub.replace(this.command)) + .build(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/TaskTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/TaskTemplate.java new file mode 100644 index 00000000..2a61c147 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/TaskTemplate.java @@ -0,0 +1,29 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents; + +import lombok.Builder; +import lombok.Data; +import org.phyloviz.pwp.service.flowviz.models.workflow.tasks.Task; + +import java.util.List; + +@Data +@Builder +public class TaskTemplate { + + private final String taskId; + + private final String tool; + + private final ActionTemplate action; + + private final List children; + + public Task buildTask(WorkflowTemplateData workflowTemplateData) { + return Task.builder() + .id(taskId) + .tool(tool + "-" + workflowTemplateData.getWorkflowId()) + .action(action.buildAction(workflowTemplateData)) + .children(this.children != null ? List.copyOf(this.children) : List.of()) + .build(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java new file mode 100644 index 00000000..d64e92f0 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java @@ -0,0 +1,84 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents; + +import lombok.Data; +import org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents.arguments.WorkflowTemplateArgumentProperties; +import org.phyloviz.pwp.service.exceptions.WorkflowTemplateConfigurationException; +import org.phyloviz.pwp.service.flowviz.models.workflow.Workflow; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.List; +import java.util.Map; + + +@Data +@Document(collection = "workflow-templates") +public class WorkflowTemplate { + + private final String type; + private final String name; + private final String description; + private final Map arguments; + private final List tasks; + @Id + private String id; + + public WorkflowTemplate(String id, String type, String name, String description, Map arguments, List tasks) { + if (type == null || type.isBlank()) { + throw new WorkflowTemplateConfigurationException( + String.format("Workflow template %s - type cannot be null or blank", id)); + } + if (name == null || name.isBlank()) { + throw new WorkflowTemplateConfigurationException( + String.format("Workflow template %s - name cannot be null or blank", id)); + } + if (description == null || description.isBlank()) { + throw new WorkflowTemplateConfigurationException( + String.format("Workflow template %s - description cannot be null or blank", id)); + } + if (arguments == null || arguments.isEmpty()) { + throw new WorkflowTemplateConfigurationException( + String.format("Workflow template %s - arguments cannot be null or empty", id)); + } + if (tasks == null || tasks.isEmpty()) { + throw new WorkflowTemplateConfigurationException( + String.format("Workflow template %s - tasks cannot be null or empty", id)); + } + tasks.stream().map(TaskTemplate::getTaskId).forEach(taskId -> { + if (tasks.stream().filter(task -> task.getTaskId().equals(taskId)).count() > 1) { + throw new WorkflowTemplateConfigurationException( + String.format("Workflow template %s - tasks - taskId %s is not unique", id, taskId)); + } + }); + + arguments.forEach((key, value) -> { + if (key.equals("projectId")) { + throw new WorkflowTemplateConfigurationException( + String.format("Workflow template %s - arguments - projectId is a reserved argument name", id)); + } + if (key.equals("workflowId")) { + throw new WorkflowTemplateConfigurationException( + String.format("Workflow template %s - arguments - workflowId is a reserved argument name", id)); + } + }); + + this.type = type; + this.name = name; + this.description = description; + this.arguments = arguments; + this.tasks = tasks; + } + + public Workflow buildWorkflow(WorkflowTemplateData workflowTemplateData) { + + return Workflow.builder() + .name(type + "-" + workflowTemplateData.getWorkflowId()) + .description(description) + // Need to set start date to be in the past to allow workflow to run immediately + .startDate(LocalDateTime.now().minus(1, ChronoUnit.DAYS)) + .tasks(tasks.stream().map(task -> task.buildTask(workflowTemplateData)).toList()) + .build(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java new file mode 100644 index 00000000..c45874cb --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java @@ -0,0 +1,78 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents; + +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +public class WorkflowTemplateData { + @Getter + private final String projectId; + + @Getter + private final String workflowId; + + private final Map values; + + private WorkflowTemplateData(String projectId, String workflowId, Map values) { + this.projectId = projectId; + this.workflowId = workflowId; + this.values = values; + } + + public static WorkflowTemplateDataBuilder builder() { + return new WorkflowTemplateDataBuilder(); + } + + public Map toMap() { + HashMap map = new HashMap<>(values); + map.put("projectId", projectId); + map.put("workflowId", workflowId); + + return map; + } + + public void put(String key, String value) { + values.put(key, value); + } + + public Map getValues() { + return Map.copyOf(values); + } + + public static class WorkflowTemplateDataBuilder { + private final Map values = new HashMap<>(); + private String projectId; + private String workflowId; + + public WorkflowTemplateDataBuilder projectId(String projectId) { + this.projectId = projectId; + return this; + } + + public WorkflowTemplateDataBuilder workflowId(String workflowId) { + this.workflowId = workflowId; + return this; + } + + public WorkflowTemplateDataBuilder put(String key, String value) { + values.put(key, value); + return this; + } + + public WorkflowTemplateDataBuilder putAll(Map values) { + this.values.putAll(values); + return this; + } + + public WorkflowTemplateData build() { + if (projectId == null) + throw new IllegalStateException("ProjectId is required"); + + if (workflowId == null) + throw new IllegalStateException("WorkflowId is required"); + + return new WorkflowTemplateData(projectId, workflowId, values); + } + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java new file mode 100644 index 00000000..dc9211cc --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java @@ -0,0 +1,39 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents.arguments; + +import lombok.Getter; +import org.phyloviz.pwp.service.exceptions.WorkflowTemplateConfigurationException; +import org.springframework.data.mongodb.core.mapping.Field; + +import java.util.List; + +@Getter +public class WorkflowTemplateArgumentProperties { + private final WorkflowTemplateArgumentType type; + + private final boolean required; + + private final String prefix; + + @Field("allowed-values") + private final List allowedValues; + + private final String pattern; + + public WorkflowTemplateArgumentProperties(WorkflowTemplateArgumentType type, Boolean required, String prefix, List allowedValues, + String pattern) { + this.type = type; + + if (type == WorkflowTemplateArgumentType.STRING) { + if (allowedValues == null || allowedValues.isEmpty()) { + throw new WorkflowTemplateConfigurationException("Arguments of type 'string' must have allowed values"); + } + } else if (allowedValues != null) { + throw new WorkflowTemplateConfigurationException("Only arguments of type 'string' can have allowed values"); + } + + this.allowedValues = allowedValues; + this.required = required == null || required; + this.prefix = prefix; + this.pattern = pattern; + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java new file mode 100644 index 00000000..8c755ffd --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java @@ -0,0 +1,13 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents.arguments; + +public enum WorkflowTemplateArgumentType { + OBJECTID, + UUID, + STRING, + NUMBER, + REGEX, + DATASETID, + DISTANCEMATRIXID, + TREEID, + TREEVIEWID +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java new file mode 100644 index 00000000..8e5c8c14 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java @@ -0,0 +1,19 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_template.mongo; + +import org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents.WorkflowTemplate; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface WorkflowTemplateMongoRepository extends MongoRepository { + + /** + * Finds a workflow template by its type. + * + * @param type the type of the workflow template + * @return the workflow template + */ + Optional findByType(String type); +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java new file mode 100644 index 00000000..c525da76 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java @@ -0,0 +1,25 @@ +package org.phyloviz.pwp.repository.metadata.templates.workflow_template.mongo; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.repository.metadata.templates.workflow_template.WorkflowTemplateRepository; +import org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents.WorkflowTemplate; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +@RequiredArgsConstructor +public class WorkflowTemplateRepositoryMongo implements WorkflowTemplateRepository { + private final WorkflowTemplateMongoRepository repository; + + @Override + public Optional findByType(String type) { + return repository.findByType(type); + } + + @Override + public List findAll() { + return repository.findAll(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeService.java new file mode 100644 index 00000000..bff744cb --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeService.java @@ -0,0 +1,77 @@ +package org.phyloviz.pwp.service; + +import org.phyloviz.pwp.service.dtos.create_workflow.CreateWorkflowOutput; +import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowOutput; +import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowStatusOutput; + +import java.util.List; +import java.util.Map; + +/** + * Service for the Compute Microservice. + */ +public interface ComputeService { + + /** + * Creates a new workflow. + * + * @param projectId the project id where the workflow will be created + * @param type the type of the workflow + * @param properties the properties of the workflow + * @param userId the id of the user who created the workflow + * @return the output information of the workflow + */ + CreateWorkflowOutput createWorkflow( + String projectId, + String type, + Map properties, + String userId + ); + + /** + * Gets the status of a workflow. + * + * @param projectId the project id where the workflow is located + * @param workflowId the workflow id + * @param userId the id of the user who is requesting the workflow status + * @return the output information of the workflow + */ + GetWorkflowStatusOutput getWorkflowStatus(String projectId, String workflowId, String userId); + + /** + * Gets workflow. + * + * @param projectId the project id where the workflow is located + * @param workflowId the workflow id + * @param userId the id of the user who is requesting the workflow + * @return the output information of the workflow + */ + GetWorkflowOutput getWorkflow(String projectId, String workflowId, String userId); + + /** + * Gets all the workflows of a project. + * + * @param projectId the project id where the workflows are located + * @param userId the id of the user who is requesting the workflows + * @return the output information of the workflows + */ + List getAllWorkflows(String projectId, String userId); + + /** + * Gets all the running workflows of a project. + * + * @param projectId the project id where the workflows are located + * @param userId the id of the user who is requesting the workflows + * @return the output information of the workflows + */ + List getAllRunningWorkflows(String projectId, String userId); + + /** + * Gets all the not running workflows of a project. + * + * @param projectId the project id where the workflows are located + * @param userId the id of the user who is requesting the workflows + * @return the output information of the workflows + */ + List getAllNotRunningWorkflows(String projectId, String userId); +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java new file mode 100644 index 00000000..5d4de231 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java @@ -0,0 +1,430 @@ +package org.phyloviz.pwp.service; + +import org.bson.types.ObjectId; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.ToolTemplateRepository; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.ToolTemplate; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.ToolTemplateData; +import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.AccessTypeTemplate; +import org.phyloviz.pwp.repository.metadata.templates.workflow_instances.WorkflowInstanceRepository; +import org.phyloviz.pwp.repository.metadata.templates.workflow_instances.documents.WorkflowInstance; +import org.phyloviz.pwp.repository.metadata.templates.workflow_instances.documents.WorkflowStatus; +import org.phyloviz.pwp.repository.metadata.templates.workflow_template.WorkflowTemplateRepository; +import org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents.TaskTemplate; +import org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents.WorkflowTemplate; +import org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents.WorkflowTemplateData; +import org.phyloviz.pwp.repository.metadata.templates.workflow_template.documents.arguments.WorkflowTemplateArgumentProperties; +import org.phyloviz.pwp.service.dtos.create_workflow.CreateWorkflowOutput; +import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowOutput; +import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowStatusOutput; +import org.phyloviz.pwp.service.exceptions.InvalidWorkflowException; +import org.phyloviz.pwp.service.exceptions.TemplateNotFound; +import org.phyloviz.pwp.service.exceptions.WorkflowInstanceNotFoundException; +import org.phyloviz.pwp.service.flowviz.FLOWViZClient; +import org.phyloviz.pwp.service.flowviz.exceptions.UnexpectedResponseException; +import org.phyloviz.pwp.service.flowviz.models.get_workflow.AirflowWorkflowStatus; +import org.phyloviz.pwp.service.flowviz.models.get_workflow.GetWorkflowResponse; +import org.phyloviz.pwp.service.flowviz.models.tool.Tool; +import org.phyloviz.pwp.service.flowviz.models.workflow.GetWorkflowTaskLogResponse; +import org.phyloviz.pwp.service.flowviz.models.workflow.Workflow; +import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; +import org.phyloviz.pwp.shared.utils.UUIDUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +@Transactional +public class ComputeServiceImpl implements ComputeService { + + private final ProjectRepository projectRepository; + + private final WorkflowTemplateRepository workflowTemplateRepository; + private final WorkflowInstanceRepository workflowInstanceRepository; + private final ToolTemplateRepository toolTemplateRepository; + private final FLOWViZClient flowVizClient; + + /** + * Constructor. Calls the {@link WorkflowTemplateRepository#findAll()} method to validate the workflow templates + * using the constructor. + */ + ComputeServiceImpl( + ProjectRepository projectRepository, + WorkflowTemplateRepository workflowTemplateRepository, + WorkflowInstanceRepository workflowInstanceRepository, + ToolTemplateRepository toolTemplateRepository, + FLOWViZClient flowVizClient + ) { + this.projectRepository = projectRepository; + this.workflowTemplateRepository = workflowTemplateRepository; + this.workflowInstanceRepository = workflowInstanceRepository; + this.toolTemplateRepository = toolTemplateRepository; + this.flowVizClient = flowVizClient; + + workflowTemplateRepository.findAll(); + } + + @Override + public CreateWorkflowOutput createWorkflow( + String projectId, + String workflowType, + Map workflowProperties, + String userId + ) { + validateObjectIdArgument(projectId, "projectId"); + + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + return createWorkflow(projectId, workflowType, workflowProperties); + } + + @Override + public GetWorkflowStatusOutput getWorkflowStatus(String projectId, String workflowId, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + WorkflowInstance workflowInstance = workflowInstanceRepository + .findById(workflowId) + .orElseThrow(WorkflowInstanceNotFoundException::new); + + return getWorkflowStatusOutput(workflowInstance); + } + + @Override + public GetWorkflowOutput getWorkflow(String projectId, String workflowId, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + WorkflowInstance workflowInstance = workflowInstanceRepository + .findById(workflowId) + .orElseThrow(WorkflowInstanceNotFoundException::new); + + return getWorkflowOutput(workflowInstance); + } + + @Override + public List getAllWorkflows(String projectId, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + return workflowInstanceRepository.findAllByProjectId(projectId).stream() + .map(this::getWorkflowStatusOutput).toList(); + } + + @Override + public List getAllRunningWorkflows(String projectId, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + return workflowInstanceRepository.findAllByProjectIdAndRunning(projectId).stream() + .map(this::getWorkflowStatusOutput) + .filter(w -> w.getStatus() == WorkflowStatus.RUNNING).toList(); + } + + @Override + public List getAllNotRunningWorkflows(String projectId, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + return workflowInstanceRepository.findAllByProjectIdAndNotRunning(projectId).stream() + .map(this::getWorkflowStatusOutput).toList(); + } + + /** + * Gets the status of the workflow. + *

+ * If the workflow instance metadata has the status as running, updates the workflow instance status by calling the FLOWViZ API to get the status of + * the workflow to confirm if it is still running. + * + * @param workflowInstance the workflow instance metadata + * @return information about the workflow + */ + private GetWorkflowStatusOutput getWorkflowStatusOutput(WorkflowInstance workflowInstance) { + if (workflowInstance.getStatus() == WorkflowStatus.RUNNING) { + updateWorkflowStatusFromFLOWViZ(workflowInstance); + } + + return new GetWorkflowStatusOutput( + workflowInstance.getId(), + workflowInstance.getType(), + workflowInstance.getName(), + workflowInstance.getStatus(), + workflowInstance.getFailureReason(), + workflowInstance.getProgress(), + workflowInstance.getData() + ); + } + + /** + * Gets the status of the workflow. + *

+ * If the workflow instance metadata has the status as running, updates the workflow instance status by calling the FLOWViZ API to get the status of + * the workflow to confirm if it is still running. + * + * @param workflowInstance the workflow instance metadata + * @return information about the workflow + */ + private GetWorkflowOutput getWorkflowOutput(WorkflowInstance workflowInstance) { + updateWorkflowFromFLOWViZ(workflowInstance); + + return new GetWorkflowOutput( + workflowInstance.getId(), + workflowInstance.getType(), + workflowInstance.getName(), + workflowInstance.getStatus(), + workflowInstance.getFailureReason(), + workflowInstance.getLogs(), + workflowInstance.getProgress(), + workflowInstance.getData() + ); + } + + /** + * Updates the workflow status using the FLOWViZ API, getting the status of the workflow to confirm if it is still running. + * + * @param workflowInstance the workflow instance metadata + */ + private void updateWorkflowStatusFromFLOWViZ(WorkflowInstance workflowInstance) { + GetWorkflowResponse workflow; + try { + workflow = flowVizClient.workflowService().getWorkflow(workflowInstance.getWorkflow().getName()); + } catch (UnexpectedResponseException e) { + if (e.getResponse().code() == 404) { + return; + } else + throw e; + } + + List workflowRuns = workflow.getAirflow().getRuns(); + + if (workflowRuns.isEmpty()) + return; + + AirflowWorkflowStatus airflowWorkflowStatus = workflowRuns.get(0); + + String airflowStatus = airflowWorkflowStatus.getState(); + + switch (airflowStatus) { + case "running", "queued", "no_status" -> { + } + case "success" -> { + workflowInstance.setStatus(WorkflowStatus.SUCCESS); + workflowInstance.setProgress(100); + workflowInstanceRepository.save(workflowInstance); + } + case "failed" -> { + workflowInstance.setStatus(WorkflowStatus.FAILED); + if (workflowInstance.getFailureReason() == null) { + workflowInstance.setFailureReason("Internal Server Error"); + } + workflowInstanceRepository.save(workflowInstance); + } + default -> throw new IllegalStateException("Unexpected airflow status value: " + airflowStatus); + } + } + + /** + * Updates the workflow using the FLOWViZ API. + * + * @param workflowInstance the workflow instance metadata + */ + private void updateWorkflowFromFLOWViZ(WorkflowInstance workflowInstance) { + GetWorkflowResponse workflow; + try { + workflow = flowVizClient.workflowService().getWorkflow(workflowInstance.getWorkflow().getName()); + + } catch (UnexpectedResponseException e) { + if (e.getResponse().code() == 404) { + return; + } else + throw e; + } + + List workflowRuns = workflow.getAirflow().getRuns(); + + if (workflowRuns.isEmpty()) + return; + + AirflowWorkflowStatus airflowWorkflowStatus = workflowRuns.get(0); + + String airflowStatus = airflowWorkflowStatus.getState(); + String dagRunId = airflowWorkflowStatus.getDagRunId(); + + Map logs = new HashMap<>(workflowInstance.getWorkflow().getTasks().size()); + + workflowInstance.getWorkflow().getTasks().forEach((task) -> { + try { + GetWorkflowTaskLogResponse workflowTaskLogResponse; + workflowTaskLogResponse = flowVizClient.workflowService().getWorkflowDagRunTaskLog(workflowInstance.getWorkflow().getName(), dagRunId, "task_" + task.getId(), "1"); + + logs.put(task.getId(), workflowTaskLogResponse.getContent()); + } catch (UnexpectedResponseException e) { + if (e.getResponse().code() != 404) + throw e; + } + }); + + workflowInstance.setLogs(logs); + workflowInstanceRepository.save(workflowInstance); + + switch (airflowStatus) { + case "running", "queued", "no_status" -> { + } + case "success" -> { + workflowInstance.setStatus(WorkflowStatus.SUCCESS); + workflowInstance.setProgress(100); + workflowInstanceRepository.save(workflowInstance); + } + case "failed" -> { + workflowInstance.setStatus(WorkflowStatus.FAILED); + if (workflowInstance.getFailureReason() == null) { + workflowInstance.setFailureReason("Internal Server Error"); + } + workflowInstanceRepository.save(workflowInstance); + } + default -> throw new IllegalStateException("Unexpected airflow status value: " + airflowStatus); + } + } + + private CreateWorkflowOutput createWorkflow(String projectId, String workflowType, Map properties) { + //TODO: Fix transactions + + WorkflowTemplate workflowTemplate = workflowTemplateRepository + .findByType(workflowType) + .orElseThrow(() -> new InvalidWorkflowException("Workflow type not found")); + + validateCreateWorkflowArguments(workflowTemplate.getArguments(), properties); + + Map workflowInstanceData = new HashMap<>(properties); + workflowInstanceData.put("projectId", projectId); + + WorkflowInstance workflowInstance = new WorkflowInstance(); + workflowInstance.setProjectId(projectId); + workflowInstance.setType(workflowType); + workflowInstance.setName(workflowTemplate.getName()); + workflowInstance.setStatus(WorkflowStatus.RUNNING); + workflowInstance.setProgress(0.0); + workflowInstance.setData(workflowInstanceData); + workflowInstance = workflowInstanceRepository.save(workflowInstance); + + String workflowId = workflowInstance.getId(); + Map tools = new HashMap<>(); + + // Iterate over the tasks in the schema and create new tools for the instance + for (TaskTemplate taskTemplate : workflowTemplate.getTasks()) { + + String toolName = taskTemplate.getTool(); + if (tools.containsKey(toolName)) + continue; + + ToolTemplate toolTemplate = toolTemplateRepository + .findByName(toolName) + .orElseThrow(() -> new TemplateNotFound("Tool template not found")); + + AccessTypeTemplate accessType = toolTemplate.getAccess().getType(); + + ToolTemplateData toolTemplateData = ToolTemplateData.builder() + .projectId(projectId) + .workflowId(workflowId) + .putAll(properties) + .build(); + + Tool tool; + if (accessType == AccessTypeTemplate.LIBRARY) + tool = toolTemplate.buildLibraryTool(toolTemplateData); + else + tool = toolTemplate.buildApiTool(toolTemplateData); + + tools.put(toolName, tool); + } + + WorkflowTemplateData workflowTemplateData = WorkflowTemplateData.builder() + .projectId(projectId) + .workflowId(workflowId) + .putAll(properties) + .build(); + + Workflow workflow = workflowTemplate.buildWorkflow(workflowTemplateData); + + workflowInstance.setWorkflow(workflow); + + workflowInstanceRepository.save(workflowInstance); + + for (Tool tool : tools.values()) + flowVizClient.toolService().postTool(tool); + + flowVizClient.workflowService().postWorkflow(workflow); + + return new CreateWorkflowOutput(workflowId); + } + + /** + * Validates that the arguments received in the request are valid for the workflow template. Verifies that all + * required arguments are present and that the types are correct. + * + * @param createWorkflowArguments the arguments defined in the workflow template + * @param properties the arguments received in the request + */ + private void validateCreateWorkflowArguments(Map createWorkflowArguments, + Map properties) { + properties.keySet().stream().filter(key -> !createWorkflowArguments.containsKey(key)).findAny() + .ifPresent(key -> { + throw new InvalidWorkflowException(String.format("Unknown argument: '%s'", key)); + }); + + createWorkflowArguments.forEach((argumentName, argumentProperties) -> { + boolean propertyExists = properties.containsKey(argumentName); + if (argumentProperties.isRequired() && !propertyExists) + throw new InvalidWorkflowException(String.format("Missing argument: '%s'", argumentName)); + + switch (argumentProperties.getType()) { + case OBJECTID, DATASETID -> validateObjectIdArgument(properties.get(argumentName), argumentName); + case UUID, DISTANCEMATRIXID, TREEID, TREEVIEWID -> + validateUUIDArgument(properties.get(argumentName), argumentName); + case STRING -> validateStringArgument(properties.get(argumentName), argumentName, + argumentProperties.getAllowedValues()); + case NUMBER -> validateNumberArgument(properties.get(argumentName), argumentName); + case REGEX -> validateRegexArgument(properties.get(argumentName), argumentName, + argumentProperties.getPattern()); + } + + if (argumentProperties.getPrefix() != null && properties.containsKey(argumentName)) { + properties.put(argumentName, argumentProperties.getPrefix() + properties.get(argumentName)); + } + }); + } + + private void validateObjectIdArgument(String argument, String argumentName) { + if (!ObjectId.isValid(argument)) + throw new InvalidWorkflowException(String.format("Invalid argument: '%s'. Must be a valid ObjectId.", argumentName)); + } + + private void validateUUIDArgument(String argument, String argumentName) { + if (!UUIDUtils.isValidUUID(argument)) + throw new InvalidWorkflowException(String.format("Invalid argument: '%s'. Must be a valid UUID.", argumentName)); + } + + private void validateStringArgument(String argument, String argumentName, List allowedValues) { + if (!allowedValues.contains(argument)) + throw new InvalidWorkflowException(String.format( + "Invalid argument: '%s'. Must be one of the allowed values: %s", argumentName, allowedValues) + ); + } + + private void validateNumberArgument(String argument, String argumentName) { + try { + Double.parseDouble(argument); + } catch (NumberFormatException e) { + throw new InvalidWorkflowException(String.format("Invalid argument: '%s'. Must be a number.", argumentName)); + } + } + + private void validateRegexArgument(String argument, String argumentName, String pattern) { + if (!argument.matches(pattern)) + throw new InvalidWorkflowException(String.format("Invalid argument: '%s'. Must match the pattern: %s", argumentName, pattern)); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferService.java new file mode 100644 index 00000000..d4ef76c0 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferService.java @@ -0,0 +1,52 @@ +package org.phyloviz.pwp.service; + +import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.UploadIsolateDataOutput; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.UploadTypingDataOutput; +import org.springframework.web.multipart.MultipartFile; + +/** + * Service for the File Transfer Microservice. + */ +public interface FileTransferService { + + /** + * Uploads a typing data. + * + * @param projectId the name of the project to which the typing data will be uploaded + * @param file the file to be uploaded + * @param type the type of the typing data + * @param userId the id of the user that is uploading the typing data + * @return information about the uploaded typing data + */ + UploadTypingDataOutput uploadTypingData(String projectId, MultipartFile file, String type, String userId); + + /** + * Downloads the contents of a typing data file. + * + * @param projectId the name of the project the typing data belongs to + * @param typingDataId the id of the typing data to be downloaded + * @param userId the id of the user that is downloading the typing data + * @return the contents of the typing data file + */ + String downloadTypingData(String projectId, String typingDataId, String userId); + + /** + * Uploads an isolate data. + * + * @param projectId the name of the project to which the isolate data will be uploaded + * @param file the file to be uploaded + * @param userId the id of the user that is uploading the isolate data + * @return information about the uploaded isolate data + */ + UploadIsolateDataOutput uploadIsolateData(String projectId, MultipartFile file, String userId); + + /** + * Downloads the contents of an isolate data file. + * + * @param projectId the name of the project the isolate data belongs to + * @param isolateDataId the id of the isolate data to be downloaded + * @param userId the id of the user that is downloading the isolate data + * @return the contents of the isolate data file + */ + String downloadIsolateData(String projectId, String isolateDataId, String userId); +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java new file mode 100644 index 00000000..eb56d22a --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java @@ -0,0 +1,158 @@ +package org.phyloviz.pwp.service; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; +import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataDataRepository; +import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryFactory; +import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryFactory; +import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; +import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataDataRepository; +import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; +import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; +import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.shared.repository.metadata.typing_data.TypingDataMetadataRepository; +import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; +import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.UploadIsolateDataOutput; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.UploadTypingDataOutput; +import org.phyloviz.pwp.shared.service.exceptions.*; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +@Service +@Transactional +@RequiredArgsConstructor +public class FileTransferServiceImpl implements FileTransferService { + + private final ProjectRepository projectRepository; + + private final TypingDataMetadataRepository typingDataMetadataRepository; + private final IsolateDataMetadataRepository isolateDataMetadataRepository; + + private final IsolateDataDataRepositoryFactory isolateDataDataRepositoryFactory; + private final TypingDataDataRepositoryFactory typingDataDataRepositoryFactory; + + @Value("${data-repositories.upload-typing-data-repository}") + private TypingDataDataRepositoryId uploadTypingDataRepositoryId; + + @Value("${data-repositories.download-typing-data-repository}") + private TypingDataDataRepositoryId downloadTypingDataRepositoryId; + + @Value("${data-repositories.upload-isolate-data-repository}") + private IsolateDataDataRepositoryId uploadIsolateDataRepositoryId; + + @Value("${data-repositories.download-isolate-data-repository}") + private IsolateDataDataRepositoryId downloadIsolateDataRepositoryId; + + @Override + public UploadTypingDataOutput uploadTypingData(String projectId, MultipartFile file, String type, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + String typingDataId = UUID.randomUUID().toString(); + + TypingDataDataRepositorySpecificData typingDataDataRepositorySpecificData = typingDataDataRepositoryFactory + .getRepository(uploadTypingDataRepositoryId) + .uploadTypingData(projectId, typingDataId, file); + + TypingDataMetadata typingDataMetadata = new TypingDataMetadata( + projectId, + typingDataId, + type, + file.getOriginalFilename(), + Map.of(uploadTypingDataRepositoryId, typingDataDataRepositorySpecificData) + ); + + typingDataMetadataRepository.save(typingDataMetadata); + + return new UploadTypingDataOutput(projectId, typingDataId); + } + + @Override + public String downloadTypingData(String projectId, String typingDataId, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + TypingDataMetadata typingDataMetadata = typingDataMetadataRepository + .findByProjectIdAndTypingDataId(projectId, typingDataId) + .orElseThrow(TypingDataNotFoundException::new); + + if (!typingDataMetadata.getRepositorySpecificData().containsKey(downloadTypingDataRepositoryId)) + throw new FileCorruptedException("Typing Data isn't in the file storage, but has metadata."); + + TypingDataDataRepositorySpecificData repositorySpecificData = typingDataMetadata + .getRepositorySpecificData() + .get(downloadTypingDataRepositoryId); + + TypingDataDataRepository typingDataDataRepository = typingDataDataRepositoryFactory.getRepository(downloadTypingDataRepositoryId); + + return typingDataDataRepository.downloadTypingData(repositorySpecificData); + } + + @Override + public UploadIsolateDataOutput uploadIsolateData(String projectId, MultipartFile file, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + String isolateDataId = UUID.randomUUID().toString(); + + IsolateDataDataRepositorySpecificData isolateDataDataRepositorySpecificData = isolateDataDataRepositoryFactory + .getRepository(uploadIsolateDataRepositoryId) + .uploadIsolateData(projectId, isolateDataId, file); + + IsolateDataMetadata isolateDataMetadata = new IsolateDataMetadata( + projectId, + isolateDataId, + getIsolateDataKeys(file), + file.getOriginalFilename(), + Map.of(uploadIsolateDataRepositoryId, isolateDataDataRepositorySpecificData) + ); + + isolateDataMetadataRepository.save(isolateDataMetadata); + + return new UploadIsolateDataOutput(projectId, isolateDataId); + } + + @Override + public String downloadIsolateData(String projectId, String isolateDataId, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + IsolateDataMetadata isolateDataMetadata = isolateDataMetadataRepository + .findByProjectIdAndIsolateDataId(projectId, isolateDataId) + .orElseThrow(IsolateDataNotFoundException::new); + + if (!isolateDataMetadata.getRepositorySpecificData().containsKey(downloadIsolateDataRepositoryId)) + throw new FileCorruptedException("Isolate Data isn't in the file storage, but has metadata."); + + IsolateDataDataRepositorySpecificData repositorySpecificData = isolateDataMetadata + .getRepositorySpecificData() + .get(downloadIsolateDataRepositoryId); + + IsolateDataDataRepository isolateDataDataRepository = isolateDataDataRepositoryFactory.getRepository(downloadIsolateDataRepositoryId); + + return isolateDataDataRepository.downloadIsolateData(repositorySpecificData); + } + + private List getIsolateDataKeys(MultipartFile file) { + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream())); + String firstLine = reader.readLine(); + reader.close(); + + return List.of(firstLine.split("\t+")); + } catch (IOException e) { + throw new MultipartFileReadException("Could not read first line of file", e); + } + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationService.java new file mode 100644 index 00000000..6669162c --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationService.java @@ -0,0 +1,108 @@ +package org.phyloviz.pwp.service; + +import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; +import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; +import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewInput; +import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; + +import java.util.List; + +/** + * Service for the Visualization Microservice. + */ +public interface VisualizationService { + + /** + * Gets a distance matrix. + * + * @param projectId the id of the project + * @param datasetId the id of the dataset + * @param distanceMatrixId the id of the distance matrix + * @param userId the id of the user + * @return the distance matrix in string + */ + String getDistanceMatrix(String projectId, String datasetId, String distanceMatrixId, String userId); + + /** + * Gets a tree. + * + * @param projectId the id of the project + * @param datasetId the id of the dataset + * @param treeId the id of the tree + * @param userId the id of the user + * @return the tree in newick string format + */ + String getTree(String projectId, String datasetId, String treeId, String userId); + + /** + * Gets a tree view. + * + * @param projectId the id of the project + * @param datasetId the id of the dataset + * @param treeViewId the id of the tree view + * @param userId the id of the user + * @return the tree view + */ + GetTreeViewOutput getTreeView(String projectId, String datasetId, String treeViewId, String userId); + + /** + * Saves a tree view coordinates and applied transformations. + * + * @param projectId the id of the project + * @param datasetId the id of the dataset + * @param treeViewId the id of the tree view + * @param inputModel the input model + * @param userId the id of the user + * @return the tree view + */ + SaveTreeViewOutput saveTreeView(String projectId, String datasetId, String treeViewId, SaveTreeViewInput inputModel, + String userId); + + /** + * Gets a typing data's schema. + * + * @param projectId the id of the project + * @param typingDataId the id of the typing data + * @param userId the id of the user + * @return the typing data schema + */ + GetTypingDataSchemaOutput getTypingDataSchema(String projectId, String typingDataId, String userId); + + /** + * Gets a typing data's profiles, with pagination. + * + * @param projectId the id of the project + * @param typingDataId the id of the typing data + * @param limit the limit of the profiles + * @param offset the offset of the profiles + * @param userId the id of the user + * @return the typing data profiles + */ + GetTypingDataProfilesOutput getTypingDataProfiles(String projectId, String typingDataId, int limit, int offset, + String userId); + + /** + * Gets the keys of an isolate data. + * + * @param projectId the id of the project + * @param isolateDataId the id of the isolate data + * @param userId the id of the user + * @return the isolate data keys + */ + List getIsolateDataKeys(String projectId, String isolateDataId, String userId); + + /** + * Gets the rows of an isolate data, with pagination. + * + * @param projectId the id of the project + * @param isolateDataId the id of the isolate data + * @param limit the limit of the rows + * @param offset the offset of the rows + * @param userId the id of the user + * @return the isolate data rows + */ + GetIsolateDataRowsOutput getIsolateDataRows(String projectId, String isolateDataId, int limit, int offset, + String userId); +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java new file mode 100644 index 00000000..9c48f95e --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java @@ -0,0 +1,270 @@ +package org.phyloviz.pwp.service; + +import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; +import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixDataRepository; +import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; +import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataDataRepository; +import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryFactory; +import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryFactory; +import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryFactory; +import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryFactory; +import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryFactory; +import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; +import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeDataRepository; +import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; +import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewDataRepository; +import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; +import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataDataRepository; +import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; +import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; +import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.DistanceMatrixMetadataRepository; +import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; +import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; +import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; +import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.shared.repository.metadata.tree.TreeMetadataRepository; +import org.phyloviz.pwp.shared.repository.metadata.tree.documents.TreeMetadata; +import org.phyloviz.pwp.shared.repository.metadata.tree_view.TreeViewMetadataRepository; +import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.TreeViewMetadata; +import org.phyloviz.pwp.shared.repository.metadata.typing_data.TypingDataMetadataRepository; +import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; +import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; +import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; +import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewInput; +import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; +import org.phyloviz.pwp.shared.service.exceptions.*; +import org.phyloviz.pwp.service.exceptions.IndexingNeededException; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@Transactional +@RequiredArgsConstructor +public class VisualizationServiceImpl implements VisualizationService { + + private final ProjectRepository projectRepository; + private final DatasetRepository datasetRepository; + + private final DistanceMatrixMetadataRepository distanceMatrixMetadataRepository; + private final TreeMetadataRepository treeMetadataRepository; + private final TreeViewMetadataRepository treeViewMetadataRepository; + private final TypingDataMetadataRepository typingDataMetadataRepository; + private final IsolateDataMetadataRepository isolateDataMetadataRepository; + + private final DistanceMatrixDataRepositoryFactory distanceMatrixDataRepositoryFactory; + private final TreeDataRepositoryFactory treeDataRepositoryFactory; + private final TreeViewDataRepositoryFactory treeViewDataRepositoryFactory; + private final TypingDataDataRepositoryFactory typingDataDataRepositoryFactory; + private final IsolateDataDataRepositoryFactory isolateDataDataRepositoryFactory; + + @Value("${data-repositories.get-distance-matrix-repository}") + private DistanceMatrixDataRepositoryId getDistanceMatrixRepositoryId; + + @Value("${data-repositories.get-tree-repository}") + private TreeDataRepositoryId getTreeRepositoryId; + + @Value("${data-repositories.get-tree-view-repository}") + private TreeViewDataRepositoryId getTreeViewRepositoryId; + + @Value("${data-repositories.get-typing-data-repository}") + private TypingDataDataRepositoryId getTypingDataRepositoryId; + + @Value("${data-repositories.get-isolate-data-repository}") + private IsolateDataDataRepositoryId getIsolateDataRepositoryId; + + @Override + public String getDistanceMatrix(String projectId, String datasetId, String distanceMatrixId, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + if (!datasetRepository.existsByProjectIdAndId(projectId, datasetId)) + throw new DatasetNotFoundException(); + + DistanceMatrixMetadata distanceMatrix = distanceMatrixMetadataRepository + .findByProjectIdAndDatasetIdAndDistanceMatrixId(projectId, datasetId, distanceMatrixId) + .orElseThrow(DistanceMatrixNotFoundException::new); + + if (!distanceMatrix.getRepositorySpecificData().containsKey(getDistanceMatrixRepositoryId)) + throw new IndexingNeededException("Distance Matrix isn't indexed in the database. Indexing of Distance Matrix required."); + + DistanceMatrixDataRepositorySpecificData repositorySpecificData = distanceMatrix + .getRepositorySpecificData() + .get(getDistanceMatrixRepositoryId); + + DistanceMatrixDataRepository distanceMatrixDataRepository = distanceMatrixDataRepositoryFactory + .getRepository(getDistanceMatrixRepositoryId); + + return distanceMatrixDataRepository.getDistanceMatrix(repositorySpecificData); + } + + @Override + public String getTree(String projectId, String datasetId, String treeId, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + if (!datasetRepository.existsByProjectIdAndId(projectId, datasetId)) + throw new DatasetNotFoundException(); + + TreeMetadata treeMetadata = treeMetadataRepository + .findByProjectIdAndDatasetIdAndTreeId(projectId, datasetId, treeId) + .orElseThrow(TreeNotFoundException::new); + + if (!treeMetadata.getRepositorySpecificData().containsKey(getTreeRepositoryId)) + throw new IndexingNeededException("Tree isn't indexed in the database. Indexing of Tree required."); + + TreeDataRepositorySpecificData repositorySpecificData = treeMetadata + .getRepositorySpecificData() + .get(getTreeRepositoryId); + + TreeDataRepository treeDataRepository = treeDataRepositoryFactory + .getRepository(getTreeRepositoryId); + + return treeDataRepository.getTree(repositorySpecificData); + } + + @Override + public GetTreeViewOutput getTreeView(String projectId, String datasetId, String treeViewId, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + if (!datasetRepository.existsByProjectIdAndId(projectId, datasetId)) + throw new DatasetNotFoundException(); + + TreeViewMetadata treeViewMetadata = treeViewMetadataRepository + .findByProjectIdAndDatasetIdAndTreeViewId(projectId, datasetId, treeViewId) + .orElseThrow(TreeViewNotFoundException::new); + + if (!treeViewMetadata.getRepositorySpecificData().containsKey(getTreeViewRepositoryId)) + throw new IndexingNeededException("Tree View isn't indexed in the database. Indexing of Tree View required."); + + TreeViewDataRepositorySpecificData repositorySpecificData = treeViewMetadata + .getRepositorySpecificData() + .get(getTreeViewRepositoryId); + + TreeViewDataRepository treeViewDataRepository = treeViewDataRepositoryFactory.getRepository(getTreeViewRepositoryId); + + GetTreeViewOutput output = treeViewDataRepository.getTreeView(repositorySpecificData); + + return new GetTreeViewOutput( + output.getNodes(), + output.getNodesTotalCount(), + output.getEdges(), + output.getEdgesTotalCount(), + treeViewMetadata.getTransformations() + ); + } + + @Override + public SaveTreeViewOutput saveTreeView(String projectId, String datasetId, String treeViewId, SaveTreeViewInput inputModel, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + if (!datasetRepository.existsByProjectIdAndId(projectId, datasetId)) + throw new DatasetNotFoundException(); + + TreeViewMetadata treeViewMetadata = treeViewMetadataRepository + .findByProjectIdAndDatasetIdAndTreeViewId(projectId, datasetId, treeViewId) + .orElseThrow(TreeViewNotFoundException::new); + + if (!treeViewMetadata.getRepositorySpecificData().containsKey(getTreeViewRepositoryId)) + throw new IndexingNeededException("Tree View isn't indexed in the database. Indexing of Tree View required."); + + TreeViewDataRepositorySpecificData repositorySpecificData = treeViewMetadata + .getRepositorySpecificData() + .get(getTreeViewRepositoryId); + + TreeViewDataRepository treeViewDataRepository = treeViewDataRepositoryFactory.getRepository(getTreeViewRepositoryId); + + treeViewMetadata.setTransformations(inputModel.getTransformations()); + treeViewMetadataRepository.save(treeViewMetadata); + + treeViewDataRepository.saveTreeView(repositorySpecificData, inputModel.getNodes()); + + return new SaveTreeViewOutput(projectId, datasetId, treeViewId); + } + + @Override + public GetTypingDataSchemaOutput getTypingDataSchema(String projectId, String typingDataId, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + TypingDataMetadata typingDataMetadata = typingDataMetadataRepository + .findByProjectIdAndTypingDataId(projectId, typingDataId) + .orElseThrow(TypingDataNotFoundException::new); + + if (!typingDataMetadata.getRepositorySpecificData().containsKey(getTypingDataRepositoryId)) + throw new IndexingNeededException("Typing Data isn't indexed in the database. Indexing of Typing Data required."); + + TypingDataDataRepositorySpecificData repositorySpecificData = typingDataMetadata + .getRepositorySpecificData() + .get(getTypingDataRepositoryId); + + TypingDataDataRepository typingDataDataRepository = typingDataDataRepositoryFactory.getRepository(getTypingDataRepositoryId); + + return typingDataDataRepository.getTypingDataSchema(repositorySpecificData); + } + + @Override + public GetTypingDataProfilesOutput getTypingDataProfiles(String projectId, String typingDataId, int limit, int offset, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + TypingDataMetadata typingDataMetadata = typingDataMetadataRepository + .findByProjectIdAndTypingDataId(projectId, typingDataId) + .orElseThrow(TypingDataNotFoundException::new); + + if (!typingDataMetadata.getRepositorySpecificData().containsKey(getTypingDataRepositoryId)) + throw new IndexingNeededException("Typing Data isn't indexed in the database. Indexing of Typing Data required."); + + TypingDataDataRepositorySpecificData repositorySpecificData = typingDataMetadata + .getRepositorySpecificData() + .get(getTypingDataRepositoryId); + + TypingDataDataRepository typingDataDataRepository = typingDataDataRepositoryFactory.getRepository(getTypingDataRepositoryId); + + return typingDataDataRepository.getTypingDataProfiles(repositorySpecificData, limit, offset); + } + + @Override + public List getIsolateDataKeys(String projectId, String isolateDataId, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + IsolateDataMetadata isolateDataMetadata = isolateDataMetadataRepository + .findByProjectIdAndIsolateDataId(projectId, isolateDataId) + .orElseThrow(IsolateDataNotFoundException::new); + + return isolateDataMetadata.getKeys(); + } + + @Override + public GetIsolateDataRowsOutput getIsolateDataRows(String projectId, String isolateDataId, int limit, int offset, String userId) { + if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) + throw new ProjectNotFoundException(); + + IsolateDataMetadata isolateDataMetadata = isolateDataMetadataRepository + .findByProjectIdAndIsolateDataId(projectId, isolateDataId) + .orElseThrow(IsolateDataNotFoundException::new); + + if (!isolateDataMetadata.getRepositorySpecificData().containsKey(getIsolateDataRepositoryId)) + throw new IndexingNeededException("Isolate Data isn't indexed in the database. Indexing of Isolate Data required."); + + IsolateDataDataRepositorySpecificData repositorySpecificData = isolateDataMetadata + .getRepositorySpecificData() + .get(getIsolateDataRepositoryId); + + IsolateDataDataRepository isolateDataDataRepository = isolateDataDataRepositoryFactory.getRepository(getIsolateDataRepositoryId); + + return isolateDataDataRepository.getIsolateDataRows(repositorySpecificData, limit, offset); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/create_workflow/CreateWorkflowOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/create_workflow/CreateWorkflowOutput.java new file mode 100644 index 00000000..cfb90eec --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/create_workflow/CreateWorkflowOutput.java @@ -0,0 +1,8 @@ +package org.phyloviz.pwp.service.dtos.create_workflow; + +import lombok.Data; + +@Data +public class CreateWorkflowOutput { + private final String workflowId; +} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/dataset/CreateDatasetOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/CreateDatasetOutput.java similarity index 68% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/dataset/CreateDatasetOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/CreateDatasetOutput.java index 8a31e7b1..015deb99 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/dataset/CreateDatasetOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/CreateDatasetOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.dataset; +package org.phyloviz.pwp.service.dtos.dataset; import lombok.Data; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/dataset/FullDatasetInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/FullDatasetInfo.java similarity index 61% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/dataset/FullDatasetInfo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/FullDatasetInfo.java index bdd4c4d5..8bdccae0 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/dataset/FullDatasetInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/FullDatasetInfo.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.administration.service.dtos.dataset; +package org.phyloviz.pwp.service.dtos.dataset; import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.distance_matrix.DistanceMatrixInfo; -import org.phyloviz.pwp.administration.service.dtos.tree.TreeInfo; -import org.phyloviz.pwp.administration.service.dtos.tree_view.TreeViewInfo; +import org.phyloviz.pwp.service.dtos.distance_matrix.DistanceMatrixInfo; +import org.phyloviz.pwp.service.dtos.tree.TreeInfo; +import org.phyloviz.pwp.service.dtos.tree_view.TreeViewInfo; import java.util.List; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/dataset/SetIsolateDataOfDatasetOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/SetIsolateDataOfDatasetOutput.java similarity index 71% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/dataset/SetIsolateDataOfDatasetOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/SetIsolateDataOfDatasetOutput.java index 46e3e7cb..a05e14c9 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/dataset/SetIsolateDataOfDatasetOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/SetIsolateDataOfDatasetOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.dataset; +package org.phyloviz.pwp.service.dtos.dataset; import lombok.Data; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/dataset/UpdateDatasetOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/UpdateDatasetOutput.java similarity index 78% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/dataset/UpdateDatasetOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/UpdateDatasetOutput.java index 9d64f280..15c28c15 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/dataset/UpdateDatasetOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/UpdateDatasetOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.dataset; +package org.phyloviz.pwp.service.dtos.dataset; import lombok.Data; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/DistanceMatrixInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixInfo.java similarity index 94% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/DistanceMatrixInfo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixInfo.java index faa869b3..bc9a007d 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/DistanceMatrixInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixInfo.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.distance_matrix; +package org.phyloviz.pwp.service.dtos.distance_matrix; import lombok.Data; import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java similarity index 86% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java index 98f3900d..bb735d69 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.distance_matrix; +package org.phyloviz.pwp.service.dtos.distance_matrix; import lombok.Data; import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceFunction; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java new file mode 100644 index 00000000..0390593b --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java @@ -0,0 +1,4 @@ +package org.phyloviz.pwp.service.dtos.distance_matrix; + +public interface DistanceMatrixSourceInfo { +} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/UpdateDistanceMatrixOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/UpdateDistanceMatrixOutput.java similarity index 67% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/UpdateDistanceMatrixOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/UpdateDistanceMatrixOutput.java index eb71728b..343fe9ed 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/UpdateDistanceMatrixOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/UpdateDistanceMatrixOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.distance_matrix; +package org.phyloviz.pwp.service.dtos.distance_matrix; import lombok.Data; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/FilesInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/FilesInfo.java new file mode 100644 index 00000000..4965b618 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/FilesInfo.java @@ -0,0 +1,13 @@ +package org.phyloviz.pwp.service.dtos.files; + +import lombok.Data; +import org.phyloviz.pwp.service.dtos.files.isolate_data.IsolateDataInfo; +import org.phyloviz.pwp.service.dtos.files.typing_data.TypingDataInfo; + +import java.util.List; + +@Data +public class FilesInfo { + private final List typingData; + private final List isolateData; +} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/isolate_data/IsolateDataInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataInfo.java similarity index 88% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/isolate_data/IsolateDataInfo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataInfo.java index 96a2fc09..93d8bf21 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/isolate_data/IsolateDataInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataInfo.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.files.isolate_data; +package org.phyloviz.pwp.service.dtos.files.isolate_data; import lombok.Data; import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/isolate_data/UpdateIsolateDataOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UpdateIsolateDataOutput.java similarity index 66% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/isolate_data/UpdateIsolateDataOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UpdateIsolateDataOutput.java index c70df625..acea6425 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/isolate_data/UpdateIsolateDataOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UpdateIsolateDataOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.files.isolate_data; +package org.phyloviz.pwp.service.dtos.files.isolate_data; import lombok.Data; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/typing_data/TypingDataInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataInfo.java similarity index 85% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/typing_data/TypingDataInfo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataInfo.java index 9eb25fd5..31f9cd2c 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/typing_data/TypingDataInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataInfo.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.files.typing_data; +package org.phyloviz.pwp.service.dtos.files.typing_data; import lombok.Data; import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/typing_data/UpdateTypingDataOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UpdateTypingDataOutput.java similarity index 66% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/typing_data/UpdateTypingDataOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UpdateTypingDataOutput.java index e991f322..3169f216 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/typing_data/UpdateTypingDataOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UpdateTypingDataOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.files.typing_data; +package org.phyloviz.pwp.service.dtos.files.typing_data; import lombok.Data; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowOutput.java new file mode 100644 index 00000000..e7f3a2a1 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowOutput.java @@ -0,0 +1,18 @@ +package org.phyloviz.pwp.service.dtos.get_workflow; + +import lombok.Data; +import org.phyloviz.pwp.repository.metadata.templates.workflow_instances.documents.WorkflowStatus; + +import java.util.Map; + +@Data +public class GetWorkflowOutput { + private final String workflowId; + private final String type; + private final String name; + private final WorkflowStatus status; + private final String failureReason; + private final Map logs; + private final double progress; + private final Map data; +} \ No newline at end of file diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowStatusOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowStatusOutput.java new file mode 100644 index 00000000..2325f2de --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowStatusOutput.java @@ -0,0 +1,17 @@ +package org.phyloviz.pwp.service.dtos.get_workflow; + +import lombok.Data; +import org.phyloviz.pwp.repository.metadata.templates.workflow_instances.documents.WorkflowStatus; + +import java.util.Map; + +@Data +public class GetWorkflowStatusOutput { + private final String workflowId; + private final String type; + private final String name; + private final WorkflowStatus status; + private final String failureReason; + private final double progress; + private final Map data; +} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/project/CreateProjectOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/CreateProjectOutput.java similarity index 61% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/project/CreateProjectOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/CreateProjectOutput.java index eb657c9c..0485bbac 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/project/CreateProjectOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/CreateProjectOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.project; +package org.phyloviz.pwp.service.dtos.project; import lombok.Data; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/project/FullProjectInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/FullProjectInfo.java similarity index 59% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/project/FullProjectInfo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/FullProjectInfo.java index 2144fa70..d2c39165 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/project/FullProjectInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/FullProjectInfo.java @@ -1,8 +1,8 @@ -package org.phyloviz.pwp.administration.service.dtos.project; +package org.phyloviz.pwp.service.dtos.project; import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.dataset.FullDatasetInfo; -import org.phyloviz.pwp.administration.service.dtos.files.FilesInfo; +import org.phyloviz.pwp.service.dtos.dataset.FullDatasetInfo; +import org.phyloviz.pwp.service.dtos.files.FilesInfo; import java.util.List; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/project/UpdateProjectOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/UpdateProjectOutput.java similarity index 78% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/project/UpdateProjectOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/UpdateProjectOutput.java index 182114ce..d9a2e1df 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/project/UpdateProjectOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/UpdateProjectOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.project; +package org.phyloviz.pwp.service.dtos.project; import lombok.Data; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java similarity index 96% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeInfo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java index 8da0c5cc..6fe2f5ca 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.tree; +package org.phyloviz.pwp.service.dtos.tree; import lombok.Data; import org.phyloviz.pwp.shared.repository.metadata.tree.documents.TreeMetadata; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java similarity index 92% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java index 03a117c7..33f4cf14 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.tree; +package org.phyloviz.pwp.service.dtos.tree; import lombok.Data; import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceAlgorithmDistanceMatrix; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java similarity index 91% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java index 53803063..1e72c5d0 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.tree; +package org.phyloviz.pwp.service.dtos.tree; import lombok.Data; import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceAlgorithmTypingData; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceFileInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java similarity index 87% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceFileInfo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java index b5b33cee..107ecfe3 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceFileInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.tree; +package org.phyloviz.pwp.service.dtos.tree; import lombok.Data; import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceFile; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceInfo.java new file mode 100644 index 00000000..c4e308a4 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceInfo.java @@ -0,0 +1,5 @@ +package org.phyloviz.pwp.service.dtos.tree; + +public interface TreeSourceInfo { +} + diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/UpdateTreeOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/UpdateTreeOutput.java similarity index 69% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/UpdateTreeOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/UpdateTreeOutput.java index 10533a88..9c1b3b37 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/UpdateTreeOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/UpdateTreeOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.tree; +package org.phyloviz.pwp.service.dtos.tree; import lombok.Data; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree_view/TreeViewInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java similarity index 90% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree_view/TreeViewInfo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java index 6991b161..026978c2 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree_view/TreeViewInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.tree_view; +package org.phyloviz.pwp.service.dtos.tree_view; import lombok.Data; import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.TreeViewMetadata; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree_view/TreeViewSourceInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewSourceInfo.java similarity index 82% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree_view/TreeViewSourceInfo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewSourceInfo.java index 1f9aeadd..bd52ef4d 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree_view/TreeViewSourceInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewSourceInfo.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.tree_view; +package org.phyloviz.pwp.service.dtos.tree_view; import lombok.Data; import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.source.TreeViewSource; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree_view/UpdateTreeViewOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/UpdateTreeViewOutput.java similarity index 68% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree_view/UpdateTreeViewOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/UpdateTreeViewOutput.java index e5b95b22..7d0218ab 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree_view/UpdateTreeViewOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/UpdateTreeViewOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.dtos.tree_view; +package org.phyloviz.pwp.service.dtos.tree_view; import lombok.Data; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetDoesNotExistException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetDoesNotExistException.java new file mode 100644 index 00000000..ddc4c5cb --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetDoesNotExistException.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.service.exceptions; + +public class DatasetDoesNotExistException extends RuntimeException { + public DatasetDoesNotExistException() { + super("Dataset not found"); + } +} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/exceptions/DeniedFileDeletionException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedFileDeletionException.java similarity index 71% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/exceptions/DeniedFileDeletionException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedFileDeletionException.java index 4a1c53bd..749bf4f0 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/exceptions/DeniedFileDeletionException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedFileDeletionException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class DeniedFileDeletionException extends RuntimeException { public DeniedFileDeletionException(String msg) { diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/exceptions/DeniedResourceDeletionException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedResourceDeletionException.java similarity index 72% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/exceptions/DeniedResourceDeletionException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedResourceDeletionException.java index d82b7d80..98e54fd6 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/exceptions/DeniedResourceDeletionException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedResourceDeletionException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.administration.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class DeniedResourceDeletionException extends RuntimeException { public DeniedResourceDeletionException(String msg) { diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixDoesNotExistException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixDoesNotExistException.java new file mode 100644 index 00000000..2e54fad0 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixDoesNotExistException.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.service.exceptions; + +public class DistanceMatrixDoesNotExistException extends RuntimeException { + public DistanceMatrixDoesNotExistException() { + super("Distance matrix not found"); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IndexingNeededException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IndexingNeededException.java new file mode 100644 index 00000000..3630b920 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IndexingNeededException.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.service.exceptions; + +public class IndexingNeededException extends RuntimeException { + public IndexingNeededException(String message) { + super(message); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidWorkflowException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidWorkflowException.java new file mode 100644 index 00000000..3c0bab93 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidWorkflowException.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.service.exceptions; + +public class InvalidWorkflowException extends RuntimeException { + public InvalidWorkflowException(String msg) { + super(msg); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectDoesNotExistException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectDoesNotExistException.java new file mode 100644 index 00000000..8d3c2986 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectDoesNotExistException.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.service.exceptions; + +public class ProjectDoesNotExistException extends RuntimeException { + public ProjectDoesNotExistException() { + super("Project not found"); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TemplateNotFound.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TemplateNotFound.java new file mode 100644 index 00000000..55126c45 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TemplateNotFound.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.service.exceptions; + +public class TemplateNotFound extends RuntimeException { + public TemplateNotFound(String msg) { + super(msg); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeDoesNotExistException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeDoesNotExistException.java new file mode 100644 index 00000000..79cc34fe --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeDoesNotExistException.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.service.exceptions; + +public class TreeDoesNotExistException extends RuntimeException { + public TreeDoesNotExistException() { + super("Tree not found"); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewDoesNotExistException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewDoesNotExistException.java new file mode 100644 index 00000000..b411ba06 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewDoesNotExistException.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.service.exceptions; + +public class TreeViewDoesNotExistException extends RuntimeException { + public TreeViewDoesNotExistException() { + super("Tree view not found"); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowInstanceNotFoundException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowInstanceNotFoundException.java new file mode 100644 index 00000000..cbb58b71 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowInstanceNotFoundException.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.service.exceptions; + +public class WorkflowInstanceNotFoundException extends RuntimeException { + public WorkflowInstanceNotFoundException() { + super("Workflow not found"); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowTemplateConfigurationException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowTemplateConfigurationException.java new file mode 100644 index 00000000..8a0f3a51 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowTemplateConfigurationException.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.service.exceptions; + +public class WorkflowTemplateConfigurationException extends RuntimeException { + public WorkflowTemplateConfigurationException(String message) { + super(message); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClient.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClient.java new file mode 100644 index 00000000..214df548 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClient.java @@ -0,0 +1,39 @@ +package org.phyloviz.pwp.service.flowviz; + +import lombok.Getter; +import org.phyloviz.pwp.service.flowviz.identity.Credentials; +import org.phyloviz.pwp.service.flowviz.models.tool.ToolService; +import org.phyloviz.pwp.service.flowviz.models.workflow.WorkflowService; + +/** + * Client for the FLOWViZ API. + */ +@Getter +public class FLOWViZClient extends FLOWViZHttpService { + + FLOWViZClient(String baseUrl, Credentials credentials) { + super(baseUrl, credentials); + } + + public static FLOWViZClientBuilder builder() { + return new FLOWViZClientBuilder(); + } + + /** + * Create a new tool service. + * + * @return the tool service + */ + public ToolService toolService() { + return new ToolService(this); + } + + /** + * Create a new workflow service. + * + * @return the workflow service + */ + public WorkflowService workflowService() { + return new WorkflowService(this); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClientBuilder.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClientBuilder.java new file mode 100644 index 00000000..ea17c107 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClientBuilder.java @@ -0,0 +1,51 @@ +package org.phyloviz.pwp.service.flowviz; + +import org.phyloviz.pwp.service.flowviz.exceptions.AuthenticationException; +import org.phyloviz.pwp.service.flowviz.identity.Credentials; + +/** + * Builder for the {@link FLOWViZClient}. + */ +public class FLOWViZClientBuilder { + private String baseUrl; + private Credentials credentials; + + /** + * Set the credentials to authenticate with. + * + * @param username the username + * @param password the password + * @return the builder + */ + public FLOWViZClientBuilder credentials(String username, String password) { + this.credentials = new Credentials(username, password); + return this; + } + + /** + * Set the base URL of the FLOWViZ API. + * + * @param baseUrl the base URL + * @return the builder + */ + public FLOWViZClientBuilder baseUrl(String baseUrl) { + this.baseUrl = baseUrl; + return this; + } + + /** + * Build the {@link FLOWViZClient}. + * + * @return the client + * @throws AuthenticationException if the credentials are invalid + */ + public FLOWViZClient authenticate() throws AuthenticationException { + if (baseUrl == null) + throw new IllegalStateException("baseUrl is required"); + + if (credentials == null) + throw new IllegalStateException("credentials are required"); + + return new FLOWViZClient(baseUrl, credentials); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZHttpService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZHttpService.java new file mode 100644 index 00000000..ca5e5574 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZHttpService.java @@ -0,0 +1,254 @@ +package org.phyloviz.pwp.service.flowviz; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonSyntaxException; +import com.google.gson.stream.JsonReader; +import okhttp3.*; +import org.phyloviz.pwp.service.flowviz.adapters.AccessDeserializer; +import org.phyloviz.pwp.service.flowviz.adapters.AccessSerializer; +import org.phyloviz.pwp.service.flowviz.adapters.LocalDateTimeDeserializer; +import org.phyloviz.pwp.service.flowviz.adapters.LocalDateTimeSerializer; +import org.phyloviz.pwp.service.flowviz.exceptions.AuthenticationException; +import org.phyloviz.pwp.service.flowviz.exceptions.ConnectionRefusedException; +import org.phyloviz.pwp.service.flowviz.exceptions.UnexpectedResponseException; +import org.phyloviz.pwp.service.flowviz.identity.Credentials; +import org.phyloviz.pwp.service.flowviz.identity.Token; +import org.phyloviz.pwp.service.flowviz.models.tool.access.Access; + +import java.io.IOException; +import java.time.LocalDateTime; + + +/** + * Service for communicating with FLOWViZ API. + */ +public class FLOWViZHttpService { + + protected final Credentials credentials; + private final String baseUrl; + private final OkHttpClient client; + private final Gson gson; + protected Token token; + + public FLOWViZHttpService(String baseUrl, Credentials credentials) { + this.baseUrl = baseUrl; + this.credentials = credentials; + this.client = new OkHttpClient(); + this.gson = new GsonBuilder() + .registerTypeAdapter(Access.class, new AccessSerializer()) + .registerTypeAdapter(Access.class, new AccessDeserializer()) + .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()) + .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeDeserializer()) + .create(); + try { + this.token = authenticate(credentials); + } catch (final AuthenticationException | ConnectionRefusedException e) { + this.token = null; + } + } + + public FLOWViZHttpService(FLOWViZHttpService httpService) { + this.baseUrl = httpService.baseUrl; + this.client = httpService.client; + this.gson = httpService.gson; + this.token = httpService.token; + this.credentials = httpService.credentials; + } + + /** + * Authenticate with the FLOWViZ API. + * + * @param credentials the credentials to authenticate with + * @return the authentication token + */ + private Token authenticate(Credentials credentials) { + try { + return this.post("/login", credentials, Token.class); + } catch (UnexpectedResponseException e) { + throw new AuthenticationException("Failed to authenticate"); + } + } + + /** + * Execute a request. + * + * @param request the request to execute + * @param resClazz the class of the response + * @param the type of the response + * @return the response + * @throws ConnectionRefusedException if the connection was refused + * @throws UnexpectedResponseException if the response was unexpected + */ + private T execute( + Request request, + Class resClazz + ) throws ConnectionRefusedException, UnexpectedResponseException { + try (Response response = this.client.newCall(request).execute()) { + + if (!response.isSuccessful()) + throw new UnexpectedResponseException(response); + + ResponseBody responseBody = response.body(); + + if (responseBody == null) + throw new IllegalStateException("Response body is null"); + + try { + JsonReader reader = new JsonReader(responseBody.charStream()); + if (resClazz == null || resClazz == Void.class || resClazz == Void.TYPE) + return null; + return gson.fromJson(reader, resClazz); + } catch (JsonSyntaxException e) { + throw new UnexpectedResponseException(response); + } + } catch (IOException e) { + throw new ConnectionRefusedException(e); + } + } + + /** + * Add the authentication token to a request. + * + * @param builder the request builder + * @return the request with the authentication token + */ + private Request addTokenToRequest(Request.Builder builder) { + if (this.token != null) + return builder.header("Authorization", "Bearer " + this.token.getToken()).build(); + else + return builder.build(); + } + + /** + * Generate a request body from an object. + * + * @param body the object to generate the request body from + * @return the request body + */ + private RequestBody generateRequestBody(Object body) { + return RequestBody.create( + this.gson.toJson(body), + MediaType.parse("application/json") + ); + } + + /** + * Execute a request. + * + * @param reqBuilder the request builder + * @param path the path to execute the request on + * @param resClazz the class of the response + * @param the type of the response + * @return the response + * @throws ConnectionRefusedException if the connection was refused + * @throws UnexpectedResponseException if the response was unexpected + */ + private T execute( + Request.Builder reqBuilder, + String path, + Class resClazz + ) throws ConnectionRefusedException, UnexpectedResponseException { + reqBuilder = reqBuilder.url(this.baseUrl + path); + + Request request = addTokenToRequest(reqBuilder); + + try { + return execute(request, resClazz); + } catch (final UnexpectedResponseException e) { + if (e.getResponse().code() == 401) { + this.token = authenticate(this.credentials); + request = addTokenToRequest(reqBuilder); + return execute(request, resClazz); + } + + throw e; + } + } + + /** + * Execute a POST request. + * + * @param path the path to execute the request on + * @param resClazz the class of the response + * @param the type of the response + * @return the response + * @throws ConnectionRefusedException if the connection was refused + * @throws UnexpectedResponseException if the response was unexpected + */ + public T post( + String path, + Object body, + Class resClazz + ) throws ConnectionRefusedException, UnexpectedResponseException { + return execute( + new Request.Builder().post(generateRequestBody(body)), + path, + resClazz + ); + } + + /** + * Execute a PUT request. + * + * @param path the path to execute the request on + * @param resClazz the class of the response + * @param the type of the response + * @return the response + * @throws ConnectionRefusedException if the connection was refused + * @throws UnexpectedResponseException if the response was unexpected + */ + public T put( + String path, + Object body, + Class resClazz + ) throws ConnectionRefusedException, UnexpectedResponseException { + return execute( + new Request.Builder().put(generateRequestBody(body)), + path, + resClazz + ); + } + + /** + * Execute a GET request. + * + * @param path the path to execute the request on + * @param resClazz the class of the response + * @param the type of the response + * @return the response + * @throws ConnectionRefusedException if the connection was refused + * @throws UnexpectedResponseException if the response was unexpected + */ + public T get( + String path, + Class resClazz + ) throws ConnectionRefusedException, UnexpectedResponseException { + return execute( + new Request.Builder().get(), + path, + resClazz + ); + } + + /** + * Execute a DELETE request. + * + * @param path the path to execute the request on + * @param resClazz the class of the response + * @param the type of the response + * @return the response + * @throws ConnectionRefusedException if the connection was refused + * @throws UnexpectedResponseException if the response was unexpected + */ + public T delete( + String path, + Class resClazz + ) throws ConnectionRefusedException, UnexpectedResponseException { + return execute( + new Request.Builder().delete(), + path, + resClazz + ); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessDeserializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessDeserializer.java new file mode 100644 index 00000000..e334ef23 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessDeserializer.java @@ -0,0 +1,61 @@ +package org.phyloviz.pwp.service.flowviz.adapters; + +import com.google.gson.*; +import org.phyloviz.pwp.service.flowviz.models.tool.access.Access; +import org.phyloviz.pwp.service.flowviz.models.tool.access.AccessDetails; +import org.phyloviz.pwp.service.flowviz.models.tool.access.AccessType; +import org.phyloviz.pwp.service.flowviz.models.tool.access.api.ApiAccessDetails; +import org.phyloviz.pwp.service.flowviz.models.tool.access.library.LibraryAccessDetails; + +import java.lang.reflect.Type; +import java.util.Map; + +/** + * Deserializes an {@link Access} object from JSON. + */ +public class AccessDeserializer implements JsonDeserializer { + + @Override + public Access deserialize( + JsonElement json, + Type typeOfT, + JsonDeserializationContext context + ) throws JsonParseException { + JsonObject jsonObject = json.getAsJsonObject(); + + AccessType type = null; + AccessDetails details = null; + + for (Map.Entry entry : jsonObject.entrySet()) { + String name = entry.getKey(); + + switch (name) { + case "_type" -> type = AccessType.valueOf(entry.getValue().getAsString().toUpperCase()); + case "api" -> details = context.deserialize(entry.getValue(), ApiAccessDetails.class); + case "library" -> details = context.deserialize(entry.getValue(), LibraryAccessDetails.class); + default -> throw new JsonParseException("Unknown access field: " + name); + } + } + + if (type == null) + throw new JsonParseException("Access type is missing"); + + if (details == null) + throw new JsonParseException("Access details are missing"); + + if (type == AccessType.LIBRARY && !(details instanceof LibraryAccessDetails)) + throw new JsonParseException( + "Access details are not of type LibraryAccessDetails even though type is LIBRARY" + ); + + if (type == AccessType.API && !(details instanceof ApiAccessDetails)) + throw new JsonParseException("Access details are not of type ApiAccessDetails even though type is API"); + + return Access.builder() + .type(type) + .details(details) + .build(); + } +} + + diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessSerializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessSerializer.java new file mode 100644 index 00000000..03ecf659 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessSerializer.java @@ -0,0 +1,34 @@ +package org.phyloviz.pwp.service.flowviz.adapters; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import org.phyloviz.pwp.service.flowviz.models.tool.access.Access; +import org.phyloviz.pwp.service.flowviz.models.tool.access.AccessDetails; +import org.phyloviz.pwp.service.flowviz.models.tool.access.api.ApiAccessDetails; +import org.phyloviz.pwp.service.flowviz.models.tool.access.library.LibraryAccessDetails; + +import java.lang.reflect.Type; + +/** + * Serializes {@link Access} objects to JSON. + */ +public class AccessSerializer implements JsonSerializer { + + @Override + public JsonElement serialize(Access access, Type typeOfSrc, JsonSerializationContext context) { + JsonObject json = new JsonObject(); + json.addProperty("_type", access.getType().toString().toLowerCase()); + AccessDetails details = access.getDetails(); + + if (details instanceof LibraryAccessDetails) + json.add("library", context.serialize(details, LibraryAccessDetails.class)); + else if (details instanceof ApiAccessDetails) + json.add("api", context.serialize(details, ApiAccessDetails.class)); + else + throw new IllegalArgumentException("Unknown access details type: " + details.getClass().getName()); + + return json; + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeDeserializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeDeserializer.java new file mode 100644 index 00000000..9ea4e966 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeDeserializer.java @@ -0,0 +1,24 @@ +package org.phyloviz.pwp.service.flowviz.adapters; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; + +import java.lang.reflect.Type; +import java.time.LocalDateTime; +import java.time.ZonedDateTime; + +/** + * Deserializes {@link LocalDateTime} objects from JSON. + */ +public class LocalDateTimeDeserializer implements JsonDeserializer { + + @Override + public LocalDateTime deserialize( + JsonElement json, + Type type, + JsonDeserializationContext jsonDeserializationContext + ) { + return ZonedDateTime.parse(json.getAsJsonPrimitive().getAsString()).toLocalDateTime(); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeSerializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeSerializer.java new file mode 100644 index 00000000..20b0694b --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeSerializer.java @@ -0,0 +1,23 @@ +package org.phyloviz.pwp.service.flowviz.adapters; + +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import java.lang.reflect.Type; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; + +/** + * Serializes {@link LocalDateTime} objects to JSON. + */ +public class LocalDateTimeSerializer implements JsonSerializer { + + @Override + public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context) { + ZonedDateTime zonedDateTime = src.atZone(ZoneOffset.UTC); + return new JsonPrimitive(zonedDateTime.toString()); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/AuthenticationException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/AuthenticationException.java new file mode 100644 index 00000000..ed46d03a --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/AuthenticationException.java @@ -0,0 +1,7 @@ +package org.phyloviz.pwp.service.flowviz.exceptions; + +public class AuthenticationException extends RuntimeException { + public AuthenticationException(String message) { + super(message); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/ConnectionRefusedException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/ConnectionRefusedException.java new file mode 100644 index 00000000..b8e4d924 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/ConnectionRefusedException.java @@ -0,0 +1,9 @@ +package org.phyloviz.pwp.service.flowviz.exceptions; + +import java.io.IOException; + +public class ConnectionRefusedException extends RuntimeException { + public ConnectionRefusedException(IOException e) { + super("Connection refused", e); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/UnexpectedResponseException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/UnexpectedResponseException.java new file mode 100644 index 00000000..1cb6cbd0 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/UnexpectedResponseException.java @@ -0,0 +1,14 @@ +package org.phyloviz.pwp.service.flowviz.exceptions; + +import lombok.Getter; +import okhttp3.Response; + +public class UnexpectedResponseException extends RuntimeException { + @Getter + private final Response response; + + public UnexpectedResponseException(Response response) { + super("Unexpected response: " + response); + this.response = response; + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Credentials.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Credentials.java new file mode 100644 index 00000000..b550d38d --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Credentials.java @@ -0,0 +1,9 @@ +package org.phyloviz.pwp.service.flowviz.identity; + +import lombok.Data; + +@Data +public class Credentials { + private final String username; + private final String password; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Token.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Token.java new file mode 100644 index 00000000..480e0c7a --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Token.java @@ -0,0 +1,10 @@ +package org.phyloviz.pwp.service.flowviz.identity; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; + +@Data +public class Token { + @SerializedName("jwt") + private String token; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowData.java new file mode 100644 index 00000000..bf751de9 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowData.java @@ -0,0 +1,11 @@ +package org.phyloviz.pwp.service.flowviz.models.get_workflow; + +import lombok.Data; + +import java.util.List; + +@Data +public class AirflowData { + + private final List runs; +} \ No newline at end of file diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java new file mode 100644 index 00000000..2813b130 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java @@ -0,0 +1,13 @@ +package org.phyloviz.pwp.service.flowviz.models.get_workflow; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; + + +@Data +public class AirflowWorkflowStatus { + + @SerializedName("dag_run_id") + private final String dagRunId; + private final String state; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/GetWorkflowResponse.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/GetWorkflowResponse.java new file mode 100644 index 00000000..af4b3e85 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/GetWorkflowResponse.java @@ -0,0 +1,9 @@ +package org.phyloviz.pwp.service.flowviz.models.get_workflow; + +import lombok.Data; + +@Data +public class GetWorkflowResponse { + + private AirflowData airflow; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/WorkflowState.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/WorkflowState.java new file mode 100644 index 00000000..7d0e2bc6 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/WorkflowState.java @@ -0,0 +1,15 @@ +package org.phyloviz.pwp.service.flowviz.models.get_workflow; + + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public enum WorkflowState { + QUEUED("queued"), + SUCCESS("success"), + FAILED("failed"); + + private final String value; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/General.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/General.java new file mode 100644 index 00000000..11706987 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/General.java @@ -0,0 +1,13 @@ +package org.phyloviz.pwp.service.flowviz.models.tool; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class General { + + private final String name; + + private final String description; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/Tool.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/Tool.java new file mode 100644 index 00000000..aac17bce --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/Tool.java @@ -0,0 +1,19 @@ +package org.phyloviz.pwp.service.flowviz.models.tool; + +import lombok.Builder; +import lombok.Data; +import org.phyloviz.pwp.service.flowviz.models.tool.access.Access; +import org.phyloviz.pwp.service.flowviz.models.tool.library.Library; + +import java.util.List; + +@Data +@Builder +public class Tool { + + private final General general; + + private final Access access; + + private final List library; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/ToolService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/ToolService.java new file mode 100644 index 00000000..4e7b30c5 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/ToolService.java @@ -0,0 +1,20 @@ +package org.phyloviz.pwp.service.flowviz.models.tool; + +import org.phyloviz.pwp.service.flowviz.FLOWViZHttpService; +import org.phyloviz.pwp.service.flowviz.exceptions.ConnectionRefusedException; +import org.phyloviz.pwp.service.flowviz.exceptions.UnexpectedResponseException; + +public class ToolService extends FLOWViZHttpService { + + public ToolService(FLOWViZHttpService httpService) { + super(httpService); + } + + public void postTool(Tool tool) throws UnexpectedResponseException, ConnectionRefusedException { + this.post("/tool", tool, Void.class); + } + + public void getTool(String id) throws UnexpectedResponseException, ConnectionRefusedException { + this.get("/tool/" + id, Tool.class); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/Access.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/Access.java new file mode 100644 index 00000000..a3a87d28 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/Access.java @@ -0,0 +1,11 @@ +package org.phyloviz.pwp.service.flowviz.models.tool.access; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class Access { + public final AccessType type; + public final AccessDetails details; +} \ No newline at end of file diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessDetails.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessDetails.java new file mode 100644 index 00000000..f92e59d3 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessDetails.java @@ -0,0 +1,4 @@ +package org.phyloviz.pwp.service.flowviz.models.tool.access; + +public interface AccessDetails { +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessType.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessType.java new file mode 100644 index 00000000..468c6dde --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessType.java @@ -0,0 +1,12 @@ +package org.phyloviz.pwp.service.flowviz.models.tool.access; + +import com.google.gson.annotations.SerializedName; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public enum AccessType { + @SerializedName("library") + LIBRARY, + @SerializedName("api") + API +} \ No newline at end of file diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/api/ApiAccessDetails.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/api/ApiAccessDetails.java new file mode 100644 index 00000000..0bd16fa3 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/api/ApiAccessDetails.java @@ -0,0 +1,14 @@ +package org.phyloviz.pwp.service.flowviz.models.tool.access.api; + +import lombok.Builder; +import lombok.Data; +import org.phyloviz.pwp.service.flowviz.models.tool.access.AccessDetails; + +@Data +@Builder +public class ApiAccessDetails implements AccessDetails { + + private final String url; + + private final String apiKey; +} \ No newline at end of file diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerAutoRemove.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerAutoRemove.java new file mode 100644 index 00000000..8999c971 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerAutoRemove.java @@ -0,0 +1,16 @@ +package org.phyloviz.pwp.service.flowviz.models.tool.access.library; + +import com.google.gson.annotations.SerializedName; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum DockerAutoRemove { + @SerializedName("never") + NEVER, + @SerializedName("success") + SUCCESS, + @SerializedName("force") + FORCE +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerVolume.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerVolume.java new file mode 100644 index 00000000..14c560fb --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerVolume.java @@ -0,0 +1,17 @@ +package org.phyloviz.pwp.service.flowviz.models.tool.access.library; + +import com.google.gson.annotations.SerializedName; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class DockerVolume { + + private final String source; + + private final String target; + + @SerializedName("_type") + private final VolumeType type; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/LibraryAccessDetails.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/LibraryAccessDetails.java new file mode 100644 index 00000000..16126471 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/LibraryAccessDetails.java @@ -0,0 +1,29 @@ +package org.phyloviz.pwp.service.flowviz.models.tool.access.library; + +import lombok.Builder; +import lombok.Data; +import org.phyloviz.pwp.service.flowviz.models.tool.access.AccessDetails; + +import java.util.List; + +@Data +@Builder +public class LibraryAccessDetails implements AccessDetails { + + private final String address; + + private final String dockerUrl; + + private final String dockerImage; + + private final String dockerContainer; + + private final DockerAutoRemove dockerAutoRemove; + + private final String dockerNetworkMode; + + private final String dockerApiVersion; + + private final List dockerVolumes; +} + diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/VolumeType.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/VolumeType.java new file mode 100644 index 00000000..8feef59b --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/VolumeType.java @@ -0,0 +1,12 @@ +package org.phyloviz.pwp.service.flowviz.models.tool.access.library; + +import com.google.gson.annotations.SerializedName; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public enum VolumeType { + @SerializedName("bind") + BIND, + @SerializedName("volume") + VOLUME +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Command.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Command.java new file mode 100644 index 00000000..4ac93a12 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Command.java @@ -0,0 +1,20 @@ +package org.phyloviz.pwp.service.flowviz.models.tool.library; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +@Builder +public +class Command { + + private final String name; + + private final List invocation; + + private final List allowedValues; + private final List allowedCommandSets; + private final String description; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Library.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Library.java new file mode 100644 index 00000000..912b024f --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Library.java @@ -0,0 +1,19 @@ +package org.phyloviz.pwp.service.flowviz.models.tool.library; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +@Builder +public class Library { + + private final String name; + private final int order; + + private final String invocation; + private final boolean allowCommandRep; + + private final List commands; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java new file mode 100644 index 00000000..fdcdd1f7 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java @@ -0,0 +1,8 @@ +package org.phyloviz.pwp.service.flowviz.models.workflow; + +import lombok.Data; + +@Data +public class GetWorkflowTaskLogResponse { + private String content; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/Workflow.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/Workflow.java new file mode 100644 index 00000000..dfdc4207 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/Workflow.java @@ -0,0 +1,28 @@ +package org.phyloviz.pwp.service.flowviz.models.workflow; + + +import com.google.gson.annotations.SerializedName; +import lombok.Builder; +import lombok.Data; +import org.phyloviz.pwp.service.flowviz.models.workflow.tasks.Task; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +@Builder +public class Workflow { + + private final String name; + + + private final String description; + + @SerializedName("start_date") + private final LocalDateTime startDate; + + private final List tasks; +} + + + diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/WorkflowService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/WorkflowService.java new file mode 100644 index 00000000..243175bc --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/WorkflowService.java @@ -0,0 +1,25 @@ +package org.phyloviz.pwp.service.flowviz.models.workflow; + +import org.phyloviz.pwp.service.flowviz.FLOWViZHttpService; +import org.phyloviz.pwp.service.flowviz.exceptions.ConnectionRefusedException; +import org.phyloviz.pwp.service.flowviz.exceptions.UnexpectedResponseException; +import org.phyloviz.pwp.service.flowviz.models.get_workflow.GetWorkflowResponse; + +public class WorkflowService extends FLOWViZHttpService { + + public WorkflowService(FLOWViZHttpService httpService) { + super(httpService); + } + + public void postWorkflow(Workflow workflow) throws UnexpectedResponseException, ConnectionRefusedException { + this.post("/workflow", workflow, Void.class); + } + + public GetWorkflowResponse getWorkflow(String name) throws UnexpectedResponseException, ConnectionRefusedException { + return this.get("/workflow/" + name, GetWorkflowResponse.class); + } + + public GetWorkflowTaskLogResponse getWorkflowDagRunTaskLog(String name, String dagRunId, String taskId, String logId) { + return this.get("/workflow/" + name + "/" + dagRunId + "/tasks/" + taskId + "/logs/" + logId, GetWorkflowTaskLogResponse.class); + } +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Action.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Action.java new file mode 100644 index 00000000..2a7143ca --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Action.java @@ -0,0 +1,10 @@ +package org.phyloviz.pwp.service.flowviz.models.workflow.tasks; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class Action { + private final String command; +} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Task.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Task.java new file mode 100644 index 00000000..627d8c7a --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Task.java @@ -0,0 +1,19 @@ +package org.phyloviz.pwp.service.flowviz.models.workflow.tasks; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +@Builder +public class Task { + + private final String id; + + private final String tool; + + private final Action action; + + private final List children; +} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/ProjectService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectService.java similarity index 85% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/ProjectService.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectService.java index 034e6c21..2d8aba10 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/ProjectService.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectService.java @@ -1,8 +1,8 @@ -package org.phyloviz.pwp.administration.service.project; +package org.phyloviz.pwp.service.project; -import org.phyloviz.pwp.administration.service.dtos.project.CreateProjectOutput; -import org.phyloviz.pwp.administration.service.dtos.project.FullProjectInfo; -import org.phyloviz.pwp.administration.service.dtos.project.UpdateProjectOutput; +import org.phyloviz.pwp.service.dtos.project.CreateProjectOutput; +import org.phyloviz.pwp.service.dtos.project.FullProjectInfo; +import org.phyloviz.pwp.service.dtos.project.UpdateProjectOutput; import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; import java.util.List; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/ProjectServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectServiceImpl.java similarity index 86% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/ProjectServiceImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectServiceImpl.java index d42f241b..b0ff95a9 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/ProjectServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectServiceImpl.java @@ -1,13 +1,13 @@ -package org.phyloviz.pwp.administration.service.project; +package org.phyloviz.pwp.service.project; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.service.dtos.files.FilesInfo; -import org.phyloviz.pwp.administration.service.dtos.project.CreateProjectOutput; -import org.phyloviz.pwp.administration.service.dtos.project.FullProjectInfo; -import org.phyloviz.pwp.administration.service.dtos.project.UpdateProjectOutput; -import org.phyloviz.pwp.administration.service.project.dataset.DatasetService; -import org.phyloviz.pwp.administration.service.project.file.IsolateDataService; -import org.phyloviz.pwp.administration.service.project.file.TypingDataService; +import org.phyloviz.pwp.service.dtos.files.FilesInfo; +import org.phyloviz.pwp.service.dtos.project.CreateProjectOutput; +import org.phyloviz.pwp.service.dtos.project.FullProjectInfo; +import org.phyloviz.pwp.service.dtos.project.UpdateProjectOutput; +import org.phyloviz.pwp.service.project.dataset.DatasetService; +import org.phyloviz.pwp.service.project.file.IsolateDataService; +import org.phyloviz.pwp.service.project.file.TypingDataService; import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/DatasetService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetService.java similarity index 89% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/DatasetService.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetService.java index 67881e9c..71eeedda 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/DatasetService.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetService.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.administration.service.project.dataset; +package org.phyloviz.pwp.service.project.dataset; -import org.phyloviz.pwp.administration.service.dtos.dataset.CreateDatasetOutput; -import org.phyloviz.pwp.administration.service.dtos.dataset.FullDatasetInfo; -import org.phyloviz.pwp.administration.service.dtos.dataset.SetIsolateDataOfDatasetOutput; -import org.phyloviz.pwp.administration.service.dtos.dataset.UpdateDatasetOutput; +import org.phyloviz.pwp.service.dtos.dataset.CreateDatasetOutput; +import org.phyloviz.pwp.service.dtos.dataset.FullDatasetInfo; +import org.phyloviz.pwp.service.dtos.dataset.SetIsolateDataOfDatasetOutput; +import org.phyloviz.pwp.service.dtos.dataset.UpdateDatasetOutput; import java.util.List; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/DatasetServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetServiceImpl.java similarity index 90% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/DatasetServiceImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetServiceImpl.java index a253b8ff..f546765c 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/DatasetServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetServiceImpl.java @@ -1,24 +1,20 @@ -package org.phyloviz.pwp.administration.service.project.dataset; +package org.phyloviz.pwp.service.project.dataset; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.service.dtos.dataset.CreateDatasetOutput; -import org.phyloviz.pwp.administration.service.dtos.dataset.FullDatasetInfo; -import org.phyloviz.pwp.administration.service.dtos.dataset.SetIsolateDataOfDatasetOutput; -import org.phyloviz.pwp.administration.service.dtos.dataset.UpdateDatasetOutput; -import org.phyloviz.pwp.administration.service.project.dataset.distance_matrix.DistanceMatrixService; -import org.phyloviz.pwp.administration.service.project.dataset.tree.TreeService; -import org.phyloviz.pwp.administration.service.project.dataset.tree_view.TreeViewService; +import org.phyloviz.pwp.service.dtos.dataset.CreateDatasetOutput; +import org.phyloviz.pwp.service.dtos.dataset.FullDatasetInfo; +import org.phyloviz.pwp.service.dtos.dataset.SetIsolateDataOfDatasetOutput; +import org.phyloviz.pwp.service.dtos.dataset.UpdateDatasetOutput; +import org.phyloviz.pwp.service.project.dataset.distance_matrix.DistanceMatrixService; +import org.phyloviz.pwp.service.project.dataset.tree.TreeService; +import org.phyloviz.pwp.service.project.dataset.tree_view.TreeViewService; import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; import org.phyloviz.pwp.shared.repository.metadata.dataset.documents.Dataset; import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; import org.phyloviz.pwp.shared.repository.metadata.typing_data.TypingDataMetadataRepository; -import org.phyloviz.pwp.shared.service.exceptions.DatasetNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.IsolateDataDoesNotExistException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TypingDataDoesNotExistException; +import org.phyloviz.pwp.shared.service.exceptions.*; import org.phyloviz.pwp.shared.utils.UUIDUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/distance_matrix/DistanceMatrixService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixService.java similarity index 84% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/distance_matrix/DistanceMatrixService.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixService.java index eed7948f..6ac9fc48 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/distance_matrix/DistanceMatrixService.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixService.java @@ -1,7 +1,7 @@ -package org.phyloviz.pwp.administration.service.project.dataset.distance_matrix; +package org.phyloviz.pwp.service.project.dataset.distance_matrix; -import org.phyloviz.pwp.administration.service.dtos.distance_matrix.DistanceMatrixInfo; -import org.phyloviz.pwp.administration.service.dtos.distance_matrix.UpdateDistanceMatrixOutput; +import org.phyloviz.pwp.service.dtos.distance_matrix.DistanceMatrixInfo; +import org.phyloviz.pwp.service.dtos.distance_matrix.UpdateDistanceMatrixOutput; import java.util.List; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java similarity index 92% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java index e7a4b5c6..9c9be1ea 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.administration.service.project.dataset.distance_matrix; +package org.phyloviz.pwp.service.project.dataset.distance_matrix; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.service.dtos.distance_matrix.DistanceMatrixInfo; -import org.phyloviz.pwp.administration.service.dtos.distance_matrix.UpdateDistanceMatrixOutput; -import org.phyloviz.pwp.administration.service.exceptions.DeniedResourceDeletionException; +import org.phyloviz.pwp.service.dtos.distance_matrix.DistanceMatrixInfo; +import org.phyloviz.pwp.service.dtos.distance_matrix.UpdateDistanceMatrixOutput; +import org.phyloviz.pwp.service.exceptions.DeniedResourceDeletionException; import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryFactory; import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.DistanceMatrixMetadataRepository; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/tree/TreeService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeService.java similarity index 85% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/tree/TreeService.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeService.java index 4eca24ad..9e91c439 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/tree/TreeService.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeService.java @@ -1,7 +1,7 @@ -package org.phyloviz.pwp.administration.service.project.dataset.tree; +package org.phyloviz.pwp.service.project.dataset.tree; -import org.phyloviz.pwp.administration.service.dtos.tree.TreeInfo; -import org.phyloviz.pwp.administration.service.dtos.tree.UpdateTreeOutput; +import org.phyloviz.pwp.service.dtos.tree.TreeInfo; +import org.phyloviz.pwp.service.dtos.tree.UpdateTreeOutput; import java.util.List; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/tree/TreeServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeServiceImpl.java similarity index 93% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/tree/TreeServiceImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeServiceImpl.java index bf951bf8..3e5a1052 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/tree/TreeServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeServiceImpl.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.administration.service.project.dataset.tree; +package org.phyloviz.pwp.service.project.dataset.tree; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.service.dtos.tree.TreeInfo; -import org.phyloviz.pwp.administration.service.dtos.tree.UpdateTreeOutput; -import org.phyloviz.pwp.administration.service.exceptions.DeniedResourceDeletionException; +import org.phyloviz.pwp.service.dtos.tree.TreeInfo; +import org.phyloviz.pwp.service.dtos.tree.UpdateTreeOutput; +import org.phyloviz.pwp.service.exceptions.DeniedResourceDeletionException; import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryFactory; import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/tree_view/TreeViewService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewService.java similarity index 84% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/tree_view/TreeViewService.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewService.java index 1b60dc1a..d6a63485 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/tree_view/TreeViewService.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewService.java @@ -1,7 +1,7 @@ -package org.phyloviz.pwp.administration.service.project.dataset.tree_view; +package org.phyloviz.pwp.service.project.dataset.tree_view; -import org.phyloviz.pwp.administration.service.dtos.tree_view.TreeViewInfo; -import org.phyloviz.pwp.administration.service.dtos.tree_view.UpdateTreeViewOutput; +import org.phyloviz.pwp.service.dtos.tree_view.TreeViewInfo; +import org.phyloviz.pwp.service.dtos.tree_view.UpdateTreeViewOutput; import java.util.List; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/tree_view/TreeViewServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewServiceImpl.java similarity index 94% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/tree_view/TreeViewServiceImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewServiceImpl.java index a19c874a..f1c938af 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/dataset/tree_view/TreeViewServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewServiceImpl.java @@ -1,8 +1,8 @@ -package org.phyloviz.pwp.administration.service.project.dataset.tree_view; +package org.phyloviz.pwp.service.project.dataset.tree_view; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.service.dtos.tree_view.TreeViewInfo; -import org.phyloviz.pwp.administration.service.dtos.tree_view.UpdateTreeViewOutput; +import org.phyloviz.pwp.service.dtos.tree_view.TreeViewInfo; +import org.phyloviz.pwp.service.dtos.tree_view.UpdateTreeViewOutput; import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryFactory; import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/file/IsolateDataService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataService.java similarity index 60% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/file/IsolateDataService.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataService.java index 0f7eb8a5..feeae9bb 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/file/IsolateDataService.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataService.java @@ -1,7 +1,7 @@ -package org.phyloviz.pwp.administration.service.project.file; +package org.phyloviz.pwp.service.project.file; -import org.phyloviz.pwp.administration.service.dtos.files.isolate_data.IsolateDataInfo; -import org.phyloviz.pwp.administration.service.dtos.files.isolate_data.UpdateIsolateDataOutput; +import org.phyloviz.pwp.service.dtos.files.isolate_data.IsolateDataInfo; +import org.phyloviz.pwp.service.dtos.files.isolate_data.UpdateIsolateDataOutput; import java.util.List; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/file/IsolateDataServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataServiceImpl.java similarity index 92% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/file/IsolateDataServiceImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataServiceImpl.java index c985fd7f..d35bbdb7 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/file/IsolateDataServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataServiceImpl.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.administration.service.project.file; +package org.phyloviz.pwp.service.project.file; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.service.dtos.files.isolate_data.IsolateDataInfo; -import org.phyloviz.pwp.administration.service.dtos.files.isolate_data.UpdateIsolateDataOutput; -import org.phyloviz.pwp.administration.service.exceptions.DeniedFileDeletionException; +import org.phyloviz.pwp.service.dtos.files.isolate_data.IsolateDataInfo; +import org.phyloviz.pwp.service.dtos.files.isolate_data.UpdateIsolateDataOutput; +import org.phyloviz.pwp.service.exceptions.DeniedFileDeletionException; import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryFactory; import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/file/TypingDataService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataService.java similarity index 60% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/file/TypingDataService.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataService.java index ebe0ef8a..c1da38c4 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/file/TypingDataService.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataService.java @@ -1,7 +1,7 @@ -package org.phyloviz.pwp.administration.service.project.file; +package org.phyloviz.pwp.service.project.file; -import org.phyloviz.pwp.administration.service.dtos.files.typing_data.TypingDataInfo; -import org.phyloviz.pwp.administration.service.dtos.files.typing_data.UpdateTypingDataOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.TypingDataInfo; +import org.phyloviz.pwp.service.dtos.files.typing_data.UpdateTypingDataOutput; import java.util.List; diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/file/TypingDataServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataServiceImpl.java similarity index 92% rename from src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/file/TypingDataServiceImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataServiceImpl.java index fa1da705..2c94e55f 100644 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/project/file/TypingDataServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataServiceImpl.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.administration.service.project.file; +package org.phyloviz.pwp.service.project.file; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.service.dtos.files.typing_data.TypingDataInfo; -import org.phyloviz.pwp.administration.service.dtos.files.typing_data.UpdateTypingDataOutput; -import org.phyloviz.pwp.administration.service.exceptions.DeniedFileDeletionException; +import org.phyloviz.pwp.service.dtos.files.typing_data.TypingDataInfo; +import org.phyloviz.pwp.service.dtos.files.typing_data.UpdateTypingDataOutput; +import org.phyloviz.pwp.service.exceptions.DeniedFileDeletionException; import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryFactory; import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; diff --git a/src/backend/microservices/pwp/src/main/resources/application.yml b/src/backend/microservices/pwp/src/main/resources/application.yml new file mode 100644 index 00000000..e6e2361f --- /dev/null +++ b/src/backend/microservices/pwp/src/main/resources/application.yml @@ -0,0 +1,31 @@ +server: + port: 8088 + +spring: + config: + import: application-shared.yml + servlet: + multipart: + max-file-size: 1GB + max-request-size: 1GB + +data-repositories: + upload-typing-data-repository: S3 + download-typing-data-repository: S3 + upload-isolate-data-repository: S3 + download-isolate-data-repository: S3 + + get-distance-matrix-repository: S3 + get-tree-repository: S3 + get-tree-view-repository: PHYLODB + get-typing-data-repository: PHYLODB + get-isolate-data-repository: PHYLODB + +flowviz: + url: http://localhost:3000/flowapi + username: admin + password: admin + +logging: + level: + root: debug \ No newline at end of file diff --git a/src/backend/settings.gradle b/src/backend/settings.gradle index 500ba60b..fb11252f 100644 --- a/src/backend/settings.gradle +++ b/src/backend/settings.gradle @@ -1,10 +1,6 @@ rootProject.name = 'phyloviz-web-platform' -include 'microservices:visualization' -include 'microservices:compute' include 'microservices:gateway' include 'microservices:shared' -include 'microservices:administration' -include 'microservices:file-transfer' include 'microservices:shared-phylodb' +include 'microservices:pwp' findProject(':microservices:shared-phylodb')?.name = 'shared-phylodb' - From 58657aad5ce17c329cd2944eac174cea0709c3c9 Mon Sep 17 00:00:00 2001 From: Nyck Date: Tue, 30 Jan 2024 18:44:04 +0000 Subject: [PATCH 2/7] Changed ports for the services to be the same, 8088. --- .../src/main/resources/application.yml | 6 +- .../pwp/config/DataRepositoryConfig.java | 17 +++- .../config/DataRepositoryConfig.java | 98 ------------------- .../repository/data/S3FileRepositoryImpl.java | 2 + 4 files changed, 18 insertions(+), 105 deletions(-) delete mode 100644 src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/config/DataRepositoryConfig.java diff --git a/src/backend/microservices/gateway/src/main/resources/application.yml b/src/backend/microservices/gateway/src/main/resources/application.yml index 2be2cb15..90ce4041 100644 --- a/src/backend/microservices/gateway/src/main/resources/application.yml +++ b/src/backend/microservices/gateway/src/main/resources/application.yml @@ -56,7 +56,7 @@ pwp: path: /projects/{projectId}/files/isolate-data/{isolateDataId} compute: - uri: http://localhost:8086 + uri: http://localhost:8088 routes: - method: POST path: /projects/{projectId}/workflows @@ -66,7 +66,7 @@ pwp: path: /projects/{projectId}/workflows/{workflowId} visualization: - uri: http://localhost:8085 + uri: http://localhost:8088 routes: - method: GET path: /projects/{projectId}/datasets/{datasetId}/trees/{treeId} @@ -86,7 +86,7 @@ pwp: path: /projects/{projectId}/files/typing-data/{typingDataId}/profiles file-transfer: - uri: http://localhost:8089 + uri: http://localhost:8088 routes: - method: POST path: /projects/{projectId}/files/typing-data diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java index db4e07d4..6f10ae17 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java @@ -29,6 +29,10 @@ import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataS3DataRepository; import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataPhyloDBDataRepositorySpecificData; import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataS3DataRepositorySpecificData; +import org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.isolate_data.IsolateDataPhyloDBDataRepository; +import org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.tree.TreePhyloDBDataRepository; +import org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.tree_view.TreeViewPhyloDBDataRepository; +import org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.typing_data.TypingDataPhyloDBDataRepository; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -44,7 +48,8 @@ public class DataRepositoryConfig { @Bean public TypingDataDataRepositoryRegistry typingDataDataRepositoryRegistry(ApplicationContext context) { return new TypingDataDataRepositoryRegistryImpl(context, Map.of( - TypingDataDataRepositoryId.S3, TypingDataS3DataRepository.class + TypingDataDataRepositoryId.S3, TypingDataS3DataRepository.class, + TypingDataDataRepositoryId.PHYLODB, TypingDataPhyloDBDataRepository.class ), Map.of( TypingDataDataRepositoryId.S3, TypingDataS3DataRepositorySpecificData.class, TypingDataDataRepositoryId.PHYLODB, TypingDataPhyloDBDataRepositorySpecificData.class @@ -54,7 +59,9 @@ public TypingDataDataRepositoryRegistry typingDataDataRepositoryRegistry(Applica @Bean public IsolateDataDataRepositoryRegistry isolateDataDataRepositoryRegistry(ApplicationContext context) { return new IsolateDataDataRepositoryRegistryImpl(context, Map.of( - IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepository.class + IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepository.class, + IsolateDataDataRepositoryId.PHYLODB, IsolateDataPhyloDBDataRepository.class + ), Map.of( IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepositorySpecificData.class, IsolateDataDataRepositoryId.PHYLODB, IsolateDataPhyloDBDataRepositorySpecificData.class @@ -73,7 +80,8 @@ public DistanceMatrixDataRepositoryRegistry distanceMatrixDataRepositoryRegistry @Bean public TreeDataRepositoryRegistry treeDataRepositoryRegistry(ApplicationContext context) { return new TreeDataRepositoryRegistryImpl(context, Map.of( - TreeDataRepositoryId.S3, TreeS3DataRepository.class + TreeDataRepositoryId.S3, TreeS3DataRepository.class, + TreeDataRepositoryId.PHYLODB, TreePhyloDBDataRepository.class ), Map.of( TreeDataRepositoryId.S3, TreeS3DataRepositorySpecificData.class, TreeDataRepositoryId.PHYLODB, TreePhyloDBDataRepositorySpecificData.class @@ -83,7 +91,8 @@ public TreeDataRepositoryRegistry treeDataRepositoryRegistry(ApplicationContext @Bean public TreeViewDataRepositoryRegistry treeViewDataRepositoryRegistry(ApplicationContext context) { return new TreeViewDataRepositoryRegistryImpl(context, Map.of( - TreeViewDataRepositoryId.S3, TreeViewS3DataRepository.class + TreeViewDataRepositoryId.S3, TreeViewS3DataRepository.class, + TreeViewDataRepositoryId.PHYLODB, TreeViewPhyloDBDataRepository.class ), Map.of( TreeViewDataRepositoryId.S3, TreeViewS3DataRepositorySpecificData.class, TreeViewDataRepositoryId.PHYLODB, TreeViewPhyloDBDataRepositorySpecificData.class diff --git a/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/config/DataRepositoryConfig.java b/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/config/DataRepositoryConfig.java deleted file mode 100644 index 1e6aa5a8..00000000 --- a/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/config/DataRepositoryConfig.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.phyloviz.pwp.shared_phylodb.config; - -import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataPhyloDBDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreePhyloDBDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewPhyloDBDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataPhyloDBDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.isolate_data.IsolateDataPhyloDBDataRepository; -import org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.tree.TreePhyloDBDataRepository; -import org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.tree_view.TreeViewPhyloDBDataRepository; -import org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.typing_data.TypingDataPhyloDBDataRepository; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Map; - -@Configuration -public class DataRepositoryConfig { - - @Bean - public DistanceMatrixDataRepositoryRegistry distanceMatrixDataRepositoryRegistry(ApplicationContext context) { - return new DistanceMatrixDataRepositoryRegistryImpl(context, Map.of( - DistanceMatrixDataRepositoryId.S3, DistanceMatrixS3DataRepository.class - ), Map.of( - DistanceMatrixDataRepositoryId.S3, DistanceMatrixS3DataRepositorySpecificData.class - )); - } - - @Bean - public IsolateDataDataRepositoryRegistry isolateDataDataRepositoryRegistry(ApplicationContext context) { - return new IsolateDataDataRepositoryRegistryImpl(context, Map.of( - IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepository.class, - IsolateDataDataRepositoryId.PHYLODB, IsolateDataPhyloDBDataRepository.class - - ), Map.of( - IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepositorySpecificData.class, - IsolateDataDataRepositoryId.PHYLODB, IsolateDataPhyloDBDataRepositorySpecificData.class - )); - } - - @Bean - public TreeDataRepositoryRegistry treeDataRepositoryRegistry(ApplicationContext context) { - return new TreeDataRepositoryRegistryImpl(context, Map.of( - TreeDataRepositoryId.S3, TreeS3DataRepository.class, - TreeDataRepositoryId.PHYLODB, TreePhyloDBDataRepository.class - ), Map.of( - TreeDataRepositoryId.S3, TreeS3DataRepositorySpecificData.class, - TreeDataRepositoryId.PHYLODB, TreePhyloDBDataRepositorySpecificData.class - )); - } - - @Bean - public TreeViewDataRepositoryRegistry treeViewDataRepositoryRegistry(ApplicationContext context) { - return new TreeViewDataRepositoryRegistryImpl(context, Map.of( - TreeViewDataRepositoryId.S3, TreeViewS3DataRepository.class, - TreeViewDataRepositoryId.PHYLODB, TreeViewPhyloDBDataRepository.class - ), Map.of( - TreeViewDataRepositoryId.S3, TreeViewS3DataRepositorySpecificData.class, - TreeViewDataRepositoryId.PHYLODB, TreeViewPhyloDBDataRepositorySpecificData.class - )); - } - - @Bean - public TypingDataDataRepositoryRegistry typingDataDataRepositoryRegistry(ApplicationContext context) { - return new TypingDataDataRepositoryRegistryImpl(context, Map.of( - TypingDataDataRepositoryId.S3, TypingDataS3DataRepository.class, - TypingDataDataRepositoryId.PHYLODB, TypingDataPhyloDBDataRepository.class - ), Map.of( - TypingDataDataRepositoryId.S3, TypingDataS3DataRepositorySpecificData.class, - TypingDataDataRepositoryId.PHYLODB, TypingDataPhyloDBDataRepositorySpecificData.class - )); - } -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java index 47633495..8e45db93 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java +++ b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java @@ -81,6 +81,8 @@ public boolean upload(String url, MultipartFile multipartFile) { upload.completionFuture().join(); + // s3Client.listBuckets().join() -> lists all buckets, currently only one with name "phyloviz-web-platform" + return true; } From f771530ec1df6b23b7936c179ddafe86c1ac3156 Mon Sep 17 00:00:00 2001 From: Nyck Date: Mon, 5 Feb 2024 15:09:29 +0000 Subject: [PATCH 3/7] Minor changes to S3FileRepositoryImpl.java. --- .../repository/data/S3FileRepositoryImpl.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java index 8e45db93..3239d34f 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java +++ b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java @@ -28,7 +28,7 @@ @Repository public class S3FileRepositoryImpl implements S3FileRepository { - public static final Region REGION = Region.of("custom"); + public static final Region REGION = Region.EU_WEST_1; // Region.of("custom"); private final String bucketName; private final String objectStorageEndpoint; private final S3AsyncClient s3Client; @@ -37,7 +37,7 @@ public class S3FileRepositoryImpl implements S3FileRepository { public S3FileRepositoryImpl( @Value("${s3.endpoint}") - String objectStorageEndpoint, + String s3endpoint, @Value("${s3.access-key-id}") String accessKeyId, @Value("${s3.secret-access-key}") @@ -45,11 +45,10 @@ public S3FileRepositoryImpl( @Value("${s3.bucket}") String bucketName ) { - AwsBasicCredentials awsCredentials = AwsBasicCredentials.create(accessKeyId, secretAccessKey); - S3AsyncClient newS3Client = S3AsyncClient.builder() - .credentialsProvider(StaticCredentialsProvider.create(awsCredentials)) - .endpointOverride(URI.create(objectStorageEndpoint)) + .forcePathStyle(true) // adding this one + .endpointOverride(URI.create(s3endpoint)) + .credentialsProvider(() -> AwsBasicCredentials.create(accessKeyId, secretAccessKey)) .region(REGION) .build(); @@ -57,7 +56,7 @@ public S3FileRepositoryImpl( this.s3Client = newS3Client; this.bucketName = bucketName; - this.objectStorageEndpoint = objectStorageEndpoint; + this.objectStorageEndpoint = s3endpoint; this.transferManager = S3TransferManager.builder().s3Client(newS3Client).build(); } From a51a1ccbf3884e291dec4eb78a1311b71a2ed930 Mon Sep 17 00:00:00 2001 From: Nyck Date: Wed, 7 Feb 2024 03:16:03 +0000 Subject: [PATCH 4/7] Changes to S3 and file upload. Tested with real S3 from AWS. Working as expected. --- .../repository/data/S3FileRepository.java | 7 ----- .../repository/data/S3FileRepositoryImpl.java | 27 +++++-------------- .../IsolateDataS3DataRepository.java | 2 +- .../TypingDataS3DataRepository.java | 2 +- .../src/main/resources/application-shared.yml | 10 ++++--- 5 files changed, 15 insertions(+), 33 deletions(-) diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepository.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepository.java index 222f0b11..eaff9d62 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepository.java +++ b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepository.java @@ -28,11 +28,4 @@ public interface S3FileRepository { * @return true if the file was deleted successfully, false otherwise */ boolean delete(String url); - - /** - * Get location of the repository. - * - * @return location of the repository - */ - String getLocation(); } diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java index 3239d34f..e5ad8c7f 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java +++ b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java @@ -6,7 +6,6 @@ import org.springframework.stereotype.Repository; import org.springframework.web.multipart.MultipartFile; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; -import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.core.BytesWrapper; import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.async.AsyncResponseTransformer; @@ -28,9 +27,7 @@ @Repository public class S3FileRepositoryImpl implements S3FileRepository { - public static final Region REGION = Region.EU_WEST_1; // Region.of("custom"); private final String bucketName; - private final String objectStorageEndpoint; private final S3AsyncClient s3Client; private final S3TransferManager transferManager; private final ExecutorService executorService = Executors.newCachedThreadPool(); @@ -43,20 +40,21 @@ public S3FileRepositoryImpl( @Value("${s3.secret-access-key}") String secretAccessKey, @Value("${s3.bucket}") - String bucketName + String bucketName, + @Value("${s3.region}") + String region ) { S3AsyncClient newS3Client = S3AsyncClient.builder() - .forcePathStyle(true) // adding this one + .forcePathStyle(true) .endpointOverride(URI.create(s3endpoint)) .credentialsProvider(() -> AwsBasicCredentials.create(accessKeyId, secretAccessKey)) - .region(REGION) + .region(Region.of(region)) .build(); newS3Client.createBucket(r -> r.bucket(bucketName)); this.s3Client = newS3Client; this.bucketName = bucketName; - this.objectStorageEndpoint = s3endpoint; this.transferManager = S3TransferManager.builder().s3Client(newS3Client).build(); } @@ -87,10 +85,7 @@ public boolean upload(String url, MultipartFile multipartFile) { @Override public String download(String url) { - if (!url.startsWith(getLocation())) - throw new IllegalArgumentException("URL does not start with the object storage endpoint"); - - String key = url.substring(getLocation().length()); + String key = url; /*s3Client.listObjectsV2(ListObjectsV2Request.builder().bucket(bucketName).build()) .thenAccept(response -> { @@ -132,21 +127,13 @@ public String download(String url) { @Override public boolean delete(String url) { - if (!url.startsWith(getLocation())) - throw new IllegalArgumentException("URL does not start with the object storage endpoint"); - DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder() .bucket(bucketName) - .key(url.substring(getLocation().length())) + .key(url) .build(); s3Client.deleteObject(deleteObjectRequest); // TODO throw exception if not successful return true; } - - @Override - public String getLocation() { - return objectStorageEndpoint + "/" + bucketName.substring(0, bucketName.length() - 1); - } } diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java index 3a1a521c..d6105eab 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java +++ b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java @@ -20,7 +20,7 @@ public IsolateDataDataRepositorySpecificData uploadIsolateData(String projectId, s3FileRepository.upload(url, multipartFile); - return new IsolateDataS3DataRepositorySpecificData(s3FileRepository.getLocation() + "/" + url, multipartFile.getOriginalFilename()); + return new IsolateDataS3DataRepositorySpecificData(url, multipartFile.getOriginalFilename()); } @Override diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/TypingDataS3DataRepository.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/TypingDataS3DataRepository.java index ce802019..2b6a566f 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/TypingDataS3DataRepository.java +++ b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/TypingDataS3DataRepository.java @@ -21,7 +21,7 @@ public TypingDataDataRepositorySpecificData uploadTypingData(String projectId, S s3FileRepository.upload(url, multipartFile); - return new TypingDataS3DataRepositorySpecificData(s3FileRepository.getLocation() + "/" + url, multipartFile.getOriginalFilename()); + return new TypingDataS3DataRepositorySpecificData(url, multipartFile.getOriginalFilename()); } @Override diff --git a/src/backend/microservices/shared/src/main/resources/application-shared.yml b/src/backend/microservices/shared/src/main/resources/application-shared.yml index 11f9cf83..ac37e9b5 100644 --- a/src/backend/microservices/shared/src/main/resources/application-shared.yml +++ b/src/backend/microservices/shared/src/main/resources/application-shared.yml @@ -1,8 +1,10 @@ s3: - access-key-id: AKIAIOSFODNN7EXAMPLE - secret-access-key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - bucket: phyloviz-web-platform/ - endpoint: http://localhost:9444 + access-key-id: SETUP + secret-access-key: SETUP + bucket: phyloviz-web-platform + region: eu-west-3 + endpoint: SETUP + spring: data: From d797e48ed22b89704c75a3c8a0faf36cc77406f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jesus?= Date: Wed, 7 Feb 2024 14:39:30 +0000 Subject: [PATCH 5/7] Removed microservices, phylodb and s3ninja docker compose. Updated docker-compose.yml. Created Dockerfile for pwp. --- README.md | 6 +- docker-compose.yml | 39 +- docs/CONTRIBUTING.md | 45 +- docs/postman-collection.json | 8486 ++++++++--------- .../microservices/administration/Dockerfile | 4 - .../microservices/administration/build.gradle | 41 - ...AdministrationMicroserviceApplication.java | 20 - .../config/AdministrationConfig.java | 14 - .../projects/ProjectsController.java | 137 - .../projects/datasets/DatasetsController.java | 177 - .../DistanceMatricesController.java | 69 - .../tree_views/TreeViewsController.java | 69 - .../datasets/trees/TreesController.java | 69 - .../projects/files/FilesController.java | 112 - .../http/models/datasets/DatasetModel.java | 34 - .../CreateDatasetInputModel.java | 12 - .../CreateDatasetOutputModel.java | 15 - .../DeleteDatasetOutputModel.java | 11 - .../get_dataset/GetDatasetOutputModel.java | 10 - .../get_datasets/GetDatasetsOutputModel.java | 16 - .../SetIsolateDataOfDatasetInputModel.java | 9 - .../SetIsolateDataOfDatasetOutputModel.java | 15 - .../UpdateDatasetInputModel.java | 9 - .../UpdateDatasetOutputModel.java | 23 - .../DistanceMatrixOutputModel.java | 24 - ...stanceMatrixSourceFunctionOutputModel.java | 13 - .../DistanceMatrixSourceOutputModel.java | 4 - .../DeleteDistanceMatrixOutputModel.java | 12 - .../UpdateDistanceMatrixInputModel.java | 8 - .../UpdateDistanceMatrixOutputModel.java | 17 - .../http/models/files/FilesModel.java | 19 - .../files/isolate_data/IsolateDataModel.java | 19 - .../DeleteIsolateDataOutputModel.java | 11 - .../UpdateIsolateDataInputModel.java | 8 - .../UpdateIsolateDataOutputModel.java | 17 - .../files/typing_data/TypingDataModel.java | 15 - .../DeleteTypingDataOutputModel.java | 11 - .../UpdateTypingDataInputModel.java | 8 - .../UpdateTypingDataOutputModel.java | 17 - .../http/models/projects/ProjectModel.java | 27 - .../CreateProjectInputModel.java | 9 - .../CreateProjectOutputModel.java | 13 - .../DeleteProjectOutputModel.java | 10 - .../get_project/GetProjectOutputModel.java | 10 - .../get_projects/GetProjectsOutputModel.java | 15 - .../get_projects/GetProjectsProjectModel.java | 17 - .../UpdateProjectInputModel.java | 9 - .../UpdateProjectOutputModel.java | 23 - .../tree_views/TreeViewOutputModel.java | 19 - .../tree_views/TreeViewSourceOutputModel.java | 13 - .../DeleteTreeViewOutputModel.java | 12 - .../UpdateTreeViewInputModel.java | 8 - .../UpdateTreeViewOutputModel.java | 17 - .../http/models/trees/TreeOutputModel.java | 32 - ...rceAlgorithmDistanceMatrixOutputModel.java | 17 - ...eSourceAlgorithmTypingDataOutputModel.java | 17 - .../trees/TreeSourceFileOutputModel.java | 15 - .../models/trees/TreeSourceOutputModel.java | 4 - .../delete_tree/DeleteTreeOutputModel.java | 12 - .../UpdateTreeInputModel.java | 8 - .../UpdateTreeOutputModel.java | 17 - .../AdministrationExceptionHandler.java | 52 - .../DistanceMatrixSourceInfo.java | 4 - .../service/dtos/files/FilesInfo.java | 13 - .../service/dtos/tree/TreeSourceInfo.java | 5 - .../src/main/resources/application.yml | 10 - ...istrationMicroserviceApplicationTests.java | 12 - .../projects/ProjectsControllerTests.java | 47 - .../service/ProjectsServiceTests.java | 320 - .../service/dataset/DatasetServiceTests.java | 562 -- .../DistanceMatrixServiceTests.java | 336 - .../dataset/tree/TreeServiceTests.java | 346 - .../tree_view/TreeViewServiceTests.java | 298 - .../service/file/IsolateDataServiceTests.java | 223 - .../service/file/TypingDataServiceTests.java | 228 - .../microservices/compute/build.gradle | 45 - .../ComputeMicroserviceApplication.java | 20 - .../pwp/compute/config/ComputeConfig.java | 132 - .../http/controllers/ComputeController.java | 123 - .../CreateWorkflowInputModel.java | 11 - .../CreateWorkflowOutputModel.java | 13 - .../get_workflow/GetWorkflowOutputModel.java | 30 - .../GetWorkflowStatusOutputModel.java | 28 - .../GetWorkflowsOutputModel.java | 16 - .../pipeline/ComputeExceptionHandler.java | 38 - .../tool_template/ToolTemplateRepository.java | 12 - .../AccessTemplateDeserializer.java | 38 - .../converters/AccessTemplateSerializer.java | 30 - ...aseInsensitiveEnumDeserializerFactory.java | 36 - .../CaseInsensitiveEnumSerializer.java | 12 - .../documents/GeneralTemplate.java | 21 - .../tool_template/documents/ToolTemplate.java | 41 - .../documents/ToolTemplateData.java | 78 - .../access/AccessDetailsTemplate.java | 7 - .../documents/access/AccessTemplate.java | 35 - .../documents/access/AccessTypeTemplate.java | 22 - .../access/api/ApiAccessDetailsTemplate.java | 21 - .../library/DockerAutoRemoveTemplate.java | 17 - .../access/library/DockerVolumeTemplate.java | 45 - .../library/LibraryAccessDetailsTemplate.java | 63 - .../documents/library/CommandTemplate.java | 31 - .../documents/library/LibraryTemplate.java | 30 - .../mongo/ToolTemplateMongoRepository.java | 13 - .../mongo/ToolTemplateRepositoryMongo.java | 19 - .../WorkflowInstanceRepository.java | 21 - .../documents/WorkflowInstance.java | 33 - .../documents/WorkflowStatus.java | 7 - .../WorkflowInstanceMongoRepository.java | 20 - .../WorkflowInstanceRepositoryMongo.java | 41 - .../WorkflowTemplateRepository.java | 26 - .../documents/ActionTemplate.java | 21 - .../documents/TaskTemplate.java | 29 - .../documents/WorkflowTemplate.java | 84 - .../documents/WorkflowTemplateData.java | 78 - .../WorkflowTemplateArgumentProperties.java | 39 - .../WorkflowTemplateArgumentType.java | 13 - .../WorkflowTemplateMongoRepository.java | 19 - .../WorkflowTemplateRepositoryMongo.java | 25 - .../pwp/compute/service/ComputeService.java | 77 - .../compute/service/ComputeServiceImpl.java | 430 - .../create_workflow/CreateWorkflowOutput.java | 8 - .../dtos/get_workflow/GetWorkflowOutput.java | 18 - .../get_workflow/GetWorkflowStatusOutput.java | 17 - .../DatasetDoesNotExistException.java | 7 - .../DistanceMatrixDoesNotExistException.java | 7 - .../exceptions/InvalidWorkflowException.java | 7 - .../ProjectDoesNotExistException.java | 7 - .../service/exceptions/TemplateNotFound.java | 7 - .../exceptions/TreeDoesNotExistException.java | 7 - .../TreeViewDoesNotExistException.java | 7 - .../WorkflowInstanceNotFoundException.java | 7 - ...orkflowTemplateConfigurationException.java | 7 - .../service/flowviz/FLOWViZClient.java | 39 - .../service/flowviz/FLOWViZClientBuilder.java | 51 - .../service/flowviz/FLOWViZHttpService.java | 259 - .../flowviz/adapters/AccessDeserializer.java | 65 - .../flowviz/adapters/AccessSerializer.java | 34 - .../adapters/LocalDateTimeDeserializer.java | 24 - .../adapters/LocalDateTimeSerializer.java | 23 - .../exceptions/AuthenticationException.java | 7 - .../ConnectionRefusedException.java | 9 - .../UnexpectedResponseException.java | 14 - .../service/flowviz/identity/Credentials.java | 9 - .../service/flowviz/identity/Token.java | 10 - .../models/get_workflow/AirflowData.java | 11 - .../get_workflow/AirflowWorkflowStatus.java | 13 - .../get_workflow/GetWorkflowResponse.java | 9 - .../models/get_workflow/WorkflowState.java | 15 - .../service/flowviz/models/tool/General.java | 13 - .../service/flowviz/models/tool/Tool.java | 19 - .../flowviz/models/tool/ToolService.java | 20 - .../flowviz/models/tool/access/Access.java | 11 - .../models/tool/access/AccessDetails.java | 4 - .../models/tool/access/AccessType.java | 12 - .../tool/access/api/ApiAccessDetails.java | 14 - .../tool/access/library/DockerAutoRemove.java | 16 - .../tool/access/library/DockerVolume.java | 17 - .../access/library/LibraryAccessDetails.java | 29 - .../tool/access/library/VolumeType.java | 12 - .../flowviz/models/tool/library/Command.java | 20 - .../flowviz/models/tool/library/Library.java | 19 - .../workflow/GetWorkflowTaskLogResponse.java | 8 - .../flowviz/models/workflow/Workflow.java | 28 - .../models/workflow/WorkflowService.java | 25 - .../flowviz/models/workflow/tasks/Action.java | 10 - .../flowviz/models/workflow/tasks/Task.java | 19 - .../src/main/resources/application.yml | 15 - .../flowviz/FlowVizClientIntegrationTest.java | 139 - .../microservices/file-transfer/Dockerfile | 4 - .../microservices/file-transfer/build.gradle | 39 - .../FileTransferMicroserviceApplication.java | 20 - .../config/DataRepositoryConfig.java | 92 - .../config/FileTransferConfig.java | 13 - .../controllers/FileTransferController.java | 119 - .../UploadIsolateDataOutputModel.java | 15 - .../UploadTypingDataOutputModel.java | 15 - .../FileTransferExceptionHandler.java | 32 - .../service/FileTransferService.java | 52 - .../service/FileTransferServiceImpl.java | 162 - .../src/main/resources/application.yml | 20 - .../microservices/{compute => pwp}/Dockerfile | 2 +- src/backend/microservices/pwp/build.gradle | 45 +- .../pwp/config/DataRepositoryConfig.java | 33 +- .../org/phyloviz/pwp/config/PWPConfig.java | 3 +- .../controllers/VisualizationController.java | 12 +- .../get_tree_view/GetTreeViewOutputModel.java | 2 +- .../GetIsolateDataRowsOutputModel.java | 2 +- .../SaveTreeViewInputModel.java | 2 +- .../GetTypingDataProfilesOutputModel.java | 2 +- .../pwp/service/VisualizationServiceImpl.java | 2 +- .../pwp/src/main/resources/application.yml | 6 +- .../microservices/shared-phylodb/build.gradle | 36 - .../shared-phylodb/libs/phylodb-1.0.0.jar | Bin 273217 -> 0 bytes .../ResourceServerSharedPhylodbConfig.java | 13 - .../IsolateDataPhyloDBDataRepository.java | 65 - .../tree/TreePhyloDBDataRepository.java | 23 - .../TreeViewPhyloDBDataRepository.java | 129 - .../TypingDataPhyloDBDataRepository.java | 80 - .../pwp/shared/config/MongoConfig.java | 7 +- .../handlers/SharedExceptionHandler.java | 11 +- .../src/main/resources/application-shared.yml | 7 +- .../microservices/visualization/Dockerfile | 4 - .../microservices/visualization/build.gradle | 41 - .../VisualizationMicroserviceApplication.java | 21 - .../config/VisualizationConfig.java | 14 - .../controllers/VisualizationController.java | 211 - .../http/models/get_tree_view/EdgeModel.java | 17 - .../get_tree_view/GetTreeViewOutputModel.java | 29 - .../http/models/get_tree_view/NodeModel.java | 28 - .../isolate_data/IsolateDataRowModel.java | 22 - .../GetIsolateDataRowsOutputModel.java | 18 - .../GetIsolateDataKeysOutputModel.java | 13 - .../SaveTreeViewInputModel.java | 20 - .../SaveTreeViewOutputModel.java | 20 - .../save_tree_view/TransformationsModel.java | 49 - .../typing_data/TypingDataProfileModel.java | 20 - .../GetTypingDataProfilesOutputModel.java | 21 - .../GetTypingDataSchemaOutputModel.java | 20 - .../VisualizationExceptionHandler.java | 28 - .../service/VisualizationService.java | 108 - .../service/VisualizationServiceImpl.java | 276 - .../exceptions/IndexingNeededException.java | 7 - .../src/main/resources/application.yml | 17 - ...alizationMicroserviceApplicationTests.java | 11 - src/backend/settings.gradle | 2 - test/.env | 1 - test/docker-compose.yml | 9 - 227 files changed, 4331 insertions(+), 13324 deletions(-) delete mode 100644 src/backend/microservices/administration/Dockerfile delete mode 100644 src/backend/microservices/administration/build.gradle delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/AdministrationMicroserviceApplication.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/config/AdministrationConfig.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/ProjectsController.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/DatasetsController.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/tree_views/TreeViewsController.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/trees/TreesController.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/files/FilesController.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/DatasetModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/create_dataset/CreateDatasetInputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/create_dataset/CreateDatasetOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/get_dataset/GetDatasetOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/get_datasets/GetDatasetsOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/update_dataset/UpdateDatasetInputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/DistanceMatrixOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/FilesModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/IsolateDataModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/TypingDataModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/ProjectModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/create_project/CreateProjectInputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/create_project/CreateProjectOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/delete_project/DeleteProjectOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/get_project/GetProjectOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/get_projects/GetProjectsOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/get_projects/GetProjectsProjectModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/update_project/UpdateProjectInputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/update_project/UpdateProjectOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/TreeViewOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/TreeViewSourceOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceFileOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/delete_tree/DeleteTreeOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/update_tree_view/UpdateTreeInputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/update_tree_view/UpdateTreeOutputModel.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/pipeline/AdministrationExceptionHandler.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/FilesInfo.java delete mode 100644 src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceInfo.java delete mode 100644 src/backend/microservices/administration/src/main/resources/application.yml delete mode 100644 src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/AdministrationMicroserviceApplicationTests.java delete mode 100644 src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/http/controllers/projects/ProjectsControllerTests.java delete mode 100644 src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/ProjectsServiceTests.java delete mode 100644 src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/DatasetServiceTests.java delete mode 100644 src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/distance_matrix/DistanceMatrixServiceTests.java delete mode 100644 src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/tree/TreeServiceTests.java delete mode 100644 src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/tree_view/TreeViewServiceTests.java delete mode 100644 src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/file/IsolateDataServiceTests.java delete mode 100644 src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/file/TypingDataServiceTests.java delete mode 100644 src/backend/microservices/compute/build.gradle delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/ComputeMicroserviceApplication.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/config/ComputeConfig.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/controllers/ComputeController.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/create_workflow/CreateWorkflowInputModel.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/create_workflow/CreateWorkflowOutputModel.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/get_workflow/GetWorkflowOutputModel.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/get_workflows/GetWorkflowsOutputModel.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/pipeline/ComputeExceptionHandler.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/ToolTemplateRepository.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/GeneralTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/ToolTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/ToolTemplateData.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/ActionTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/TaskTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/ComputeService.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/ComputeServiceImpl.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/dtos/create_workflow/CreateWorkflowOutput.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/dtos/get_workflow/GetWorkflowOutput.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/dtos/get_workflow/GetWorkflowStatusOutput.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/DatasetDoesNotExistException.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/DistanceMatrixDoesNotExistException.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/InvalidWorkflowException.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/ProjectDoesNotExistException.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/TemplateNotFound.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/TreeDoesNotExistException.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/TreeViewDoesNotExistException.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/WorkflowInstanceNotFoundException.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/WorkflowTemplateConfigurationException.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/FLOWViZClient.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/FLOWViZClientBuilder.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/FLOWViZHttpService.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/AccessDeserializer.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/AccessSerializer.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/LocalDateTimeDeserializer.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/LocalDateTimeSerializer.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/exceptions/AuthenticationException.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/exceptions/ConnectionRefusedException.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/exceptions/UnexpectedResponseException.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/identity/Credentials.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/identity/Token.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/AirflowData.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/GetWorkflowResponse.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/WorkflowState.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/General.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/Tool.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/ToolService.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/Access.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/AccessDetails.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/AccessType.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/api/ApiAccessDetails.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/DockerAutoRemove.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/DockerVolume.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/LibraryAccessDetails.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/VolumeType.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/library/Command.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/library/Library.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/Workflow.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/WorkflowService.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/tasks/Action.java delete mode 100644 src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/tasks/Task.java delete mode 100644 src/backend/microservices/compute/src/main/resources/application.yml delete mode 100644 src/backend/microservices/compute/src/test/java/org/phyloviz/pwp/compute/service/flowviz/FlowVizClientIntegrationTest.java delete mode 100644 src/backend/microservices/file-transfer/Dockerfile delete mode 100644 src/backend/microservices/file-transfer/build.gradle delete mode 100644 src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/FileTransferMicroserviceApplication.java delete mode 100644 src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/config/DataRepositoryConfig.java delete mode 100644 src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/config/FileTransferConfig.java delete mode 100644 src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/controllers/FileTransferController.java delete mode 100644 src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/models/isolate_data/UploadIsolateDataOutputModel.java delete mode 100644 src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/models/typing_data/UploadTypingDataOutputModel.java delete mode 100644 src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/pipeline/FileTransferExceptionHandler.java delete mode 100644 src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/service/FileTransferService.java delete mode 100644 src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/service/FileTransferServiceImpl.java delete mode 100644 src/backend/microservices/file-transfer/src/main/resources/application.yml rename src/backend/microservices/{compute => pwp}/Dockerfile (56%) delete mode 100644 src/backend/microservices/shared-phylodb/build.gradle delete mode 100644 src/backend/microservices/shared-phylodb/libs/phylodb-1.0.0.jar delete mode 100644 src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/config/ResourceServerSharedPhylodbConfig.java delete mode 100644 src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/isolate_data/IsolateDataPhyloDBDataRepository.java delete mode 100644 src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/tree/TreePhyloDBDataRepository.java delete mode 100644 src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/tree_view/TreeViewPhyloDBDataRepository.java delete mode 100644 src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/typing_data/TypingDataPhyloDBDataRepository.java delete mode 100644 src/backend/microservices/visualization/Dockerfile delete mode 100644 src/backend/microservices/visualization/build.gradle delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/VisualizationMicroserviceApplication.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/config/VisualizationConfig.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/controllers/VisualizationController.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/get_tree_view/EdgeModel.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/get_tree_view/GetTreeViewOutputModel.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/get_tree_view/NodeModel.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/isolate_data/IsolateDataRowModel.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/save_tree_view/SaveTreeViewInputModel.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/save_tree_view/SaveTreeViewOutputModel.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/save_tree_view/TransformationsModel.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/typing_data/TypingDataProfileModel.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/pipeline/VisualizationExceptionHandler.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/service/VisualizationService.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/service/VisualizationServiceImpl.java delete mode 100644 src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/service/exceptions/IndexingNeededException.java delete mode 100644 src/backend/microservices/visualization/src/main/resources/application.yml delete mode 100644 src/backend/microservices/visualization/src/test/java/org/phyloviz/pwp/visualization/VisualizationMicroserviceApplicationTests.java delete mode 100644 test/.env delete mode 100644 test/docker-compose.yml diff --git a/README.md b/README.md index 8212a03b..5ccf7b6c 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,10 @@ at the forefront of biomedical research. Discover the power and versatility of the PHYLOViZ Web Platform, and unlock new insights into phylogenetic data analysis, by visiting the [PHYLOViZ Web Platform](https://web.phyloviz.net/) website. -To see a demo of the PHYLOViZ Web Platform in action, check out this [video](https://www.youtube.com/watch?v=761A27KgHIY). -It provides an overview of the platform's features and showcases its capabilities for phylogenetic analysis and visualization. +To see a demo of the PHYLOViZ Web Platform in action, check out +this [video](https://www.youtube.com/watch?v=761A27KgHIY). +It provides an overview of the platform's features and showcases its capabilities for phylogenetic analysis and +visualization. --- diff --git a/docker-compose.yml b/docker-compose.yml index 74bffc88..03f99aae 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -74,38 +74,15 @@ services: depends_on: - tool_registry - administration: + pwp: build: - context: ./src/backend/microservices/administration + context: ./src/backend/microservices/pwp dockerfile: Dockerfile ports: - '8088:8088' network_mode: host depends_on: - mongodb - - cache - - compute: - build: - context: ./src/backend/microservices/compute - dockerfile: Dockerfile - ports: - - '8086:8086' - network_mode: host - depends_on: - - mongodb - - cache - - file-transfer: - build: - context: ./src/backend/microservices/file-transfer - dockerfile: Dockerfile - ports: - - '8089:8089' - network_mode: host - depends_on: - - mongodb - - cache gateway: build: @@ -116,18 +93,6 @@ services: network_mode: host depends_on: - mongodb - - cache - - visualization: - build: - context: ./src/backend/microservices/visualization - dockerfile: Dockerfile - ports: - - '8085:8085' - network_mode: host - depends_on: - - mongodb - - cache volumes: keycloak_db_data: diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 4fce725d..4d4ed5de 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -1,6 +1,8 @@ # Contributing to PHYLOViZ Web Platform -Thank you for your interest in contributing to the PHYLOViZ Web Platform! We welcome contributions from the community to help improve and enhance the platform's functionality. This guide will provide you with an overview of the contribution process. +Thank you for your interest in contributing to the PHYLOViZ Web Platform! We welcome contributions from the community to +help improve and enhance the platform's functionality. This guide will provide you with an overview of the contribution +process. ## Table of Contents @@ -16,8 +18,10 @@ Thank you for your interest in contributing to the PHYLOViZ Web Platform! We wel Before you start contributing to the PHYLOViZ Web Platform, please take a moment to review the following guidelines: 1. Familiarize yourself with the project by exploring the documentation, codebase, and existing issues. -2. If you plan to work on a new feature or significant changes, it's recommended to discuss it with the project maintainers beforehand to ensure it aligns with the project's goals and roadmap. -3. Make sure to follow the coding style and conventions used in the project. Adhering to consistent code formatting will make the review process smoother. +2. If you plan to work on a new feature or significant changes, it's recommended to discuss it with the project + maintainers beforehand to ensure it aligns with the project's goals and roadmap. +3. Make sure to follow the coding style and conventions used in the project. Adhering to consistent code formatting will + make the review process smoother. 4. Test your changes thoroughly to ensure they don't introduce any regressions or issues. 5. Document your code updates and any new features or changes you introduce. 6. Respect the existing contributors and maintain a positive and inclusive attitude towards other community members. @@ -37,7 +41,8 @@ To contribute to the PHYLOViZ Web Platform, follow these steps: ## Submitting a Contribution -Once you have made your changes and pushed them to your forked repository, you can submit your contribution by following these steps: +Once you have made your changes and pushed them to your forked repository, you can submit your contribution by following +these steps: 1. Navigate to the original repository on GitHub. 2. Locate the "Pull Requests" tab. @@ -49,36 +54,46 @@ Once you have made your changes and pushed them to your forked repository, you c ## Code Review Process -After submitting a pull request, the project maintainers will review your code and provide feedback. Here's what you can expect during the review process: +After submitting a pull request, the project maintainers will review your code and provide feedback. Here's what you can +expect during the review process: 1. The maintainers will review your code for adherence to coding standards, functionality, and any potential issues. -2. They may request changes or improvements to your code. Please address these requests promptly and make the necessary updates. -3. Once your code meets the project's requirements and standards, it will be approved and merged into the main repository. -4. If there are any conflicts or issues during the review process, maintain an open and collaborative mindset to resolve them. +2. They may request changes or improvements to your code. Please address these requests promptly and make the necessary + updates. +3. Once your code meets the project's requirements and standards, it will be approved and merged into the main + repository. +4. If there are any conflicts or issues during the review process, maintain an open and collaborative mindset to resolve + them. ## Community Guidelines To ensure a positive and inclusive community environment, we kindly request that you adhere to the following guidelines: -1. Treat all community members with respect and courtesy. Avoid any form of harassment, discrimination, or offensive behavior. +1. Treat all community members with respect and courtesy. Avoid any form of harassment, discrimination, or offensive + behavior. 2. Be considerate of others' opinions and perspectives, even if they differ from your own. 3. Provide constructive feedback and suggestions to help improve the project. 4. Help others in the community by sharing your knowledge and expertise. 5. Avoid spamming, advertising, or promoting unrelated content within the community channels. -6. If you encounter any issues or have concerns about the project or community, reach out to the project maintainers privately. +6. If you encounter any issues or have concerns about the project or community, reach out to the project maintainers + privately. ## Contact Information -If you have any questions, concerns, or need assistance, you can reach out to the authors of the PHYLOViZ Web Platform through the following emails: +If you have any questions, concerns, or need assistance, you can reach out to the authors of the PHYLOViZ Web Platform +through the following emails: - André Jesus: [andre.jesus.pilar@gmail.com](mailto:andre.jesus.pilar@gmail.com) - André Páscoa: [andre@pascoa.org](mailto:andre@pascoa.org) - Nyckollas Brandão: [nyckbrandao1236@gmail.com](mailto:nyckbrandao1236@gmail.com) -Please feel free to contact any of the authors if you have any inquiries related to the PHYLOViZ Web Platform. They will be happy to assist you. +Please feel free to contact any of the authors if you have any inquiries related to the PHYLOViZ Web Platform. They will +be happy to assist you. -If you encounter any bugs, have feature requests, or would like to report any issues, please visit the [Issues](https://github.com/phyloviz/phyloviz-web-platform/issues) section -on GitHub and create a new issue. +If you encounter any bugs, have feature requests, or would like to report any issues, please visit +the [Issues](https://github.com/phyloviz/phyloviz-web-platform/issues) section +on GitHub and create a new issue. Your feedback and contributions are valuable to us, and we appreciate your help in improving the platform. -We appreciate your interest and contribution to the PHYLOViZ Web Platform. Thank you for helping us improve the platform and make it even better for the community! +We appreciate your interest and contribution to the PHYLOViZ Web Platform. Thank you for helping us improve the platform +and make it even better for the community! diff --git a/docs/postman-collection.json b/docs/postman-collection.json index 8137f299..78f35259 100644 --- a/docs/postman-collection.json +++ b/docs/postman-collection.json @@ -1,4245 +1,4245 @@ { - "info": { - "_postman_id": "669bc3ed-309e-429a-aab8-86f3de1b41a7", - "name": "PHYLOViZ Web Platform", - "description": "# Introduction\nWhat does your API do?\n\n# Overview\nThings that the developers should know about\n\n# Authentication\nWhat is the preferred way of using the API?\n\n# Error Codes\nWhat errors and status codes can a user expect?\n\n# Rate limit\nIs there a limit to the number of requests a user can send?", - "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", - "_exporter_id": "18351569", - "_collection_link": "https://bodybuilders.postman.co/workspace/PHYLOViZ-Workspace~55a4beb2-3ca7-4a35-9241-0b435664dd00/collection/18351569-669bc3ed-309e-429a-aab8-86f3de1b41a7?action=share&creator=18351569&source=collection_link" - }, - "item": [ - { - "name": "PHYLOViZ Web Platform", - "item": [ - { - "name": "Administration", - "item": [ - { - "name": "Projects", - "item": [ - { - "name": "Datasets", - "item": [ - { - "name": "Distance Matrices", - "item": [ - { - "name": "Delete Distance Matrix", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/distance-matrices/:distanceMatrixId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "distance-matrices", - ":distanceMatrixId" - ], - "variable": [ - { - "key": "projectId", - "value": "6432998e0396ab6743cb8724" - }, - { - "key": "datasetId", - "value": "64329eb2768a95379da3424f" - }, - { - "key": "distanceMatrixId", - "value": null - } - ] - } - }, - "response": [ - { - "name": "Delete Distance Matrix", - "originalRequest": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/distance-matrices/:distanceMatrixId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "distance-matrices", - ":distanceMatrixId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "datasetId", - "value": null - }, - { - "key": "distanceMatrixId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\r\n \"projectId\": \"\",\r\n \"datasetId\": \"\",\r\n \"distanceMatrixId\": \"\"\r\n}" - } - ] - }, - { - "name": "Update Distance Matrix", - "request": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"DistanceMatrix1\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/distance-matrices/:distanceMatrixId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "distance-matrices", - ":distanceMatrixId" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - }, - { - "key": "datasetId", - "value": "6446babf22cde24152e769b9" - }, - { - "key": "distanceMatrixId", - "value": "" - } - ] - } - }, - "response": [ - { - "name": "Update Distance Matrix", - "originalRequest": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"DistanceMatrix1\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/distance-matrices/:distanceMatrixId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "distance-matrices", - ":distanceMatrixId" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - }, - { - "key": "datasetId", - "value": "6446babf22cde24152e769b9" - }, - { - "key": "distanceMatrixId", - "value": "" - } - ] - } - }, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"name\": \"Changed from 'Initial name' to 'DistanceMatrix1'\"\n}" - } - ] - } - ] - }, - { - "name": "Trees", - "item": [ - { - "name": "Delete Tree", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/trees/:treeId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "trees", - ":treeId" - ], - "variable": [ - { - "key": "projectId", - "value": "6432998e0396ab6743cb8724" - }, - { - "key": "datasetId", - "value": "64329eb2768a95379da3424f" - }, - { - "key": "treeId", - "value": null - } - ] - } - }, - "response": [ - { - "name": "Delete tree", - "originalRequest": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/trees/:treeId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "trees", - ":treeId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "datasetId", - "value": null - }, - { - "key": "treeId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"projectId\": \"\",\n \"datasetId\": \"\",\n \"treeId\": \"\"\n}" - } - ] - }, - { - "name": "Update Tree", - "request": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"Tree1\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/trees/:treeId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "trees", - ":treeId" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - }, - { - "key": "datasetId", - "value": "6446babf22cde24152e769b9" - }, - { - "key": "treeId", - "value": null - } - ] - } - }, - "response": [ - { - "name": "Update Tree", - "originalRequest": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"Tree1\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/trees/:treeId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "trees", - ":treeId" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - }, - { - "key": "datasetId", - "value": "6446babf22cde24152e769b9" - }, - { - "key": "treeId", - "value": null - } - ] - } - }, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"name\": \"Changed from 'Initial name' to 'Tree1'\"\n}" - } - ] - } - ] - }, - { - "name": "Tree Views", - "item": [ - { - "name": "Delete Tree View", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/tree-views/:treeViewId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "tree-views", - ":treeViewId" - ], - "variable": [ - { - "key": "projectId", - "value": "6432998e0396ab6743cb8724" - }, - { - "key": "datasetId", - "value": "64329eb2768a95379da3424f" - }, - { - "key": "treeViewId", - "value": null - } - ] - } - }, - "response": [ - { - "name": "Delete Tree Views", - "originalRequest": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/tree-views/:treeViewId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "tree-views", - ":treeViewId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "datasetId", - "value": null - }, - { - "key": "treeViewId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"projectId\": \"\",\n \"datasetId\": \"\",\n \"treeViewId\": \"\"\n}" - } - ] - }, - { - "name": "Update Tree View", - "request": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"TreeView1\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/tree-views/:treeViewId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "tree-views", - ":treeViewId" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - }, - { - "key": "datasetId", - "value": "6446babf22cde24152e769b9" - }, - { - "key": "treeViewId", - "value": null - } - ] - } - }, - "response": [ - { - "name": "Update Tree View", - "originalRequest": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"TreeView1\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/tree-views/:treeViewId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "tree-views", - ":treeViewId" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - }, - { - "key": "datasetId", - "value": "6446babf22cde24152e769b9" - }, - { - "key": "treeViewId", - "value": null - } - ] - } - }, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"name\": \"Changed from 'Initial name' to 'TreeView1'\"\n}" - } - ] - } - ] - }, - { - "name": "Create Dataset", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"Dataset1\",\r\n \"description\": \"My first dataset.\",\r\n \"typingDataId\": \"c2bf49a6-1140-4fa6-9d4c-386f6ba3dda6\",\r\n \"isolateDataId\": null,\r\n \"isolateDataKey\": null\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets" - ], - "variable": [ - { - "key": "projectId", - "value": "646d1b1f23578f3f7d3d71b3" - } - ] - } - }, - "response": [ - { - "name": "Create Dataset", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"\",\r\n \"description\": \"\",\r\n \"typingDataId\": \"\",\r\n \"isolateDataId\": \"\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets" - ], - "variable": [ - { - "key": "projectId", - "value": null - } - ] - } - }, - "status": "Created", - "code": 201, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\r\n \"projectId\": \"\",\r\n \"datasetId\": \"\"\r\n}" - } - ] - }, - { - "name": "Get Dataset", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId" - ], - "variable": [ - { - "key": "projectId", - "value": "645d60417f92b75799a8c86d" - }, - { - "key": "datasetId", - "value": "645d60a27f92b75799a8c86e" - } - ] - } - }, - "response": [ - { - "name": "Get Dataset", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "datasetId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\r\n \"datasetId\": \"\",\r\n \"name\": \"\",\r\n \"description\": \"\",\r\n \"typingDataId\": \"\",\r\n \"isolateDataId\": \"\",\r\n \"distanceMatrices\": [\r\n {\r\n \"distanceMatrixId\": \"\",\r\n \"name\": \"Hamming Distance\",\r\n \"sourceType\": \"function\",\r\n \"source\": {\r\n \"function\": \"hamming\"\r\n }\r\n }\r\n ],\r\n \"trees\": [\r\n {\r\n \"treeId\": \"\",\r\n \"name\": \"GoeBurst\",\r\n \"sourceType\": \"algorithmDistanceMatrix\",\r\n \"source\": {\r\n \"algorithm\": \"goeburst\",\r\n \"distanceMatrixId\": \"\",\r\n \"parameters\": \"\"\r\n }\r\n },\r\n {\r\n \"treeId\": \"\",\r\n \"name\": \"GoeBurst2\",\r\n \"sourceType\": \"algorithmTypingData\",\r\n \"source\": {\r\n \"algorithm\": \"goeburst\",\r\n \"typingDataId\": \"\",\r\n \"parameters\": \"\"\r\n }\r\n },\r\n {\r\n \"treeId\": \"\",\r\n \"name\": \"Newick002\",\r\n \"sourceType\": \"file\",\r\n \"source\": {\r\n \"fileType\": \"newick\",\r\n \"fileName\": \"newick002.newick\"\r\n }\r\n }\r\n ],\r\n \"treeViews\": [\r\n {\r\n \"treeViewId\": \"\",\r\n \"name\": \"Radial\",\r\n \"layout\": \"radial\",\r\n \"source\": {\r\n \"treeId\": \"\",\r\n \"typingDataId\": null,\r\n \"isolateDataId\": null\r\n }\r\n }\r\n ]\r\n}" - } - ] - }, - { - "name": "Delete Dataset", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId" - ], - "variable": [ - { - "key": "projectId", - "value": "645e79ec83e3c229ff95fe03" - }, - { - "key": "datasetId", - "value": "645e7a5f83e3c229ff95fe04" - } - ] - } - }, - "response": [ - { - "name": "Delete Dataset", - "originalRequest": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "datasetId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"projectId\": \"\",\n \"datasetId\": \"\"\n}" - } - ] - }, - { - "name": "Get Datasets", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets" - ], - "variable": [ - { - "key": "projectId", - "value": "644a8978b8e2b111f08b8a36" - } - ] - } - }, - "response": [ - { - "name": "Get Datasets", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets" - ], - "variable": [ - { - "key": "projectId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"datasets\": [\n {\n \"datasetId\": \"\",\n \"name\": \"\",\n \"description\": \"\",\n \"typingDataId\": \"\",\n \"isolateDataId\": \"\",\n \"distanceMatrices\": [\n {\n \"distanceMatrixId\": \"\",\n \"name\": \"Hamming Distance\",\n \"sourceType\": \"function\",\n \"source\": {\n \"function\": \"hamming\"\n }\n }\n ],\n \"trees\": [\n {\n \"treeId\": \"\",\n \"name\": \"GoeBurst\",\n \"sourceType\": \"algorithmDistanceMatrix\",\n \"source\": {\n \"algorithm\": \"goeburst\",\n \"distanceMatrixId\": \"\",\n \"parameters\": \"\"\n }\n },\n {\n \"treeId\": \"\",\n \"name\": \"GoeBurst2\",\n \"sourceType\": \"algorithmTypingData\",\n \"source\": {\n \"algorithm\": \"goeburst\",\n \"parameters\": \"\"\n }\n },\n {\n \"treeId\": \"\",\n \"name\": \"Newick002\",\n \"sourceType\": \"file\",\n \"source\": {\n \"fileType\": \"newick\",\n \"fileName\": \"newick002.newick\"\n }\n }\n ],\n \"treeViews\": [\n {\n \"treeViewId\": \"\",\n \"name\": \"Radial\",\n \"layout\": \"radial\",\n \"source\": {\n \"treeId\": \"\",\n \"typingDataId\": null,\n \"isolateDataId\": null\n }\n }\n ]\n }\n ]\n}" - } - ] - }, - { - "name": "Update Dataset", - "request": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"Dataset1\",\r\n \"description\": \"My first dataset.\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - }, - { - "key": "datasetId", - "value": "6446babf22cde24152e769b9" - } - ] - } - }, - "response": [ - { - "name": "Update Dataset", - "originalRequest": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"Dataset1\",\r\n \"description\": \"My first dataset.\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - }, - { - "key": "datasetId", - "value": "6446babf22cde24152e769b9" - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "X-Content-Type-Options", - "value": "nosniff" - }, - { - "key": "X-XSS-Protection", - "value": "0" - }, - { - "key": "Cache-Control", - "value": "no-cache, no-store, max-age=0, must-revalidate" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Expires", - "value": "0" - }, - { - "key": "X-Frame-Options", - "value": "DENY" - }, - { - "key": "Content-Type", - "value": "application/json" - }, - { - "key": "Transfer-Encoding", - "value": "chunked" - }, - { - "key": "Date", - "value": "Tue, 25 Apr 2023 13:42:54 GMT" - }, - { - "key": "Keep-Alive", - "value": "timeout=60" - }, - { - "key": "Connection", - "value": "keep-alive" - } - ], - "cookie": [], - "body": "{\n \"name\": \"Changed from 'Initial name' to 'Dataset1'\",\n \"description\": \"Changed from 'Initial description.' to 'My first dataset.'\"\n}" - } - ] - }, - { - "name": "Set Isolate Data of Dataset", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"isolateDataId\": \"8021deed-bbad-4225-9d61-e9db08d78a09\",\r\n \"isolateDataKey\": \"ST (MLST)\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/isolateData", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "isolateData" - ], - "variable": [ - { - "key": "projectId", - "value": "646d1b1f23578f3f7d3d71b3" - }, - { - "key": "datasetId", - "value": "646d1bf223578f3f7d3d71b4" - } - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Files", - "item": [ - { - "name": "Delete Typing Data File", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/files/typing-data/:typingDataId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "typing-data", - ":typingDataId" - ], - "variable": [ - { - "key": "projectId", - "value": "646c85b82c91be6b2c4248f8" - }, - { - "key": "typingDataId", - "value": "85ed24e2-e0dc-44cd-9593-7ac8de0c458f" - } - ] - } - }, - "response": [ - { - "name": "Delete Typing Data File", - "originalRequest": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/files/typing-data/:typingDataId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "typing-data", - ":typingDataId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "typingDataId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"projectId\": \"\",\n \"typingDataId\": \"\"\n}" - } - ] - }, - { - "name": "Update Typing Data File", - "request": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"TypingData1\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/files/typing-data/:typingDataId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "typing-data", - ":typingDataId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "typingDataId", - "value": null - } - ] - } - }, - "response": [ - { - "name": "Update Typing Data File", - "originalRequest": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"TypingData1\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/files/typing-data/:typingDataId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "typing-data", - ":typingDataId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "typingDataId", - "value": null - } - ] - } - }, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"name\": \"Changed from 'Initial name' to 'TypingData1'\"\n}" - } - ] - }, - { - "name": "Delete Isolate Data File", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/files/isolate-data/:isolateDataId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "isolate-data", - ":isolateDataId" - ], - "variable": [ - { - "key": "projectId", - "value": "645f82c2745395076694ff8c" - }, - { - "key": "isolateDataId", - "value": "fb98ef82-eec5-4378-8684-c12ec93bfb49" - } - ] - } - }, - "response": [ - { - "name": "Delete Isolate Data File", - "originalRequest": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId/files/isolate-data/:isolateDataId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "isolate-data", - ":isolateDataId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "isolateDataId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"projectId\": \"\",\n \"isolateDataId\": \"\"\n}" - } - ] - }, - { - "name": "Update Isolate Data File", - "request": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"IsolateData1\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/files/isolate-data/:isolateDataId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "isolate-data", - ":isolateDataId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "isolateDataId", - "value": null - } - ] - } - }, - "response": [ - { - "name": "Update Isolate Data File", - "originalRequest": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"IsolateData1\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/files/isolate-data/:isolateDataId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "isolate-data", - ":isolateDataId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "isolateDataId", - "value": null - } - ] - } - }, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"name\": \"Changed from 'Initial name' to 'IsolateData1'\"\n}" - } - ] - } - ] - }, - { - "name": "Create Project", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"Good project\",\r\n \"description\": \"Good project\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects" - ] - } - }, - "response": [ - { - "name": "Create Project", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"Project1\",\r\n \"description\": \"My first project.\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects" - ] - } - }, - "status": "Created", - "code": 201, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\r\n \"projectId\": \"0f333f3e-a94b-4464-8c50-5fcc81fa7e27\"\r\n}" - } - ] - }, - { - "name": "Get Project", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId" - ], - "variable": [ - { - "key": "projectId", - "value": "646c85b82c91be6b2c4248f8" - } - ] - } - }, - "response": [ - { - "name": "Get Project", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId" - ], - "variable": [ - { - "key": "projectId", - "value": "646c85b82c91be6b2c4248f8" - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "X-Content-Type-Options", - "value": "nosniff" - }, - { - "key": "X-XSS-Protection", - "value": "0" - }, - { - "key": "Cache-Control", - "value": "no-cache, no-store, max-age=0, must-revalidate" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Expires", - "value": "0" - }, - { - "key": "X-Frame-Options", - "value": "DENY" - }, - { - "key": "Content-Type", - "value": "application/json" - }, - { - "key": "Transfer-Encoding", - "value": "chunked" - }, - { - "key": "Date", - "value": "Mon, 15 May 2023 11:45:24 GMT" - }, - { - "key": "Keep-Alive", - "value": "timeout=60" - }, - { - "key": "Connection", - "value": "keep-alive" - } - ], - "cookie": [], - "body": "{\n \"projectId\": \"645f82c2745395076694ff8c\",\n \"name\": \"Project1\",\n \"description\": \"My test project ;)\",\n \"owner\": \"914cc356-ac86-4ab4-909c-bd02d3776a7b\",\n \"datasets\": [\n {\n \"datasetId\": \"645f82e8745395076694ff8d\",\n \"name\": \"Dataset1\",\n \"description\": \"My first dataset.\",\n \"typingDataId\": \"a6568f92-102e-417d-aff8-703228dfc0a8\",\n \"isolateDataId\": \"3ffc902a-81c5-4656-8608-d7fc40beb267\",\n \"isolateDataKey\": \"ST (MLST)\",\n \"distanceMatrices\": [\n {\n \"distanceMatrixId\": \"1b5d8afa-c00a-494d-bc09-848e3518637a\",\n \"name\": \"Distance Matrix 1b5d8afa-c00a-494d-bc09-848e3518637a\",\n \"sourceType\": \"function\",\n \"source\": {\n \"function\": \"kimura\"\n }\n },\n {\n \"distanceMatrixId\": \"cfb25827-9c31-4a20-b921-372554f62efc\",\n \"name\": \"Distance Matrix cfb25827-9c31-4a20-b921-372554f62efc\",\n \"sourceType\": \"function\",\n \"source\": {\n \"function\": \"grapetree\"\n }\n },\n {\n \"distanceMatrixId\": \"6f60d594-a783-49d3-a586-9b0d8a65e45a\",\n \"name\": \"Distance Matrix 6f60d594-a783-49d3-a586-9b0d8a65e45a\",\n \"sourceType\": \"function\",\n \"source\": {\n \"function\": \"hamming\"\n }\n }\n ],\n \"trees\": [\n {\n \"treeId\": \"197404c5-81ec-4b2a-bba1-8ade5a59bde4\",\n \"name\": \"Tree 197404c5-81ec-4b2a-bba1-8ade5a59bde4\",\n \"sourceType\": \"algorithm_distance_matrix\",\n \"source\": {\n \"algorithm\": \"goeburst\",\n \"distanceMatrixId\": \"6f60d594-a783-49d3-a586-9b0d8a65e45a\",\n \"parameters\": \"{}\"\n }\n }\n ],\n \"treeViews\": [\n {\n \"treeViewId\": \"9ee6a2d5-aded-41de-96c9-35cfb9c54d63\",\n \"name\": \"Tree View 9ee6a2d5-aded-41de-96c9-35cfb9c54d63\",\n \"layout\": \"force-directed\",\n \"source\": {\n \"treeId\": \"197404c5-81ec-4b2a-bba1-8ade5a59bde4\"\n }\n }\n ]\n },\n {\n \"datasetId\": \"646113ebe44dda50e2862f52\",\n \"name\": \"Dataset1\",\n \"description\": \"My first dataset.\",\n \"typingDataId\": \"a6568f92-102e-417d-aff8-703228dfc0a8\",\n \"isolateDataId\": \"3ffc902a-81c5-4656-8608-d7fc40beb267\",\n \"isolateDataKey\": \"ST (MLST)\",\n \"distanceMatrices\": [],\n \"trees\": [],\n \"treeViews\": []\n },\n {\n \"datasetId\": \"646154059361044301f33abb\",\n \"name\": \"Dataset1\",\n \"description\": \"My first dataset.\",\n \"typingDataId\": \"a11f4f07-9b0d-4e10-8118-17780db75bd0\",\n \"isolateDataId\": \"98180023-51df-4bd3-a25e-9befb1b5dce3\",\n \"isolateDataKey\": \"ST (MLST)\",\n \"distanceMatrices\": [],\n \"trees\": [],\n \"treeViews\": []\n }\n ],\n \"files\": {\n \"typingData\": [\n {\n \"typingDataId\": \"a6568f92-102e-417d-aff8-703228dfc0a8\",\n \"name\": \"allele_profiles2.txt\"\n },\n {\n \"typingDataId\": \"a11f4f07-9b0d-4e10-8118-17780db75bd0\",\n \"name\": \"coli_typing2.txt\"\n }\n ],\n \"isolateData\": [\n {\n \"isolateDataId\": \"3ffc902a-81c5-4656-8608-d7fc40beb267\",\n \"name\": \"coli_isolates.txt\",\n \"keys\": [\n \"id\",\n \"isolate\",\n \"aliases\",\n \"country\",\n \"continent\",\n \"region\",\n \"town_or_city\",\n \"year\",\n \"month\",\n \"isolation_date\",\n \"received_date\",\n \"age_yr\",\n \"age_mth\",\n \"sex\",\n \"disease\",\n \"source\",\n \"epidemiology\",\n \"species\",\n \"penner\",\n \"bioproject_accession\",\n \"biosample_accession\",\n \"NCBI_assembly_accession\",\n \"ENA_run_accession\",\n \"private_project\",\n \"comments\",\n \"sender\",\n \"curator\",\n \"date_entered\",\n \"datestamp\",\n \"ST (MLST)\",\n \"clonal_complex (MLST)\"\n ]\n },\n {\n \"isolateDataId\": \"98180023-51df-4bd3-a25e-9befb1b5dce3\",\n \"name\": \"coli_isolates2.txt\",\n \"keys\": [\n \"id\",\n \"isolate\",\n \"aliases\",\n \"country\",\n \"continent\",\n \"region\",\n \"town_or_city\",\n \"year\",\n \"month\",\n \"isolation_date\",\n \"received_date\",\n \"age_yr\",\n \"age_mth\",\n \"sex\",\n \"disease\",\n \"source\",\n \"epidemiology\",\n \"species\",\n \"penner\",\n \"bioproject_accession\",\n \"biosample_accession\",\n \"NCBI_assembly_accession\",\n \"ENA_run_accession\",\n \"private_project\",\n \"comments\",\n \"sender\",\n \"curator\",\n \"date_entered\",\n \"datestamp\",\n \"ST (MLST)\",\n \"clonal_complex (MLST)\"\n ]\n }\n ]\n }\n}" - } - ] - }, - { - "name": "Delete Project", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId" - ], - "variable": [ - { - "key": "projectId", - "value": "644a8978b8e2b111f08b8a36" - } - ] - } - }, - "response": [ - { - "name": "Delete Project", - "originalRequest": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{administration_url}}/projects/:projectId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId" - ], - "variable": [ - { - "key": "projectId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\r\n \"projectId\": \"\"\r\n}" - } - ] - }, - { - "name": "Update Project", - "request": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"Bigger Data Project\",\r\n \"description\": \"This has more data than the first project. More profiles, more isolates.\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId" - ], - "variable": [ - { - "key": "projectId", - "value": "646221333a430f25145cebe7" - } - ] - } - }, - "response": [ - { - "name": "Update Project", - "originalRequest": { - "method": "PATCH", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"Project1\",\r\n \"description\": \"Description for this project.\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "X-Content-Type-Options", - "value": "nosniff" - }, - { - "key": "X-XSS-Protection", - "value": "0" - }, - { - "key": "Cache-Control", - "value": "no-cache, no-store, max-age=0, must-revalidate" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Expires", - "value": "0" - }, - { - "key": "X-Frame-Options", - "value": "DENY" - }, - { - "key": "Content-Type", - "value": "application/json" - }, - { - "key": "Transfer-Encoding", - "value": "chunked" - }, - { - "key": "Date", - "value": "Tue, 25 Apr 2023 13:37:25 GMT" - }, - { - "key": "Keep-Alive", - "value": "timeout=60" - }, - { - "key": "Connection", - "value": "keep-alive" - } - ], - "cookie": [], - "body": "{\n \"name\": \"Changed from 'Initial name' to 'Project1'\",\n \"description\": \"Changed from 'Initial description.' to 'Description for this project.'\"\n}" - } - ] - }, - { - "name": "Get Projects", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{administration_url}}/projects", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects" - ] - } - }, - "response": [ - { - "name": "Get Projects", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{administration_url}}/projects", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects" - ] - } - }, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\r\n \"projects\": [\r\n {\r\n \"projectId\": \"\",\r\n \"name\": \"\",\r\n \"description\": \"\"\r\n }\r\n ]\r\n}" - } - ] - } - ] - } - ] - }, - { - "name": "FileTransfer", - "item": [ - { - "name": "Upload Typing Data File", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "formdata", - "formdata": [ - { - "key": "file", - "type": "file", - "src": "/C:/Users/nyckb/Downloads/coli_typing_6000.txt" - }, - { - "key": "type", - "value": "MLST", - "type": "text" - } - ] - }, - "url": { - "raw": "{{file_transfer_url}}/projects/:projectId/files/typing-data", - "host": [ - "{{file_transfer_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "typing-data" - ], - "variable": [ - { - "key": "projectId", - "value": "646c85b82c91be6b2c4248f8" - } - ] - } - }, - "response": [ - { - "name": "Upload Typing Data", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "formdata", - "formdata": [ - { - "key": "file", - "type": "file", - "src": "/C:/ISEL/6th semester/PFC/README.md" - } - ] - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/files/typing-data", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "typing-data" - ], - "variable": [ - { - "key": "projectId", - "value": null - } - ] - } - }, - "status": "Created", - "code": 201, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"projectId\": \"\",\n \"typingDataId\": \"\"\n}" - } - ] - }, - { - "name": "Download Typing Data File", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{file_transfer_url}}/projects/:projectId/files/typing-data/:typingDataId/file", - "host": [ - "{{file_transfer_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "typing-data", - ":typingDataId", - "file" - ], - "variable": [ - { - "key": "projectId", - "value": "645f82c2745395076694ff8c" - }, - { - "key": "typingDataId", - "value": "a6568f92-102e-417d-aff8-703228dfc0a8" - } - ] - } - }, - "response": [ - { - "name": "Download Typing Data File", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/files/typing-data/:typingDataId/file", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "typing-data", - ":typingDataId", - "file" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "typingDataId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": null, - "header": [ - { - "key": "Content-Type", - "value": "application/octet-stream", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": null - } - ] - }, - { - "name": "Upload Isolate Data File", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "formdata", - "formdata": [ - { - "key": "file", - "type": "file", - "src": "/C:/ISEL/6th semester/PFC/datasets/campylobacter/mlst/coli_isolates_10000.txt" - } - ] - }, - "url": { - "raw": "{{file_transfer_url}}/projects/:projectId/files/isolate-data", - "host": [ - "{{file_transfer_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "isolate-data" - ], - "variable": [ - { - "key": "projectId", - "value": "646d1b1f23578f3f7d3d71b3" - } - ] - } - }, - "response": [ - { - "name": "Upload Isolate Data", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "formdata", - "formdata": [ - { - "key": "file", - "type": "file", - "src": "/C:/ISEL/6th semester/PFC/README.md" - } - ] - }, - "url": { - "raw": "{{administration_url}}/projects/:projectId/files/isolate-data", - "host": [ - "{{administration_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "isolate-data" - ], - "variable": [ - { - "key": "projectId", - "value": null - } - ] - } - }, - "status": "Created", - "code": 201, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"projectId\": \"\",\n \"isolateDataId\": \"\"\n}" - } - ] - }, - { - "name": "Download Isolate Data File", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{file_transfer_url}}/projects/:projectId/files/isolate-data/:isolateDataId/file", - "host": [ - "{{file_transfer_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "isolate-data", - ":isolateDataId", - "file" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "isolateDataId", - "value": null - } - ] - } - }, - "response": [ - { - "name": "Download Isolate Data File", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/files/isolate-data/:isolateDataId/file", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "isolate-data", - ":isolateDataId", - "file" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "isolateDataId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": null, - "header": [ - { - "key": "Content-Type", - "value": "application/octet-stream", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": null - } - ] - } - ] - }, - { - "name": "Compute", - "item": [ - { - "name": "Workflows", - "item": [ - { - "name": "Create Workflow", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"type\": \"create-typing-data-db\",\r\n \"properties\": {\r\n \"typingDataId\": \"0c1faf40-4a39-433a-999a-9d854454843c\"\r\n }\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - } - ] - } - }, - "response": [ - { - "name": "Index Typing Data", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"type\": \"index-typing-data\",\r\n \"properties\": {\r\n \"datasetId\": \"646d24b33f7aaf79d7f17c57\"\r\n }\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows" - ], - "variable": [ - { - "key": "projectId", - "value": "646c85b82c91be6b2c4248f8" - } - ] - } - }, - "status": "Accepted", - "code": 202, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"workflowId\": \"8039f350-e12f-4877-8887-67caa258a133\"\n}" - }, - { - "name": "Index Isolate Data", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"type\": \"index-isolate-data\",\r\n \"properties\": {\r\n \"datasetId\": \"646d1bf223578f3f7d3d71b4\"\r\n }\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows" - ], - "variable": [ - { - "key": "projectId", - "value": "646d1b1f23578f3f7d3d71b3" - } - ] - } - }, - "status": "Accepted", - "code": 202, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"workflowId\": \"8039f350-e12f-4877-8887-67caa258a133\"\n}" - }, - { - "name": "Compute Tree View", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"type\": \"compute-tree-view\",\r\n \"properties\": {\r\n \"datasetId\": \"646d1bf223578f3f7d3d71b4\",\r\n \"treeId\": \"d90534c5-1d38-4033-88ba-8d95a7ce1279\",\r\n \"layout\": \"force-directed\"\r\n }\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows" - ], - "variable": [ - { - "key": "projectId", - "value": "646d1b1f23578f3f7d3d71b3" - } - ] - } - }, - "status": "Accepted", - "code": 202, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"workflowId\": \"8039f350-e12f-4877-8887-67caa258a133\"\n}" - }, - { - "name": "Compute Tree", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"type\": \"compute-tree\",\r\n \"properties\": {\r\n \"datasetId\": \"646d1bf223578f3f7d3d71b4\",\r\n \"distanceMatrixId\": \"18eee130-8c25-482d-b69f-3c656bcf3511\",\r\n \"algorithm\": \"goeburst\"\r\n }\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows" - ], - "variable": [ - { - "key": "projectId", - "value": "646d1b1f23578f3f7d3d71b3" - } - ] - } - }, - "status": "Accepted", - "code": 202, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"workflowId\": \"645f84da131c7f73776d85c1\"\n}" - }, - { - "name": "Compute Distance Matrix", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"type\": \"compute-distance-matrix\",\r\n \"properties\": {\r\n \"datasetId\": \"646d24b33f7aaf79d7f17c57\",\r\n \"function\": \"hamming\"\r\n }\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows" - ], - "variable": [ - { - "key": "projectId", - "value": "646c85b82c91be6b2c4248f8" - } - ] - } - }, - "status": "Accepted", - "code": 202, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"workflowId\": \"8039f350-e12f-4877-8887-67caa258a133\"\n}" - }, - { - "name": "Index Tree", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"type\": \"index-tree\",\r\n \"properties\": {\r\n \"datasetId\": \"646d24b33f7aaf79d7f17c57\",\r\n \"treeId\": \"28b80ffd-3648-4469-86da-b4d742037fe6\"\r\n }\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows" - ], - "variable": [ - { - "key": "projectId", - "value": "646c85b82c91be6b2c4248f8" - } - ] - } - }, - "status": "Accepted", - "code": 202, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"workflowId\": \"8039f350-e12f-4877-8887-67caa258a133\"\n}" - } - ] - }, - { - "name": "Get Workflow Status", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows/:workflowId", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows", - ":workflowId" - ], - "variable": [ - { - "key": "projectId", - "value": "646c85b82c91be6b2c4248f8" - }, - { - "key": "workflowId", - "value": "646e70f8cda87652d31cf089" - } - ] - } - }, - "response": [ - { - "name": "Get Distance Matrix Workflow Status - SUCCESS", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows/:workflowId", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows", - ":workflowId" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - }, - { - "key": "workflowId", - "value": "64471def1dd5d80d8d2ebd66" - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "X-Content-Type-Options", - "value": "nosniff" - }, - { - "key": "X-XSS-Protection", - "value": "0" - }, - { - "key": "Cache-Control", - "value": "no-cache, no-store, max-age=0, must-revalidate" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Expires", - "value": "0" - }, - { - "key": "X-Frame-Options", - "value": "DENY" - }, - { - "key": "Content-Type", - "value": "application/json" - }, - { - "key": "Transfer-Encoding", - "value": "chunked" - }, - { - "key": "Date", - "value": "Tue, 25 Apr 2023 15:56:29 GMT" - }, - { - "key": "Keep-Alive", - "value": "timeout=60" - }, - { - "key": "Connection", - "value": "keep-alive" - } - ], - "cookie": [], - "body": "{\n \"workflowId\": \"64471def1dd5d80d8d2ebd66\",\n \"type\": \"compute-distance-matrix\",\n \"status\": \"SUCCESS\",\n \"data\": {\n \"typingDataId\": \"e0d6f7e2-e9b5-4feb-a3c6-aea64c23ffc0\",\n \"datasetId\": \"6446babf22cde24152e769b9\",\n \"projectId\": \"6446ba6022cde24152e769b8\",\n \"function\": \"hamming\",\n \"distanceMatrixId\": \"6446ba6022cde24da4hh19b8\"\n }\n}" - }, - { - "name": "Get Distance Matrix Workflow Status - RUNNING", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows/:workflowId", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows", - ":workflowId" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - }, - { - "key": "workflowId", - "value": "6447f8820e55c43c054035de" - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "X-Content-Type-Options", - "value": "nosniff" - }, - { - "key": "X-XSS-Protection", - "value": "0" - }, - { - "key": "Cache-Control", - "value": "no-cache, no-store, max-age=0, must-revalidate" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Expires", - "value": "0" - }, - { - "key": "X-Frame-Options", - "value": "DENY" - }, - { - "key": "Content-Type", - "value": "application/json" - }, - { - "key": "Transfer-Encoding", - "value": "chunked" - }, - { - "key": "Date", - "value": "Tue, 25 Apr 2023 15:57:59 GMT" - }, - { - "key": "Keep-Alive", - "value": "timeout=60" - }, - { - "key": "Connection", - "value": "keep-alive" - } - ], - "cookie": [], - "body": "{\n \"workflowId\": \"6447f8820e55c43c054035de\",\n \"type\": \"compute-distance-matrix\",\n \"status\": \"RUNNING\",\n \"data\": {\n \"typingDataId\": \"e0d6f7e2-e9b5-4feb-a3c6-aea64c23ffc0\",\n \"datasetId\": \"6446babf22cde24152e769b9\",\n \"projectId\": \"6446ba6022cde24152e769b8\",\n \"function\": \"hamming\"\n }\n}" - }, - { - "name": "Get Distance Matrix Workflow Status - FAILED", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows/:workflowId", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows", - ":workflowId" - ], - "variable": [ - { - "key": "projectId", - "value": "6446ba6022cde24152e769b8" - }, - { - "key": "workflowId", - "value": "64471def1dd5d80d8d2ebd66" - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "X-Content-Type-Options", - "value": "nosniff" - }, - { - "key": "X-XSS-Protection", - "value": "0" - }, - { - "key": "Cache-Control", - "value": "no-cache, no-store, max-age=0, must-revalidate" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Expires", - "value": "0" - }, - { - "key": "X-Frame-Options", - "value": "DENY" - }, - { - "key": "Content-Type", - "value": "application/json" - }, - { - "key": "Transfer-Encoding", - "value": "chunked" - }, - { - "key": "Date", - "value": "Tue, 25 Apr 2023 15:56:29 GMT" - }, - { - "key": "Keep-Alive", - "value": "timeout=60" - }, - { - "key": "Connection", - "value": "keep-alive" - } - ], - "cookie": [], - "body": "{\n \"workflowId\": \"64471def1dd5d80d8d2ebd66\",\n \"type\": \"compute-distance-matrix\",\n \"status\": \"FAILED\",\n \"data\": {\n \"typingDataId\": \"e0d6f7e2-e9b5-4feb-a3c6-aea64c23ffc0\",\n \"datasetId\": \"6446babf22cde24152e769b9\",\n \"projectId\": \"6446ba6022cde24152e769b8\",\n \"function\": \"hamming\"\n }\n}" - } - ] - }, - { - "name": "Get Workflows", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows?running=true", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows" - ], - "query": [ - { - "key": "running", - "value": "true" - } - ], - "variable": [ - { - "key": "projectId", - "value": "646c85b82c91be6b2c4248f8" - } - ] - } - }, - "response": [ - { - "name": "Get Distance Matrix Job Status Completed", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{compute_url}}/projects/:projectId/workflows/:workflowId", - "host": [ - "{{compute_url}}" - ], - "path": [ - "projects", - ":projectId", - "workflows", - ":workflowId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "workflowId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"workflows\": [\n {\n \"workflowId\": \"8039f350-e12f-4877-8887-67caa258a133\",\n \"type\": \"compute-distance-matrix\",\n \"status\": \"COMPLETED\",\n \"data\": {\n \"distanceMatrixId\": \"8039f350-e12f-4877-8887-67caa258a143\"\n }\n }\n ]\n}" - } - ] - } - ] - } - ] - }, - { - "name": "Visualization", - "item": [ - { - "name": "Datasets", - "item": [ - { - "name": "Trees", - "item": [ - { - "name": "Get Tree", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/datasets/:datasetId/trees/:treeId", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "trees", - ":treeId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "datasetId", - "value": null - }, - { - "key": "treeId", - "value": null - } - ] - } - }, - "response": [ - { - "name": "Get Tree", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/datasets/:datasetId/trees/:treeId", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "trees", - ":treeId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "datasetId", - "value": null - }, - { - "key": "treeId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "text", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "(11222:1.0,3555:1.0,(625:2.0)2975:1.0,3362:1.0,3683:1.0,3686:1.0,9325:1.0,(7210:2.0)2182:1.0,(235:1.0)283:1.0,(1793:1.0)6382:1.0,8202:1.0,6234:1.0,3884:1.0,(4347:1.0)4180:1.0,5167:1.0,8863:1.0,5761:1.0,(7651:2.0))" - } - ] - } - ] - }, - { - "name": "Tree Views", - "item": [ - { - "name": "Get Tree View", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/datasets/:datasetId/tree-views/:treeViewId", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "tree-views", - ":treeViewId" - ], - "variable": [ - { - "key": "projectId", - "value": "646c85b82c91be6b2c4248f8" - }, - { - "key": "datasetId", - "value": "646d24b33f7aaf79d7f17c57" - }, - { - "key": "treeViewId", - "value": "2e8d1427-f93f-4e95-be99-8e48841f31cc" - } - ] - } - }, - "response": [ - { - "name": "Get Tree View", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/datasets/:datasetId/tree-views/:treeViewId", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "tree-views", - ":treeViewId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "datasetId", - "value": null - }, - { - "key": "treeViewId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\n \"nodes\": [\n {\n \"st\": \"30\",\n \"coordinates\": [\n 0,\n 0\n ],\n \"profile\": [\n \"2\",\n \"1\",\n \"54\",\n \"3\",\n \"4\",\n \"1\",\n \"5\"\n ],\n \"auxiliaryData\": {\n \"country\": \"Portugal\"\n }\n }\n ],\n \"nodesTotalCount\": 1,\n \"edges\": [\n {\n \"from\": \"5\",\n \"to\": \"768\"\n },\n {\n \"from\": \"618\",\n \"to\": \"599\"\n },\n {\n \"from\": \"661\",\n \"to\": \"740\"\n },\n {\n \"from\": \"914\",\n \"to\": \"73\"\n },\n {\n \"from\": \"447\",\n \"to\": \"42\"\n },\n {\n \"from\": \"626\",\n \"to\": \"667\"\n },\n {\n \"from\": \"219\",\n \"to\": \"464\"\n },\n {\n \"from\": \"689\",\n \"to\": \"981\"\n },\n {\n \"from\": \"136\",\n \"to\": \"673\"\n },\n {\n \"from\": \"48\",\n \"to\": \"134\"\n },\n {\n \"from\": \"902\",\n \"to\": \"555\"\n },\n {\n \"from\": \"902\",\n \"to\": \"357\"\n },\n {\n \"from\": \"379\",\n \"to\": \"779\"\n },\n {\n \"from\": \"170\",\n \"to\": \"609\"\n },\n {\n \"from\": \"462\",\n \"to\": \"457\"\n },\n {\n \"from\": \"462\",\n \"to\": \"859\"\n },\n {\n \"from\": \"462\",\n \"to\": \"449\"\n },\n {\n \"from\": \"188\",\n \"to\": \"406\"\n },\n {\n \"from\": \"640\",\n \"to\": \"189\"\n },\n {\n \"from\": \"208\",\n \"to\": \"176\"\n },\n {\n \"from\": \"208\",\n \"to\": \"378\"\n },\n {\n \"from\": \"845\",\n \"to\": \"735\"\n },\n {\n \"from\": \"793\",\n \"to\": \"954\"\n },\n {\n \"from\": \"872\",\n \"to\": \"965\"\n },\n {\n \"from\": \"701\",\n \"to\": \"710\"\n },\n {\n \"from\": \"227\",\n \"to\": \"442\"\n },\n {\n \"from\": \"50\",\n \"to\": \"214\"\n },\n {\n \"from\": \"50\",\n \"to\": \"154\"\n },\n {\n \"from\": \"305\",\n \"to\": \"52\"\n },\n {\n \"from\": \"366\",\n \"to\": \"181\"\n }\n ],\n \"edgesTotalCount\": 30\n}" - } - ] - } - ] - }, - { - "name": "Distance Matrices", - "item": [ - { - "name": "Get Distance Matrix", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/datasets/:datasetId/distance-matrices/:distanceMatrixId", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "distance-matrices", - ":distanceMatrixId" - ], - "variable": [ - { - "key": "projectId", - "value": "644282eb6b61382fab3dc48e" - }, - { - "key": "datasetId", - "value": "644283906b61382fab3dc48f" - }, - { - "key": "distanceMatrixId", - "value": "644289a3a2a2ea08b9723617" - } - ] - } - }, - "response": [ - { - "name": "Get Distance Matrix", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/datasets/:datasetId/distance-matrices/:distanceMatrixId", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "datasets", - ":datasetId", - "distance-matrices", - ":distanceMatrixId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "datasetId", - "value": null - }, - { - "key": "distanceMatrixId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "text", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "1 7.0 2.0\n2 3.0 4.0 5.0\n3 3.0 5.0 5.0 2.0\n4 2.0 1.0 1.0 2.0 9.0\n" - } - ] - } - ] - } - ] - }, - { - "name": "Files", - "item": [ - { - "name": "Isolate Data", - "item": [ - { - "name": "Get Isolate Data Keys", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/files/isolate-data/:isolateDataId", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "isolate-data", - ":isolateDataId" - ], - "variable": [ - { - "key": "projectId", - "value": "646279adbc88522eee347ab1" - }, - { - "key": "isolateDataId", - "value": "5dd17c35-f204-4ce3-b571-a0805340f009" - } - ] - } - }, - "response": [ - { - "name": "Get Isolate Data Schema", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/files/isolate-data/:isolateDataId", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "isolate-data", - ":isolateDataId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "isolateDataId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\r\n \"headers\": [\r\n \"country\",\r\n \"city\"\r\n ]\r\n}" - } - ] - }, - { - "name": "Get Isolate Data Rows", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/files/isolate-data/:isolateDataId/rows?limit=100000&offset=0", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "isolate-data", - ":isolateDataId", - "rows" - ], - "query": [ - { - "key": "limit", - "value": "100000" - }, - { - "key": "offset", - "value": "0" - } - ], - "variable": [ - { - "key": "projectId", - "value": "646221333a430f25145cebe7" - }, - { - "key": "isolateDataId", - "value": "90eaa36d-0544-4378-b58e-f8f842c946ab" - } - ] - } - }, - "response": [ - { - "name": "Get Isolate Data Rows", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/files/isolate-data/:isolateDataId/rows?limit=100&offset=0", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "isolate-data", - ":isolateDataId", - "rows" - ], - "query": [ - { - "key": "limit", - "value": "100" - }, - { - "key": "offset", - "value": "0" - } - ], - "variable": [ - { - "key": "projectId", - "value": "645f82c2745395076694ff8c" - }, - { - "key": "isolateDataId", - "value": "98180023-51df-4bd3-a25e-9befb1b5dce3" - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "X-Content-Type-Options", - "value": "nosniff" - }, - { - "key": "X-XSS-Protection", - "value": "0" - }, - { - "key": "Cache-Control", - "value": "no-cache, no-store, max-age=0, must-revalidate" - }, - { - "key": "Pragma", - "value": "no-cache" - }, - { - "key": "Expires", - "value": "0" - }, - { - "key": "X-Frame-Options", - "value": "DENY" - }, - { - "key": "Content-Type", - "value": "application/json" - }, - { - "key": "Transfer-Encoding", - "value": "chunked" - }, - { - "key": "Date", - "value": "Sun, 14 May 2023 22:01:28 GMT" - }, - { - "key": "Keep-Alive", - "value": "timeout=60" - }, - { - "key": "Connection", - "value": "keep-alive" - } - ], - "cookie": [], - "body": "{\n \"rows\": [\n {\n \"id\": \"1\",\n \"profileId\": \"25\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"P09\",\n \"curator\": \"1\",\n \"disease\": \"carrier\",\n \"penner\": \"9\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"goat\"\n }\n },\n {\n \"id\": \"2\",\n \"profileId\": \"2\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-19\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P12\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"12\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"3\",\n \"profileId\": \"3\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"aliases\": \"ATCC43439\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"18\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P18\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-49 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"4\",\n \"profileId\": \"4\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"aliases\": \"ATCC43448\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"22\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P22\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-403 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"5\",\n \"profileId\": \"5\",\n \"row\": {\n \"country\": \"Unknown\",\n \"aliases\": \"ATCC43477\",\n \"disease\": \"carrier\",\n \"penner\": \"26\",\n \"source\": \"pig\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"P26\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-353 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"6\",\n \"profileId\": \"45\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P27\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"27\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"7\",\n \"profileId\": \"7\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P31\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"31\",\n \"clonal_complex (MLST)\": \"ST-354 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"8\",\n \"profileId\": \"418\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-25\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P33\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"33\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"9\",\n \"profileId\": \"9\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"43\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P43\",\n \"curator\": \"1\",\n \"town_or_city\": \"Vancouver\",\n \"clonal_complex (MLST)\": \"ST-508 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"10\",\n \"profileId\": \"45\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-05-03\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P55\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"55\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"11\",\n \"profileId\": \"11\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-19\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P57\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"57\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"12\",\n \"profileId\": \"433\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"USA\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"58\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P58\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-433 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"region\": \"Virginia\"\n }\n },\n {\n \"id\": \"13\",\n \"profileId\": \"21\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"PS02\",\n \"curator\": \"1\",\n \"disease\": \"carrier\",\n \"penner\": \"2\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"calf\"\n }\n },\n {\n \"id\": \"14\",\n \"profileId\": \"14\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"11\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"PS11\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-257 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"15\",\n \"profileId\": \"15\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"PS16\",\n \"curator\": \"1\",\n \"penner\": \"16\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"16\",\n \"profileId\": \"16\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"PS19\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"19\",\n \"clonal_complex (MLST)\": \"ST-22 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"17\",\n \"profileId\": \"17\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"11\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"3157\",\n \"curator\": \"1\",\n \"town_or_city\": \"Norwich\",\n \"clonal_complex (MLST)\": \"ST-257 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"18\",\n \"profileId\": \"17\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"11\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"2475\",\n \"curator\": \"1\",\n \"town_or_city\": \"Manchester\",\n \"clonal_complex (MLST)\": \"ST-257 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"19\",\n \"profileId\": \"18\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"313\",\n \"curator\": \"1\",\n \"town_or_city\": \"Gateshead\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"20\",\n \"profileId\": \"50\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"309\",\n \"curator\": \"1\",\n \"penner\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1990\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"chicken offal or meat\"\n }\n },\n {\n \"id\": \"21\",\n \"profileId\": \"20\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"2\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"3618\",\n \"curator\": \"1\",\n \"town_or_city\": \"Manchester\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"22\",\n \"profileId\": \"19\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Scotland]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"1\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"2167\",\n \"curator\": \"1\",\n \"town_or_city\": \"Aberdeen\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"23\",\n \"profileId\": \"21\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Scotland]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"2\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"2248\",\n \"curator\": \"1\",\n \"town_or_city\": \"Aberdeen\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"24\",\n \"profileId\": \"22\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"19\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"3201\",\n \"curator\": \"1\",\n \"town_or_city\": \"Gateshead\",\n \"clonal_complex (MLST)\": \"ST-22 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"26\",\n \"profileId\": \"22\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"UT\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB2\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-22 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"27\",\n \"profileId\": \"416\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"4,13,64\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB17\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"28\",\n \"profileId\": \"25\",\n \"row\": {\n \"continent\": \"Oceania\",\n \"country\": \"New Zealand\",\n \"disease\": \"carrier\",\n \"penner\": \"9\",\n \"year\": \"1993\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"1429\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"29\",\n \"profileId\": \"26\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-24\",\n \"isolate\": \"P17\",\n \"curator\": \"1\",\n \"penner\": \"17\",\n \"clonal_complex (MLST)\": \"ST-353 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"30\",\n \"profileId\": \"51\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-19\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P37\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"37\",\n \"clonal_complex (MLST)\": \"ST-443 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"33\",\n \"profileId\": \"19\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"304\",\n \"curator\": \"1\",\n \"penner\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1990\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"chicken offal or meat\"\n }\n },\n {\n \"id\": \"34\",\n \"profileId\": \"19\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Scotland]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"307\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"region\": \"Dumfries and Galloway\"\n }\n },\n {\n \"id\": \"36\",\n \"profileId\": \"31\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"321\",\n \"curator\": \"1\",\n \"town_or_city\": \"Manchester\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"37\",\n \"profileId\": \"32\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"322\",\n \"curator\": \"1\",\n \"town_or_city\": \"Poole\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"38\",\n \"profileId\": \"33\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Scotland]\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"chicken offal or meat\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"333\",\n \"curator\": \"1\",\n \"town_or_city\": \"Edinburgh\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"40\",\n \"profileId\": \"35\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"327\",\n \"curator\": \"1\",\n \"town_or_city\": \"Manchester\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"41\",\n \"profileId\": \"36\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4c\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-03-08\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1741\",\n \"curator\": \"1\",\n \"town_or_city\": \"Blackpool\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"42\",\n \"profileId\": \"37\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1744\",\n \"curator\": \"1\",\n \"town_or_city\": \"Blackpool\",\n \"clonal_complex (MLST)\": \"ST-353 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"43\",\n \"profileId\": \"38\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1835\",\n \"curator\": \"1\",\n \"town_or_city\": \"Lancaster\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"44\",\n \"profileId\": \"39\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"31\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB24\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-658 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"45\",\n \"profileId\": \"186\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"1,44\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB27\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"46\",\n \"profileId\": \"41\",\n \"row\": {\n \"country\": \"Unknown\",\n \"aliases\": \"ATCC43460\",\n \"disease\": \"carrier\",\n \"penner\": \"41\",\n \"source\": \"gazelle\",\n \"datestamp\": \"2001-04-19\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"P41\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-41 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"47\",\n \"profileId\": \"42\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"36\",\n \"year\": \"1998\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"108980027\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-42 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"48\",\n \"profileId\": \"43\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"comments\": \"Complete genome uploaded from GenBank (accession number AL111168).\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"2\",\n \"year\": \"1977\",\n \"source\": \"human stool\",\n \"datestamp\": \"2019-11-27\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"NCTC11168\",\n \"curator\": \"323\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"49\",\n \"profileId\": \"44\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"carrier\",\n \"penner\": \"1,44\",\n \"year\": \"1998\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"161H\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"50\",\n \"profileId\": \"22\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"19\",\n \"year\": \"1997\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1997-1591\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-22 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"51\",\n \"profileId\": \"45\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Scotland]\",\n \"aliases\": \"99/212; CN005\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"55\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"general outbreak\",\n \"isolate\": \"41239B\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"52\",\n \"profileId\": \"21\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Northern Ireland]\",\n \"aliases\": \"99/188; CN009\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"general outbreak\",\n \"isolate\": \"BCH1204\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"53\",\n \"profileId\": \"46\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Northern Ireland]\",\n \"aliases\": \"99/210; CN022\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"943\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-206 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"54\",\n \"profileId\": \"42\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"aliases\": \"99/219; CN029\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"year\": \"1997\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"1997-1423\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-42 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"55\",\n \"profileId\": \"47\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"Belgium\",\n \"aliases\": \"CN037\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"BJ1\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"56\",\n \"profileId\": \"21\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"Denmark\",\n \"aliases\": \"99/217; CN045\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"5029\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"57\",\n \"profileId\": \"45\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"France\",\n \"aliases\": \"99/216; CN049\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"11Cj\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"58\",\n \"profileId\": \"48\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"aliases\": \"99/201; CN052\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"year\": \"1992\",\n \"source\": \"cattle\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"Cy6412\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"59\",\n \"profileId\": \"45\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"Denmark\",\n \"aliases\": \"99/202; CN056\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"year\": \"1999\",\n \"source\": \"cattle\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"4039\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"60\",\n \"profileId\": \"45\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"aliases\": \"99/194; CN058\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"year\": \"1999\",\n \"source\": \"cattle\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"BT27/98\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"61\",\n \"profileId\": \"49\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"aliases\": \"99/191; CN086\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"C196/1\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-49 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"62\",\n \"profileId\": \"21\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"Denmark\",\n \"aliases\": \"99/206; CN093\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"year\": \"1999\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"SVS 5051\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"63\",\n \"profileId\": \"51\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"carrier\",\n \"year\": \"1998\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"160H\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-443 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"64\",\n \"profileId\": \"52\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"carrier\",\n \"year\": \"1991\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"C2143\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-52 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"65\",\n \"profileId\": \"53\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"Denmark\",\n \"aliases\": \"99/199; CN001\",\n \"comments\": \"Strain from Campynet project\",\n \"penner\": \"2\",\n \"source\": \"potable/drinking water\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"5001\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"66\",\n \"profileId\": \"54\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"Finland\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"LP83/98\",\n \"curator\": \"1\",\n \"aliases\": \"CN024\",\n \"comments\": \"Strain from Campynet project\",\n \"clonal_complex (MLST)\": \"ST-177 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"67\",\n \"profileId\": \"60\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"aliases\": \"99/209; CN033\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"C13010\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"69\",\n \"profileId\": \"55\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Northern Ireland]\",\n \"aliases\": \"99/238; CN054\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"source\": \"cattle\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"4137\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-403 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"70\",\n \"profileId\": \"52\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"aliases\": \"99/204; CN060\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"source\": \"sheep\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"133f/98\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-52 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"71\",\n \"profileId\": \"61\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"aliases\": \"99/215; CN073\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"penner\": \"13\",\n \"year\": \"1992\",\n \"source\": \"cattle\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"1589\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"73\",\n \"profileId\": \"53\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"carrier\",\n \"penner\": \"2\",\n \"year\": \"1991\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-07-10\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"C356\",\n \"curator\": \"2\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-07-10\"\n }\n },\n {\n \"id\": \"75\",\n \"profileId\": \"63\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"5,34\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB15\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-52 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"76\",\n \"profileId\": \"64\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"13,64\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB22\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-508 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"77\",\n \"profileId\": \"5\",\n \"row\": {\n \"country\": \"Unknown\",\n \"aliases\": \"ATCC43431\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"3\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"PS3\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-353 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"78\",\n \"profileId\": \"21\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"penner\": \"2\",\n \"year\": \"1991\",\n \"source\": \"cows milk\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"3616\",\n \"curator\": \"1\",\n \"town_or_city\": \"Manchester\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"79\",\n \"profileId\": \"65\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"323\",\n \"curator\": \"1\",\n \"penner\": \"1\",\n \"clonal_complex (MLST)\": \"ST-433 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1990\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"chicken offal or meat\"\n }\n },\n {\n \"id\": \"80\",\n \"profileId\": \"25\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-04-25\",\n \"isolate\": \"3109\",\n \"curator\": \"1\",\n \"penner\": \"6\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1991\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"chicken offal or meat\"\n }\n },\n {\n \"id\": \"81\",\n \"profileId\": \"50\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"chicken offal or meat\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"1951\",\n \"curator\": \"1\",\n \"town_or_city\": \"Poole\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"82\",\n \"profileId\": \"67\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"penner\": \"1\",\n \"year\": \"1991\",\n \"source\": \"chicken offal or meat\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"2473\",\n \"curator\": \"1\",\n \"town_or_city\": \"Poole\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"83\",\n \"profileId\": \"68\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"3105\",\n \"curator\": \"1\",\n \"penner\": \"4,16,50\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1991\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"chicken offal or meat\"\n }\n },\n {\n \"id\": \"84\",\n \"profileId\": \"69\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"penner\": \"1\",\n \"year\": \"1994\",\n \"source\": \"sand (bathing beach)\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"environmental isolate\",\n \"isolate\": \"79201\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"85\",\n \"profileId\": \"47\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"penner\": \"10\",\n \"year\": \"1994\",\n \"source\": \"sand (bathing beach)\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"environmental isolate\",\n \"isolate\": \"79203\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"86\",\n \"profileId\": \"408\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"penner\": \"38\",\n \"year\": \"1994\",\n \"source\": \"sand (bathing beach)\",\n \"datestamp\": \"2001-04-25\",\n \"epidemiology\": \"environmental isolate\",\n \"isolate\": \"79228\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"88\",\n \"profileId\": \"72\",\n \"row\": {\n \"continent\": \"Oceania\",\n \"country\": \"New Zealand\",\n \"disease\": \"carrier\",\n \"penner\": \"13,50\",\n \"year\": \"1993\",\n \"source\": \"cattle\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"1441\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"90\",\n \"profileId\": \"74\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"penner\": \"5\",\n \"year\": \"1994\",\n \"source\": \"sand (bathing beach)\",\n \"datestamp\": \"2001-03-08\",\n \"epidemiology\": \"environmental isolate\",\n \"isolate\": \"79176\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-177 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"91\",\n \"profileId\": \"75\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"penner\": \"2\",\n \"year\": \"1991\",\n \"source\": \"cows milk\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"3615\",\n \"curator\": \"1\",\n \"town_or_city\": \"Manchester\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"92\",\n \"profileId\": \"76\",\n \"row\": {\n \"continent\": \"Oceania\",\n \"country\": \"New Zealand\",\n \"disease\": \"carrier\",\n \"penner\": \"2\",\n \"year\": \"1993\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"1434\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"93\",\n \"profileId\": \"77\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-04-25\",\n \"isolate\": \"2656\",\n \"curator\": \"1\",\n \"penner\": \"27\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1991\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"chicken offal or meat\"\n }\n },\n {\n \"id\": \"94\",\n \"profileId\": \"78\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"19\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"3779\",\n \"curator\": \"1\",\n \"town_or_city\": \"Poole\",\n \"clonal_complex (MLST)\": \"ST-22 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"95\",\n \"profileId\": \"79\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"3748\",\n \"curator\": \"1\",\n \"town_or_city\": \"Norwich\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"96\",\n \"profileId\": \"80\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"79125\",\n \"curator\": \"1\",\n \"penner\": \"2\",\n \"clonal_complex (MLST)\": \"ST-179 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1994\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"sand (bathing beach)\"\n }\n },\n {\n \"id\": \"97\",\n \"profileId\": \"177\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-12-18\",\n \"isolate\": \"79260\",\n \"curator\": \"1\",\n \"penner\": \"55\",\n \"clonal_complex (MLST)\": \"ST-177 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1994\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"sand (bathing beach)\"\n }\n },\n {\n \"id\": \"98\",\n \"profileId\": \"48\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"aliases\": \"MFS6\",\n \"disease\": \"Miller Fisher Syndrome\",\n \"penner\": \"4,64\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"MF6\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"100\",\n \"profileId\": \"19\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"2\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB14\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"103\",\n \"profileId\": \"227\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-24\",\n \"isolate\": \"PS4\",\n \"curator\": \"1\",\n \"penner\": \"4\",\n \"clonal_complex (MLST)\": \"ST-206 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"104\",\n \"profileId\": \"87\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"aliases\": \"ATCC43436\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"8\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"PS8\",\n \"curator\": \"1\",\n \"town_or_city\": \"Ottawa\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"105\",\n \"profileId\": \"88\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"42\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-04-25\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P42\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"106\",\n \"profileId\": \"89\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"aliases\": \"ATCC43434\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"6\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-04-19\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P06\",\n \"curator\": \"1\",\n \"town_or_city\": \"Ottawa\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"107\",\n \"profileId\": \"90\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"2\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"3897\",\n \"curator\": \"1\",\n \"town_or_city\": \"Eastbourne\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"108\",\n \"profileId\": \"91\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"penner\": \"4\",\n \"year\": \"1994\",\n \"source\": \"sand (bathing beach)\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"environmental isolate\",\n \"isolate\": \"79178\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"110\",\n \"profileId\": \"93\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"NT\",\n \"year\": \"1993\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1529\",\n \"curator\": \"1\",\n \"town_or_city\": \"Blackburn\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"111\",\n \"profileId\": \"93\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"NT\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1564\",\n \"curator\": \"1\",\n \"town_or_city\": \"Preston\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"112\",\n \"profileId\": \"93\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4c\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1715\",\n \"curator\": \"1\",\n \"town_or_city\": \"Blackpool\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"113\",\n \"profileId\": \"93\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4c\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"2017\",\n \"curator\": \"1\",\n \"town_or_city\": \"Poole\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"114\",\n \"profileId\": \"93\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4c\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"2035\",\n \"curator\": \"1\",\n \"town_or_city\": \"Bath\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n }\n ],\n \"totalCount\": 100\n}" - } - ] - } - ] - }, - { - "name": "Typing Data", - "item": [ - { - "name": "Get Typing Data Schema", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/files/typing-data/:typingDataId", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "typing-data", - ":typingDataId" - ], - "variable": [ - { - "key": "projectId", - "value": "646279adbc88522eee347ab1" - }, - { - "key": "typingDataId", - "value": "bff2decd-9b60-4508-93b4-f1e55985e78b" - } - ] - } - }, - "response": [ - { - "name": "Get Typing Data Schema", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/files/typing-data/:typingDataId", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "typing-data", - ":typingDataId" - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "typingDataId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\r\n \"type\": \"mlst7\",\r\n \"loci\": [\r\n \"aspA\",\r\n \"glnA\",\r\n \"gltA\",\r\n \"glyA\",\r\n \"pgm\",\r\n \"tkt\",\r\n \"uncA\"\r\n ]\r\n}" - } - ] - }, - { - "name": "Get Typing Data Profiles", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/files/typing-data/:typingDataId/profiles?limit=100000&offset=0", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "typing-data", - ":typingDataId", - "profiles" - ], - "query": [ - { - "key": "limit", - "value": "100000" - }, - { - "key": "offset", - "value": "0" - } - ], - "variable": [ - { - "key": "projectId", - "value": "646279adbc88522eee347ab1" - }, - { - "key": "typingDataId", - "value": "bff2decd-9b60-4508-93b4-f1e55985e78b" - } - ] - } - }, - "response": [ - { - "name": "Get Typing Data Profiles", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "{{visualization_url}}/projects/:projectId/files/typing-data/:typingDataId/profiles?limit=100&offset=0", - "host": [ - "{{visualization_url}}" - ], - "path": [ - "projects", - ":projectId", - "files", - "typing-data", - ":typingDataId", - "profiles" - ], - "query": [ - { - "key": "limit", - "value": "100" - }, - { - "key": "offset", - "value": "0" - } - ], - "variable": [ - { - "key": "projectId", - "value": null - }, - { - "key": "typingDataId", - "value": null - } - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "name": "Content-Type", - "description": "", - "type": "text" - } - ], - "cookie": [], - "body": "{\r\n \"profiles\": [\r\n {\r\n \"id\": \"1\",\r\n \"profile\": [\r\n \"2\",\r\n \"1\",\r\n \"54\",\r\n \"3\",\r\n \"4\",\r\n \"1\",\r\n \"5\"\r\n ]\r\n },\r\n {\r\n \"id\": \"2\",\r\n \"profile\": [\r\n \"4\",\r\n \"7\",\r\n \"51\",\r\n \"4\",\r\n \"1\",\r\n \"7\",\r\n \"1\"\r\n ]\r\n }\r\n ],\r\n \"totalCount\": 2\r\n}" - } - ] - } - ] - } - ] - } - ] - } - ] - }, - { - "name": "Extra", - "item": [ - { - "name": "Keycloak", - "item": [ - { - "name": "Nyck Keycloak", - "item": [ - { - "name": "Keycloak create access token with password grant type", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "const json = JSON.parse(responseBody);\r", - "\r", - "if (json[\"access_token\"]){\r", - " pm.collectionVariables.set(\"test_access_token\", json[\"access_token\"]);\r", - "}" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/x-www-form-urlencoded" - } - ], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "client_id", - "value": "{{KEYCLOAK_CLIENT_ID}}", - "type": "text" - }, - { - "key": "client_secret", - "value": "gmaFeUwf9AXnxMaQyTuXEtTAgbJlBpgy", - "type": "text" - }, - { - "key": "grant_type", - "value": "password", - "type": "text" - }, - { - "key": "scope", - "value": "openid email roles profile", - "type": "text" - }, - { - "key": "username", - "value": "nyckoka", - "type": "text" - }, - { - "key": "password", - "value": "andrepascoa", - "type": "text" - } - ] - }, - "url": { - "raw": "{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/token", - "host": [ - "{{KEYCLOAK_URL}}" - ], - "path": [ - "realms", - "phyloviz-web-platform", - "protocol", - "openid-connect", - "token" - ] - } - }, - "response": [] - }, - { - "name": "Create access token with device grant", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "const json = JSON.parse(responseBody);\r", - "\r", - "if (json[\"device_code\"]){\r", - " pm.collectionVariables.set(\"test_device_code\", json[\"device_code\"]);\r", - "}" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/x-www-form-urlencoded" - } - ], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "client_id", - "value": "{{KEYCLOAK_CLIENT_ID}}", - "type": "text" - }, - { - "key": "client_secret", - "value": "pZW9kZ05jHjLiOlYYhBAa9CGk1uL7bob", - "type": "text" - } - ] - }, - "url": { - "raw": "{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/auth/device", - "host": [ - "{{KEYCLOAK_URL}}" - ], - "path": [ - "realms", - "phyloviz-web-platform", - "protocol", - "openid-connect", - "auth", - "device" - ] - } - }, - "response": [] - }, - { - "name": "Poll Keycloak token", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "const json = JSON.parse(responseBody);\r", - "\r", - "if (json[\"access_token\"]){\r", - " pm.collectionVariables.set(\"test_access_token\", json[\"access_token\"]);\r", - "}" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/x-www-form-urlencoded" - } - ], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "device_code", - "value": "{{test_device_code}}", - "type": "text" - }, - { - "key": "client_id", - "value": "{{KEYCLOAK_CLIENT_ID}}", - "type": "text" - }, - { - "key": "client_secret", - "value": "pZW9kZ05jHjLiOlYYhBAa9CGk1uL7bob", - "type": "text" - }, - { - "key": "grant_type", - "value": "urn:ietf:params:oauth:grant-type:device_code", - "type": "text" - } - ] - }, - "url": { - "raw": "{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/token", - "host": [ - "{{KEYCLOAK_URL}}" - ], - "path": [ - "realms", - "phyloviz-web-platform", - "protocol", - "openid-connect", - "token" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Páscoa Keycloak", - "item": [ - { - "name": "Keycloak create access token with password grant type", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "const json = JSON.parse(responseBody);\r", - "\r", - "if (json[\"access_token\"]){\r", - " pm.collectionVariables.set(\"test_access_token\", json[\"access_token\"]);\r", - "}" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/x-www-form-urlencoded" - } - ], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "client_id", - "value": "{{KEYCLOAK_CLIENT_ID}}", - "type": "text" - }, - { - "key": "client_secret", - "value": "whCCD9r37qj8mx9H7R4mzIrSezYf3H7R", - "type": "text" - }, - { - "key": "grant_type", - "value": "password", - "type": "text" - }, - { - "key": "scope", - "value": "openid email roles profile", - "type": "text" - }, - { - "key": "username", - "value": "devandrepascoa", - "type": "text" - }, - { - "key": "password", - "value": "andrepascoa", - "type": "text" - } - ] - }, - "url": { - "raw": "http://{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/token", - "protocol": "http", - "host": [ - "{{KEYCLOAK_URL}}" - ], - "path": [ - "realms", - "phyloviz-web-platform", - "protocol", - "openid-connect", - "token" - ] - } - }, - "response": [] - }, - { - "name": "Create access token with device grant", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "const json = JSON.parse(responseBody);\r", - "\r", - "if (json[\"device_code\"]){\r", - " pm.collectionVariables.set(\"test_device_code\", json[\"device_code\"]);\r", - "}" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/x-www-form-urlencoded" - } - ], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "client_id", - "value": "{{KEYCLOAK_CLIENT_ID}}", - "type": "text" - }, - { - "key": "client_secret", - "value": "whCCD9r37qj8mx9H7R4mzIrSezYf3H7R", - "type": "text" - } - ] - }, - "url": { - "raw": "http://{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/auth/device", - "protocol": "http", - "host": [ - "{{KEYCLOAK_URL}}" - ], - "path": [ - "realms", - "phyloviz-web-platform", - "protocol", - "openid-connect", - "auth", - "device" - ] - } - }, - "response": [] - }, - { - "name": "Poll Keycloak token", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "const json = JSON.parse(responseBody);\r", - "\r", - "if (json[\"access_token\"]){\r", - " pm.collectionVariables.set(\"test_access_token\", json[\"access_token\"]);\r", - "}" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/x-www-form-urlencoded" - } - ], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "device_code", - "value": "{{test_device_code}}", - "type": "text" - }, - { - "key": "client_id", - "value": "{{KEYCLOAK_CLIENT_ID}}", - "type": "text" - }, - { - "key": "client_secret", - "value": "whCCD9r37qj8mx9H7R4mzIrSezYf3H7R", - "type": "text" - }, - { - "key": "grant_type", - "value": "urn:ietf:params:oauth:grant-type:device_code", - "type": "text" - } - ] - }, - "url": { - "raw": "http://{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/token", - "protocol": "http", - "host": [ - "{{KEYCLOAK_URL}}" - ], - "path": [ - "realms", - "phyloviz-web-platform", - "protocol", - "openid-connect", - "token" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Jesus Keycloak", - "item": [ - { - "name": "Keycloak create access token with password grant type", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "const json = JSON.parse(responseBody);\r", - "\r", - "if (json[\"access_token\"]){\r", - " pm.collectionVariables.set(\"test_access_token\", json[\"access_token\"]);\r", - "}" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/x-www-form-urlencoded" - } - ], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "client_id", - "value": "{{KEYCLOAK_CLIENT_ID}}", - "type": "text" - }, - { - "key": "client_secret", - "value": "pZW9kZ05jHjLiOlYYhBAa9CGk1uL7bob", - "type": "text" - }, - { - "key": "grant_type", - "value": "password", - "type": "text" - }, - { - "key": "scope", - "value": "openid email roles profile", - "type": "text" - }, - { - "key": "username", - "value": "devandrepascoa", - "type": "text" - }, - { - "key": "password", - "value": "andrepascoa", - "type": "text" - } - ] - }, - "url": { - "raw": "http://{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/token", - "protocol": "http", - "host": [ - "{{KEYCLOAK_URL}}" - ], - "path": [ - "realms", - "phyloviz-web-platform", - "protocol", - "openid-connect", - "token" - ] - } - }, - "response": [] - }, - { - "name": "Create access token with device grant", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "const json = JSON.parse(responseBody);\r", - "\r", - "if (json[\"device_code\"]){\r", - " pm.collectionVariables.set(\"test_device_code\", json[\"device_code\"]);\r", - "}" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/x-www-form-urlencoded" - } - ], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "client_id", - "value": "{{KEYCLOAK_CLIENT_ID}}", - "type": "text" - }, - { - "key": "client_secret", - "value": "pZW9kZ05jHjLiOlYYhBAa9CGk1uL7bob", - "type": "text" - } - ] - }, - "url": { - "raw": "http://{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/auth/device", - "protocol": "http", - "host": [ - "{{KEYCLOAK_URL}}" - ], - "path": [ - "realms", - "phyloviz-web-platform", - "protocol", - "openid-connect", - "auth", - "device" - ] - } - }, - "response": [] - }, - { - "name": "Poll Keycloak token", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "const json = JSON.parse(responseBody);\r", - "\r", - "if (json[\"access_token\"]){\r", - " pm.collectionVariables.set(\"test_access_token\", json[\"access_token\"]);\r", - "}" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/x-www-form-urlencoded" - } - ], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "device_code", - "value": "{{test_device_code}}", - "type": "text" - }, - { - "key": "client_id", - "value": "{{KEYCLOAK_CLIENT_ID}}", - "type": "text" - }, - { - "key": "client_secret", - "value": "pZW9kZ05jHjLiOlYYhBAa9CGk1uL7bob", - "type": "text" - }, - { - "key": "grant_type", - "value": "urn:ietf:params:oauth:grant-type:device_code", - "type": "text" - } - ] - }, - "url": { - "raw": "http://{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/token", - "protocol": "http", - "host": [ - "{{KEYCLOAK_URL}}" - ], - "path": [ - "realms", - "phyloviz-web-platform", - "protocol", - "openid-connect", - "token" - ] - } - }, - "response": [] - } - ] - } - ] - }, - { - "name": "Openstack", - "item": [ - { - "name": "Login", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"auth\": {\r\n \"identity\": {\r\n \"methods\": [\"password\"],\r\n \"password\": {\r\n \"user\": {\r\n \"name\": \"admin\",\r\n \"domain\": {\r\n \"name\": \"Default\"\r\n },\r\n \"password\": \"secret\"\r\n }\r\n }\r\n },\r\n \"scope\": \"unscoped\"\r\n }\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "http://{{OPENSTACK_URL}}/identity/v3/auth/tokens", - "protocol": "http", - "host": [ - "{{OPENSTACK_URL}}" - ], - "path": [ - "identity", - "v3", - "auth", - "tokens" - ] - } - }, - "response": [] - } - ] - } - ] - } - ], - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{test_access_token}}", - "type": "string" - } - ] - }, - "event": [ - { - "listen": "prerequest", - "script": { - "type": "text/javascript", - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "variable": [ - { - "key": "visualization_url", - "value": "localhost:8085", - "type": "string" - }, - { - "key": "compute_url", - "value": "localhost:8086", - "type": "string" - }, - { - "key": "downloader_url", - "value": "localhost:8087", - "type": "string" - }, - { - "key": "administration_url", - "value": "localhost:8088", - "type": "string" - }, - { - "key": "file_transfer_url", - "value": "localhost:8089", - "type": "string" - }, - { - "key": "test_device_code", - "value": "" - }, - { - "key": "test_access_token", - "value": "" - }, - { - "key": "KEYCLOAK_URL", - "value": "localhost:8082", - "type": "string" - }, - { - "key": "KEYCLOAK_CLIENT_ID", - "value": "phyloviz-web-platform-client", - "type": "string" - }, - { - "key": "KEYCLOAK_CLIENT_SECRET", - "value": "pZW9kZ05jHjLiOlYYhBAa9CGk1uL7bob", - "type": "string" - }, - { - "key": "OPENSTACK_URL", - "value": "192.168.1.93", - "type": "string" - } - ] + "info": { + "_postman_id": "669bc3ed-309e-429a-aab8-86f3de1b41a7", + "name": "PHYLOViZ Web Platform", + "description": "# Introduction\nWhat does your API do?\n\n# Overview\nThings that the developers should know about\n\n# Authentication\nWhat is the preferred way of using the API?\n\n# Error Codes\nWhat errors and status codes can a user expect?\n\n# Rate limit\nIs there a limit to the number of requests a user can send?", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "18351569", + "_collection_link": "https://bodybuilders.postman.co/workspace/PHYLOViZ-Workspace~55a4beb2-3ca7-4a35-9241-0b435664dd00/collection/18351569-669bc3ed-309e-429a-aab8-86f3de1b41a7?action=share&creator=18351569&source=collection_link" + }, + "item": [ + { + "name": "PHYLOViZ Web Platform", + "item": [ + { + "name": "Administration", + "item": [ + { + "name": "Projects", + "item": [ + { + "name": "Datasets", + "item": [ + { + "name": "Distance Matrices", + "item": [ + { + "name": "Delete Distance Matrix", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/distance-matrices/:distanceMatrixId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "distance-matrices", + ":distanceMatrixId" + ], + "variable": [ + { + "key": "projectId", + "value": "6432998e0396ab6743cb8724" + }, + { + "key": "datasetId", + "value": "64329eb2768a95379da3424f" + }, + { + "key": "distanceMatrixId", + "value": null + } + ] + } + }, + "response": [ + { + "name": "Delete Distance Matrix", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/distance-matrices/:distanceMatrixId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "distance-matrices", + ":distanceMatrixId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "datasetId", + "value": null + }, + { + "key": "distanceMatrixId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\r\n \"projectId\": \"\",\r\n \"datasetId\": \"\",\r\n \"distanceMatrixId\": \"\"\r\n}" + } + ] + }, + { + "name": "Update Distance Matrix", + "request": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"DistanceMatrix1\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/distance-matrices/:distanceMatrixId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "distance-matrices", + ":distanceMatrixId" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + }, + { + "key": "datasetId", + "value": "6446babf22cde24152e769b9" + }, + { + "key": "distanceMatrixId", + "value": "" + } + ] + } + }, + "response": [ + { + "name": "Update Distance Matrix", + "originalRequest": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"DistanceMatrix1\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/distance-matrices/:distanceMatrixId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "distance-matrices", + ":distanceMatrixId" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + }, + { + "key": "datasetId", + "value": "6446babf22cde24152e769b9" + }, + { + "key": "distanceMatrixId", + "value": "" + } + ] + } + }, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"name\": \"Changed from 'Initial name' to 'DistanceMatrix1'\"\n}" + } + ] + } + ] + }, + { + "name": "Trees", + "item": [ + { + "name": "Delete Tree", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/trees/:treeId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "trees", + ":treeId" + ], + "variable": [ + { + "key": "projectId", + "value": "6432998e0396ab6743cb8724" + }, + { + "key": "datasetId", + "value": "64329eb2768a95379da3424f" + }, + { + "key": "treeId", + "value": null + } + ] + } + }, + "response": [ + { + "name": "Delete tree", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/trees/:treeId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "trees", + ":treeId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "datasetId", + "value": null + }, + { + "key": "treeId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"projectId\": \"\",\n \"datasetId\": \"\",\n \"treeId\": \"\"\n}" + } + ] + }, + { + "name": "Update Tree", + "request": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Tree1\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/trees/:treeId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "trees", + ":treeId" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + }, + { + "key": "datasetId", + "value": "6446babf22cde24152e769b9" + }, + { + "key": "treeId", + "value": null + } + ] + } + }, + "response": [ + { + "name": "Update Tree", + "originalRequest": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Tree1\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/trees/:treeId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "trees", + ":treeId" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + }, + { + "key": "datasetId", + "value": "6446babf22cde24152e769b9" + }, + { + "key": "treeId", + "value": null + } + ] + } + }, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"name\": \"Changed from 'Initial name' to 'Tree1'\"\n}" + } + ] + } + ] + }, + { + "name": "Tree Views", + "item": [ + { + "name": "Delete Tree View", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/tree-views/:treeViewId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "tree-views", + ":treeViewId" + ], + "variable": [ + { + "key": "projectId", + "value": "6432998e0396ab6743cb8724" + }, + { + "key": "datasetId", + "value": "64329eb2768a95379da3424f" + }, + { + "key": "treeViewId", + "value": null + } + ] + } + }, + "response": [ + { + "name": "Delete Tree Views", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/tree-views/:treeViewId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "tree-views", + ":treeViewId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "datasetId", + "value": null + }, + { + "key": "treeViewId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"projectId\": \"\",\n \"datasetId\": \"\",\n \"treeViewId\": \"\"\n}" + } + ] + }, + { + "name": "Update Tree View", + "request": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"TreeView1\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/tree-views/:treeViewId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "tree-views", + ":treeViewId" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + }, + { + "key": "datasetId", + "value": "6446babf22cde24152e769b9" + }, + { + "key": "treeViewId", + "value": null + } + ] + } + }, + "response": [ + { + "name": "Update Tree View", + "originalRequest": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"TreeView1\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/tree-views/:treeViewId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "tree-views", + ":treeViewId" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + }, + { + "key": "datasetId", + "value": "6446babf22cde24152e769b9" + }, + { + "key": "treeViewId", + "value": null + } + ] + } + }, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"name\": \"Changed from 'Initial name' to 'TreeView1'\"\n}" + } + ] + } + ] + }, + { + "name": "Create Dataset", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Dataset1\",\r\n \"description\": \"My first dataset.\",\r\n \"typingDataId\": \"c2bf49a6-1140-4fa6-9d4c-386f6ba3dda6\",\r\n \"isolateDataId\": null,\r\n \"isolateDataKey\": null\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets" + ], + "variable": [ + { + "key": "projectId", + "value": "646d1b1f23578f3f7d3d71b3" + } + ] + } + }, + "response": [ + { + "name": "Create Dataset", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"\",\r\n \"description\": \"\",\r\n \"typingDataId\": \"\",\r\n \"isolateDataId\": \"\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets" + ], + "variable": [ + { + "key": "projectId", + "value": null + } + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\r\n \"projectId\": \"\",\r\n \"datasetId\": \"\"\r\n}" + } + ] + }, + { + "name": "Get Dataset", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId" + ], + "variable": [ + { + "key": "projectId", + "value": "645d60417f92b75799a8c86d" + }, + { + "key": "datasetId", + "value": "645d60a27f92b75799a8c86e" + } + ] + } + }, + "response": [ + { + "name": "Get Dataset", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "datasetId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\r\n \"datasetId\": \"\",\r\n \"name\": \"\",\r\n \"description\": \"\",\r\n \"typingDataId\": \"\",\r\n \"isolateDataId\": \"\",\r\n \"distanceMatrices\": [\r\n {\r\n \"distanceMatrixId\": \"\",\r\n \"name\": \"Hamming Distance\",\r\n \"sourceType\": \"function\",\r\n \"source\": {\r\n \"function\": \"hamming\"\r\n }\r\n }\r\n ],\r\n \"trees\": [\r\n {\r\n \"treeId\": \"\",\r\n \"name\": \"GoeBurst\",\r\n \"sourceType\": \"algorithmDistanceMatrix\",\r\n \"source\": {\r\n \"algorithm\": \"goeburst\",\r\n \"distanceMatrixId\": \"\",\r\n \"parameters\": \"\"\r\n }\r\n },\r\n {\r\n \"treeId\": \"\",\r\n \"name\": \"GoeBurst2\",\r\n \"sourceType\": \"algorithmTypingData\",\r\n \"source\": {\r\n \"algorithm\": \"goeburst\",\r\n \"typingDataId\": \"\",\r\n \"parameters\": \"\"\r\n }\r\n },\r\n {\r\n \"treeId\": \"\",\r\n \"name\": \"Newick002\",\r\n \"sourceType\": \"file\",\r\n \"source\": {\r\n \"fileType\": \"newick\",\r\n \"fileName\": \"newick002.newick\"\r\n }\r\n }\r\n ],\r\n \"treeViews\": [\r\n {\r\n \"treeViewId\": \"\",\r\n \"name\": \"Radial\",\r\n \"layout\": \"radial\",\r\n \"source\": {\r\n \"treeId\": \"\",\r\n \"typingDataId\": null,\r\n \"isolateDataId\": null\r\n }\r\n }\r\n ]\r\n}" + } + ] + }, + { + "name": "Delete Dataset", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId" + ], + "variable": [ + { + "key": "projectId", + "value": "645e79ec83e3c229ff95fe03" + }, + { + "key": "datasetId", + "value": "645e7a5f83e3c229ff95fe04" + } + ] + } + }, + "response": [ + { + "name": "Delete Dataset", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "datasetId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"projectId\": \"\",\n \"datasetId\": \"\"\n}" + } + ] + }, + { + "name": "Get Datasets", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets" + ], + "variable": [ + { + "key": "projectId", + "value": "644a8978b8e2b111f08b8a36" + } + ] + } + }, + "response": [ + { + "name": "Get Datasets", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets" + ], + "variable": [ + { + "key": "projectId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"datasets\": [\n {\n \"datasetId\": \"\",\n \"name\": \"\",\n \"description\": \"\",\n \"typingDataId\": \"\",\n \"isolateDataId\": \"\",\n \"distanceMatrices\": [\n {\n \"distanceMatrixId\": \"\",\n \"name\": \"Hamming Distance\",\n \"sourceType\": \"function\",\n \"source\": {\n \"function\": \"hamming\"\n }\n }\n ],\n \"trees\": [\n {\n \"treeId\": \"\",\n \"name\": \"GoeBurst\",\n \"sourceType\": \"algorithmDistanceMatrix\",\n \"source\": {\n \"algorithm\": \"goeburst\",\n \"distanceMatrixId\": \"\",\n \"parameters\": \"\"\n }\n },\n {\n \"treeId\": \"\",\n \"name\": \"GoeBurst2\",\n \"sourceType\": \"algorithmTypingData\",\n \"source\": {\n \"algorithm\": \"goeburst\",\n \"parameters\": \"\"\n }\n },\n {\n \"treeId\": \"\",\n \"name\": \"Newick002\",\n \"sourceType\": \"file\",\n \"source\": {\n \"fileType\": \"newick\",\n \"fileName\": \"newick002.newick\"\n }\n }\n ],\n \"treeViews\": [\n {\n \"treeViewId\": \"\",\n \"name\": \"Radial\",\n \"layout\": \"radial\",\n \"source\": {\n \"treeId\": \"\",\n \"typingDataId\": null,\n \"isolateDataId\": null\n }\n }\n ]\n }\n ]\n}" + } + ] + }, + { + "name": "Update Dataset", + "request": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Dataset1\",\r\n \"description\": \"My first dataset.\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + }, + { + "key": "datasetId", + "value": "6446babf22cde24152e769b9" + } + ] + } + }, + "response": [ + { + "name": "Update Dataset", + "originalRequest": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Dataset1\",\r\n \"description\": \"My first dataset.\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + }, + { + "key": "datasetId", + "value": "6446babf22cde24152e769b9" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-XSS-Protection", + "value": "0" + }, + { + "key": "Cache-Control", + "value": "no-cache, no-store, max-age=0, must-revalidate" + }, + { + "key": "Pragma", + "value": "no-cache" + }, + { + "key": "Expires", + "value": "0" + }, + { + "key": "X-Frame-Options", + "value": "DENY" + }, + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Date", + "value": "Tue, 25 Apr 2023 13:42:54 GMT" + }, + { + "key": "Keep-Alive", + "value": "timeout=60" + }, + { + "key": "Connection", + "value": "keep-alive" + } + ], + "cookie": [], + "body": "{\n \"name\": \"Changed from 'Initial name' to 'Dataset1'\",\n \"description\": \"Changed from 'Initial description.' to 'My first dataset.'\"\n}" + } + ] + }, + { + "name": "Set Isolate Data of Dataset", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"isolateDataId\": \"8021deed-bbad-4225-9d61-e9db08d78a09\",\r\n \"isolateDataKey\": \"ST (MLST)\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/datasets/:datasetId/isolateData", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "isolateData" + ], + "variable": [ + { + "key": "projectId", + "value": "646d1b1f23578f3f7d3d71b3" + }, + { + "key": "datasetId", + "value": "646d1bf223578f3f7d3d71b4" + } + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Files", + "item": [ + { + "name": "Delete Typing Data File", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/files/typing-data/:typingDataId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "typing-data", + ":typingDataId" + ], + "variable": [ + { + "key": "projectId", + "value": "646c85b82c91be6b2c4248f8" + }, + { + "key": "typingDataId", + "value": "85ed24e2-e0dc-44cd-9593-7ac8de0c458f" + } + ] + } + }, + "response": [ + { + "name": "Delete Typing Data File", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/files/typing-data/:typingDataId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "typing-data", + ":typingDataId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "typingDataId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"projectId\": \"\",\n \"typingDataId\": \"\"\n}" + } + ] + }, + { + "name": "Update Typing Data File", + "request": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"TypingData1\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/files/typing-data/:typingDataId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "typing-data", + ":typingDataId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "typingDataId", + "value": null + } + ] + } + }, + "response": [ + { + "name": "Update Typing Data File", + "originalRequest": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"TypingData1\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/files/typing-data/:typingDataId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "typing-data", + ":typingDataId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "typingDataId", + "value": null + } + ] + } + }, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"name\": \"Changed from 'Initial name' to 'TypingData1'\"\n}" + } + ] + }, + { + "name": "Delete Isolate Data File", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/files/isolate-data/:isolateDataId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "isolate-data", + ":isolateDataId" + ], + "variable": [ + { + "key": "projectId", + "value": "645f82c2745395076694ff8c" + }, + { + "key": "isolateDataId", + "value": "fb98ef82-eec5-4378-8684-c12ec93bfb49" + } + ] + } + }, + "response": [ + { + "name": "Delete Isolate Data File", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId/files/isolate-data/:isolateDataId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "isolate-data", + ":isolateDataId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "isolateDataId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"projectId\": \"\",\n \"isolateDataId\": \"\"\n}" + } + ] + }, + { + "name": "Update Isolate Data File", + "request": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"IsolateData1\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/files/isolate-data/:isolateDataId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "isolate-data", + ":isolateDataId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "isolateDataId", + "value": null + } + ] + } + }, + "response": [ + { + "name": "Update Isolate Data File", + "originalRequest": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"IsolateData1\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/files/isolate-data/:isolateDataId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "isolate-data", + ":isolateDataId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "isolateDataId", + "value": null + } + ] + } + }, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"name\": \"Changed from 'Initial name' to 'IsolateData1'\"\n}" + } + ] + } + ] + }, + { + "name": "Create Project", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Good project\",\r\n \"description\": \"Good project\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects" + ] + } + }, + "response": [ + { + "name": "Create Project", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Project1\",\r\n \"description\": \"My first project.\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\r\n \"projectId\": \"0f333f3e-a94b-4464-8c50-5fcc81fa7e27\"\r\n}" + } + ] + }, + { + "name": "Get Project", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId" + ], + "variable": [ + { + "key": "projectId", + "value": "646c85b82c91be6b2c4248f8" + } + ] + } + }, + "response": [ + { + "name": "Get Project", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId" + ], + "variable": [ + { + "key": "projectId", + "value": "646c85b82c91be6b2c4248f8" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-XSS-Protection", + "value": "0" + }, + { + "key": "Cache-Control", + "value": "no-cache, no-store, max-age=0, must-revalidate" + }, + { + "key": "Pragma", + "value": "no-cache" + }, + { + "key": "Expires", + "value": "0" + }, + { + "key": "X-Frame-Options", + "value": "DENY" + }, + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Date", + "value": "Mon, 15 May 2023 11:45:24 GMT" + }, + { + "key": "Keep-Alive", + "value": "timeout=60" + }, + { + "key": "Connection", + "value": "keep-alive" + } + ], + "cookie": [], + "body": "{\n \"projectId\": \"645f82c2745395076694ff8c\",\n \"name\": \"Project1\",\n \"description\": \"My test project ;)\",\n \"owner\": \"914cc356-ac86-4ab4-909c-bd02d3776a7b\",\n \"datasets\": [\n {\n \"datasetId\": \"645f82e8745395076694ff8d\",\n \"name\": \"Dataset1\",\n \"description\": \"My first dataset.\",\n \"typingDataId\": \"a6568f92-102e-417d-aff8-703228dfc0a8\",\n \"isolateDataId\": \"3ffc902a-81c5-4656-8608-d7fc40beb267\",\n \"isolateDataKey\": \"ST (MLST)\",\n \"distanceMatrices\": [\n {\n \"distanceMatrixId\": \"1b5d8afa-c00a-494d-bc09-848e3518637a\",\n \"name\": \"Distance Matrix 1b5d8afa-c00a-494d-bc09-848e3518637a\",\n \"sourceType\": \"function\",\n \"source\": {\n \"function\": \"kimura\"\n }\n },\n {\n \"distanceMatrixId\": \"cfb25827-9c31-4a20-b921-372554f62efc\",\n \"name\": \"Distance Matrix cfb25827-9c31-4a20-b921-372554f62efc\",\n \"sourceType\": \"function\",\n \"source\": {\n \"function\": \"grapetree\"\n }\n },\n {\n \"distanceMatrixId\": \"6f60d594-a783-49d3-a586-9b0d8a65e45a\",\n \"name\": \"Distance Matrix 6f60d594-a783-49d3-a586-9b0d8a65e45a\",\n \"sourceType\": \"function\",\n \"source\": {\n \"function\": \"hamming\"\n }\n }\n ],\n \"trees\": [\n {\n \"treeId\": \"197404c5-81ec-4b2a-bba1-8ade5a59bde4\",\n \"name\": \"Tree 197404c5-81ec-4b2a-bba1-8ade5a59bde4\",\n \"sourceType\": \"algorithm_distance_matrix\",\n \"source\": {\n \"algorithm\": \"goeburst\",\n \"distanceMatrixId\": \"6f60d594-a783-49d3-a586-9b0d8a65e45a\",\n \"parameters\": \"{}\"\n }\n }\n ],\n \"treeViews\": [\n {\n \"treeViewId\": \"9ee6a2d5-aded-41de-96c9-35cfb9c54d63\",\n \"name\": \"Tree View 9ee6a2d5-aded-41de-96c9-35cfb9c54d63\",\n \"layout\": \"force-directed\",\n \"source\": {\n \"treeId\": \"197404c5-81ec-4b2a-bba1-8ade5a59bde4\"\n }\n }\n ]\n },\n {\n \"datasetId\": \"646113ebe44dda50e2862f52\",\n \"name\": \"Dataset1\",\n \"description\": \"My first dataset.\",\n \"typingDataId\": \"a6568f92-102e-417d-aff8-703228dfc0a8\",\n \"isolateDataId\": \"3ffc902a-81c5-4656-8608-d7fc40beb267\",\n \"isolateDataKey\": \"ST (MLST)\",\n \"distanceMatrices\": [],\n \"trees\": [],\n \"treeViews\": []\n },\n {\n \"datasetId\": \"646154059361044301f33abb\",\n \"name\": \"Dataset1\",\n \"description\": \"My first dataset.\",\n \"typingDataId\": \"a11f4f07-9b0d-4e10-8118-17780db75bd0\",\n \"isolateDataId\": \"98180023-51df-4bd3-a25e-9befb1b5dce3\",\n \"isolateDataKey\": \"ST (MLST)\",\n \"distanceMatrices\": [],\n \"trees\": [],\n \"treeViews\": []\n }\n ],\n \"files\": {\n \"typingData\": [\n {\n \"typingDataId\": \"a6568f92-102e-417d-aff8-703228dfc0a8\",\n \"name\": \"allele_profiles2.txt\"\n },\n {\n \"typingDataId\": \"a11f4f07-9b0d-4e10-8118-17780db75bd0\",\n \"name\": \"coli_typing2.txt\"\n }\n ],\n \"isolateData\": [\n {\n \"isolateDataId\": \"3ffc902a-81c5-4656-8608-d7fc40beb267\",\n \"name\": \"coli_isolates.txt\",\n \"keys\": [\n \"id\",\n \"isolate\",\n \"aliases\",\n \"country\",\n \"continent\",\n \"region\",\n \"town_or_city\",\n \"year\",\n \"month\",\n \"isolation_date\",\n \"received_date\",\n \"age_yr\",\n \"age_mth\",\n \"sex\",\n \"disease\",\n \"source\",\n \"epidemiology\",\n \"species\",\n \"penner\",\n \"bioproject_accession\",\n \"biosample_accession\",\n \"NCBI_assembly_accession\",\n \"ENA_run_accession\",\n \"private_project\",\n \"comments\",\n \"sender\",\n \"curator\",\n \"date_entered\",\n \"datestamp\",\n \"ST (MLST)\",\n \"clonal_complex (MLST)\"\n ]\n },\n {\n \"isolateDataId\": \"98180023-51df-4bd3-a25e-9befb1b5dce3\",\n \"name\": \"coli_isolates2.txt\",\n \"keys\": [\n \"id\",\n \"isolate\",\n \"aliases\",\n \"country\",\n \"continent\",\n \"region\",\n \"town_or_city\",\n \"year\",\n \"month\",\n \"isolation_date\",\n \"received_date\",\n \"age_yr\",\n \"age_mth\",\n \"sex\",\n \"disease\",\n \"source\",\n \"epidemiology\",\n \"species\",\n \"penner\",\n \"bioproject_accession\",\n \"biosample_accession\",\n \"NCBI_assembly_accession\",\n \"ENA_run_accession\",\n \"private_project\",\n \"comments\",\n \"sender\",\n \"curator\",\n \"date_entered\",\n \"datestamp\",\n \"ST (MLST)\",\n \"clonal_complex (MLST)\"\n ]\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Delete Project", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId" + ], + "variable": [ + { + "key": "projectId", + "value": "644a8978b8e2b111f08b8a36" + } + ] + } + }, + "response": [ + { + "name": "Delete Project", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{administration_url}}/projects/:projectId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId" + ], + "variable": [ + { + "key": "projectId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\r\n \"projectId\": \"\"\r\n}" + } + ] + }, + { + "name": "Update Project", + "request": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Bigger Data Project\",\r\n \"description\": \"This has more data than the first project. More profiles, more isolates.\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId" + ], + "variable": [ + { + "key": "projectId", + "value": "646221333a430f25145cebe7" + } + ] + } + }, + "response": [ + { + "name": "Update Project", + "originalRequest": { + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Project1\",\r\n \"description\": \"Description for this project.\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-XSS-Protection", + "value": "0" + }, + { + "key": "Cache-Control", + "value": "no-cache, no-store, max-age=0, must-revalidate" + }, + { + "key": "Pragma", + "value": "no-cache" + }, + { + "key": "Expires", + "value": "0" + }, + { + "key": "X-Frame-Options", + "value": "DENY" + }, + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Date", + "value": "Tue, 25 Apr 2023 13:37:25 GMT" + }, + { + "key": "Keep-Alive", + "value": "timeout=60" + }, + { + "key": "Connection", + "value": "keep-alive" + } + ], + "cookie": [], + "body": "{\n \"name\": \"Changed from 'Initial name' to 'Project1'\",\n \"description\": \"Changed from 'Initial description.' to 'Description for this project.'\"\n}" + } + ] + }, + { + "name": "Get Projects", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{administration_url}}/projects", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects" + ] + } + }, + "response": [ + { + "name": "Get Projects", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{administration_url}}/projects", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects" + ] + } + }, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\r\n \"projects\": [\r\n {\r\n \"projectId\": \"\",\r\n \"name\": \"\",\r\n \"description\": \"\"\r\n }\r\n ]\r\n}" + } + ] + } + ] + } + ] + }, + { + "name": "FileTransfer", + "item": [ + { + "name": "Upload Typing Data File", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "src": "/C:/Users/nyckb/Downloads/coli_typing_6000.txt" + }, + { + "key": "type", + "value": "MLST", + "type": "text" + } + ] + }, + "url": { + "raw": "{{file_transfer_url}}/projects/:projectId/files/typing-data", + "host": [ + "{{file_transfer_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "typing-data" + ], + "variable": [ + { + "key": "projectId", + "value": "646c85b82c91be6b2c4248f8" + } + ] + } + }, + "response": [ + { + "name": "Upload Typing Data", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "src": "/C:/ISEL/6th semester/PFC/README.md" + } + ] + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/files/typing-data", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "typing-data" + ], + "variable": [ + { + "key": "projectId", + "value": null + } + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"projectId\": \"\",\n \"typingDataId\": \"\"\n}" + } + ] + }, + { + "name": "Download Typing Data File", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{file_transfer_url}}/projects/:projectId/files/typing-data/:typingDataId/file", + "host": [ + "{{file_transfer_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "typing-data", + ":typingDataId", + "file" + ], + "variable": [ + { + "key": "projectId", + "value": "645f82c2745395076694ff8c" + }, + { + "key": "typingDataId", + "value": "a6568f92-102e-417d-aff8-703228dfc0a8" + } + ] + } + }, + "response": [ + { + "name": "Download Typing Data File", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/files/typing-data/:typingDataId/file", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "typing-data", + ":typingDataId", + "file" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "typingDataId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "Content-Type", + "value": "application/octet-stream", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": null + } + ] + }, + { + "name": "Upload Isolate Data File", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "src": "/C:/ISEL/6th semester/PFC/datasets/campylobacter/mlst/coli_isolates_10000.txt" + } + ] + }, + "url": { + "raw": "{{file_transfer_url}}/projects/:projectId/files/isolate-data", + "host": [ + "{{file_transfer_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "isolate-data" + ], + "variable": [ + { + "key": "projectId", + "value": "646d1b1f23578f3f7d3d71b3" + } + ] + } + }, + "response": [ + { + "name": "Upload Isolate Data", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "src": "/C:/ISEL/6th semester/PFC/README.md" + } + ] + }, + "url": { + "raw": "{{administration_url}}/projects/:projectId/files/isolate-data", + "host": [ + "{{administration_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "isolate-data" + ], + "variable": [ + { + "key": "projectId", + "value": null + } + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"projectId\": \"\",\n \"isolateDataId\": \"\"\n}" + } + ] + }, + { + "name": "Download Isolate Data File", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{file_transfer_url}}/projects/:projectId/files/isolate-data/:isolateDataId/file", + "host": [ + "{{file_transfer_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "isolate-data", + ":isolateDataId", + "file" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "isolateDataId", + "value": null + } + ] + } + }, + "response": [ + { + "name": "Download Isolate Data File", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/files/isolate-data/:isolateDataId/file", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "isolate-data", + ":isolateDataId", + "file" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "isolateDataId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "Content-Type", + "value": "application/octet-stream", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": null + } + ] + } + ] + }, + { + "name": "Compute", + "item": [ + { + "name": "Workflows", + "item": [ + { + "name": "Create Workflow", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"type\": \"create-typing-data-db\",\r\n \"properties\": {\r\n \"typingDataId\": \"0c1faf40-4a39-433a-999a-9d854454843c\"\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + } + ] + } + }, + "response": [ + { + "name": "Index Typing Data", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"type\": \"index-typing-data\",\r\n \"properties\": {\r\n \"datasetId\": \"646d24b33f7aaf79d7f17c57\"\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows" + ], + "variable": [ + { + "key": "projectId", + "value": "646c85b82c91be6b2c4248f8" + } + ] + } + }, + "status": "Accepted", + "code": 202, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"workflowId\": \"8039f350-e12f-4877-8887-67caa258a133\"\n}" + }, + { + "name": "Index Isolate Data", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"type\": \"index-isolate-data\",\r\n \"properties\": {\r\n \"datasetId\": \"646d1bf223578f3f7d3d71b4\"\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows" + ], + "variable": [ + { + "key": "projectId", + "value": "646d1b1f23578f3f7d3d71b3" + } + ] + } + }, + "status": "Accepted", + "code": 202, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"workflowId\": \"8039f350-e12f-4877-8887-67caa258a133\"\n}" + }, + { + "name": "Compute Tree View", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"type\": \"compute-tree-view\",\r\n \"properties\": {\r\n \"datasetId\": \"646d1bf223578f3f7d3d71b4\",\r\n \"treeId\": \"d90534c5-1d38-4033-88ba-8d95a7ce1279\",\r\n \"layout\": \"force-directed\"\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows" + ], + "variable": [ + { + "key": "projectId", + "value": "646d1b1f23578f3f7d3d71b3" + } + ] + } + }, + "status": "Accepted", + "code": 202, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"workflowId\": \"8039f350-e12f-4877-8887-67caa258a133\"\n}" + }, + { + "name": "Compute Tree", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"type\": \"compute-tree\",\r\n \"properties\": {\r\n \"datasetId\": \"646d1bf223578f3f7d3d71b4\",\r\n \"distanceMatrixId\": \"18eee130-8c25-482d-b69f-3c656bcf3511\",\r\n \"algorithm\": \"goeburst\"\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows" + ], + "variable": [ + { + "key": "projectId", + "value": "646d1b1f23578f3f7d3d71b3" + } + ] + } + }, + "status": "Accepted", + "code": 202, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"workflowId\": \"645f84da131c7f73776d85c1\"\n}" + }, + { + "name": "Compute Distance Matrix", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"type\": \"compute-distance-matrix\",\r\n \"properties\": {\r\n \"datasetId\": \"646d24b33f7aaf79d7f17c57\",\r\n \"function\": \"hamming\"\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows" + ], + "variable": [ + { + "key": "projectId", + "value": "646c85b82c91be6b2c4248f8" + } + ] + } + }, + "status": "Accepted", + "code": 202, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"workflowId\": \"8039f350-e12f-4877-8887-67caa258a133\"\n}" + }, + { + "name": "Index Tree", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"type\": \"index-tree\",\r\n \"properties\": {\r\n \"datasetId\": \"646d24b33f7aaf79d7f17c57\",\r\n \"treeId\": \"28b80ffd-3648-4469-86da-b4d742037fe6\"\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows" + ], + "variable": [ + { + "key": "projectId", + "value": "646c85b82c91be6b2c4248f8" + } + ] + } + }, + "status": "Accepted", + "code": 202, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"workflowId\": \"8039f350-e12f-4877-8887-67caa258a133\"\n}" + } + ] + }, + { + "name": "Get Workflow Status", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows/:workflowId", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows", + ":workflowId" + ], + "variable": [ + { + "key": "projectId", + "value": "646c85b82c91be6b2c4248f8" + }, + { + "key": "workflowId", + "value": "646e70f8cda87652d31cf089" + } + ] + } + }, + "response": [ + { + "name": "Get Distance Matrix Workflow Status - SUCCESS", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows/:workflowId", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows", + ":workflowId" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + }, + { + "key": "workflowId", + "value": "64471def1dd5d80d8d2ebd66" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-XSS-Protection", + "value": "0" + }, + { + "key": "Cache-Control", + "value": "no-cache, no-store, max-age=0, must-revalidate" + }, + { + "key": "Pragma", + "value": "no-cache" + }, + { + "key": "Expires", + "value": "0" + }, + { + "key": "X-Frame-Options", + "value": "DENY" + }, + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Date", + "value": "Tue, 25 Apr 2023 15:56:29 GMT" + }, + { + "key": "Keep-Alive", + "value": "timeout=60" + }, + { + "key": "Connection", + "value": "keep-alive" + } + ], + "cookie": [], + "body": "{\n \"workflowId\": \"64471def1dd5d80d8d2ebd66\",\n \"type\": \"compute-distance-matrix\",\n \"status\": \"SUCCESS\",\n \"data\": {\n \"typingDataId\": \"e0d6f7e2-e9b5-4feb-a3c6-aea64c23ffc0\",\n \"datasetId\": \"6446babf22cde24152e769b9\",\n \"projectId\": \"6446ba6022cde24152e769b8\",\n \"function\": \"hamming\",\n \"distanceMatrixId\": \"6446ba6022cde24da4hh19b8\"\n }\n}" + }, + { + "name": "Get Distance Matrix Workflow Status - RUNNING", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows/:workflowId", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows", + ":workflowId" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + }, + { + "key": "workflowId", + "value": "6447f8820e55c43c054035de" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-XSS-Protection", + "value": "0" + }, + { + "key": "Cache-Control", + "value": "no-cache, no-store, max-age=0, must-revalidate" + }, + { + "key": "Pragma", + "value": "no-cache" + }, + { + "key": "Expires", + "value": "0" + }, + { + "key": "X-Frame-Options", + "value": "DENY" + }, + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Date", + "value": "Tue, 25 Apr 2023 15:57:59 GMT" + }, + { + "key": "Keep-Alive", + "value": "timeout=60" + }, + { + "key": "Connection", + "value": "keep-alive" + } + ], + "cookie": [], + "body": "{\n \"workflowId\": \"6447f8820e55c43c054035de\",\n \"type\": \"compute-distance-matrix\",\n \"status\": \"RUNNING\",\n \"data\": {\n \"typingDataId\": \"e0d6f7e2-e9b5-4feb-a3c6-aea64c23ffc0\",\n \"datasetId\": \"6446babf22cde24152e769b9\",\n \"projectId\": \"6446ba6022cde24152e769b8\",\n \"function\": \"hamming\"\n }\n}" + }, + { + "name": "Get Distance Matrix Workflow Status - FAILED", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows/:workflowId", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows", + ":workflowId" + ], + "variable": [ + { + "key": "projectId", + "value": "6446ba6022cde24152e769b8" + }, + { + "key": "workflowId", + "value": "64471def1dd5d80d8d2ebd66" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-XSS-Protection", + "value": "0" + }, + { + "key": "Cache-Control", + "value": "no-cache, no-store, max-age=0, must-revalidate" + }, + { + "key": "Pragma", + "value": "no-cache" + }, + { + "key": "Expires", + "value": "0" + }, + { + "key": "X-Frame-Options", + "value": "DENY" + }, + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Date", + "value": "Tue, 25 Apr 2023 15:56:29 GMT" + }, + { + "key": "Keep-Alive", + "value": "timeout=60" + }, + { + "key": "Connection", + "value": "keep-alive" + } + ], + "cookie": [], + "body": "{\n \"workflowId\": \"64471def1dd5d80d8d2ebd66\",\n \"type\": \"compute-distance-matrix\",\n \"status\": \"FAILED\",\n \"data\": {\n \"typingDataId\": \"e0d6f7e2-e9b5-4feb-a3c6-aea64c23ffc0\",\n \"datasetId\": \"6446babf22cde24152e769b9\",\n \"projectId\": \"6446ba6022cde24152e769b8\",\n \"function\": \"hamming\"\n }\n}" + } + ] + }, + { + "name": "Get Workflows", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows?running=true", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows" + ], + "query": [ + { + "key": "running", + "value": "true" + } + ], + "variable": [ + { + "key": "projectId", + "value": "646c85b82c91be6b2c4248f8" + } + ] + } + }, + "response": [ + { + "name": "Get Distance Matrix Job Status Completed", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{compute_url}}/projects/:projectId/workflows/:workflowId", + "host": [ + "{{compute_url}}" + ], + "path": [ + "projects", + ":projectId", + "workflows", + ":workflowId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "workflowId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"workflows\": [\n {\n \"workflowId\": \"8039f350-e12f-4877-8887-67caa258a133\",\n \"type\": \"compute-distance-matrix\",\n \"status\": \"COMPLETED\",\n \"data\": {\n \"distanceMatrixId\": \"8039f350-e12f-4877-8887-67caa258a143\"\n }\n }\n ]\n}" + } + ] + } + ] + } + ] + }, + { + "name": "Visualization", + "item": [ + { + "name": "Datasets", + "item": [ + { + "name": "Trees", + "item": [ + { + "name": "Get Tree", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/datasets/:datasetId/trees/:treeId", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "trees", + ":treeId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "datasetId", + "value": null + }, + { + "key": "treeId", + "value": null + } + ] + } + }, + "response": [ + { + "name": "Get Tree", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/datasets/:datasetId/trees/:treeId", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "trees", + ":treeId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "datasetId", + "value": null + }, + { + "key": "treeId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "text", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "(11222:1.0,3555:1.0,(625:2.0)2975:1.0,3362:1.0,3683:1.0,3686:1.0,9325:1.0,(7210:2.0)2182:1.0,(235:1.0)283:1.0,(1793:1.0)6382:1.0,8202:1.0,6234:1.0,3884:1.0,(4347:1.0)4180:1.0,5167:1.0,8863:1.0,5761:1.0,(7651:2.0))" + } + ] + } + ] + }, + { + "name": "Tree Views", + "item": [ + { + "name": "Get Tree View", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/datasets/:datasetId/tree-views/:treeViewId", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "tree-views", + ":treeViewId" + ], + "variable": [ + { + "key": "projectId", + "value": "646c85b82c91be6b2c4248f8" + }, + { + "key": "datasetId", + "value": "646d24b33f7aaf79d7f17c57" + }, + { + "key": "treeViewId", + "value": "2e8d1427-f93f-4e95-be99-8e48841f31cc" + } + ] + } + }, + "response": [ + { + "name": "Get Tree View", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/datasets/:datasetId/tree-views/:treeViewId", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "tree-views", + ":treeViewId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "datasetId", + "value": null + }, + { + "key": "treeViewId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\n \"nodes\": [\n {\n \"st\": \"30\",\n \"coordinates\": [\n 0,\n 0\n ],\n \"profile\": [\n \"2\",\n \"1\",\n \"54\",\n \"3\",\n \"4\",\n \"1\",\n \"5\"\n ],\n \"auxiliaryData\": {\n \"country\": \"Portugal\"\n }\n }\n ],\n \"nodesTotalCount\": 1,\n \"edges\": [\n {\n \"from\": \"5\",\n \"to\": \"768\"\n },\n {\n \"from\": \"618\",\n \"to\": \"599\"\n },\n {\n \"from\": \"661\",\n \"to\": \"740\"\n },\n {\n \"from\": \"914\",\n \"to\": \"73\"\n },\n {\n \"from\": \"447\",\n \"to\": \"42\"\n },\n {\n \"from\": \"626\",\n \"to\": \"667\"\n },\n {\n \"from\": \"219\",\n \"to\": \"464\"\n },\n {\n \"from\": \"689\",\n \"to\": \"981\"\n },\n {\n \"from\": \"136\",\n \"to\": \"673\"\n },\n {\n \"from\": \"48\",\n \"to\": \"134\"\n },\n {\n \"from\": \"902\",\n \"to\": \"555\"\n },\n {\n \"from\": \"902\",\n \"to\": \"357\"\n },\n {\n \"from\": \"379\",\n \"to\": \"779\"\n },\n {\n \"from\": \"170\",\n \"to\": \"609\"\n },\n {\n \"from\": \"462\",\n \"to\": \"457\"\n },\n {\n \"from\": \"462\",\n \"to\": \"859\"\n },\n {\n \"from\": \"462\",\n \"to\": \"449\"\n },\n {\n \"from\": \"188\",\n \"to\": \"406\"\n },\n {\n \"from\": \"640\",\n \"to\": \"189\"\n },\n {\n \"from\": \"208\",\n \"to\": \"176\"\n },\n {\n \"from\": \"208\",\n \"to\": \"378\"\n },\n {\n \"from\": \"845\",\n \"to\": \"735\"\n },\n {\n \"from\": \"793\",\n \"to\": \"954\"\n },\n {\n \"from\": \"872\",\n \"to\": \"965\"\n },\n {\n \"from\": \"701\",\n \"to\": \"710\"\n },\n {\n \"from\": \"227\",\n \"to\": \"442\"\n },\n {\n \"from\": \"50\",\n \"to\": \"214\"\n },\n {\n \"from\": \"50\",\n \"to\": \"154\"\n },\n {\n \"from\": \"305\",\n \"to\": \"52\"\n },\n {\n \"from\": \"366\",\n \"to\": \"181\"\n }\n ],\n \"edgesTotalCount\": 30\n}" + } + ] + } + ] + }, + { + "name": "Distance Matrices", + "item": [ + { + "name": "Get Distance Matrix", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/datasets/:datasetId/distance-matrices/:distanceMatrixId", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "distance-matrices", + ":distanceMatrixId" + ], + "variable": [ + { + "key": "projectId", + "value": "644282eb6b61382fab3dc48e" + }, + { + "key": "datasetId", + "value": "644283906b61382fab3dc48f" + }, + { + "key": "distanceMatrixId", + "value": "644289a3a2a2ea08b9723617" + } + ] + } + }, + "response": [ + { + "name": "Get Distance Matrix", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/datasets/:datasetId/distance-matrices/:distanceMatrixId", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "datasets", + ":datasetId", + "distance-matrices", + ":distanceMatrixId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "datasetId", + "value": null + }, + { + "key": "distanceMatrixId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "text", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "1 7.0 2.0\n2 3.0 4.0 5.0\n3 3.0 5.0 5.0 2.0\n4 2.0 1.0 1.0 2.0 9.0\n" + } + ] + } + ] + } + ] + }, + { + "name": "Files", + "item": [ + { + "name": "Isolate Data", + "item": [ + { + "name": "Get Isolate Data Keys", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/files/isolate-data/:isolateDataId", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "isolate-data", + ":isolateDataId" + ], + "variable": [ + { + "key": "projectId", + "value": "646279adbc88522eee347ab1" + }, + { + "key": "isolateDataId", + "value": "5dd17c35-f204-4ce3-b571-a0805340f009" + } + ] + } + }, + "response": [ + { + "name": "Get Isolate Data Schema", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/files/isolate-data/:isolateDataId", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "isolate-data", + ":isolateDataId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "isolateDataId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\r\n \"headers\": [\r\n \"country\",\r\n \"city\"\r\n ]\r\n}" + } + ] + }, + { + "name": "Get Isolate Data Rows", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/files/isolate-data/:isolateDataId/rows?limit=100000&offset=0", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "isolate-data", + ":isolateDataId", + "rows" + ], + "query": [ + { + "key": "limit", + "value": "100000" + }, + { + "key": "offset", + "value": "0" + } + ], + "variable": [ + { + "key": "projectId", + "value": "646221333a430f25145cebe7" + }, + { + "key": "isolateDataId", + "value": "90eaa36d-0544-4378-b58e-f8f842c946ab" + } + ] + } + }, + "response": [ + { + "name": "Get Isolate Data Rows", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/files/isolate-data/:isolateDataId/rows?limit=100&offset=0", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "isolate-data", + ":isolateDataId", + "rows" + ], + "query": [ + { + "key": "limit", + "value": "100" + }, + { + "key": "offset", + "value": "0" + } + ], + "variable": [ + { + "key": "projectId", + "value": "645f82c2745395076694ff8c" + }, + { + "key": "isolateDataId", + "value": "98180023-51df-4bd3-a25e-9befb1b5dce3" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-XSS-Protection", + "value": "0" + }, + { + "key": "Cache-Control", + "value": "no-cache, no-store, max-age=0, must-revalidate" + }, + { + "key": "Pragma", + "value": "no-cache" + }, + { + "key": "Expires", + "value": "0" + }, + { + "key": "X-Frame-Options", + "value": "DENY" + }, + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Date", + "value": "Sun, 14 May 2023 22:01:28 GMT" + }, + { + "key": "Keep-Alive", + "value": "timeout=60" + }, + { + "key": "Connection", + "value": "keep-alive" + } + ], + "cookie": [], + "body": "{\n \"rows\": [\n {\n \"id\": \"1\",\n \"profileId\": \"25\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"P09\",\n \"curator\": \"1\",\n \"disease\": \"carrier\",\n \"penner\": \"9\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"goat\"\n }\n },\n {\n \"id\": \"2\",\n \"profileId\": \"2\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-19\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P12\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"12\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"3\",\n \"profileId\": \"3\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"aliases\": \"ATCC43439\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"18\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P18\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-49 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"4\",\n \"profileId\": \"4\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"aliases\": \"ATCC43448\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"22\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P22\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-403 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"5\",\n \"profileId\": \"5\",\n \"row\": {\n \"country\": \"Unknown\",\n \"aliases\": \"ATCC43477\",\n \"disease\": \"carrier\",\n \"penner\": \"26\",\n \"source\": \"pig\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"P26\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-353 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"6\",\n \"profileId\": \"45\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P27\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"27\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"7\",\n \"profileId\": \"7\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P31\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"31\",\n \"clonal_complex (MLST)\": \"ST-354 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"8\",\n \"profileId\": \"418\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-25\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P33\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"33\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"9\",\n \"profileId\": \"9\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"43\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P43\",\n \"curator\": \"1\",\n \"town_or_city\": \"Vancouver\",\n \"clonal_complex (MLST)\": \"ST-508 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"10\",\n \"profileId\": \"45\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-05-03\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P55\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"55\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"11\",\n \"profileId\": \"11\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-19\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P57\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"57\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"12\",\n \"profileId\": \"433\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"USA\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"58\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P58\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-433 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"region\": \"Virginia\"\n }\n },\n {\n \"id\": \"13\",\n \"profileId\": \"21\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"PS02\",\n \"curator\": \"1\",\n \"disease\": \"carrier\",\n \"penner\": \"2\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"calf\"\n }\n },\n {\n \"id\": \"14\",\n \"profileId\": \"14\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"11\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"PS11\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-257 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"15\",\n \"profileId\": \"15\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"PS16\",\n \"curator\": \"1\",\n \"penner\": \"16\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"16\",\n \"profileId\": \"16\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"PS19\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"19\",\n \"clonal_complex (MLST)\": \"ST-22 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"17\",\n \"profileId\": \"17\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"11\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"3157\",\n \"curator\": \"1\",\n \"town_or_city\": \"Norwich\",\n \"clonal_complex (MLST)\": \"ST-257 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"18\",\n \"profileId\": \"17\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"11\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"2475\",\n \"curator\": \"1\",\n \"town_or_city\": \"Manchester\",\n \"clonal_complex (MLST)\": \"ST-257 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"19\",\n \"profileId\": \"18\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"313\",\n \"curator\": \"1\",\n \"town_or_city\": \"Gateshead\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"20\",\n \"profileId\": \"50\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"309\",\n \"curator\": \"1\",\n \"penner\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1990\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"chicken offal or meat\"\n }\n },\n {\n \"id\": \"21\",\n \"profileId\": \"20\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"2\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"3618\",\n \"curator\": \"1\",\n \"town_or_city\": \"Manchester\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"22\",\n \"profileId\": \"19\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Scotland]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"1\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"2167\",\n \"curator\": \"1\",\n \"town_or_city\": \"Aberdeen\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"23\",\n \"profileId\": \"21\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Scotland]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"2\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"2248\",\n \"curator\": \"1\",\n \"town_or_city\": \"Aberdeen\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"24\",\n \"profileId\": \"22\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"19\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"3201\",\n \"curator\": \"1\",\n \"town_or_city\": \"Gateshead\",\n \"clonal_complex (MLST)\": \"ST-22 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"26\",\n \"profileId\": \"22\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"UT\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB2\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-22 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"27\",\n \"profileId\": \"416\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"4,13,64\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB17\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"28\",\n \"profileId\": \"25\",\n \"row\": {\n \"continent\": \"Oceania\",\n \"country\": \"New Zealand\",\n \"disease\": \"carrier\",\n \"penner\": \"9\",\n \"year\": \"1993\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"1429\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"29\",\n \"profileId\": \"26\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-24\",\n \"isolate\": \"P17\",\n \"curator\": \"1\",\n \"penner\": \"17\",\n \"clonal_complex (MLST)\": \"ST-353 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"30\",\n \"profileId\": \"51\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-19\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P37\",\n \"curator\": \"1\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"37\",\n \"clonal_complex (MLST)\": \"ST-443 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"human stool\"\n }\n },\n {\n \"id\": \"33\",\n \"profileId\": \"19\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"304\",\n \"curator\": \"1\",\n \"penner\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1990\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"chicken offal or meat\"\n }\n },\n {\n \"id\": \"34\",\n \"profileId\": \"19\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Scotland]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"307\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\",\n \"region\": \"Dumfries and Galloway\"\n }\n },\n {\n \"id\": \"36\",\n \"profileId\": \"31\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"321\",\n \"curator\": \"1\",\n \"town_or_city\": \"Manchester\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"37\",\n \"profileId\": \"32\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"322\",\n \"curator\": \"1\",\n \"town_or_city\": \"Poole\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"38\",\n \"profileId\": \"33\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Scotland]\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"chicken offal or meat\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"333\",\n \"curator\": \"1\",\n \"town_or_city\": \"Edinburgh\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"40\",\n \"profileId\": \"35\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"327\",\n \"curator\": \"1\",\n \"town_or_city\": \"Manchester\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"41\",\n \"profileId\": \"36\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4c\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-03-08\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1741\",\n \"curator\": \"1\",\n \"town_or_city\": \"Blackpool\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"42\",\n \"profileId\": \"37\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1744\",\n \"curator\": \"1\",\n \"town_or_city\": \"Blackpool\",\n \"clonal_complex (MLST)\": \"ST-353 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"43\",\n \"profileId\": \"38\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1835\",\n \"curator\": \"1\",\n \"town_or_city\": \"Lancaster\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"44\",\n \"profileId\": \"39\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"31\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB24\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-658 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"45\",\n \"profileId\": \"186\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"1,44\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB27\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"46\",\n \"profileId\": \"41\",\n \"row\": {\n \"country\": \"Unknown\",\n \"aliases\": \"ATCC43460\",\n \"disease\": \"carrier\",\n \"penner\": \"41\",\n \"source\": \"gazelle\",\n \"datestamp\": \"2001-04-19\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"P41\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-41 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"47\",\n \"profileId\": \"42\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"36\",\n \"year\": \"1998\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"108980027\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-42 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"48\",\n \"profileId\": \"43\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"comments\": \"Complete genome uploaded from GenBank (accession number AL111168).\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"2\",\n \"year\": \"1977\",\n \"source\": \"human stool\",\n \"datestamp\": \"2019-11-27\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"NCTC11168\",\n \"curator\": \"323\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"49\",\n \"profileId\": \"44\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"carrier\",\n \"penner\": \"1,44\",\n \"year\": \"1998\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"161H\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"50\",\n \"profileId\": \"22\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"19\",\n \"year\": \"1997\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1997-1591\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-22 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"51\",\n \"profileId\": \"45\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Scotland]\",\n \"aliases\": \"99/212; CN005\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"55\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"general outbreak\",\n \"isolate\": \"41239B\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"52\",\n \"profileId\": \"21\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Northern Ireland]\",\n \"aliases\": \"99/188; CN009\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"general outbreak\",\n \"isolate\": \"BCH1204\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"53\",\n \"profileId\": \"46\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Northern Ireland]\",\n \"aliases\": \"99/210; CN022\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"943\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-206 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"54\",\n \"profileId\": \"42\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"aliases\": \"99/219; CN029\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"year\": \"1997\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"1997-1423\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-42 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"55\",\n \"profileId\": \"47\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"Belgium\",\n \"aliases\": \"CN037\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"BJ1\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"56\",\n \"profileId\": \"21\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"Denmark\",\n \"aliases\": \"99/217; CN045\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"5029\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"57\",\n \"profileId\": \"45\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"France\",\n \"aliases\": \"99/216; CN049\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"11Cj\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"58\",\n \"profileId\": \"48\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"aliases\": \"99/201; CN052\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"year\": \"1992\",\n \"source\": \"cattle\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"Cy6412\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"59\",\n \"profileId\": \"45\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"Denmark\",\n \"aliases\": \"99/202; CN056\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"year\": \"1999\",\n \"source\": \"cattle\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"4039\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"60\",\n \"profileId\": \"45\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"aliases\": \"99/194; CN058\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"year\": \"1999\",\n \"source\": \"cattle\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"BT27/98\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"61\",\n \"profileId\": \"49\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"aliases\": \"99/191; CN086\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"C196/1\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-49 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"62\",\n \"profileId\": \"21\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"Denmark\",\n \"aliases\": \"99/206; CN093\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"year\": \"1999\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"SVS 5051\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"63\",\n \"profileId\": \"51\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"carrier\",\n \"year\": \"1998\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"160H\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-443 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"64\",\n \"profileId\": \"52\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"carrier\",\n \"year\": \"1991\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"C2143\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-52 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"65\",\n \"profileId\": \"53\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"Denmark\",\n \"aliases\": \"99/199; CN001\",\n \"comments\": \"Strain from Campynet project\",\n \"penner\": \"2\",\n \"source\": \"potable/drinking water\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"5001\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"66\",\n \"profileId\": \"54\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"Finland\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"LP83/98\",\n \"curator\": \"1\",\n \"aliases\": \"CN024\",\n \"comments\": \"Strain from Campynet project\",\n \"clonal_complex (MLST)\": \"ST-177 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"67\",\n \"profileId\": \"60\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"aliases\": \"99/209; CN033\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"gastroenteritis\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"C13010\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"69\",\n \"profileId\": \"55\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [Northern Ireland]\",\n \"aliases\": \"99/238; CN054\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"source\": \"cattle\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"4137\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-403 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"70\",\n \"profileId\": \"52\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"aliases\": \"99/204; CN060\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"source\": \"sheep\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"133f/98\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-52 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"71\",\n \"profileId\": \"61\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"aliases\": \"99/215; CN073\",\n \"comments\": \"Strain from Campynet project\",\n \"disease\": \"carrier\",\n \"penner\": \"13\",\n \"year\": \"1992\",\n \"source\": \"cattle\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"1589\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"73\",\n \"profileId\": \"53\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"carrier\",\n \"penner\": \"2\",\n \"year\": \"1991\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-07-10\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"C356\",\n \"curator\": \"2\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"6\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-07-10\"\n }\n },\n {\n \"id\": \"75\",\n \"profileId\": \"63\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"5,34\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB15\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-52 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"76\",\n \"profileId\": \"64\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"13,64\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB22\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-508 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"77\",\n \"profileId\": \"5\",\n \"row\": {\n \"country\": \"Unknown\",\n \"aliases\": \"ATCC43431\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"3\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"PS3\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-353 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"78\",\n \"profileId\": \"21\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"penner\": \"2\",\n \"year\": \"1991\",\n \"source\": \"cows milk\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"3616\",\n \"curator\": \"1\",\n \"town_or_city\": \"Manchester\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"79\",\n \"profileId\": \"65\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"323\",\n \"curator\": \"1\",\n \"penner\": \"1\",\n \"clonal_complex (MLST)\": \"ST-433 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1990\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"chicken offal or meat\"\n }\n },\n {\n \"id\": \"80\",\n \"profileId\": \"25\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-04-25\",\n \"isolate\": \"3109\",\n \"curator\": \"1\",\n \"penner\": \"6\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1991\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"chicken offal or meat\"\n }\n },\n {\n \"id\": \"81\",\n \"profileId\": \"50\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"penner\": \"1\",\n \"year\": \"1990\",\n \"source\": \"chicken offal or meat\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"1951\",\n \"curator\": \"1\",\n \"town_or_city\": \"Poole\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"82\",\n \"profileId\": \"67\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"penner\": \"1\",\n \"year\": \"1991\",\n \"source\": \"chicken offal or meat\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"2473\",\n \"curator\": \"1\",\n \"town_or_city\": \"Poole\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"83\",\n \"profileId\": \"68\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"3105\",\n \"curator\": \"1\",\n \"penner\": \"4,16,50\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1991\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"chicken offal or meat\"\n }\n },\n {\n \"id\": \"84\",\n \"profileId\": \"69\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"penner\": \"1\",\n \"year\": \"1994\",\n \"source\": \"sand (bathing beach)\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"environmental isolate\",\n \"isolate\": \"79201\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"85\",\n \"profileId\": \"47\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"penner\": \"10\",\n \"year\": \"1994\",\n \"source\": \"sand (bathing beach)\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"environmental isolate\",\n \"isolate\": \"79203\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"86\",\n \"profileId\": \"408\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"penner\": \"38\",\n \"year\": \"1994\",\n \"source\": \"sand (bathing beach)\",\n \"datestamp\": \"2001-04-25\",\n \"epidemiology\": \"environmental isolate\",\n \"isolate\": \"79228\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"88\",\n \"profileId\": \"72\",\n \"row\": {\n \"continent\": \"Oceania\",\n \"country\": \"New Zealand\",\n \"disease\": \"carrier\",\n \"penner\": \"13,50\",\n \"year\": \"1993\",\n \"source\": \"cattle\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"1441\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"90\",\n \"profileId\": \"74\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"penner\": \"5\",\n \"year\": \"1994\",\n \"source\": \"sand (bathing beach)\",\n \"datestamp\": \"2001-03-08\",\n \"epidemiology\": \"environmental isolate\",\n \"isolate\": \"79176\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-177 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"91\",\n \"profileId\": \"75\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"penner\": \"2\",\n \"year\": \"1991\",\n \"source\": \"cows milk\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"3615\",\n \"curator\": \"1\",\n \"town_or_city\": \"Manchester\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"92\",\n \"profileId\": \"76\",\n \"row\": {\n \"continent\": \"Oceania\",\n \"country\": \"New Zealand\",\n \"disease\": \"carrier\",\n \"penner\": \"2\",\n \"year\": \"1993\",\n \"source\": \"chicken\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"carrier\",\n \"isolate\": \"1434\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"93\",\n \"profileId\": \"77\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-04-25\",\n \"isolate\": \"2656\",\n \"curator\": \"1\",\n \"penner\": \"27\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1991\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"chicken offal or meat\"\n }\n },\n {\n \"id\": \"94\",\n \"profileId\": \"78\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"19\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"3779\",\n \"curator\": \"1\",\n \"town_or_city\": \"Poole\",\n \"clonal_complex (MLST)\": \"ST-22 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"95\",\n \"profileId\": \"79\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"3748\",\n \"curator\": \"1\",\n \"town_or_city\": \"Norwich\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"96\",\n \"profileId\": \"80\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-02-12\",\n \"isolate\": \"79125\",\n \"curator\": \"1\",\n \"penner\": \"2\",\n \"clonal_complex (MLST)\": \"ST-179 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1994\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"sand (bathing beach)\"\n }\n },\n {\n \"id\": \"97\",\n \"profileId\": \"177\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"datestamp\": \"2001-12-18\",\n \"isolate\": \"79260\",\n \"curator\": \"1\",\n \"penner\": \"55\",\n \"clonal_complex (MLST)\": \"ST-177 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"year\": \"1994\",\n \"date_entered\": \"2001-02-12\",\n \"source\": \"sand (bathing beach)\"\n }\n },\n {\n \"id\": \"98\",\n \"profileId\": \"48\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"aliases\": \"MFS6\",\n \"disease\": \"Miller Fisher Syndrome\",\n \"penner\": \"4,64\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"MF6\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-48 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"100\",\n \"profileId\": \"19\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"The Netherlands\",\n \"disease\": \"Guillain Barre Syndrome\",\n \"penner\": \"2\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-07-09\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"GB14\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"103\",\n \"profileId\": \"227\",\n \"row\": {\n \"country\": \"Unknown\",\n \"datestamp\": \"2001-04-24\",\n \"isolate\": \"PS4\",\n \"curator\": \"1\",\n \"penner\": \"4\",\n \"clonal_complex (MLST)\": \"ST-206 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"104\",\n \"profileId\": \"87\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"aliases\": \"ATCC43436\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"8\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-04-24\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"PS8\",\n \"curator\": \"1\",\n \"town_or_city\": \"Ottawa\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"105\",\n \"profileId\": \"88\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"42\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-04-25\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P42\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"106\",\n \"profileId\": \"89\",\n \"row\": {\n \"continent\": \"North America\",\n \"country\": \"Canada\",\n \"aliases\": \"ATCC43434\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"6\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-04-19\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"P06\",\n \"curator\": \"1\",\n \"town_or_city\": \"Ottawa\",\n \"clonal_complex (MLST)\": \"ST-45 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"107\",\n \"profileId\": \"90\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"2\",\n \"year\": \"1991\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"3897\",\n \"curator\": \"1\",\n \"town_or_city\": \"Eastbourne\",\n \"clonal_complex (MLST)\": \"ST-21 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"108\",\n \"profileId\": \"91\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK\",\n \"penner\": \"4\",\n \"year\": \"1994\",\n \"source\": \"sand (bathing beach)\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"environmental isolate\",\n \"isolate\": \"79178\",\n \"curator\": \"1\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"110\",\n \"profileId\": \"93\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"NT\",\n \"year\": \"1993\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1529\",\n \"curator\": \"1\",\n \"town_or_city\": \"Blackburn\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"111\",\n \"profileId\": \"93\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"NT\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1564\",\n \"curator\": \"1\",\n \"town_or_city\": \"Preston\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"112\",\n \"profileId\": \"93\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4c\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"1715\",\n \"curator\": \"1\",\n \"town_or_city\": \"Blackpool\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"113\",\n \"profileId\": \"93\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4c\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"2017\",\n \"curator\": \"1\",\n \"town_or_city\": \"Poole\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n },\n {\n \"id\": \"114\",\n \"profileId\": \"93\",\n \"row\": {\n \"continent\": \"Europe\",\n \"country\": \"UK [England]\",\n \"disease\": \"gastroenteritis\",\n \"penner\": \"4c\",\n \"year\": \"1992\",\n \"source\": \"human stool\",\n \"datestamp\": \"2001-02-12\",\n \"epidemiology\": \"sporadic case\",\n \"isolate\": \"2035\",\n \"curator\": \"1\",\n \"town_or_city\": \"Bath\",\n \"clonal_complex (MLST)\": \"ST-61 complex\",\n \"sender\": \"2\",\n \"species\": \"Campylobacter jejuni\",\n \"date_entered\": \"2001-02-12\"\n }\n }\n ],\n \"totalCount\": 100\n}" + } + ] + } + ] + }, + { + "name": "Typing Data", + "item": [ + { + "name": "Get Typing Data Schema", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/files/typing-data/:typingDataId", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "typing-data", + ":typingDataId" + ], + "variable": [ + { + "key": "projectId", + "value": "646279adbc88522eee347ab1" + }, + { + "key": "typingDataId", + "value": "bff2decd-9b60-4508-93b4-f1e55985e78b" + } + ] + } + }, + "response": [ + { + "name": "Get Typing Data Schema", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/files/typing-data/:typingDataId", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "typing-data", + ":typingDataId" + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "typingDataId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\r\n \"type\": \"mlst7\",\r\n \"loci\": [\r\n \"aspA\",\r\n \"glnA\",\r\n \"gltA\",\r\n \"glyA\",\r\n \"pgm\",\r\n \"tkt\",\r\n \"uncA\"\r\n ]\r\n}" + } + ] + }, + { + "name": "Get Typing Data Profiles", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/files/typing-data/:typingDataId/profiles?limit=100000&offset=0", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "typing-data", + ":typingDataId", + "profiles" + ], + "query": [ + { + "key": "limit", + "value": "100000" + }, + { + "key": "offset", + "value": "0" + } + ], + "variable": [ + { + "key": "projectId", + "value": "646279adbc88522eee347ab1" + }, + { + "key": "typingDataId", + "value": "bff2decd-9b60-4508-93b4-f1e55985e78b" + } + ] + } + }, + "response": [ + { + "name": "Get Typing Data Profiles", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{visualization_url}}/projects/:projectId/files/typing-data/:typingDataId/profiles?limit=100&offset=0", + "host": [ + "{{visualization_url}}" + ], + "path": [ + "projects", + ":projectId", + "files", + "typing-data", + ":typingDataId", + "profiles" + ], + "query": [ + { + "key": "limit", + "value": "100" + }, + { + "key": "offset", + "value": "0" + } + ], + "variable": [ + { + "key": "projectId", + "value": null + }, + { + "key": "typingDataId", + "value": null + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": "", + "type": "text" + } + ], + "cookie": [], + "body": "{\r\n \"profiles\": [\r\n {\r\n \"id\": \"1\",\r\n \"profile\": [\r\n \"2\",\r\n \"1\",\r\n \"54\",\r\n \"3\",\r\n \"4\",\r\n \"1\",\r\n \"5\"\r\n ]\r\n },\r\n {\r\n \"id\": \"2\",\r\n \"profile\": [\r\n \"4\",\r\n \"7\",\r\n \"51\",\r\n \"4\",\r\n \"1\",\r\n \"7\",\r\n \"1\"\r\n ]\r\n }\r\n ],\r\n \"totalCount\": 2\r\n}" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "Extra", + "item": [ + { + "name": "Keycloak", + "item": [ + { + "name": "Nyck Keycloak", + "item": [ + { + "name": "Keycloak create access token with password grant type", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "const json = JSON.parse(responseBody);\r", + "\r", + "if (json[\"access_token\"]){\r", + " pm.collectionVariables.set(\"test_access_token\", json[\"access_token\"]);\r", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/x-www-form-urlencoded" + } + ], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "client_id", + "value": "{{KEYCLOAK_CLIENT_ID}}", + "type": "text" + }, + { + "key": "client_secret", + "value": "gmaFeUwf9AXnxMaQyTuXEtTAgbJlBpgy", + "type": "text" + }, + { + "key": "grant_type", + "value": "password", + "type": "text" + }, + { + "key": "scope", + "value": "openid email roles profile", + "type": "text" + }, + { + "key": "username", + "value": "nyckoka", + "type": "text" + }, + { + "key": "password", + "value": "andrepascoa", + "type": "text" + } + ] + }, + "url": { + "raw": "{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/token", + "host": [ + "{{KEYCLOAK_URL}}" + ], + "path": [ + "realms", + "phyloviz-web-platform", + "protocol", + "openid-connect", + "token" + ] + } + }, + "response": [] + }, + { + "name": "Create access token with device grant", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "const json = JSON.parse(responseBody);\r", + "\r", + "if (json[\"device_code\"]){\r", + " pm.collectionVariables.set(\"test_device_code\", json[\"device_code\"]);\r", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/x-www-form-urlencoded" + } + ], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "client_id", + "value": "{{KEYCLOAK_CLIENT_ID}}", + "type": "text" + }, + { + "key": "client_secret", + "value": "pZW9kZ05jHjLiOlYYhBAa9CGk1uL7bob", + "type": "text" + } + ] + }, + "url": { + "raw": "{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/auth/device", + "host": [ + "{{KEYCLOAK_URL}}" + ], + "path": [ + "realms", + "phyloviz-web-platform", + "protocol", + "openid-connect", + "auth", + "device" + ] + } + }, + "response": [] + }, + { + "name": "Poll Keycloak token", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "const json = JSON.parse(responseBody);\r", + "\r", + "if (json[\"access_token\"]){\r", + " pm.collectionVariables.set(\"test_access_token\", json[\"access_token\"]);\r", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/x-www-form-urlencoded" + } + ], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "device_code", + "value": "{{test_device_code}}", + "type": "text" + }, + { + "key": "client_id", + "value": "{{KEYCLOAK_CLIENT_ID}}", + "type": "text" + }, + { + "key": "client_secret", + "value": "pZW9kZ05jHjLiOlYYhBAa9CGk1uL7bob", + "type": "text" + }, + { + "key": "grant_type", + "value": "urn:ietf:params:oauth:grant-type:device_code", + "type": "text" + } + ] + }, + "url": { + "raw": "{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/token", + "host": [ + "{{KEYCLOAK_URL}}" + ], + "path": [ + "realms", + "phyloviz-web-platform", + "protocol", + "openid-connect", + "token" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Páscoa Keycloak", + "item": [ + { + "name": "Keycloak create access token with password grant type", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "const json = JSON.parse(responseBody);\r", + "\r", + "if (json[\"access_token\"]){\r", + " pm.collectionVariables.set(\"test_access_token\", json[\"access_token\"]);\r", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/x-www-form-urlencoded" + } + ], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "client_id", + "value": "{{KEYCLOAK_CLIENT_ID}}", + "type": "text" + }, + { + "key": "client_secret", + "value": "whCCD9r37qj8mx9H7R4mzIrSezYf3H7R", + "type": "text" + }, + { + "key": "grant_type", + "value": "password", + "type": "text" + }, + { + "key": "scope", + "value": "openid email roles profile", + "type": "text" + }, + { + "key": "username", + "value": "devandrepascoa", + "type": "text" + }, + { + "key": "password", + "value": "andrepascoa", + "type": "text" + } + ] + }, + "url": { + "raw": "http://{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/token", + "protocol": "http", + "host": [ + "{{KEYCLOAK_URL}}" + ], + "path": [ + "realms", + "phyloviz-web-platform", + "protocol", + "openid-connect", + "token" + ] + } + }, + "response": [] + }, + { + "name": "Create access token with device grant", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "const json = JSON.parse(responseBody);\r", + "\r", + "if (json[\"device_code\"]){\r", + " pm.collectionVariables.set(\"test_device_code\", json[\"device_code\"]);\r", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/x-www-form-urlencoded" + } + ], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "client_id", + "value": "{{KEYCLOAK_CLIENT_ID}}", + "type": "text" + }, + { + "key": "client_secret", + "value": "whCCD9r37qj8mx9H7R4mzIrSezYf3H7R", + "type": "text" + } + ] + }, + "url": { + "raw": "http://{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/auth/device", + "protocol": "http", + "host": [ + "{{KEYCLOAK_URL}}" + ], + "path": [ + "realms", + "phyloviz-web-platform", + "protocol", + "openid-connect", + "auth", + "device" + ] + } + }, + "response": [] + }, + { + "name": "Poll Keycloak token", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "const json = JSON.parse(responseBody);\r", + "\r", + "if (json[\"access_token\"]){\r", + " pm.collectionVariables.set(\"test_access_token\", json[\"access_token\"]);\r", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/x-www-form-urlencoded" + } + ], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "device_code", + "value": "{{test_device_code}}", + "type": "text" + }, + { + "key": "client_id", + "value": "{{KEYCLOAK_CLIENT_ID}}", + "type": "text" + }, + { + "key": "client_secret", + "value": "whCCD9r37qj8mx9H7R4mzIrSezYf3H7R", + "type": "text" + }, + { + "key": "grant_type", + "value": "urn:ietf:params:oauth:grant-type:device_code", + "type": "text" + } + ] + }, + "url": { + "raw": "http://{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/token", + "protocol": "http", + "host": [ + "{{KEYCLOAK_URL}}" + ], + "path": [ + "realms", + "phyloviz-web-platform", + "protocol", + "openid-connect", + "token" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Jesus Keycloak", + "item": [ + { + "name": "Keycloak create access token with password grant type", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "const json = JSON.parse(responseBody);\r", + "\r", + "if (json[\"access_token\"]){\r", + " pm.collectionVariables.set(\"test_access_token\", json[\"access_token\"]);\r", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/x-www-form-urlencoded" + } + ], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "client_id", + "value": "{{KEYCLOAK_CLIENT_ID}}", + "type": "text" + }, + { + "key": "client_secret", + "value": "pZW9kZ05jHjLiOlYYhBAa9CGk1uL7bob", + "type": "text" + }, + { + "key": "grant_type", + "value": "password", + "type": "text" + }, + { + "key": "scope", + "value": "openid email roles profile", + "type": "text" + }, + { + "key": "username", + "value": "devandrepascoa", + "type": "text" + }, + { + "key": "password", + "value": "andrepascoa", + "type": "text" + } + ] + }, + "url": { + "raw": "http://{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/token", + "protocol": "http", + "host": [ + "{{KEYCLOAK_URL}}" + ], + "path": [ + "realms", + "phyloviz-web-platform", + "protocol", + "openid-connect", + "token" + ] + } + }, + "response": [] + }, + { + "name": "Create access token with device grant", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "const json = JSON.parse(responseBody);\r", + "\r", + "if (json[\"device_code\"]){\r", + " pm.collectionVariables.set(\"test_device_code\", json[\"device_code\"]);\r", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/x-www-form-urlencoded" + } + ], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "client_id", + "value": "{{KEYCLOAK_CLIENT_ID}}", + "type": "text" + }, + { + "key": "client_secret", + "value": "pZW9kZ05jHjLiOlYYhBAa9CGk1uL7bob", + "type": "text" + } + ] + }, + "url": { + "raw": "http://{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/auth/device", + "protocol": "http", + "host": [ + "{{KEYCLOAK_URL}}" + ], + "path": [ + "realms", + "phyloviz-web-platform", + "protocol", + "openid-connect", + "auth", + "device" + ] + } + }, + "response": [] + }, + { + "name": "Poll Keycloak token", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "const json = JSON.parse(responseBody);\r", + "\r", + "if (json[\"access_token\"]){\r", + " pm.collectionVariables.set(\"test_access_token\", json[\"access_token\"]);\r", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/x-www-form-urlencoded" + } + ], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "device_code", + "value": "{{test_device_code}}", + "type": "text" + }, + { + "key": "client_id", + "value": "{{KEYCLOAK_CLIENT_ID}}", + "type": "text" + }, + { + "key": "client_secret", + "value": "pZW9kZ05jHjLiOlYYhBAa9CGk1uL7bob", + "type": "text" + }, + { + "key": "grant_type", + "value": "urn:ietf:params:oauth:grant-type:device_code", + "type": "text" + } + ] + }, + "url": { + "raw": "http://{{KEYCLOAK_URL}}/realms/phyloviz-web-platform/protocol/openid-connect/token", + "protocol": "http", + "host": [ + "{{KEYCLOAK_URL}}" + ], + "path": [ + "realms", + "phyloviz-web-platform", + "protocol", + "openid-connect", + "token" + ] + } + }, + "response": [] + } + ] + } + ] + }, + { + "name": "Openstack", + "item": [ + { + "name": "Login", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"auth\": {\r\n \"identity\": {\r\n \"methods\": [\"password\"],\r\n \"password\": {\r\n \"user\": {\r\n \"name\": \"admin\",\r\n \"domain\": {\r\n \"name\": \"Default\"\r\n },\r\n \"password\": \"secret\"\r\n }\r\n }\r\n },\r\n \"scope\": \"unscoped\"\r\n }\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://{{OPENSTACK_URL}}/identity/v3/auth/tokens", + "protocol": "http", + "host": [ + "{{OPENSTACK_URL}}" + ], + "path": [ + "identity", + "v3", + "auth", + "tokens" + ] + } + }, + "response": [] + } + ] + } + ] + } + ], + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{test_access_token}}", + "type": "string" + } + ] + }, + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + } + ], + "variable": [ + { + "key": "visualization_url", + "value": "localhost:8085", + "type": "string" + }, + { + "key": "compute_url", + "value": "localhost:8086", + "type": "string" + }, + { + "key": "downloader_url", + "value": "localhost:8087", + "type": "string" + }, + { + "key": "administration_url", + "value": "localhost:8088", + "type": "string" + }, + { + "key": "file_transfer_url", + "value": "localhost:8089", + "type": "string" + }, + { + "key": "test_device_code", + "value": "" + }, + { + "key": "test_access_token", + "value": "" + }, + { + "key": "KEYCLOAK_URL", + "value": "localhost:8082", + "type": "string" + }, + { + "key": "KEYCLOAK_CLIENT_ID", + "value": "phyloviz-web-platform-client", + "type": "string" + }, + { + "key": "KEYCLOAK_CLIENT_SECRET", + "value": "pZW9kZ05jHjLiOlYYhBAa9CGk1uL7bob", + "type": "string" + }, + { + "key": "OPENSTACK_URL", + "value": "192.168.1.93", + "type": "string" + } + ] } \ No newline at end of file diff --git a/src/backend/microservices/administration/Dockerfile b/src/backend/microservices/administration/Dockerfile deleted file mode 100644 index 868b03da..00000000 --- a/src/backend/microservices/administration/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM openjdk:17-jdk-alpine -COPY build/libs/administration-0.0.1-SNAPSHOT.jar /app.jar - -ENTRYPOINT ["java", "-jar", "/app.jar"] \ No newline at end of file diff --git a/src/backend/microservices/administration/build.gradle b/src/backend/microservices/administration/build.gradle deleted file mode 100644 index 9efebb93..00000000 --- a/src/backend/microservices/administration/build.gradle +++ /dev/null @@ -1,41 +0,0 @@ -plugins { - id 'application' - id 'org.springframework.boot' version '3.0.4' - id 'io.spring.dependency-management' version '1.1.0' - id "io.freefair.lombok" version "8.0.0-rc2" -} - -group 'phylovizwebplatform' -version '0.0.1-SNAPSHOT' -sourceCompatibility = '17' - -ext { - set('jupiterVersion', "5.8.1") -} - -repositories { - mavenCentral() -} - -dependencies { - implementation project(path: ':microservices:shared-phylodb') - implementation project(path: ':microservices:shared') - - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'org.junit.jupiter:junit-jupiter-api' version { jupiterVersion } - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' version { jupiterVersion } - - implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' - - implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2' - implementation 'org.zalando:problem-spring-web-starter:0.27.0' - - implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.6' - testImplementation 'junit:junit:4.13.1' -} - -test { - useJUnitPlatform() -} \ No newline at end of file diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/AdministrationMicroserviceApplication.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/AdministrationMicroserviceApplication.java deleted file mode 100644 index 26d6f5d2..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/AdministrationMicroserviceApplication.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.phyloviz.pwp.administration; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * Main class for the Administration Microservice of the PHYLOViZ Web Platform. - */ -@SpringBootApplication -public class AdministrationMicroserviceApplication { - - /** - * Entry point for the Administration Microservice. - * - * @param args arguments passed to the application - */ - public static void main(String[] args) { - SpringApplication.run(AdministrationMicroserviceApplication.class, args); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/config/AdministrationConfig.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/config/AdministrationConfig.java deleted file mode 100644 index a536db07..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/config/AdministrationConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.phyloviz.pwp.administration.config; - -import org.phyloviz.pwp.shared.config.ResourceServerSharedConfig; -import org.phyloviz.pwp.shared_phylodb.config.ResourceServerSharedPhylodbConfig; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; - -/** - * Configuration class for the Administration Microservice. - */ -@Configuration -@Import({ResourceServerSharedConfig.class, ResourceServerSharedPhylodbConfig.class}) -public class AdministrationConfig { -} \ No newline at end of file diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/ProjectsController.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/ProjectsController.java deleted file mode 100644 index 408dad95..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/ProjectsController.java +++ /dev/null @@ -1,137 +0,0 @@ -package org.phyloviz.pwp.administration.http.controllers.projects; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.http.models.projects.create_project.CreateProjectInputModel; -import org.phyloviz.pwp.administration.http.models.projects.create_project.CreateProjectOutputModel; -import org.phyloviz.pwp.administration.http.models.projects.delete_project.DeleteProjectOutputModel; -import org.phyloviz.pwp.administration.http.models.projects.get_project.GetProjectOutputModel; -import org.phyloviz.pwp.administration.http.models.projects.get_projects.GetProjectsOutputModel; -import org.phyloviz.pwp.administration.http.models.projects.update_project.UpdateProjectInputModel; -import org.phyloviz.pwp.administration.http.models.projects.update_project.UpdateProjectOutputModel; -import org.phyloviz.pwp.administration.service.dtos.project.CreateProjectOutput; -import org.phyloviz.pwp.administration.service.dtos.project.FullProjectInfo; -import org.phyloviz.pwp.administration.service.dtos.project.UpdateProjectOutput; -import org.phyloviz.pwp.administration.service.project.ProjectService; -import org.phyloviz.pwp.shared.domain.User; -import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.support.ServletUriComponentsBuilder; - -import java.net.URI; -import java.util.List; - -/** - * Controller that handles requests related to projects. - */ -@RestController -@RequiredArgsConstructor -public class ProjectsController { - - private final ProjectService projectService; - - /** - * Creates a project. - * - * @param createProjectInputModel the input model containing the data of the project to be created - * @param user the user that is creating the project - * @return the output model containing the data of the created project - */ - @PostMapping("/projects") - public ResponseEntity createProject( - @RequestBody CreateProjectInputModel createProjectInputModel, - User user - ) { - CreateProjectOutput createProjectOutput = projectService.createProject( - createProjectInputModel.getName(), - createProjectInputModel.getDescription(), - user.getId() - ); - - URI location = ServletUriComponentsBuilder.fromCurrentRequest() - .path("/{projectId}") - .buildAndExpand(createProjectOutput.getProjectId()) - .toUri(); - - return ResponseEntity - .created(location) - .body(new CreateProjectOutputModel(createProjectOutput)); - } - - /** - * Gets a project. - * - * @param projectId the id of the project to be retrieved - * @param user the user that is retrieving the project - * @return the project - */ - @GetMapping("/projects/{projectId}") - public GetProjectOutputModel getProject( - @PathVariable String projectId, - User user - ) { - FullProjectInfo fullProjectInfo = projectService.getFullProjectInfo(projectId, user.getId()); - - return new GetProjectOutputModel(fullProjectInfo); - } - - /** - * Deletes a project. - * - * @param projectId the id of the project to be deleted - * @param user the user that is deleting the project - * @return the output model containing the data of the deleted project - */ - @DeleteMapping("/projects/{projectId}") - public DeleteProjectOutputModel deleteProject( - @PathVariable String projectId, - User user - ) { - projectService.deleteProject(projectId, user.getId()); - - return new DeleteProjectOutputModel(projectId); - } - - /** - * Updates a project. - * - * @param projectId the id of the project to be updated - * @param user the user that is updating the project - * @return information about the update - */ - @PatchMapping("/projects/{projectId}") - public UpdateProjectOutputModel updateProject( - @PathVariable String projectId, - @RequestBody UpdateProjectInputModel updateProjectInputModel, - User user - ) { - UpdateProjectOutput updateProjectOutput = projectService.updateProject( - updateProjectInputModel.getName(), - updateProjectInputModel.getDescription(), - projectId, user.getId() - ); - - return new UpdateProjectOutputModel(updateProjectOutput); - } - - /** - * Gets all projects belonging to a certain user. - * - * @param user the user that is retrieving the projects - * @return the projects - */ - @GetMapping("/projects") - public GetProjectsOutputModel getProjects( - User user - ) { - List projects = projectService.getProjects(user.getId()); - - return new GetProjectsOutputModel(projects); - } -} \ No newline at end of file diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/DatasetsController.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/DatasetsController.java deleted file mode 100644 index c593dcef..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/DatasetsController.java +++ /dev/null @@ -1,177 +0,0 @@ -package org.phyloviz.pwp.administration.http.controllers.projects.datasets; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.http.models.datasets.create_dataset.CreateDatasetInputModel; -import org.phyloviz.pwp.administration.http.models.datasets.create_dataset.CreateDatasetOutputModel; -import org.phyloviz.pwp.administration.http.models.datasets.delete_dataset.DeleteDatasetOutputModel; -import org.phyloviz.pwp.administration.http.models.datasets.get_dataset.GetDatasetOutputModel; -import org.phyloviz.pwp.administration.http.models.datasets.get_datasets.GetDatasetsOutputModel; -import org.phyloviz.pwp.administration.http.models.datasets.set_isolate_data_of_dataset.SetIsolateDataOfDatasetInputModel; -import org.phyloviz.pwp.administration.http.models.datasets.set_isolate_data_of_dataset.SetIsolateDataOfDatasetOutputModel; -import org.phyloviz.pwp.administration.http.models.datasets.update_dataset.UpdateDatasetInputModel; -import org.phyloviz.pwp.administration.http.models.datasets.update_dataset.UpdateDatasetOutputModel; -import org.phyloviz.pwp.administration.service.dtos.dataset.CreateDatasetOutput; -import org.phyloviz.pwp.administration.service.dtos.dataset.FullDatasetInfo; -import org.phyloviz.pwp.administration.service.dtos.dataset.SetIsolateDataOfDatasetOutput; -import org.phyloviz.pwp.administration.service.dtos.dataset.UpdateDatasetOutput; -import org.phyloviz.pwp.administration.service.project.dataset.DatasetService; -import org.phyloviz.pwp.shared.domain.User; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.support.ServletUriComponentsBuilder; - -import java.net.URI; -import java.util.List; - -/** - * Controller that handles requests related to datasets. - */ -@RestController -@RequiredArgsConstructor -public class DatasetsController { - - private final DatasetService datasetService; - - /** - * Creates a dataset. - * - * @param projectId the id of the project to which the dataset will belong - * @param createDatasetInputModel the dataset information - * @param user the user that is creating the dataset - * @return the created dataset - */ - @PostMapping("/projects/{projectId}/datasets") - public ResponseEntity createDataset( - @PathVariable String projectId, - @RequestBody CreateDatasetInputModel createDatasetInputModel, - User user - ) { - CreateDatasetOutput createDatasetOutput = datasetService.createDataset( - createDatasetInputModel.getName(), - createDatasetInputModel.getDescription(), - createDatasetInputModel.getTypingDataId(), - createDatasetInputModel.getIsolateDataId(), - createDatasetInputModel.getIsolateDataKey(), - projectId, - user.getId() - ); - - URI location = ServletUriComponentsBuilder.fromCurrentRequest() - .path("/{datasetId}") - .buildAndExpand(createDatasetOutput.getDatasetId()) - .toUri(); - - return ResponseEntity - .created(location) - .body(new CreateDatasetOutputModel(createDatasetOutput)); - } - - /** - * Gets a dataset. - * - * @param projectId the id of the project to which the dataset belongs - * @param datasetId the id of the dataset to be retrieved - * @param user the user that is retrieving the dataset - * @return the dataset - */ - @GetMapping("/projects/{projectId}/datasets/{datasetId}") - public GetDatasetOutputModel getDataset( - @PathVariable String projectId, - @PathVariable String datasetId, - User user - ) { - FullDatasetInfo fullDatasetInfo = datasetService.getFullDatasetInfo(projectId, datasetId, user.getId()); - - return new GetDatasetOutputModel(fullDatasetInfo); - } - - /** - * Deletes a dataset. - * - * @param projectId the id of the project to which the dataset belongs - * @param datasetId the id of the dataset to be deleted - * @param user the user that is deleting the dataset - * @return the deleted dataset - */ - @DeleteMapping("/projects/{projectId}/datasets/{datasetId}") - public DeleteDatasetOutputModel deleteDataset( - @PathVariable String projectId, - @PathVariable String datasetId, - User user - ) { - datasetService.deleteDataset(projectId, datasetId, user.getId()); - - return new DeleteDatasetOutputModel(projectId, datasetId); - } - - /** - * Updates a dataset. - * - * @param projectId the id of the project to which the dataset belongs - * @param datasetId the id of the dataset to be updated - * @param inputModel the input model with the dataset information to be updated - * @param user the user that is updating the dataset - * @return information about the update - */ - @PatchMapping("/projects/{projectId}/datasets/{datasetId}") - public UpdateDatasetOutputModel updateDataset( - @PathVariable String projectId, - @PathVariable String datasetId, - @RequestBody UpdateDatasetInputModel inputModel, - User user - ) { - UpdateDatasetOutput updateDatasetOutput = datasetService.updateDataset( - inputModel.getName(), inputModel.getDescription(), - projectId, datasetId, user.getId() - ); - - return new UpdateDatasetOutputModel(updateDatasetOutput); - } - - /** - * Sets the isolate data of a dataset. - * - * @param projectId the id of the project to which the dataset belongs - * @param datasetId the id of the dataset to be updated - * @param inputModel the input model with the isolate data information to be set - * @param user the user that is updating the dataset - * @return information about the update - */ - @PostMapping("/projects/{projectId}/datasets/{datasetId}/isolateData") - public SetIsolateDataOfDatasetOutputModel setIsolateDataOfDataset( - @PathVariable String projectId, - @PathVariable String datasetId, - @RequestBody SetIsolateDataOfDatasetInputModel inputModel, - User user - ) { - SetIsolateDataOfDatasetOutput setIsolateDataOfDatasetOutput = datasetService.setIsolateDataOfDataset( - inputModel.getIsolateDataId(), inputModel.getIsolateDataKey(), - projectId, datasetId, user.getId() - ); - - return new SetIsolateDataOfDatasetOutputModel(setIsolateDataOfDatasetOutput); - } - - /** - * Gets all datasets belonging to a certain project. - * - * @param projectId the id of the project to which the datasets belong - * @param user the user that is retrieving the datasets - * @return the datasets - */ - @GetMapping("/projects/{projectId}/datasets") - public GetDatasetsOutputModel getDatasets( - @PathVariable String projectId, - User user - ) { - List fullDatasetInfos = datasetService.getFullDatasetInfos(projectId, user.getId()); - - return new GetDatasetsOutputModel(fullDatasetInfos); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java deleted file mode 100644 index b2ecec63..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.phyloviz.pwp.administration.http.controllers.projects.datasets.distance_matrices; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.http.models.distance_matrices.delete_distance_matrix.DeleteDistanceMatrixOutputModel; -import org.phyloviz.pwp.administration.http.models.distance_matrices.update_distance_matrix.UpdateDistanceMatrixInputModel; -import org.phyloviz.pwp.administration.http.models.distance_matrices.update_distance_matrix.UpdateDistanceMatrixOutputModel; -import org.phyloviz.pwp.administration.service.dtos.distance_matrix.UpdateDistanceMatrixOutput; -import org.phyloviz.pwp.administration.service.project.dataset.distance_matrix.DistanceMatrixService; -import org.phyloviz.pwp.shared.domain.User; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -/** - * Controller that handles requests related to distance matrices. - */ -@RestController -@RequiredArgsConstructor -public class DistanceMatricesController { - - private final DistanceMatrixService distanceMatrixService; - - /** - * Deletes a distance matrix. - * - * @param projectId the id of the project that contains the distance matrix - * @param datasetId the id of the dataset that contains the distance matrix - * @param distanceMatrixId the id of the distance matrix to be deleted - * @param user the user that is deleting the distance matrix - * @return information about the deleted distance matrix - */ - @DeleteMapping("/projects/{projectId}/datasets/{datasetId}/distance-matrices/{distanceMatrixId}") - public DeleteDistanceMatrixOutputModel deleteDistanceMatrix( - @PathVariable String projectId, - @PathVariable String datasetId, - @PathVariable String distanceMatrixId, - User user - ) { - distanceMatrixService.deleteDistanceMatrix(projectId, datasetId, distanceMatrixId, user.getId()); - - return new DeleteDistanceMatrixOutputModel(projectId, datasetId, distanceMatrixId); - } - - /** - * Updates a distance matrix. - * - * @param projectId the id of the project that contains the distance matrix - * @param datasetId the id of the dataset that contains the distance matrix - * @param distanceMatrixId the id of the distance matrix to be updated - * @param user the user that is updating the distance matrix - * @return information about the updated distance matrix - */ - @PatchMapping("/projects/{projectId}/datasets/{datasetId}/distance-matrices/{distanceMatrixId}") - public UpdateDistanceMatrixOutputModel updateDistanceMatrix( - @PathVariable String projectId, - @PathVariable String datasetId, - @PathVariable String distanceMatrixId, - @RequestBody UpdateDistanceMatrixInputModel updateDistanceMatrixInputModel, - User user - ) { - UpdateDistanceMatrixOutput updateDistanceMatrixOutput = distanceMatrixService.updateDistanceMatrix( - updateDistanceMatrixInputModel.getName(), projectId, datasetId, distanceMatrixId, user.getId() - ); - - return new UpdateDistanceMatrixOutputModel(updateDistanceMatrixOutput); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/tree_views/TreeViewsController.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/tree_views/TreeViewsController.java deleted file mode 100644 index 1dc4d94c..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/tree_views/TreeViewsController.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.phyloviz.pwp.administration.http.controllers.projects.datasets.tree_views; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.http.models.tree_views.delete_tree_view.DeleteTreeViewOutputModel; -import org.phyloviz.pwp.administration.http.models.tree_views.update_tree_view.UpdateTreeViewInputModel; -import org.phyloviz.pwp.administration.http.models.tree_views.update_tree_view.UpdateTreeViewOutputModel; -import org.phyloviz.pwp.administration.service.dtos.tree_view.UpdateTreeViewOutput; -import org.phyloviz.pwp.administration.service.project.dataset.tree_view.TreeViewService; -import org.phyloviz.pwp.shared.domain.User; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -/** - * Controller that handles requests related to tree views. - */ -@RestController -@RequiredArgsConstructor -public class TreeViewsController { - - private final TreeViewService treeViewService; - - /** - * Deletes a tree view. - * - * @param projectId the id of the project that contains the tree view - * @param datasetId the id of the dataset that contains the tree view - * @param treeViewId the id of the tree view to be deleted - * @param user the user that is deleting the tree view - * @return information about the deleted tree view - */ - @DeleteMapping("/projects/{projectId}/datasets/{datasetId}/tree-views/{treeViewId}") - public DeleteTreeViewOutputModel deleteTreeView( - @PathVariable String projectId, - @PathVariable String datasetId, - @PathVariable String treeViewId, - User user - ) { - treeViewService.deleteTreeView(projectId, datasetId, treeViewId, user.getId()); - - return new DeleteTreeViewOutputModel(projectId, datasetId, treeViewId); - } - - /** - * Updates a tree view. - * - * @param projectId the id of the project that contains the tree view - * @param datasetId the id of the dataset that contains the tree view - * @param treeViewId the id of the tree view to be updated - * @param user the user that is updating the tree view - * @return information about the updated tree view - */ - @PatchMapping("/projects/{projectId}/datasets/{datasetId}/tree-views/{treeViewId}") - public UpdateTreeViewOutputModel updateTreeView( - @PathVariable String projectId, - @PathVariable String datasetId, - @PathVariable String treeViewId, - @RequestBody UpdateTreeViewInputModel updateTreeViewInputModel, - User user - ) { - UpdateTreeViewOutput updateTreeViewOutput = treeViewService.updateTreeView( - updateTreeViewInputModel.getName(), projectId, datasetId, treeViewId, user.getId() - ); - - return new UpdateTreeViewOutputModel(updateTreeViewOutput); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/trees/TreesController.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/trees/TreesController.java deleted file mode 100644 index a7909970..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/datasets/trees/TreesController.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.phyloviz.pwp.administration.http.controllers.projects.datasets.trees; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.http.models.trees.delete_tree.DeleteTreeOutputModel; -import org.phyloviz.pwp.administration.http.models.trees.update_tree_view.UpdateTreeInputModel; -import org.phyloviz.pwp.administration.http.models.trees.update_tree_view.UpdateTreeOutputModel; -import org.phyloviz.pwp.administration.service.dtos.tree.UpdateTreeOutput; -import org.phyloviz.pwp.administration.service.project.dataset.tree.TreeService; -import org.phyloviz.pwp.shared.domain.User; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -/** - * Controller that handles requests related to trees. - */ -@RestController -@RequiredArgsConstructor -public class TreesController { - - private final TreeService treeService; - - /** - * Deletes a tree. - * - * @param projectId the id of the project that contains the tree - * @param datasetId the id of the dataset that contains the tree - * @param treeId the id of the tree to be deleted - * @param user the user that is deleting the tree - * @return information about the deleted tree - */ - @DeleteMapping("/projects/{projectId}/datasets/{datasetId}/trees/{treeId}") - public DeleteTreeOutputModel deleteTree( - @PathVariable String projectId, - @PathVariable String datasetId, - @PathVariable String treeId, - User user - ) { - treeService.deleteTree(projectId, datasetId, treeId, user.getId()); - - return new DeleteTreeOutputModel(projectId, datasetId, treeId); - } - - /** - * Updates a tree. - * - * @param projectId the id of the project that contains the tree - * @param datasetId the id of the dataset that contains the tree - * @param treeId the id of the tree to be updated - * @param user the user that is updating the tree - * @return information about the updated tree - */ - @PatchMapping("/projects/{projectId}/datasets/{datasetId}/trees/{treeId}") - public UpdateTreeOutputModel updateTree( - @PathVariable String projectId, - @PathVariable String datasetId, - @PathVariable String treeId, - @RequestBody UpdateTreeInputModel updateTreeInputModel, - User user - ) { - UpdateTreeOutput updateTreeOutput = treeService.updateTree( - updateTreeInputModel.getName(), projectId, datasetId, treeId, user.getId() - ); - - return new UpdateTreeOutputModel(updateTreeOutput); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/files/FilesController.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/files/FilesController.java deleted file mode 100644 index a84be807..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/controllers/projects/files/FilesController.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.phyloviz.pwp.administration.http.controllers.projects.files; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.administration.http.models.files.isolate_data.delete_isolate_data.DeleteIsolateDataOutputModel; -import org.phyloviz.pwp.administration.http.models.files.isolate_data.update_isolate_data.UpdateIsolateDataInputModel; -import org.phyloviz.pwp.administration.http.models.files.isolate_data.update_isolate_data.UpdateIsolateDataOutputModel; -import org.phyloviz.pwp.administration.http.models.files.typing_data.delete_typing_data.DeleteTypingDataOutputModel; -import org.phyloviz.pwp.administration.http.models.files.typing_data.update_typing_data.UpdateTypingDataInputModel; -import org.phyloviz.pwp.administration.http.models.files.typing_data.update_typing_data.UpdateTypingDataOutputModel; -import org.phyloviz.pwp.administration.service.dtos.files.isolate_data.UpdateIsolateDataOutput; -import org.phyloviz.pwp.administration.service.dtos.files.typing_data.UpdateTypingDataOutput; -import org.phyloviz.pwp.administration.service.project.file.IsolateDataService; -import org.phyloviz.pwp.administration.service.project.file.TypingDataService; -import org.phyloviz.pwp.shared.domain.User; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -/** - * Controller that handles requests related to files. - */ -@RestController -@RequiredArgsConstructor -public class FilesController { - - private final TypingDataService typingDataService; - private final IsolateDataService isolateDataService; - - /** - * Deletes a typing data file. - * - * @param projectId the id of the project to which the typing data file belongs - * @param typingDataId the id of the typing data file to be deleted - * @param user the user that is deleting the typing data file - * @return information about the deleted typing data file - */ - @DeleteMapping("/projects/{projectId}/files/typing-data/{typingDataId}") - public DeleteTypingDataOutputModel deleteTypingData( - @PathVariable String projectId, - @PathVariable String typingDataId, - User user - ) { - typingDataService.deleteTypingData(projectId, typingDataId, user.getId()); - - return new DeleteTypingDataOutputModel(projectId, typingDataId); - } - - /** - * Deletes an isolate data file. - * - * @param projectId the id of the project to which the isolate data file belongs - * @param isolateDataId the id of the isolate data file to be deleted - * @param user the user that is deleting the isolate data file - * @return information about the deleted isolate data file - */ - @DeleteMapping("/projects/{projectId}/files/isolate-data/{isolateDataId}") - public DeleteIsolateDataOutputModel deleteIsolateData( - @PathVariable String projectId, - @PathVariable String isolateDataId, - User user - ) { - isolateDataService.deleteIsolateData(projectId, isolateDataId, user.getId()); - - return new DeleteIsolateDataOutputModel(projectId, isolateDataId); - } - - /** - * Updates a typing data file. - * - * @param projectId the id of the project to which the typing data file belongs - * @param typingDataId the id of the typing data file to be updated - * @param user the user that is updating the typing data file - * @return information about the updated typing data file - */ - @PatchMapping("/projects/{projectId}/files/typing-data/{typingDataId}") - public UpdateTypingDataOutputModel updateTypingData( - @PathVariable String projectId, - @PathVariable String typingDataId, - @RequestBody UpdateTypingDataInputModel updateTypingDataInputModel, - User user - ) { - UpdateTypingDataOutput updateTypingDataOutput = typingDataService.updateTypingData( - updateTypingDataInputModel.getName(), projectId, typingDataId, user.getId() - ); - - return new UpdateTypingDataOutputModel(updateTypingDataOutput); - } - - /** - * Updates a isolate data file. - * - * @param projectId the id of the project to which the isolate data file belongs - * @param isolateDataId the id of the isolate data file to be updated - * @param user the user that is updating the isolate data file - * @return information about the updated isolate data file - */ - @PatchMapping("/projects/{projectId}/files/isolate-data/{isolateDataId}") - public UpdateIsolateDataOutputModel updateIsolateData( - @PathVariable String projectId, - @PathVariable String isolateDataId, - @RequestBody UpdateIsolateDataInputModel updateIsolateDataInputModel, - User user - ) { - UpdateIsolateDataOutput updateIsolateDataOutput = isolateDataService.updateIsolateData( - updateIsolateDataInputModel.getName(), projectId, isolateDataId, user.getId() - ); - - return new UpdateIsolateDataOutputModel(updateIsolateDataOutput); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/DatasetModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/DatasetModel.java deleted file mode 100644 index f4cacdee..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/DatasetModel.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.datasets; - -import lombok.Data; -import org.phyloviz.pwp.administration.http.models.distance_matrices.DistanceMatrixOutputModel; -import org.phyloviz.pwp.administration.http.models.tree_views.TreeViewOutputModel; -import org.phyloviz.pwp.administration.http.models.trees.TreeOutputModel; -import org.phyloviz.pwp.administration.service.dtos.dataset.FullDatasetInfo; - -import java.util.List; - -@Data -public class DatasetModel { - private String datasetId; - private String name; - private String description; - private String typingDataId; - private String isolateDataId; - private String isolateDataKey; - private List distanceMatrices; - private List trees; - private List treeViews; - - public DatasetModel(FullDatasetInfo fullDatasetInfo) { - this.datasetId = fullDatasetInfo.getDatasetId(); - this.name = fullDatasetInfo.getName(); - this.description = fullDatasetInfo.getDescription(); - this.typingDataId = fullDatasetInfo.getTypingDataId(); - this.isolateDataId = fullDatasetInfo.getIsolateDataId(); - this.isolateDataKey = fullDatasetInfo.getIsolateDataKey(); - this.distanceMatrices = fullDatasetInfo.getDistanceMatrices().stream().map(DistanceMatrixOutputModel::new).toList(); - this.trees = fullDatasetInfo.getTrees().stream().map(TreeOutputModel::new).toList(); - this.treeViews = fullDatasetInfo.getTreeViews().stream().map(TreeViewOutputModel::new).toList(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/create_dataset/CreateDatasetInputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/create_dataset/CreateDatasetInputModel.java deleted file mode 100644 index 72eabffd..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/create_dataset/CreateDatasetInputModel.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.datasets.create_dataset; - -import lombok.Data; - -@Data -public class CreateDatasetInputModel { - private String name; - private String description; - private String typingDataId; - private String isolateDataId; - private String isolateDataKey; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/create_dataset/CreateDatasetOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/create_dataset/CreateDatasetOutputModel.java deleted file mode 100644 index facfb555..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/create_dataset/CreateDatasetOutputModel.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.datasets.create_dataset; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.dataset.CreateDatasetOutput; - -@Data -public class CreateDatasetOutputModel { - private String projectId; - private String datasetId; - - public CreateDatasetOutputModel(CreateDatasetOutput createDatasetOutput) { - this.projectId = createDatasetOutput.getProjectId(); - this.datasetId = createDatasetOutput.getDatasetId(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java deleted file mode 100644 index 6a2bacd8..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.datasets.delete_dataset; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class DeleteDatasetOutputModel { - private String projectId; - private String datasetId; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/get_dataset/GetDatasetOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/get_dataset/GetDatasetOutputModel.java deleted file mode 100644 index 30042d78..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/get_dataset/GetDatasetOutputModel.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.datasets.get_dataset; - -import org.phyloviz.pwp.administration.http.models.datasets.DatasetModel; -import org.phyloviz.pwp.administration.service.dtos.dataset.FullDatasetInfo; - -public class GetDatasetOutputModel extends DatasetModel { - public GetDatasetOutputModel(FullDatasetInfo fullDatasetInfo) { - super(fullDatasetInfo); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/get_datasets/GetDatasetsOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/get_datasets/GetDatasetsOutputModel.java deleted file mode 100644 index b0e86c90..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/get_datasets/GetDatasetsOutputModel.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.datasets.get_datasets; - -import lombok.Data; -import org.phyloviz.pwp.administration.http.models.datasets.DatasetModel; -import org.phyloviz.pwp.administration.service.dtos.dataset.FullDatasetInfo; - -import java.util.List; - -@Data -public class GetDatasetsOutputModel { - private List datasets; - - public GetDatasetsOutputModel(List fullDatasetInfos) { - this.datasets = fullDatasetInfos.stream().map(DatasetModel::new).toList(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java deleted file mode 100644 index 1bb4d259..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.datasets.set_isolate_data_of_dataset; - -import lombok.Data; - -@Data -public class SetIsolateDataOfDatasetInputModel { - private String isolateDataId; - private String isolateDataKey; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java deleted file mode 100644 index bbbc7dd2..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.datasets.set_isolate_data_of_dataset; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.dataset.SetIsolateDataOfDatasetOutput; - -@Data -public class SetIsolateDataOfDatasetOutputModel { - private String isolateDataId; - private String isolateDataKey; - - public SetIsolateDataOfDatasetOutputModel(SetIsolateDataOfDatasetOutput setIsolateDataOfDatasetOutput) { - this.isolateDataId = String.format("Set to '%s'", setIsolateDataOfDatasetOutput.getIsolateDataId()); - this.isolateDataKey = String.format("Set to '%s'", setIsolateDataOfDatasetOutput.getIsolateDataKey()); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/update_dataset/UpdateDatasetInputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/update_dataset/UpdateDatasetInputModel.java deleted file mode 100644 index a9c72bef..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/update_dataset/UpdateDatasetInputModel.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.datasets.update_dataset; - -import lombok.Data; - -@Data -public class UpdateDatasetInputModel { - private String name; - private String description; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java deleted file mode 100644 index b24270dd..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.datasets.update_dataset; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.dataset.UpdateDatasetOutput; - -@Data -public class UpdateDatasetOutputModel { - private String name; - private String description; - - public UpdateDatasetOutputModel(UpdateDatasetOutput updateDatasetOutput) { - if (updateDatasetOutput.getNewName() != null) { - this.name = String.format("Changed from '%s' to '%s'", updateDatasetOutput.getPreviousName(), updateDatasetOutput.getNewName()); - } else { - this.name = "No changes"; - } - if (updateDatasetOutput.getNewDescription() != null) { - this.description = String.format("Changed from '%s' to '%s'", updateDatasetOutput.getPreviousDescription(), updateDatasetOutput.getNewDescription()); - } else { - this.description = "No changes"; - } - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/DistanceMatrixOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/DistanceMatrixOutputModel.java deleted file mode 100644 index e7a3b3b4..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/DistanceMatrixOutputModel.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.distance_matrices; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.distance_matrix.DistanceMatrixInfo; -import org.phyloviz.pwp.administration.service.dtos.distance_matrix.DistanceMatrixSourceFunctionInfo; - -@Data -public class DistanceMatrixOutputModel { - private String distanceMatrixId; - private String name; - private String sourceType; - private DistanceMatrixSourceOutputModel source; - - public DistanceMatrixOutputModel(DistanceMatrixInfo distanceMatrixInfo) { - this.distanceMatrixId = distanceMatrixInfo.getDistanceMatrixId(); - this.name = distanceMatrixInfo.getName(); - this.sourceType = distanceMatrixInfo.getSourceType().name().toLowerCase(); - this.source = switch (distanceMatrixInfo.getSourceType()) { - case FUNCTION -> new DistanceMatrixSourceFunctionOutputModel( - (DistanceMatrixSourceFunctionInfo) distanceMatrixInfo.getSource() - ); - }; - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java deleted file mode 100644 index 85e50934..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.distance_matrices; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.distance_matrix.DistanceMatrixSourceFunctionInfo; - -@Data -public class DistanceMatrixSourceFunctionOutputModel implements DistanceMatrixSourceOutputModel { - private String function; - - public DistanceMatrixSourceFunctionOutputModel(DistanceMatrixSourceFunctionInfo distanceMatrixSourceFunctionInfo) { - this.function = distanceMatrixSourceFunctionInfo.getFunction(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java deleted file mode 100644 index 5c1b4ef9..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.distance_matrices; - -public interface DistanceMatrixSourceOutputModel { -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java deleted file mode 100644 index 2d81ef13..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.distance_matrices.delete_distance_matrix; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class DeleteDistanceMatrixOutputModel { - private String projectId; - private String datasetId; - private String distanceMatrixId; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java deleted file mode 100644 index 2b055b43..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.distance_matrices.update_distance_matrix; - -import lombok.Data; - -@Data -public class UpdateDistanceMatrixInputModel { - private String name; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java deleted file mode 100644 index 3aa094e4..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.distance_matrices.update_distance_matrix; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.distance_matrix.UpdateDistanceMatrixOutput; - -@Data -public class UpdateDistanceMatrixOutputModel { - private String name; - - public UpdateDistanceMatrixOutputModel(UpdateDistanceMatrixOutput updateDistanceMatrixOutput) { - if (updateDistanceMatrixOutput.getNewName() != null) { - this.name = String.format("Changed from '%s' to '%s'", updateDistanceMatrixOutput.getPreviousName(), updateDistanceMatrixOutput.getNewName()); - } else { - this.name = "No changes"; - } - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/FilesModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/FilesModel.java deleted file mode 100644 index 0a9025a4..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/FilesModel.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.files; - -import lombok.Data; -import org.phyloviz.pwp.administration.http.models.files.isolate_data.IsolateDataModel; -import org.phyloviz.pwp.administration.http.models.files.typing_data.TypingDataModel; -import org.phyloviz.pwp.administration.service.dtos.files.FilesInfo; - -import java.util.List; - -@Data -public class FilesModel { - private List typingData; - private List isolateData; - - public FilesModel(FilesInfo filesInfo) { - this.typingData = filesInfo.getTypingData().stream().map(TypingDataModel::new).toList(); - this.isolateData = filesInfo.getIsolateData().stream().map(IsolateDataModel::new).toList(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/IsolateDataModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/IsolateDataModel.java deleted file mode 100644 index dd66ee40..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/IsolateDataModel.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.files.isolate_data; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.files.isolate_data.IsolateDataInfo; - -import java.util.List; - -@Data -public class IsolateDataModel { - private String isolateDataId; - private String name; - private List keys; - - public IsolateDataModel(IsolateDataInfo isolateDataInfo) { - this.isolateDataId = isolateDataInfo.getIsolateDataId(); - this.name = isolateDataInfo.getName(); - this.keys = isolateDataInfo.getKeys(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java deleted file mode 100644 index 2100459f..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.files.isolate_data.delete_isolate_data; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class DeleteIsolateDataOutputModel { - private String projectId; - private String isolateDataId; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java deleted file mode 100644 index 8a4ff145..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.files.isolate_data.update_isolate_data; - -import lombok.Data; - -@Data -public class UpdateIsolateDataInputModel { - private String name; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java deleted file mode 100644 index 61a70ef1..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.files.isolate_data.update_isolate_data; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.files.isolate_data.UpdateIsolateDataOutput; - -@Data -public class UpdateIsolateDataOutputModel { - private String name; - - public UpdateIsolateDataOutputModel(UpdateIsolateDataOutput updateIsolateDataOutput) { - if (updateIsolateDataOutput.getNewName() != null) { - this.name = String.format("Changed from '%s' to '%s'", updateIsolateDataOutput.getPreviousName(), updateIsolateDataOutput.getNewName()); - } else { - this.name = "No changes"; - } - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/TypingDataModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/TypingDataModel.java deleted file mode 100644 index 6ed9f12f..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/TypingDataModel.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.files.typing_data; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.files.typing_data.TypingDataInfo; - -@Data -public class TypingDataModel { - private String typingDataId; - private String name; - - public TypingDataModel(TypingDataInfo typingDataInfo) { - this.typingDataId = typingDataInfo.getTypingDataId(); - this.name = typingDataInfo.getName(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java deleted file mode 100644 index a5bd90b2..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.files.typing_data.delete_typing_data; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class DeleteTypingDataOutputModel { - private String projectId; - private String typingDataId; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java deleted file mode 100644 index 1ccce795..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.files.typing_data.update_typing_data; - -import lombok.Data; - -@Data -public class UpdateTypingDataInputModel { - private String name; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java deleted file mode 100644 index 8739c5f7..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.files.typing_data.update_typing_data; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.files.typing_data.UpdateTypingDataOutput; - -@Data -public class UpdateTypingDataOutputModel { - private String name; - - public UpdateTypingDataOutputModel(UpdateTypingDataOutput updateTypingDataOutput) { - if (updateTypingDataOutput.getNewName() != null) { - this.name = String.format("Changed from '%s' to '%s'", updateTypingDataOutput.getPreviousName(), updateTypingDataOutput.getNewName()); - } else { - this.name = "No changes"; - } - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/ProjectModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/ProjectModel.java deleted file mode 100644 index a5475dc6..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/ProjectModel.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.projects; - -import lombok.Data; -import org.phyloviz.pwp.administration.http.models.datasets.DatasetModel; -import org.phyloviz.pwp.administration.http.models.files.FilesModel; -import org.phyloviz.pwp.administration.service.dtos.project.FullProjectInfo; - -import java.util.List; - -@Data -public class ProjectModel { - private String projectId; - private String name; - private String description; - private String owner; - private List datasets; - private FilesModel files; - - public ProjectModel(FullProjectInfo fullProjectInfo) { - this.projectId = fullProjectInfo.getProjectId(); - this.name = fullProjectInfo.getName(); - this.description = fullProjectInfo.getDescription(); - this.owner = fullProjectInfo.getOwner(); - this.datasets = fullProjectInfo.getDatasets().stream().map(DatasetModel::new).toList(); - this.files = new FilesModel(fullProjectInfo.getFiles()); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/create_project/CreateProjectInputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/create_project/CreateProjectInputModel.java deleted file mode 100644 index 3db16488..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/create_project/CreateProjectInputModel.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.projects.create_project; - -import lombok.Data; - -@Data -public class CreateProjectInputModel { - private String name; - private String description; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/create_project/CreateProjectOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/create_project/CreateProjectOutputModel.java deleted file mode 100644 index d8ff03c1..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/create_project/CreateProjectOutputModel.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.projects.create_project; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.project.CreateProjectOutput; - -@Data -public class CreateProjectOutputModel { - private String projectId; - - public CreateProjectOutputModel(CreateProjectOutput createProjectOutput) { - this.projectId = createProjectOutput.getProjectId(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/delete_project/DeleteProjectOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/delete_project/DeleteProjectOutputModel.java deleted file mode 100644 index ec58fbb2..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/delete_project/DeleteProjectOutputModel.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.projects.delete_project; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class DeleteProjectOutputModel { - private String projectId; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/get_project/GetProjectOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/get_project/GetProjectOutputModel.java deleted file mode 100644 index 18cda661..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/get_project/GetProjectOutputModel.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.projects.get_project; - -import org.phyloviz.pwp.administration.http.models.projects.ProjectModel; -import org.phyloviz.pwp.administration.service.dtos.project.FullProjectInfo; - -public class GetProjectOutputModel extends ProjectModel { - public GetProjectOutputModel(FullProjectInfo fullProjectInfo) { - super(fullProjectInfo); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/get_projects/GetProjectsOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/get_projects/GetProjectsOutputModel.java deleted file mode 100644 index b89e9450..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/get_projects/GetProjectsOutputModel.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.projects.get_projects; - -import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; - -import java.util.List; - -@Data -public class GetProjectsOutputModel { - private List projects; - - public GetProjectsOutputModel(List projects) { - this.projects = projects.stream().map(GetProjectsProjectModel::new).toList(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/get_projects/GetProjectsProjectModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/get_projects/GetProjectsProjectModel.java deleted file mode 100644 index 51428d6d..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/get_projects/GetProjectsProjectModel.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.projects.get_projects; - -import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; - -@Data -public class GetProjectsProjectModel { - private String projectId; - private String name; - private String description; - - public GetProjectsProjectModel(Project project) { - this.projectId = project.getId(); - this.name = project.getName(); - this.description = project.getDescription(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/update_project/UpdateProjectInputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/update_project/UpdateProjectInputModel.java deleted file mode 100644 index c5a4718a..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/update_project/UpdateProjectInputModel.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.projects.update_project; - -import lombok.Data; - -@Data -public class UpdateProjectInputModel { - private String name; - private String description; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/update_project/UpdateProjectOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/update_project/UpdateProjectOutputModel.java deleted file mode 100644 index 2006ea74..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/projects/update_project/UpdateProjectOutputModel.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.projects.update_project; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.project.UpdateProjectOutput; - -@Data -public class UpdateProjectOutputModel { - private String name; - private String description; - - public UpdateProjectOutputModel(UpdateProjectOutput updateProjectOutput) { - if (updateProjectOutput.getNewName() != null) { - this.name = String.format("Changed from '%s' to '%s'", updateProjectOutput.getPreviousName(), updateProjectOutput.getNewName()); - } else { - this.name = "No changes"; - } - if (updateProjectOutput.getNewDescription() != null) { - this.description = String.format("Changed from '%s' to '%s'", updateProjectOutput.getPreviousDescription(), updateProjectOutput.getNewDescription()); - } else { - this.description = "No changes"; - } - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/TreeViewOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/TreeViewOutputModel.java deleted file mode 100644 index d9d752a9..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/TreeViewOutputModel.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.tree_views; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.tree_view.TreeViewInfo; - -@Data -public class TreeViewOutputModel { - private String treeViewId; - private String name; - private String layout; - private TreeViewSourceOutputModel source; - - public TreeViewOutputModel(TreeViewInfo treeViewInfo) { - this.treeViewId = treeViewInfo.getTreeViewId(); - this.name = treeViewInfo.getName(); - this.layout = treeViewInfo.getLayout(); - this.source = new TreeViewSourceOutputModel(treeViewInfo.getSource()); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/TreeViewSourceOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/TreeViewSourceOutputModel.java deleted file mode 100644 index ee016743..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/TreeViewSourceOutputModel.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.tree_views; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.tree_view.TreeViewSourceInfo; - -@Data -public class TreeViewSourceOutputModel { - private String treeId; - - public TreeViewSourceOutputModel(TreeViewSourceInfo treeViewSourceInfo) { - this.treeId = treeViewSourceInfo.getTreeId(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java deleted file mode 100644 index 5a30f54b..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.tree_views.delete_tree_view; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class DeleteTreeViewOutputModel { - private String projectId; - private String datasetId; - private String treeViewId; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java deleted file mode 100644 index b8cb5a26..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.tree_views.update_tree_view; - -import lombok.Data; - -@Data -public class UpdateTreeViewInputModel { - private String name; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java deleted file mode 100644 index 59889908..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.tree_views.update_tree_view; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.tree_view.UpdateTreeViewOutput; - -@Data -public class UpdateTreeViewOutputModel { - private String name; - - public UpdateTreeViewOutputModel(UpdateTreeViewOutput updateTreeViewOutput) { - if (updateTreeViewOutput.getNewName() != null) { - this.name = String.format("Changed from '%s' to '%s'", updateTreeViewOutput.getPreviousName(), updateTreeViewOutput.getNewName()); - } else { - this.name = "No changes"; - } - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeOutputModel.java deleted file mode 100644 index be0c8911..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeOutputModel.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.trees; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.tree.TreeInfo; -import org.phyloviz.pwp.administration.service.dtos.tree.TreeSourceAlgorithmDistanceMatrixInfo; -import org.phyloviz.pwp.administration.service.dtos.tree.TreeSourceAlgorithmTypingDataInfo; -import org.phyloviz.pwp.administration.service.dtos.tree.TreeSourceFileInfo; - -@Data -public class TreeOutputModel { - private String treeId; - private String name; - private String sourceType; - private TreeSourceOutputModel source; - - public TreeOutputModel(TreeInfo treeInfo) { - this.treeId = treeInfo.getTreeId(); - this.name = treeInfo.getName(); - this.sourceType = treeInfo.getSourceType().name().toLowerCase(); - this.source = switch (treeInfo.getSourceType()) { - case ALGORITHM_DISTANCE_MATRIX -> new TreeSourceAlgorithmDistanceMatrixOutputModel( - (TreeSourceAlgorithmDistanceMatrixInfo) treeInfo.getSource() - ); - case ALGORITHM_TYPING_DATA -> new TreeSourceAlgorithmTypingDataOutputModel( - (TreeSourceAlgorithmTypingDataInfo) treeInfo.getSource() - ); - case FILE -> new TreeSourceFileOutputModel( - (TreeSourceFileInfo) treeInfo.getSource() - ); - }; - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java deleted file mode 100644 index fe0bb4c5..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.trees; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.tree.TreeSourceAlgorithmDistanceMatrixInfo; - -@Data -public class TreeSourceAlgorithmDistanceMatrixOutputModel implements TreeSourceOutputModel { - private String algorithm; - private String distanceMatrixId; - private String parameters; - - public TreeSourceAlgorithmDistanceMatrixOutputModel(TreeSourceAlgorithmDistanceMatrixInfo treeSourceAlgorithmDistanceMatrixInfo) { - this.algorithm = treeSourceAlgorithmDistanceMatrixInfo.getAlgorithm(); - this.distanceMatrixId = treeSourceAlgorithmDistanceMatrixInfo.getDistanceMatrixId(); - this.parameters = treeSourceAlgorithmDistanceMatrixInfo.getParameters(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java deleted file mode 100644 index 983e4cbc..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.trees; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.tree.TreeSourceAlgorithmTypingDataInfo; - -@Data -public class TreeSourceAlgorithmTypingDataOutputModel implements TreeSourceOutputModel { - private String algorithm; - private String typingDataId; - private String parameters; - - public TreeSourceAlgorithmTypingDataOutputModel(TreeSourceAlgorithmTypingDataInfo treeSourceAlgorithmTypingDataInfo) { - this.algorithm = treeSourceAlgorithmTypingDataInfo.getAlgorithm(); - this.typingDataId = treeSourceAlgorithmTypingDataInfo.getTypingDataId(); - this.parameters = treeSourceAlgorithmTypingDataInfo.getParameters(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceFileOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceFileOutputModel.java deleted file mode 100644 index e6744387..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceFileOutputModel.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.trees; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.tree.TreeSourceFileInfo; - -@Data -public class TreeSourceFileOutputModel implements TreeSourceOutputModel { - private String fileType; - private String fileName; - - public TreeSourceFileOutputModel(TreeSourceFileInfo treeSourceFileInfo) { - this.fileType = treeSourceFileInfo.getFileType(); - this.fileName = treeSourceFileInfo.getFileName(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceOutputModel.java deleted file mode 100644 index 557f90fc..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/TreeSourceOutputModel.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.trees; - -public interface TreeSourceOutputModel { -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/delete_tree/DeleteTreeOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/delete_tree/DeleteTreeOutputModel.java deleted file mode 100644 index 197883f0..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/delete_tree/DeleteTreeOutputModel.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.trees.delete_tree; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class DeleteTreeOutputModel { - private String projectId; - private String datasetId; - private String treeId; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/update_tree_view/UpdateTreeInputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/update_tree_view/UpdateTreeInputModel.java deleted file mode 100644 index 321f69ec..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/update_tree_view/UpdateTreeInputModel.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.trees.update_tree_view; - -import lombok.Data; - -@Data -public class UpdateTreeInputModel { - private String name; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/update_tree_view/UpdateTreeOutputModel.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/update_tree_view/UpdateTreeOutputModel.java deleted file mode 100644 index 4de420fd..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/models/trees/update_tree_view/UpdateTreeOutputModel.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.phyloviz.pwp.administration.http.models.trees.update_tree_view; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.tree.UpdateTreeOutput; - -@Data -public class UpdateTreeOutputModel { - private String name; - - public UpdateTreeOutputModel(UpdateTreeOutput updateTreeOutput) { - if (updateTreeOutput.getNewName() != null) { - this.name = String.format("Changed from '%s' to '%s'", updateTreeOutput.getPreviousName(), updateTreeOutput.getNewName()); - } else { - this.name = "No changes"; - } - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/pipeline/AdministrationExceptionHandler.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/pipeline/AdministrationExceptionHandler.java deleted file mode 100644 index b8b4e355..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/http/pipeline/AdministrationExceptionHandler.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.phyloviz.pwp.administration.http.pipeline; - -import org.phyloviz.pwp.administration.service.exceptions.DeniedFileDeletionException; -import org.phyloviz.pwp.administration.service.exceptions.DeniedResourceDeletionException; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.IsolateDataDoesNotExistException; -import org.phyloviz.pwp.shared.service.exceptions.TypingDataDoesNotExistException; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; -import org.zalando.problem.Problem; -import org.zalando.problem.Status; - -@RestControllerAdvice -public class AdministrationExceptionHandler { - - /** - * Handles Bad Request Exceptions. - * - * @param e the exception - * @return a Problem with the status Bad Request - */ - @ExceptionHandler(value = { - InvalidArgumentException.class, - IsolateDataDoesNotExistException.class, - TypingDataDoesNotExistException.class - }) - public Problem handleBadRequestException(Exception e) { - return Problem.builder() - .withTitle("Bad Request") - .withDetail(e.getMessage()) - .withStatus(Status.BAD_REQUEST) - .build(); - } - - /** - * Handles Denied Deletion Exceptions. - * - * @param e the exception - * @return a Problem with the status Bad Request - */ - @ExceptionHandler(value = { - DeniedFileDeletionException.class, - DeniedResourceDeletionException.class - }) - public Problem handleDeniedDeletionException(Exception e) { - return Problem.builder() - .withTitle("Denied Deletion") - .withDetail(e.getMessage()) - .withStatus(Status.BAD_REQUEST) - .build(); - } -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java deleted file mode 100644 index 681b821e..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.phyloviz.pwp.administration.service.dtos.distance_matrix; - -public interface DistanceMatrixSourceInfo { -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/FilesInfo.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/FilesInfo.java deleted file mode 100644 index ec7707c8..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/files/FilesInfo.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.phyloviz.pwp.administration.service.dtos.files; - -import lombok.Data; -import org.phyloviz.pwp.administration.service.dtos.files.isolate_data.IsolateDataInfo; -import org.phyloviz.pwp.administration.service.dtos.files.typing_data.TypingDataInfo; - -import java.util.List; - -@Data -public class FilesInfo { - private final List typingData; - private final List isolateData; -} diff --git a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceInfo.java b/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceInfo.java deleted file mode 100644 index 3b1f6624..00000000 --- a/src/backend/microservices/administration/src/main/java/org/phyloviz/pwp/administration/service/dtos/tree/TreeSourceInfo.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.phyloviz.pwp.administration.service.dtos.tree; - -public interface TreeSourceInfo { -} - diff --git a/src/backend/microservices/administration/src/main/resources/application.yml b/src/backend/microservices/administration/src/main/resources/application.yml deleted file mode 100644 index fcb987c6..00000000 --- a/src/backend/microservices/administration/src/main/resources/application.yml +++ /dev/null @@ -1,10 +0,0 @@ -server: - port: 8088 - -spring: - config: - import: application-shared.yml - -logging: - level: - root: debug \ No newline at end of file diff --git a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/AdministrationMicroserviceApplicationTests.java b/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/AdministrationMicroserviceApplicationTests.java deleted file mode 100644 index 0544b6cc..00000000 --- a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/AdministrationMicroserviceApplicationTests.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.phyloviz.pwp.administration; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class AdministrationMicroserviceApplicationTests { - - @Test - void contextLoads() { - } -} diff --git a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/http/controllers/projects/ProjectsControllerTests.java b/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/http/controllers/projects/ProjectsControllerTests.java deleted file mode 100644 index ca1febe0..00000000 --- a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/http/controllers/projects/ProjectsControllerTests.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.phyloviz.pwp.administration.http.controllers.projects; - - -import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.phyloviz.pwp.administration.http.models.projects.create_project.CreateProjectInputModel; -import org.phyloviz.pwp.administration.service.dtos.project.CreateProjectOutput; -import org.phyloviz.pwp.administration.service.project.ProjectService; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit4.SpringRunner; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -@RunWith(SpringRunner.class) -@SpringBootTest -class ProjectsControllerTests { - - @MockBean - private ProjectService projectService; - - @Test - void createProjectIsSuccessful() { - CreateProjectInputModel createProjectInputModel = new CreateProjectInputModel(); - createProjectInputModel.setName("project1"); - createProjectInputModel.setDescription("project1 description"); - - String projectId = "projectId"; - String userId = "userId"; - Mockito.when(projectService.createProject( - createProjectInputModel.getName(), - createProjectInputModel.getDescription(), - userId - )).thenReturn( - new CreateProjectOutput(projectId) - ); - - CreateProjectOutput createProjectOutput = projectService.createProject( - createProjectInputModel.getName(), - createProjectInputModel.getDescription(), - userId - ); - - assertEquals(projectId, createProjectOutput.getProjectId()); - } -} diff --git a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/ProjectsServiceTests.java b/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/ProjectsServiceTests.java deleted file mode 100644 index c0ee79d9..00000000 --- a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/ProjectsServiceTests.java +++ /dev/null @@ -1,320 +0,0 @@ -package org.phyloviz.pwp.administration.service; - - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.phyloviz.pwp.administration.service.dtos.project.CreateProjectOutput; -import org.phyloviz.pwp.administration.service.dtos.project.FullProjectInfo; -import org.phyloviz.pwp.administration.service.dtos.project.UpdateProjectOutput; -import org.phyloviz.pwp.administration.service.project.ProjectServiceImpl; -import org.phyloviz.pwp.administration.service.project.dataset.DatasetService; -import org.phyloviz.pwp.administration.service.project.file.IsolateDataService; -import org.phyloviz.pwp.administration.service.project.file.TypingDataService; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; - -import java.util.List; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class ProjectsServiceTests { - - @Mock - private ProjectRepository projectRepository; - - @Mock - private DatasetService datasetService; - - @Mock - private TypingDataService typingDataService; - - @Mock - private IsolateDataService isolateDataService; - - @InjectMocks - private ProjectServiceImpl projectService; - - // createProject - @Test - void createProjectIsSuccessful() { - String projectName = "project1"; - String projectDescription = "project1 description"; - String userId = "2da00a2f-21bd-43fd-8c07-0e74725c851a"; - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(projectRepository.save(any(Project.class))) - .thenReturn( - new Project( - projectId, - projectName, - projectDescription, - userId - ) - ); - - CreateProjectOutput createProjectOutput = projectService.createProject( - projectName, - projectDescription, - userId - ); - - assertEquals(projectId, createProjectOutput.getProjectId()); - } - - @Test - void createProjectWithEmptyNameThrowsException() { - String projectName = ""; - String projectDescription = "project1 description"; - String userId = "2da00a2f-21bd-43fd-8c07-0e74725c851a"; - - assertThrows(InvalidArgumentException.class, () -> - projectService.createProject( - projectName, - projectDescription, - userId - )); - } - - - // getFullProjectInfo - @Test - void getFullProjectInfoIsSuccessful() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String projectName = "project1"; - String projectDescription = "project1 description"; - String userId = "2da00a2f-21bd-43fd-8c07-0e74725c851a"; - - when(projectRepository.findByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn( - Optional.of(new Project( - projectId, - projectName, - projectDescription, - userId - )) - ); - - when(datasetService.getFullDatasetInfos(any(String.class))).thenReturn(List.of()); - when(typingDataService.getTypingDataInfos(any(String.class))).thenReturn(List.of()); - when(isolateDataService.getIsolateDataInfos(any(String.class))).thenReturn(List.of()); - - FullProjectInfo fullProjectInfo = projectService.getFullProjectInfo(projectId, userId); - - assertEquals(projectId, fullProjectInfo.getProjectId()); - assertEquals(projectName, fullProjectInfo.getName()); - assertEquals(projectDescription, fullProjectInfo.getDescription()); - assertEquals(userId, fullProjectInfo.getOwner()); - assertTrue(fullProjectInfo.getDatasets().isEmpty()); - assertTrue(fullProjectInfo.getFiles().getTypingData().isEmpty()); - assertTrue(fullProjectInfo.getFiles().getIsolateData().isEmpty()); - } - - @Test - void getFullProjectInfoWithInexistentProjectIdThrowsException() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "2da00a2f-21bd-43fd-8c07-0e74725c851a"; - - when(projectRepository.findByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(Optional.empty()); - - assertThrows(ProjectNotFoundException.class, () -> - projectService.getFullProjectInfo(projectId, userId) - ); - } - - @Test - void getFullProjectInfoWithInexistentUserIdThrowsException() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "2da00a2f-21bd-43fd-8c07-0e74725c851a"; - - when(projectRepository.findByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(Optional.empty()); - - assertThrows(ProjectNotFoundException.class, () -> - projectService.getFullProjectInfo(projectId, userId) - ); - } - - - // getProjects - @Test - void getProjectsIsSuccessful() { - String userId = "2da00a2f-21bd-43fd-8c07-0e74725c851a"; - List projects = List.of( - new Project( - "ec7bae63-3238-4044-8d03-e2d9911f50f8", - "project1", - "project1 description", - userId - ), - new Project( - "ec7bae63-3238-4044-8d03-e2d9911f50f9", - "project2", - "project2 description", - userId - ) - ); - - when(projectRepository.findAllByOwnerId(any(String.class))) - .thenReturn(projects); - - List userProjects = projectService.getProjects(userId); - assertEquals(projects.size(), userProjects.size()); - assertEquals(projects, userProjects); - } - - - // deleteProject - @Test - void deleteProjectIsSuccessful() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "2da00a2f-21bd-43fd-8c07-0e74725c851a"; - - when(projectRepository.findByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn( - Optional.of(new Project( - projectId, - "project1", - "project1 description", - userId - )) - ); - - projectService.deleteProject(projectId, userId); - - verify(projectRepository, times(1)).delete(any(Project.class)); - } - - @Test - void deleteProjectWithInexistentProjectIdThrowsException() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "2da00a2f-21bd-43fd-8c07-0e74725c851a"; - - when(projectRepository.findByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(Optional.empty()); - - assertThrows(ProjectNotFoundException.class, () -> - projectService.deleteProject(projectId, userId) - ); - } - - @Test - void deleteProjectWithInexistentUserIdThrowsException() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "2da00a2f-21bd-43fd-8c07-0e74725c851a"; - - when(projectRepository.findByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(Optional.empty()); - - assertThrows(ProjectNotFoundException.class, () -> - projectService.deleteProject(projectId, userId) - ); - } - - - // updateProject - @Test - void updateProjectIsSuccessful() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String projectName = "project1"; - String projectDescription = "project1 description"; - String userId = "2da00a2f-21bd-43fd-8c07-0e74725c851a"; - String newProjectName = "project1 updated"; - String newProjectDescription = "project1 description updated"; - - when(projectRepository.findByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn( - Optional.of(new Project( - projectId, - projectName, - projectDescription, - userId - )) - ); - - when(projectRepository.save(any(Project.class))) - .thenReturn(new Project( - projectId, - newProjectName, - newProjectDescription, - userId - )); - - UpdateProjectOutput updateProjectOutput = projectService.updateProject( - newProjectName, - newProjectDescription, - projectId, - userId - ); - - assertEquals(projectName, updateProjectOutput.getPreviousName()); - assertEquals(projectDescription, updateProjectOutput.getPreviousDescription()); - assertEquals(newProjectName, updateProjectOutput.getNewName()); - assertEquals(newProjectDescription, updateProjectOutput.getNewDescription()); - } - - @Test - void updateProjectWithInexistentProjectIdThrowsException() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "2da00a2f-21bd-43fd-8c07-0e74725c851a"; - String newProjectName = "project1 updated"; - String newProjectDescription = "project1 description updated"; - - when(projectRepository.findByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(Optional.empty()); - - assertThrows(ProjectNotFoundException.class, () -> - projectService.updateProject( - newProjectName, - newProjectDescription, - projectId, - userId - )); - } - - @ParameterizedTest - @CsvSource({ - ",", - "'', description", - "name,''", - }) - void updateProjectWithInvalidFieldsThrowsException(String newProjectName, String newProjectDescription) { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String projectName = "project1"; - String projectDescription = "project1 description"; - String userId = "2da00a2f-21bd-43fd-8c07-0e74725c851a"; - - when(projectRepository.findByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn( - Optional.of(new Project( - projectId, - projectName, - projectDescription, - userId - )) - ); - - assertThrows(InvalidArgumentException.class, () -> - projectService.updateProject( - newProjectName, - newProjectDescription, - projectId, - userId - )); - } -} diff --git a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/DatasetServiceTests.java b/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/DatasetServiceTests.java deleted file mode 100644 index 12a421c6..00000000 --- a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/DatasetServiceTests.java +++ /dev/null @@ -1,562 +0,0 @@ -package org.phyloviz.pwp.administration.service.dataset; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.phyloviz.pwp.administration.service.dtos.dataset.CreateDatasetOutput; -import org.phyloviz.pwp.administration.service.dtos.dataset.FullDatasetInfo; -import org.phyloviz.pwp.administration.service.dtos.dataset.UpdateDatasetOutput; -import org.phyloviz.pwp.administration.service.project.dataset.DatasetServiceImpl; -import org.phyloviz.pwp.administration.service.project.dataset.distance_matrix.DistanceMatrixService; -import org.phyloviz.pwp.administration.service.project.dataset.tree.TreeService; -import org.phyloviz.pwp.administration.service.project.dataset.tree_view.TreeViewService; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.dataset.documents.Dataset; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.TypingDataMetadataRepository; -import org.phyloviz.pwp.shared.service.exceptions.DatasetNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class DatasetServiceTests { - - @Mock - private ProjectRepository projectRepository; - - @Mock - private DatasetRepository datasetRepository; - - @Mock - private TypingDataMetadataRepository typingDataMetadataRepository; - - @Mock - private IsolateDataMetadataRepository isolateDataMetadataRepository; - - @Mock - private DistanceMatrixService distanceMatrixService; - - @Mock - private TreeService treeService; - - @Mock - private TreeViewService treeViewService; - - @InjectMocks - private DatasetServiceImpl datasetService; - - - // createDataset - @Test - void createDatasetWithoutIsolateDataIsSuccessfull() { - String datasetName = "datasetName"; - String datasetDescription = "datasetDescription"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = null; - String isolateDataKey = null; - String projectId = "projectId"; - String userId = "userId"; - String datasetId = "datasetId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - when(typingDataMetadataRepository.existsByProjectIdAndTypingDataId(any(String.class), any(String.class))) - .thenReturn(true); - - when(datasetRepository.save(any())) - .thenReturn(new Dataset( - datasetId, - projectId, - datasetName, - datasetDescription, - typingDataId, - isolateDataId, - isolateDataKey - )); - - CreateDatasetOutput createDatasetOutput = datasetService.createDataset( - datasetName, - datasetDescription, - typingDataId, - isolateDataId, - isolateDataKey, - projectId, - userId - ); - - assertEquals(datasetId, createDatasetOutput.getDatasetId()); - assertEquals(projectId, createDatasetOutput.getProjectId()); - } - - @Test - void createDatasetWithIsolateDataIsSuccessfull() { - String datasetName = "datasetName"; - String datasetDescription = "datasetDescription"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = "dfb3b1a0-7b9a-4b7e-9b9a-5b8b5b5b5b5b"; - String isolateDataName = "isolateDataName"; - String isolateDataKey = "isolateDataKey"; - String projectId = "projectId"; - String userId = "userId"; - String datasetId = "datasetId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - when(typingDataMetadataRepository.existsByProjectIdAndTypingDataId(any(String.class), any(String.class))) - .thenReturn(true); - - when(isolateDataMetadataRepository.findByProjectIdAndIsolateDataId(any(String.class), any(String.class))) - .thenReturn(Optional.of(new IsolateDataMetadata( - projectId, - isolateDataId, - List.of(isolateDataKey), - isolateDataName, - Map.of(IsolateDataDataRepositoryId.S3, new IsolateDataS3DataRepositorySpecificData()) - ))); - - when(datasetRepository.save(any())) - .thenReturn(new Dataset( - datasetId, - projectId, - datasetName, - datasetDescription, - typingDataId, - isolateDataId, - isolateDataKey - )); - - CreateDatasetOutput createDatasetOutput = datasetService.createDataset( - datasetName, - datasetDescription, - typingDataId, - isolateDataId, - isolateDataKey, - projectId, - userId - ); - - assertEquals(datasetId, createDatasetOutput.getDatasetId()); - assertEquals(projectId, createDatasetOutput.getProjectId()); - } - - - @Test - void createDatasetThrowsWhenIsolateDataKeyIsNull() { - String datasetName = "datasetName"; - String datasetDescription = "datasetDescription"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = "dfb3b1a0-7b9a-4b7e-9b9a-5b8b5b5b5b5b"; - String isolateDataName = "isolateDataName"; - String isolateDataKey = null; - String projectId = "projectId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - when(typingDataMetadataRepository.existsByProjectIdAndTypingDataId(any(String.class), any(String.class))) - .thenReturn(true); - - List isolateDataKeys = new ArrayList<>(); - isolateDataKeys.add(isolateDataKey); - - assertThrows( - InvalidArgumentException.class, - () -> datasetService.createDataset( - datasetName, - datasetDescription, - typingDataId, - isolateDataId, - isolateDataKey, - projectId, - userId - ) - ); - } - - @Test - void createDatasetThrowsWhenProjectDoesNotExist() { - String datasetName = "datasetName"; - String datasetDescription = "datasetDescription"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = null; - String isolateDataKey = null; - String projectId = "projectId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - datasetService.createDataset( - datasetName, - datasetDescription, - typingDataId, - isolateDataId, - isolateDataKey, - projectId, - userId - )); - } - - @ParameterizedTest - @CsvSource({ - ", ec7bae63-3238-4044-8d03-e2d9911f50f8, dh9bae45-3238-4044-8d03-e2d9911f50f8", - "'', ec7bae63-3238-4044-8d03-e2d9911f50f8, dh9bae45-3238-4044-8d03-e2d9911f50f8", - "name,, dh9bae45-3238-4044-8d03-e2d9911f50f8", - "name,'', dh9bae45-3238-4044-8d03-e2d9911f50f8", - "name,invalidUUID, dh9bae45-3238-4044-8d03-e2d9911f50f8", - "name,ec7bae63-3238-4044-8d03-e2d9911f50f8,''", - "name,ec7bae63-3238-4044-8d03-e2d9911f50f8,invalidUUID", - }) - void createDatasetThrowsWhenInvalidArguments(String datasetName, String typingDataId, String isolateDataId) { - String datasetDescription = "datasetDescription"; - String isolateDataKey = "isolateDataKey"; - String projectId = "projectId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - assertThrows(InvalidArgumentException.class, () -> - datasetService.createDataset( - datasetName, - datasetDescription, - typingDataId, - isolateDataId, - isolateDataKey, - projectId, - userId - )); - } - - // getFullDatasetInfo - @Test - void getFullDatasetInfoIsSuccessful() { - String datasetName = "datasetName"; - String datasetDescription = "datasetDescription"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = null; - String isolateDataKey = null; - String projectId = "projectId"; - String datasetId = "datasetId"; - String userId = "userId"; - - when(datasetRepository.findByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn( - Optional.of(new Dataset( - datasetId, - projectId, - datasetName, - datasetDescription, - typingDataId, - isolateDataId, - isolateDataKey - )) - ); - - when(distanceMatrixService.getDistanceMatrixInfos(any(String.class))).thenReturn(List.of()); - when(treeService.getTreeInfos(any(String.class))).thenReturn(List.of()); - when(treeViewService.getTreeViewInfos(any(String.class))).thenReturn(List.of()); - - FullDatasetInfo fullDatasetInfo = datasetService.getFullDatasetInfo(projectId, datasetId, userId); - - assertEquals(datasetId, fullDatasetInfo.getDatasetId()); - assertEquals(datasetName, fullDatasetInfo.getName()); - assertEquals(datasetDescription, fullDatasetInfo.getDescription()); - assertEquals(typingDataId, fullDatasetInfo.getTypingDataId()); - assertEquals(isolateDataId, fullDatasetInfo.getIsolateDataId()); - assertTrue(fullDatasetInfo.getDistanceMatrices().isEmpty()); - assertTrue(fullDatasetInfo.getTrees().isEmpty()); - assertTrue(fullDatasetInfo.getTreeViews().isEmpty()); - } - - @Test - void getFullDatasetInfoThrowsWhenDatasetDoesNotExist() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String userId = "userId"; - - when(datasetRepository.findByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(Optional.empty()); - - assertThrows(DatasetNotFoundException.class, () -> - datasetService.getFullDatasetInfo(projectId, datasetId, userId) - ); - } - - // getFullDatasetInfos - @Test - void getFullDatasetInfosIsSuccessful() { - String datasetName = "datasetName"; - String datasetDescription = "datasetDescription"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = null; - String isolateDataKey = null; - String projectId = "projectId"; - String datasetId = "datasetId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - when(datasetRepository.findAllByProjectId(any(String.class))) - .thenReturn( - List.of(new Dataset( - datasetId, - projectId, - datasetName, - datasetDescription, - typingDataId, - isolateDataId, - isolateDataKey - )) - ); - - when(distanceMatrixService.getDistanceMatrixInfos(any(String.class))).thenReturn(List.of()); - when(treeService.getTreeInfos(any(String.class))).thenReturn(List.of()); - when(treeViewService.getTreeViewInfos(any(String.class))).thenReturn(List.of()); - - List fullDatasetInfos = datasetService.getFullDatasetInfos(projectId, userId); - - assertEquals(1, fullDatasetInfos.size()); - assertEquals(datasetId, fullDatasetInfos.get(0).getDatasetId()); - assertEquals(datasetName, fullDatasetInfos.get(0).getName()); - assertEquals(datasetDescription, fullDatasetInfos.get(0).getDescription()); - assertEquals(typingDataId, fullDatasetInfos.get(0).getTypingDataId()); - assertEquals(isolateDataId, fullDatasetInfos.get(0).getIsolateDataId()); - assertTrue(fullDatasetInfos.get(0).getDistanceMatrices().isEmpty()); - assertTrue(fullDatasetInfos.get(0).getTrees().isEmpty()); - assertTrue(fullDatasetInfos.get(0).getTreeViews().isEmpty()); - } - - @Test - void getFullDatasetInfosThrowsWhenProjectDoesNotExist() { - String projectId = "projectId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - datasetService.getFullDatasetInfos(projectId, userId) - ); - } - - // getFullDatasetInfos - @Test - void getFullDatasetInfosWithProjectIdIsSuccessful() { - String datasetName = "datasetName"; - String datasetDescription = "datasetDescription"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = null; - String isolateDataKey = null; - String projectId = "projectId"; - String datasetId = "datasetId"; - - when(datasetRepository.findAllByProjectId(any(String.class))) - .thenReturn( - List.of(new Dataset( - datasetId, - projectId, - datasetName, - datasetDescription, - typingDataId, - isolateDataId, - isolateDataKey - )) - ); - - when(distanceMatrixService.getDistanceMatrixInfos(any(String.class))).thenReturn(List.of()); - when(treeService.getTreeInfos(any(String.class))).thenReturn(List.of()); - when(treeViewService.getTreeViewInfos(any(String.class))).thenReturn(List.of()); - - List fullDatasetInfos = datasetService.getFullDatasetInfos(projectId); - - assertEquals(1, fullDatasetInfos.size()); - assertEquals(datasetId, fullDatasetInfos.get(0).getDatasetId()); - assertEquals(datasetName, fullDatasetInfos.get(0).getName()); - assertEquals(datasetDescription, fullDatasetInfos.get(0).getDescription()); - assertEquals(typingDataId, fullDatasetInfos.get(0).getTypingDataId()); - assertEquals(isolateDataId, fullDatasetInfos.get(0).getIsolateDataId()); - assertTrue(fullDatasetInfos.get(0).getDistanceMatrices().isEmpty()); - assertTrue(fullDatasetInfos.get(0).getTrees().isEmpty()); - assertTrue(fullDatasetInfos.get(0).getTreeViews().isEmpty()); - } - - // deleteDataset - // void deleteDataset(String projectId, String datasetId, String userId) - @Test - void deleteDatasetIsSuccessful() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - when(datasetRepository.findByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(Optional.of(new Dataset())); - - datasetService.deleteDataset(projectId, datasetId, userId); - - verify(datasetRepository, times(1)).delete(any(Dataset.class)); - } - - // deleteAllByProjectId - @Test - void deleteAllByProjectIdIsSuccessful() { - String projectId = "projectId"; - - when(datasetRepository.findAllByProjectId(any(String.class))) - .thenReturn(List.of(new Dataset())); - - datasetService.deleteAllByProjectId(projectId); - - verify(datasetRepository, times(1)).delete(any(Dataset.class)); - } - - // updateDataset - @Test - void updateDatasetIsSuccessful() { - String datasetName = "datasetName"; - String datasetDescription = "datasetDescription"; - String newDatasetName = "newDatasetName"; - String newDatasetDescription = "newDatasetDescription"; - String projectId = "projectId"; - String datasetId = "datasetId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - when(datasetRepository.findByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(Optional.of(new Dataset( - datasetId, - projectId, - datasetName, - datasetDescription, - null, - null, - null - ))); - - UpdateDatasetOutput updateDatasetOutput = datasetService.updateDataset( - newDatasetName, - newDatasetDescription, - projectId, - datasetId, - userId - ); - - assertEquals(datasetName, updateDatasetOutput.getPreviousName()); - assertEquals(datasetDescription, updateDatasetOutput.getPreviousDescription()); - assertEquals(newDatasetName, updateDatasetOutput.getNewName()); - assertEquals(newDatasetDescription, updateDatasetOutput.getNewDescription()); - } - - @Test - void updateDatasetThrowsWhenProjectDoesNotExist() { - String newDatasetName = "newDatasetName"; - String newDatasetDescription = "newDatasetDescription"; - String projectId = "projectId"; - String datasetId = "datasetId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - datasetService.updateDataset( - newDatasetName, - newDatasetDescription, - projectId, - datasetId, - userId - )); - } - - @Test - void updateDatasetThrowsWhenDatasetDoesNotExist() { - String newDatasetName = "newDatasetName"; - String newDatasetDescription = "newDatasetDescription"; - String projectId = "projectId"; - String datasetId = "datasetId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - when(datasetRepository.findByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(Optional.empty()); - - assertThrows(DatasetNotFoundException.class, () -> - datasetService.updateDataset( - newDatasetName, - newDatasetDescription, - projectId, - datasetId, - userId - )); - } - - @ParameterizedTest - @CsvSource({ - ",", - "'', description", - "name,''", - }) - void updateDatasetThrowsWithInvalidFields(String name, String description) { - String datasetName = "datasetName"; - String datasetDescription = "datasetDescription"; - String projectId = "projectId"; - String datasetId = "datasetId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - when(datasetRepository.findByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(Optional.of(new Dataset( - datasetId, - projectId, - datasetName, - datasetDescription, - null, - null, - null - ))); - - assertThrows(InvalidArgumentException.class, () -> - datasetService.updateDataset( - name, - description, - projectId, - datasetId, - userId - )); - } -} diff --git a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/distance_matrix/DistanceMatrixServiceTests.java b/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/distance_matrix/DistanceMatrixServiceTests.java deleted file mode 100644 index 849f7655..00000000 --- a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/distance_matrix/DistanceMatrixServiceTests.java +++ /dev/null @@ -1,336 +0,0 @@ -package org.phyloviz.pwp.administration.service.dataset.distance_matrix; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.phyloviz.pwp.administration.service.dtos.distance_matrix.DistanceMatrixInfo; -import org.phyloviz.pwp.administration.service.dtos.distance_matrix.UpdateDistanceMatrixOutput; -import org.phyloviz.pwp.administration.service.exceptions.DeniedResourceDeletionException; -import org.phyloviz.pwp.administration.service.project.dataset.distance_matrix.DistanceMatrixServiceImpl; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixDataRepository; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.DistanceMatrixMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source.DistanceMatrixSource; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceFunction; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceType; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree.TreeMetadataRepository; -import org.phyloviz.pwp.shared.service.exceptions.DatasetNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.DistanceMatrixNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; - -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class DistanceMatrixServiceTests { - - @Mock - private ProjectRepository projectRepository; - - @Mock - private DatasetRepository datasetRepository; - - @Mock - private DistanceMatrixMetadataRepository distanceMatrixMetadataRepository; - - @Mock - private TreeMetadataRepository treeMetadataRepository; - - @Mock - private DistanceMatrixDataRepositoryFactory distanceMatrixDataRepositoryFactory; - - @InjectMocks - private DistanceMatrixServiceImpl distanceMatrixService; - - - // getDistanceMatrixInfos - @Test - void getDistanceMatrixInfosIsSuccessful() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String distanceMatrixId = "distanceMatrixId"; - String name = "name"; - DistanceMatrixSourceType sourceType = DistanceMatrixSourceType.FUNCTION; - DistanceMatrixSource source = new DistanceMatrixSourceFunction("functionName"); - DistanceMatrixDataRepositoryId repositoryId = DistanceMatrixDataRepositoryId.S3; - DistanceMatrixDataRepositorySpecificData repositorySpecificData = new DistanceMatrixS3DataRepositorySpecificData("url"); - - when(distanceMatrixMetadataRepository.findAllByDatasetId(any(String.class))) - .thenReturn(List.of( - new DistanceMatrixMetadata( - projectId, - datasetId, - distanceMatrixId, - name, - sourceType, - source, - Map.of(repositoryId, repositorySpecificData) - ))); - - List distanceMatrixInfos = distanceMatrixService.getDistanceMatrixInfos(datasetId); - - assertEquals(1, distanceMatrixInfos.size()); - assertEquals(name, distanceMatrixInfos.get(0).getName()); - assertEquals(sourceType, distanceMatrixInfos.get(0).getSourceType()); - } - - // deleteDistanceMatrix - @Test - void deleteDistanceMatrixIsSuccessful() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String distanceMatrixId = "distanceMatrixId"; - String name = "name"; - DistanceMatrixSourceType sourceType = DistanceMatrixSourceType.FUNCTION; - DistanceMatrixSource source = new DistanceMatrixSourceFunction("functionName"); - DistanceMatrixDataRepositoryId repositoryId = DistanceMatrixDataRepositoryId.S3; - DistanceMatrixDataRepositorySpecificData repositorySpecificData = new DistanceMatrixS3DataRepositorySpecificData("url"); - - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(projectId, userId)).thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(projectId, datasetId)).thenReturn(true); - when(distanceMatrixMetadataRepository.findByProjectIdAndDatasetIdAndDistanceMatrixId(projectId, datasetId, distanceMatrixId)) - .thenReturn( - Optional.of(new DistanceMatrixMetadata( - projectId, - datasetId, - distanceMatrixId, - name, - sourceType, - source, - Map.of(repositoryId, repositorySpecificData) - ))); - when(treeMetadataRepository.existsByDatasetIdAndDistanceMatrixIdSource(datasetId, distanceMatrixId)).thenReturn(false); - - DistanceMatrixDataRepository rep = mock(DistanceMatrixS3DataRepository.class); - - when(distanceMatrixDataRepositoryFactory.getRepository(DistanceMatrixDataRepositoryId.S3)) - .thenReturn(rep); - - - distanceMatrixService.deleteDistanceMatrix(projectId, datasetId, distanceMatrixId, userId); - - verify(distanceMatrixMetadataRepository, times(1)).delete(any(DistanceMatrixMetadata.class)); - } - - @Test - void deleteDistanceMatrixThrowsWhenProjectDoesNotExist() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String distanceMatrixId = "distanceMatrixId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(projectId, userId)).thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - distanceMatrixService.deleteDistanceMatrix(projectId, datasetId, distanceMatrixId, userId) - ); - } - - @Test - void deleteDistanceMatrixThrowsWhenDatasetDoesNotExist() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String distanceMatrixId = "distanceMatrixId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(projectId, userId)).thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(projectId, datasetId)).thenReturn(false); - - assertThrows(DatasetNotFoundException.class, () -> - distanceMatrixService.deleteDistanceMatrix(projectId, datasetId, distanceMatrixId, userId) - ); - } - - @Test - void deleteDistanceMatrixThrowsWhenDistanceMatrixDoesNotExist() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String distanceMatrixId = "distanceMatrixId"; - String name = "name"; - DistanceMatrixSourceType sourceType = DistanceMatrixSourceType.FUNCTION; - DistanceMatrixSource source = new DistanceMatrixSourceFunction("functionName"); - DistanceMatrixDataRepositoryId repositoryId = DistanceMatrixDataRepositoryId.S3; - DistanceMatrixDataRepositorySpecificData repositorySpecificData = new DistanceMatrixS3DataRepositorySpecificData("url"); - - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(projectId, userId)).thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(projectId, datasetId)).thenReturn(true); - when(distanceMatrixMetadataRepository.findByProjectIdAndDatasetIdAndDistanceMatrixId(projectId, datasetId, distanceMatrixId)) - .thenReturn( - Optional.empty()); - assertThrows(DistanceMatrixNotFoundException.class, () -> - distanceMatrixService.deleteDistanceMatrix(projectId, datasetId, distanceMatrixId, userId) - ); - } - - @Test - void deleteDistanceMatrixThrowsWhenDistanceMatrixIsDependencyOfTree() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String distanceMatrixId = "distanceMatrixId"; - String name = "name"; - DistanceMatrixSourceType sourceType = DistanceMatrixSourceType.FUNCTION; - DistanceMatrixSource source = new DistanceMatrixSourceFunction("functionName"); - DistanceMatrixDataRepositoryId repositoryId = DistanceMatrixDataRepositoryId.S3; - DistanceMatrixDataRepositorySpecificData repositorySpecificData = new DistanceMatrixS3DataRepositorySpecificData("url"); - - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(projectId, userId)).thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(projectId, datasetId)).thenReturn(true); - when(distanceMatrixMetadataRepository.findByProjectIdAndDatasetIdAndDistanceMatrixId(projectId, datasetId, distanceMatrixId)) - .thenReturn(Optional.of(new DistanceMatrixMetadata( - projectId, - datasetId, - distanceMatrixId, - name, - sourceType, - source, - Map.of(repositoryId, repositorySpecificData) - ))); - when(treeMetadataRepository.existsByDatasetIdAndDistanceMatrixIdSource(datasetId, distanceMatrixId)).thenReturn(true); - - assertThrows(DeniedResourceDeletionException.class, () -> - distanceMatrixService.deleteDistanceMatrix(projectId, datasetId, distanceMatrixId, userId) - ); - } - - // deleteAllByProjectIdAndDatasetId - @Test - void deleteAllByProjectIdAndDatasetIdIsSuccessful() { - String projectId = "projectId"; - String datasetId = "datasetId"; - when(distanceMatrixMetadataRepository.findAllByProjectIdAndDatasetId(any(String.class), any(String.class))) - .thenReturn(List.of()); - - distanceMatrixService.deleteAllByProjectIdAndDatasetId(projectId, datasetId); - - verify(distanceMatrixMetadataRepository, times(0)).delete(any(DistanceMatrixMetadata.class)); - } - - // updateDistanceMatrix - @Test - void updateDistanceMatrixIsSuccessful() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String distanceMatrixId = "distanceMatrixId"; - String name = "name"; - DistanceMatrixSourceType sourceType = DistanceMatrixSourceType.FUNCTION; - DistanceMatrixSource source = new DistanceMatrixSourceFunction("functionName"); - DistanceMatrixDataRepositoryId repositoryId = DistanceMatrixDataRepositoryId.S3; - DistanceMatrixDataRepositorySpecificData repositorySpecificData = new DistanceMatrixS3DataRepositorySpecificData("url"); - - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(projectId, userId)).thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(projectId, datasetId)).thenReturn(true); - when(distanceMatrixMetadataRepository.findByProjectIdAndDatasetIdAndDistanceMatrixId(projectId, datasetId, distanceMatrixId)) - .thenReturn(Optional.of(new DistanceMatrixMetadata( - projectId, - datasetId, - distanceMatrixId, - name, - sourceType, - source, - Map.of(repositoryId, repositorySpecificData) - ))); - - UpdateDistanceMatrixOutput output = distanceMatrixService.updateDistanceMatrix(name, projectId, datasetId, distanceMatrixId, userId); - - assertEquals(name, output.getPreviousName()); - assertEquals(name, output.getNewName()); - } - - @Test - void updateDistanceMatrixThrowsWhenProjectDoesNotExist() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String distanceMatrixId = "distanceMatrixId"; - String name = "name"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(projectId, userId)).thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - distanceMatrixService.updateDistanceMatrix(name, projectId, datasetId, distanceMatrixId, userId) - ); - } - - @Test - void updateDistanceMatrixThrowsWhenDistanceMatrixDoesNotExist() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String distanceMatrixId = "distanceMatrixId"; - String name = "name"; - DistanceMatrixSourceType sourceType = DistanceMatrixSourceType.FUNCTION; - DistanceMatrixSource source = new DistanceMatrixSourceFunction("functionName"); - DistanceMatrixDataRepositoryId repositoryId = DistanceMatrixDataRepositoryId.S3; - DistanceMatrixDataRepositorySpecificData repositorySpecificData = new DistanceMatrixS3DataRepositorySpecificData("url"); - - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(projectId, userId)).thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(projectId, datasetId)).thenReturn(true); - when(distanceMatrixMetadataRepository.findByProjectIdAndDatasetIdAndDistanceMatrixId(projectId, datasetId, distanceMatrixId)) - .thenReturn(Optional.empty()); - - assertThrows(DistanceMatrixNotFoundException.class, () -> - distanceMatrixService.updateDistanceMatrix(name, projectId, datasetId, distanceMatrixId, userId) - ); - } - - @ParameterizedTest - @NullAndEmptySource - void updateDistanceMatrixThrowsWhenNameIsNullOrEmpty(String name) { - String projectId = "projectId"; - String datasetId = "datasetId"; - String distanceMatrixId = "distanceMatrixId"; - DistanceMatrixSourceType sourceType = DistanceMatrixSourceType.FUNCTION; - DistanceMatrixSource source = new DistanceMatrixSourceFunction("functionName"); - DistanceMatrixDataRepositoryId repositoryId = DistanceMatrixDataRepositoryId.S3; - DistanceMatrixDataRepositorySpecificData repositorySpecificData = new DistanceMatrixS3DataRepositorySpecificData("url"); - - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(projectId, userId)).thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(projectId, datasetId)).thenReturn(true); - when(distanceMatrixMetadataRepository.findByProjectIdAndDatasetIdAndDistanceMatrixId(projectId, datasetId, distanceMatrixId)) - .thenReturn(Optional.of(new DistanceMatrixMetadata( - projectId, - datasetId, - distanceMatrixId, - name, - sourceType, - source, - Map.of(repositoryId, repositorySpecificData) - ))); - - assertThrows(InvalidArgumentException.class, () -> - distanceMatrixService.updateDistanceMatrix(name, projectId, datasetId, distanceMatrixId, userId) - ); - } -} diff --git a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/tree/TreeServiceTests.java b/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/tree/TreeServiceTests.java deleted file mode 100644 index f48808cb..00000000 --- a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/tree/TreeServiceTests.java +++ /dev/null @@ -1,346 +0,0 @@ -package org.phyloviz.pwp.administration.service.dataset.tree; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.phyloviz.pwp.administration.service.dtos.tree.TreeInfo; -import org.phyloviz.pwp.administration.service.dtos.tree.UpdateTreeOutput; -import org.phyloviz.pwp.administration.service.exceptions.DeniedResourceDeletionException; -import org.phyloviz.pwp.administration.service.project.dataset.tree.TreeServiceImpl; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree.TreeMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.TreeMetadata; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSource; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceFile; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceType; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.TreeViewMetadataRepository; -import org.phyloviz.pwp.shared.service.exceptions.DatasetNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TreeNotFoundException; - -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class TreeServiceTests { - - @Mock - private ProjectRepository projectRepository; - - @Mock - private DatasetRepository datasetRepository; - - @Mock - private TreeMetadataRepository treeMetadataRepository; - - @Mock - private TreeViewMetadataRepository treeViewMetadataService; - - @Mock - private TreeDataRepositoryFactory treeDataRepositoryFactory; - - @InjectMocks - private TreeServiceImpl treeService; - - - // getTreeInfos - @Test - void getTreeInfosIsSuccessful() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeId = "treeId"; - String name = "name"; - TreeSourceType sourceType = TreeSourceType.FILE; - TreeSource source = new TreeSourceFile("fileType", "fileName"); - TreeDataRepositoryId repositoryId = TreeDataRepositoryId.S3; - TreeDataRepositorySpecificData repositorySpecificData = new TreeS3DataRepositorySpecificData("url"); - - when(treeMetadataRepository.findAllByDatasetId(any(String.class))) - .thenReturn(List.of( - new TreeMetadata( - projectId, - datasetId, - treeId, - name, - sourceType, - source, - Map.of(repositoryId, repositorySpecificData) - ) - )); - - List treeInfos = treeService.getTreeInfos(datasetId); - - assertEquals(1, treeInfos.size()); - assertEquals(name, treeInfos.get(0).getName()); - assertEquals(sourceType, treeInfos.get(0).getSourceType()); - } - - // deleteTree - @Test - void deleteTreeIsSuccessful() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeId = "treeId"; - String name = "name"; - TreeSourceType sourceType = TreeSourceType.FILE; - TreeSource source = new TreeSourceFile("fileType", "fileName"); - TreeDataRepositoryId repositoryId = TreeDataRepositoryId.S3; - TreeDataRepositorySpecificData repositorySpecificData = new TreeS3DataRepositorySpecificData("url"); - - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(true); - when(treeMetadataRepository.findByProjectIdAndDatasetIdAndTreeId(any(String.class), any(String.class), any(String.class))) - .thenReturn(Optional.of(new TreeMetadata( - projectId, - datasetId, - treeId, - name, - sourceType, - source, - Map.of(repositoryId, repositorySpecificData) - )) - ); - when(treeViewMetadataService.existsByDatasetIdAndTreeIdSource(any(String.class), any(String.class))) - .thenReturn(false); - - TreeDataRepository rep = mock(TreeS3DataRepository.class); - - when(treeDataRepositoryFactory.getRepository(repositoryId)) - .thenReturn(rep); - - - treeService.deleteTree(projectId, datasetId, treeId, userId); - - verify(treeMetadataRepository, times(1)).delete(any(TreeMetadata.class)); - } - - @Test - void deleteTreeThrowsWhenProjectDoesNotExist() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeId = "treeId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - treeService.deleteTree(projectId, datasetId, treeId, userId) - ); - } - - @Test - void deleteTreeThrowsWhenDatasetDoesNotExist() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeId = "treeId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(DatasetNotFoundException.class, () -> - treeService.deleteTree(projectId, datasetId, treeId, userId) - ); - } - - @Test - void deleteTreeThrowsWhenTreeDoesNotExist() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeId = "treeId"; - - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(true); - when(treeMetadataRepository.findByProjectIdAndDatasetIdAndTreeId(any(String.class), any(String.class), any(String.class))) - .thenReturn(Optional.empty()); - - assertThrows(TreeNotFoundException.class, () -> - treeService.deleteTree(projectId, datasetId, treeId, userId) - ); - } - - @Test - void deleteTreeThrowsWhenTreeViewExists() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeId = "treeId"; - String name = "name"; - TreeSourceType sourceType = TreeSourceType.FILE; - TreeSource source = new TreeSourceFile("fileType", "fileName"); - TreeDataRepositoryId repositoryId = TreeDataRepositoryId.S3; - TreeDataRepositorySpecificData repositorySpecificData = new TreeS3DataRepositorySpecificData("url"); - - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(true); - when(treeMetadataRepository.findByProjectIdAndDatasetIdAndTreeId(any(String.class), any(String.class), any(String.class))) - .thenReturn(Optional.of(new TreeMetadata( - projectId, - datasetId, - treeId, - name, - sourceType, - source, - Map.of(repositoryId, repositorySpecificData) - )) - ); - when(treeViewMetadataService.existsByDatasetIdAndTreeIdSource(any(String.class), any(String.class))) - .thenReturn(true); - - assertThrows(DeniedResourceDeletionException.class, () -> - treeService.deleteTree(projectId, datasetId, treeId, userId) - ); - } - - // deleteAllByProjectIdAndDatasetId - @Test - void deleteAllByProjectIdAndDatasetIdIsSuccessful() { - String projectId = "projectId"; - String datasetId = "datasetId"; - when(treeMetadataRepository.findAllByProjectIdAndDatasetId(any(String.class), any(String.class))) - .thenReturn(List.of()); - - treeService.deleteAllByProjectIdAndDatasetId(projectId, datasetId); - - verify(treeMetadataRepository, times(0)).delete(any(TreeMetadata.class)); - } - - // updateTree - @Test - void updateTreeIsSuccessful() { - String newName = "name"; - String projectId = "projectId"; - String userId = "userId"; - String datasetId = "datasetId"; - String treeId = "treeId"; - String name = "name"; - TreeSourceType sourceType = TreeSourceType.FILE; - TreeSource source = new TreeSourceFile("fileType", "fileName"); - TreeDataRepositoryId repositoryId = TreeDataRepositoryId.S3; - TreeDataRepositorySpecificData repositorySpecificData = new TreeS3DataRepositorySpecificData("url"); - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(true); - when(treeMetadataRepository.findByProjectIdAndDatasetIdAndTreeId(any(String.class), any(String.class), any(String.class))) - .thenReturn(Optional.of(new TreeMetadata( - projectId, - datasetId, - treeId, - name, - sourceType, - source, - Map.of(repositoryId, repositorySpecificData) - ))); - - UpdateTreeOutput updateTreeOutput = treeService.updateTree(newName, projectId, datasetId, treeId, userId); - - assertEquals(newName, updateTreeOutput.getNewName()); - assertEquals(name, updateTreeOutput.getPreviousName()); - } - - @Test - void updateTreeThrowsWhenProjectDoesNotExist() { - String name = "name"; - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeId = "treeId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - treeService.updateTree(name, projectId, datasetId, treeId, userId) - ); - } - - @Test - void updateTreeThrowsWhenTreeDoesNotExist() { - String name = "name"; - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeId = "treeId"; - String userId = "userId"; - - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))).thenReturn(true); - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(treeMetadataRepository.findByProjectIdAndDatasetIdAndTreeId(any(String.class), any(String.class), any(String.class))) - .thenReturn(Optional.empty()); - - assertThrows(TreeNotFoundException.class, () -> - treeService.updateTree(name, projectId, datasetId, treeId, userId) - ); - } - - @ParameterizedTest - @NullAndEmptySource - void updateTreeThrowsWhenNameIsNullOfEmpty(String name) { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeId = "treeId"; - TreeSourceType sourceType = TreeSourceType.FILE; - TreeSource source = new TreeSourceFile("fileType", "fileName"); - TreeDataRepositoryId repositoryId = TreeDataRepositoryId.S3; - TreeDataRepositorySpecificData repositorySpecificData = new TreeS3DataRepositorySpecificData("url"); - - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(true); - when(treeMetadataRepository.findByProjectIdAndDatasetIdAndTreeId(any(String.class), any(String.class), any(String.class))) - .thenReturn(Optional.of(new TreeMetadata( - projectId, - datasetId, - treeId, - name, - sourceType, - source, - Map.of(repositoryId, repositorySpecificData) - ))); - - assertThrows(InvalidArgumentException.class, () -> - treeService.updateTree(name, projectId, datasetId, treeId, userId) - ); - } -} diff --git a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/tree_view/TreeViewServiceTests.java b/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/tree_view/TreeViewServiceTests.java deleted file mode 100644 index 26c94840..00000000 --- a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/dataset/tree_view/TreeViewServiceTests.java +++ /dev/null @@ -1,298 +0,0 @@ -package org.phyloviz.pwp.administration.service.dataset.tree_view; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.phyloviz.pwp.administration.service.dtos.tree_view.TreeViewInfo; -import org.phyloviz.pwp.administration.service.dtos.tree_view.UpdateTreeViewOutput; -import org.phyloviz.pwp.administration.service.project.dataset.tree_view.TreeViewServiceImpl; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.TreeViewMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.TreeViewMetadata; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.source.TreeViewSource; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Transformations; -import org.phyloviz.pwp.shared.service.exceptions.DatasetNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TreeViewNotFoundException; - -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class TreeViewServiceTests { - - @Mock - private ProjectRepository projectRepository; - - @Mock - private DatasetRepository datasetRepository; - - @Mock - private TreeViewMetadataRepository treeViewMetadataRepository; - - @Mock - private TreeViewDataRepositoryFactory treeViewDataRepositoryFactory; - - @InjectMocks - private TreeViewServiceImpl treeViewService; - - - // getTreeViewInfos - @Test - void getTreeViewInfosIsSuccessful() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeViewId = "treeViewId"; - String name = "name"; - String layout = "layout"; - TreeViewSource source = new TreeViewSource("treeId"); - TreeViewDataRepositoryId repositoryId = TreeViewDataRepositoryId.S3; - TreeViewDataRepositorySpecificData repositorySpecificData = new TreeViewS3DataRepositorySpecificData("url"); - - when(treeViewMetadataRepository.findAllByDatasetId(any(String.class))) - .thenReturn(List.of( - new TreeViewMetadata( - projectId, - datasetId, - treeViewId, - name, - layout, - source, - Map.of(repositoryId, repositorySpecificData), - new Transformations(1, 1, 1, 1, 1, 1, - 1, 1, true, - 1, 1, false, 1, "absolute") - ) - )); - - List treeViewInfos = treeViewService.getTreeViewInfos(datasetId); - - assertEquals(1, treeViewInfos.size()); - assertEquals(name, treeViewInfos.get(0).getName()); - assertEquals(layout, treeViewInfos.get(0).getLayout()); - } - - // deleteTreeView - @Test - void deleteTreeViewIsSuccessful() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeViewId = "treeViewId"; - String name = "name"; - String layout = "layout"; - TreeViewSource source = new TreeViewSource("treeId"); - TreeViewDataRepositoryId repositoryId = TreeViewDataRepositoryId.S3; - TreeViewDataRepositorySpecificData repositorySpecificData = new TreeViewS3DataRepositorySpecificData("url"); - - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(true); - when(treeViewMetadataRepository.findByProjectIdAndDatasetIdAndTreeViewId(any(String.class), any(String.class), any(String.class))) - .thenReturn(Optional.of(new TreeViewMetadata( - projectId, - datasetId, - treeViewId, - name, - layout, - source, - Map.of(repositoryId, repositorySpecificData), - new Transformations(1, 1, 1, 1, 1, 1, - 1, 1, true, - 1, 1, false, 1, "absolute") - ))); - - TreeViewDataRepository rep = mock(TreeViewS3DataRepository.class); - - when(treeViewDataRepositoryFactory.getRepository(repositoryId)) - .thenReturn(rep); - - treeViewService.deleteTreeView(projectId, datasetId, treeViewId, userId); - - verify(treeViewMetadataRepository, times(1)).delete(any(TreeViewMetadata.class)); - } - - @Test - void deleteTreeViewThrowsWhenProjectDoesNotExist() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeViewId = "treeViewId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - treeViewService.deleteTreeView(projectId, datasetId, treeViewId, userId) - ); - } - - @Test - void deleteTreeViewThrowsWhenDatasetDoesNotExist() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeViewId = "treeViewId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(DatasetNotFoundException.class, () -> - treeViewService.deleteTreeView(projectId, datasetId, treeViewId, userId) - ); - } - - @Test - void deleteTreeViewThrowsWhenTreeViewDoesNotExist() { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeViewId = "treeViewId"; - - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(true); - when(treeViewMetadataRepository.findByProjectIdAndDatasetIdAndTreeViewId(any(String.class), any(String.class), any(String.class))) - .thenReturn(Optional.empty()); - - assertThrows(TreeViewNotFoundException.class, () -> - treeViewService.deleteTreeView(projectId, datasetId, treeViewId, userId) - ); - } - - // deleteAllByProjectIdAndDatasetId - @Test - void deleteAllByProjectIdAndDatasetIdIsSuccessful() { - String projectId = "projectId"; - String datasetId = "datasetId"; - when(treeViewMetadataRepository.findAllByProjectIdAndDatasetId(any(String.class), any(String.class))) - .thenReturn(List.of()); - - treeViewService.deleteAllByProjectIdAndDatasetId(projectId, datasetId); - - verify(treeViewMetadataRepository, times(0)).delete(any(TreeViewMetadata.class)); - } - - // updateTreeView - @Test - void updateTreeViewIsSuccessful() { - String newName = "newName"; - String projectId = "projectId"; - String userId = "userId"; - String datasetId = "datasetId"; - String treeViewId = "treeViewId"; - String name = "name"; - String layout = "layout"; - TreeViewSource source = new TreeViewSource("treeId"); - TreeViewDataRepositoryId repositoryId = TreeViewDataRepositoryId.S3; - TreeViewDataRepositorySpecificData repositorySpecificData = new TreeViewS3DataRepositorySpecificData("url"); - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(true); - when(treeViewMetadataRepository.findByProjectIdAndDatasetIdAndTreeViewId(any(String.class), any(String.class), any(String.class))) - .thenReturn(Optional.of( - new TreeViewMetadata( - projectId, - datasetId, - treeViewId, - name, - layout, - source, - Map.of(repositoryId, repositorySpecificData), - new Transformations(1, 1, 1, 1, 1, 1, - 1, 1, true, - 1, 1, false, 1, "absolute") - ) - )); - - UpdateTreeViewOutput updateTreeViewOutput = treeViewService.updateTreeView(newName, projectId, datasetId, treeViewId, userId); - - assertEquals(newName, updateTreeViewOutput.getNewName()); - assertEquals(name, updateTreeViewOutput.getPreviousName()); - } - - @Test - void updateTreeViewThrowsWhenProjectDoesNotExist() { - String name = "name"; - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeViewId = "treeViewId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - treeViewService.updateTreeView(name, projectId, datasetId, treeViewId, userId) - ); - } - - @Test - void updateTreeViewThrowsWhenTreeViewDoesNotExist() { - String name = "name"; - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeViewId = "treeViewId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(true); - when(treeViewMetadataRepository.findByProjectIdAndDatasetIdAndTreeViewId(any(String.class), any(String.class), any(String.class))) - .thenReturn(Optional.empty()); - - assertThrows(TreeViewNotFoundException.class, () -> - treeViewService.updateTreeView(name, projectId, datasetId, treeViewId, userId) - ); - } - - @ParameterizedTest - @NullAndEmptySource - void updateTreeViewThrowsWhenNameIsNullOfEmpty(String name) { - String projectId = "projectId"; - String datasetId = "datasetId"; - String treeViewId = "treeViewId"; - String userId = "userId"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndId(any(String.class), any(String.class))) - .thenReturn(true); - when(treeViewMetadataRepository.findByProjectIdAndDatasetIdAndTreeViewId(projectId, datasetId, treeViewId)) - .thenReturn(Optional.of(new TreeViewMetadata())); - - assertThrows(InvalidArgumentException.class, () -> - treeViewService.updateTreeView(name, projectId, datasetId, treeViewId, userId) - ); - } -} diff --git a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/file/IsolateDataServiceTests.java b/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/file/IsolateDataServiceTests.java deleted file mode 100644 index ac53f7d9..00000000 --- a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/file/IsolateDataServiceTests.java +++ /dev/null @@ -1,223 +0,0 @@ -package org.phyloviz.pwp.administration.service.file; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.phyloviz.pwp.administration.service.dtos.files.isolate_data.IsolateDataInfo; -import org.phyloviz.pwp.administration.service.dtos.files.isolate_data.UpdateIsolateDataOutput; -import org.phyloviz.pwp.administration.service.exceptions.DeniedFileDeletionException; -import org.phyloviz.pwp.administration.service.project.file.IsolateDataServiceImpl; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.IsolateDataNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; - -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class IsolateDataServiceTests { - @Mock - private ProjectRepository projectRepository; - - @Mock - private DatasetRepository datasetRepository; - - @Mock - private IsolateDataMetadataRepository isolateDataMetadataRepository; - - @Mock - private IsolateDataDataRepositoryFactory isolateDataDataRepositoryFactory; - - @InjectMocks - private IsolateDataServiceImpl isolateDataService; - - // getIsolateDataInfos - @Test - void getIsolateDataInfosIsSuccessful() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(isolateDataMetadataRepository.findAllByProjectId(any(String.class))) - .thenReturn(List.of()); - - List isolateDataInfos = isolateDataService.getIsolateDataInfos(projectId); - assertTrue(isolateDataInfos.isEmpty()); - } - - // deleteIsolateData - @Test - void deleteIsolateDataIsSuccessful() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataMetadataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndIsolateDataId(any(String.class), any(String.class))) - .thenReturn(false); - when(isolateDataMetadataRepository.findByProjectIdAndIsolateDataId(any(String.class), any(String.class))) - .thenReturn(Optional.of( - new IsolateDataMetadata(isolateDataMetadataId, projectId, isolateDataId, List.of(), "name", Map.of(IsolateDataDataRepositoryId.S3, new IsolateDataS3DataRepositorySpecificData()) - ))); - - IsolateDataDataRepository rep = mock(IsolateDataS3DataRepository.class); - - when(isolateDataDataRepositoryFactory.getRepository(IsolateDataDataRepositoryId.S3)) - .thenReturn(rep); - - isolateDataService.deleteIsolateData(projectId, isolateDataId, userId); - - verify(isolateDataMetadataRepository, times(1)).delete(any(IsolateDataMetadata.class)); - } - - @Test - void deleteIsolateDataThrowsExceptionWhenProjectDoesNotExist() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - isolateDataService.deleteIsolateData(projectId, isolateDataId, userId) - ); - } - - @Test - void deleteIsolateDataThrowsExceptionWhenIsolateDataDoesNotExist() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - assertThrows(IsolateDataNotFoundException.class, () -> - isolateDataService.deleteIsolateData(projectId, isolateDataId, userId) - ); - } - - @Test - void deleteIsolateDataThrowsExceptionWhenIsolateDataIsUsedByDataset() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndIsolateDataId(any(String.class), any(String.class))) - .thenReturn(true); - when(isolateDataMetadataRepository.findByProjectIdAndIsolateDataId(any(String.class), any(String.class))) - .thenReturn(Optional.of(new IsolateDataMetadata())); - - assertThrows(DeniedFileDeletionException.class, () -> - isolateDataService.deleteIsolateData(projectId, isolateDataId, userId) - ); - } - - - // deleteAllByProjectId - @Test - void deleteAllByProjectIdIsSuccessful() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(isolateDataMetadataRepository.findAllByProjectId(any(String.class))) - .thenReturn(List.of()); - - isolateDataService.deleteAllByProjectId(projectId); - - verify(isolateDataMetadataRepository, times(0)).delete(any(IsolateDataMetadata.class)); - } - - // updateIsolateData - @Test - void updateIsolateDataIsSuccessful() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String newName = "newName"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(isolateDataMetadataRepository.findByProjectIdAndIsolateDataId(any(String.class), any(String.class))) - .thenReturn(Optional.of(new IsolateDataMetadata())); - when(isolateDataMetadataRepository.save(any(IsolateDataMetadata.class))) - .thenReturn(new IsolateDataMetadata()); - - UpdateIsolateDataOutput updateIsolateDataOutput = isolateDataService.updateIsolateData(newName, projectId, isolateDataId, userId); - assertEquals(newName, updateIsolateDataOutput.getNewName()); - assertNull(updateIsolateDataOutput.getPreviousName()); - } - - @Test - void updateIsolateDataThrowsWhenProjectDoesNotExist() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String newName = "newName"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - isolateDataService.updateIsolateData(newName, projectId, isolateDataId, userId) - ); - } - - @Test - void updateIsolateDataThrowsWhenIsolateDataDoesNotExist() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String newName = "newName"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - assertThrows(IsolateDataNotFoundException.class, () -> - isolateDataService.updateIsolateData(newName, projectId, isolateDataId, userId) - ); - } - - @ParameterizedTest - @NullAndEmptySource - void updateIsolateDataThrowsWhenNewNameIsInvalid(String newName) { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String isolateDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(isolateDataMetadataRepository.findByProjectIdAndIsolateDataId(any(String.class), any(String.class))) - .thenReturn(Optional.of(new IsolateDataMetadata())); - - assertThrows(InvalidArgumentException.class, () -> - isolateDataService.updateIsolateData(newName, projectId, isolateDataId, userId) - ); - } -} diff --git a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/file/TypingDataServiceTests.java b/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/file/TypingDataServiceTests.java deleted file mode 100644 index 87d51cac..00000000 --- a/src/backend/microservices/administration/src/test/java/org/phyloviz/pwp/administration/service/file/TypingDataServiceTests.java +++ /dev/null @@ -1,228 +0,0 @@ -package org.phyloviz.pwp.administration.service.file; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.phyloviz.pwp.administration.service.dtos.files.typing_data.TypingDataInfo; -import org.phyloviz.pwp.administration.service.dtos.files.typing_data.UpdateTypingDataOutput; -import org.phyloviz.pwp.administration.service.exceptions.DeniedFileDeletionException; -import org.phyloviz.pwp.administration.service.project.file.TypingDataServiceImpl; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.TypingDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TypingDataNotFoundException; - -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class TypingDataServiceTests { - - @Mock - private ProjectRepository projectRepository; - - @Mock - private DatasetRepository datasetRepository; - - @Mock - private TypingDataMetadataRepository typingDataMetadataRepository; - - @Mock - private TypingDataDataRepositoryFactory typingDataDataRepositoryFactory; - - @InjectMocks - private TypingDataServiceImpl typingDataService; - - // getTypingDataInfos - @Test - void getTypingDataInfosIsSuccessful() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(typingDataMetadataRepository.findAllByProjectId(any(String.class))) - .thenReturn(List.of()); - - List typingDataInfos = typingDataService.getTypingDataInfos(projectId); - assertTrue(typingDataInfos.isEmpty()); - } - - // deleteTypingData - @Test - void deleteTypingDataIsSuccessful() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String datasetId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndTypingDataId(any(String.class), any(String.class))) - .thenReturn(false); - when(typingDataMetadataRepository.findByProjectIdAndTypingDataId(any(String.class), any(String.class))) - .thenReturn(Optional.of( - new TypingDataMetadata(datasetId, projectId, typingDataId, "type", "name", - Map.of(TypingDataDataRepositoryId.S3, - new TypingDataS3DataRepositorySpecificData("bucket", "key") - )) - )); - - TypingDataDataRepository rep = mock(TypingDataS3DataRepository.class); - - when(typingDataDataRepositoryFactory.getRepository(TypingDataDataRepositoryId.S3)) - .thenReturn(rep); - - - typingDataService.deleteTypingData(projectId, typingDataId, userId); - - verify(typingDataMetadataRepository, times(1)).delete(any(TypingDataMetadata.class)); - } - - @Test - void deleteTypingDataThrowsExceptionWhenProjectDoesNotExist() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - typingDataService.deleteTypingData(projectId, typingDataId, userId) - ); - } - - @Test - void deleteTypingDataThrowsExceptionWhenTypingDataDoesNotExist() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - assertThrows(TypingDataNotFoundException.class, () -> - typingDataService.deleteTypingData(projectId, typingDataId, userId) - ); - } - - @Test - void deleteTypingDataThrowsExceptionWhenTypingDataIsUsedByDataset() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(datasetRepository.existsByProjectIdAndTypingDataId(any(String.class), any(String.class))) - .thenReturn(true); - when(typingDataMetadataRepository.findByProjectIdAndTypingDataId(any(String.class), any(String.class))) - .thenReturn(Optional.of(new TypingDataMetadata())); - - assertThrows(DeniedFileDeletionException.class, () -> - typingDataService.deleteTypingData(projectId, typingDataId, userId) - ); - } - - - // deleteAllByProjectId - @Test - void deleteAllByProjectIdIsSuccessful() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(typingDataMetadataRepository.findAllByProjectId(any(String.class))) - .thenReturn(List.of()); - - typingDataService.deleteAllByProjectId(projectId); - - verify(typingDataMetadataRepository, times(0)).delete(any(TypingDataMetadata.class)); - } - - // updateTypingData - @Test - void updateTypingDataIsSuccessful() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String newName = "newName"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(typingDataMetadataRepository.findByProjectIdAndTypingDataId(any(String.class), any(String.class))) - .thenReturn(Optional.of(new TypingDataMetadata())); - when(typingDataMetadataRepository.save(any(TypingDataMetadata.class))) - .thenReturn(new TypingDataMetadata()); - - UpdateTypingDataOutput updateTypingDataOutput = typingDataService.updateTypingData(newName, projectId, typingDataId, userId); - assertEquals(newName, updateTypingDataOutput.getNewName()); - assertNull(updateTypingDataOutput.getPreviousName()); - } - - @Test - void updateTypingDataThrowsWhenProjectDoesNotExist() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String newName = "newName"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(false); - - assertThrows(ProjectNotFoundException.class, () -> - typingDataService.updateTypingData(newName, projectId, typingDataId, userId) - ); - } - - @Test - void updateTypingDataThrowsWhenTypingDataDoesNotExist() { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String newName = "newName"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - - assertThrows(TypingDataNotFoundException.class, () -> - typingDataService.updateTypingData(newName, projectId, typingDataId, userId) - ); - } - - @ParameterizedTest - @NullAndEmptySource - void updateTypingDataThrowsWhenNewNameIsInvalid(String newName) { - String projectId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String typingDataId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - String userId = "ec7bae63-3238-4044-8d03-e2d9911f50f8"; - - when(projectRepository.existsByIdAndOwnerId(any(String.class), any(String.class))) - .thenReturn(true); - when(typingDataMetadataRepository.findByProjectIdAndTypingDataId(any(String.class), any(String.class))) - .thenReturn(Optional.of(new TypingDataMetadata())); - - assertThrows(InvalidArgumentException.class, () -> - typingDataService.updateTypingData(newName, projectId, typingDataId, userId) - ); - } -} diff --git a/src/backend/microservices/compute/build.gradle b/src/backend/microservices/compute/build.gradle deleted file mode 100644 index ac9c1b48..00000000 --- a/src/backend/microservices/compute/build.gradle +++ /dev/null @@ -1,45 +0,0 @@ -plugins { - id 'application' - id 'org.springframework.boot' version '3.0.4' - id 'io.spring.dependency-management' version '1.1.0' - id "io.freefair.lombok" version "8.0.0-rc2" -} - -group 'phylovizwebplatform' -version '0.0.1-SNAPSHOT' -sourceCompatibility = '17' - -ext { - set('jupiterVersion', "5.8.1") -} - -repositories { - mavenCentral() -} - -dependencies { - implementation project(path: ':microservices:shared-phylodb') - implementation project(path: ':microservices:shared') - - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'org.junit.jupiter:junit-jupiter-api' version { jupiterVersion } - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' version { jupiterVersion } - - implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' - implementation 'org.springframework.boot:spring-boot-starter-validation' - - implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2' - implementation 'org.zalando:problem-spring-web-starter:0.27.0' - - implementation 'com.squareup.okhttp3:okhttp:4.10.0' - implementation 'com.google.code.gson:gson:2.10.1' - implementation 'org.apache.commons:commons-text:1.10.0' - - implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.6' -} - -test { - useJUnitPlatform() -} \ No newline at end of file diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/ComputeMicroserviceApplication.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/ComputeMicroserviceApplication.java deleted file mode 100644 index ae89e11b..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/ComputeMicroserviceApplication.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.phyloviz.pwp.compute; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * Main class for the Compute Microservice of the PHYLOViZ Web Platform. - */ -@SpringBootApplication -public class ComputeMicroserviceApplication { - - /** - * Entry point for the Compute Microservice. - * - * @param args arguments passed to the application - */ - public static void main(String[] args) { - SpringApplication.run(ComputeMicroserviceApplication.class, args); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/config/ComputeConfig.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/config/ComputeConfig.java deleted file mode 100644 index f0ccaa63..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/config/ComputeConfig.java +++ /dev/null @@ -1,132 +0,0 @@ -package org.phyloviz.pwp.compute.config; - -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.converters.AccessTemplateDeserializer; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.converters.AccessTemplateSerializer; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.converters.CaseInsensitiveEnumDeserializerFactory; -import org.phyloviz.pwp.compute.service.flowviz.FLOWViZClient; -import org.phyloviz.pwp.shared.config.ResourceServerSharedConfig; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.converters.DistanceMatrixMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.converters.IsolateDataMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.converters.IsolateDataMetadataSerializer; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.converters.TreeMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.converters.TreeViewMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.converters.TreeViewMetadataSerializer; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.converters.TypingDataMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.converters.TypingDataMetadataSerializer; -import org.phyloviz.pwp.shared_phylodb.config.ResourceServerSharedPhylodbConfig; -import org.springframework.beans.factory.BeanFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Primary; -import org.springframework.core.convert.ConversionService; -import org.springframework.core.convert.converter.Converter; -import org.springframework.core.convert.support.GenericConversionService; -import org.springframework.data.mongodb.MongoDatabaseFactory; -import org.springframework.data.mongodb.MongoTransactionManager; -import org.springframework.data.mongodb.core.convert.DbRefResolver; -import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; -import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper; -import org.springframework.data.mongodb.core.convert.MappingMongoConverter; -import org.springframework.data.mongodb.core.convert.MongoConverter; -import org.springframework.data.mongodb.core.convert.MongoCustomConversions; -import org.springframework.data.mongodb.core.mapping.MongoMappingContext; - -import java.util.List; - -/** - * Configuration class for the Compute Microservice. - */ -@Configuration -@Import({ResourceServerSharedConfig.class, ResourceServerSharedPhylodbConfig.class}) -public class ComputeConfig { - - private final String flowVizUsername; - private final String flowVizPassword; - private final String flowVizUrl; - private final TypingDataDataRepositoryRegistry typingDataDataRepositoryRegistry; - private final IsolateDataDataRepositoryRegistry isolateDataDataRepositoryRegistry; - private final DistanceMatrixDataRepositoryRegistry distanceMatrixDataRepositoryRegistry; - private final TreeDataRepositoryRegistry treeDataRepositoryRegistry; - private final TreeViewDataRepositoryRegistry treeViewDataRepositoryRegistry; - - public ComputeConfig( - @Value("${flowviz.username}") String flowVizUsername, - @Value("${flowviz.password}") String flowVizPassword, - @Value("${flowviz.url}") String flowVizUrl, - TypingDataDataRepositoryRegistry typingDataDataRepositoryRegistry, - IsolateDataDataRepositoryRegistry isolateDataDataRepositoryRegistry, - DistanceMatrixDataRepositoryRegistry distanceMatrixDataRepositoryRegistry, - TreeDataRepositoryRegistry treeDataRepositoryRegistry, - TreeViewDataRepositoryRegistry treeViewDataRepositoryRegistry - ) { - - this.flowVizUsername = flowVizUsername; - this.flowVizPassword = flowVizPassword; - this.flowVizUrl = flowVizUrl; - this.typingDataDataRepositoryRegistry = typingDataDataRepositoryRegistry; - this.isolateDataDataRepositoryRegistry = isolateDataDataRepositoryRegistry; - this.distanceMatrixDataRepositoryRegistry = distanceMatrixDataRepositoryRegistry; - this.treeDataRepositoryRegistry = treeDataRepositoryRegistry; - this.treeViewDataRepositoryRegistry = treeViewDataRepositoryRegistry; - } - - @Bean - FLOWViZClient flowVizClient() { - return FLOWViZClient - .builder() - .baseUrl(flowVizUrl) - .credentials(flowVizUsername, flowVizPassword) - .authenticate(); - } - - @Bean - MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) { - return new MongoTransactionManager(dbFactory); - } - - @Bean - @Primary - public MappingMongoConverter mappingMongoConverter( - MongoDatabaseFactory factory, - MongoMappingContext context, - BeanFactory beanFactory - ) { - DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory); - MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context); - mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null)); - mappingConverter.setCustomConversions(mongoCustomConversions(mappingConverter)); - ConversionService convService = mappingConverter.getConversionService(); - ((GenericConversionService) convService).addConverterFactory(new CaseInsensitiveEnumDeserializerFactory()); - - mappingConverter.afterPropertiesSet(); - - return mappingConverter; - } - - public MongoCustomConversions mongoCustomConversions(MongoConverter mongoConverter) { - List> converters = List.of( - new TypingDataMetadataDeserializer(mongoConverter, typingDataDataRepositoryRegistry), - new TypingDataMetadataSerializer(mongoConverter), - new IsolateDataMetadataDeserializer(mongoConverter, isolateDataDataRepositoryRegistry), - new IsolateDataMetadataSerializer(mongoConverter), - new DistanceMatrixMetadataDeserializer(mongoConverter, distanceMatrixDataRepositoryRegistry), - new TreeMetadataDeserializer(mongoConverter, treeDataRepositoryRegistry), - new TreeViewMetadataDeserializer(mongoConverter, treeViewDataRepositoryRegistry), - new TreeViewMetadataSerializer(mongoConverter), - new AccessTemplateSerializer(), - new AccessTemplateDeserializer(mongoConverter), - // https://stackoverflow.com/questions/12385920/spring-mongodb-storing-retrieving-enums-as-int-not-string/30024621#30024621 - new CaseInsensitiveEnumDeserializerFactory.CaseInsensitiveEnumDeserializer(null) - ); - - return new MongoCustomConversions(converters); - } - -} \ No newline at end of file diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/controllers/ComputeController.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/controllers/ComputeController.java deleted file mode 100644 index 313dd177..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/controllers/ComputeController.java +++ /dev/null @@ -1,123 +0,0 @@ -package org.phyloviz.pwp.compute.http.controllers; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.compute.http.models.create_workflow.CreateWorkflowInputModel; -import org.phyloviz.pwp.compute.http.models.create_workflow.CreateWorkflowOutputModel; -import org.phyloviz.pwp.compute.http.models.get_workflow.GetWorkflowOutputModel; -import org.phyloviz.pwp.compute.http.models.get_workflow_status.GetWorkflowStatusOutputModel; -import org.phyloviz.pwp.compute.http.models.get_workflows.GetWorkflowsOutputModel; -import org.phyloviz.pwp.compute.service.ComputeService; -import org.phyloviz.pwp.compute.service.dtos.create_workflow.CreateWorkflowOutput; -import org.phyloviz.pwp.compute.service.dtos.get_workflow.GetWorkflowOutput; -import org.phyloviz.pwp.compute.service.dtos.get_workflow.GetWorkflowStatusOutput; -import org.phyloviz.pwp.shared.domain.User; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -/** - * Controller for the Compute Microservice. - */ -@RestController -@RequiredArgsConstructor -public class ComputeController { - - private final ComputeService computeService; - - /** - * Create a new workflow. - * - * @param inputModel input model for the workflow - * @param projectId the project id of the project to which the workflow belongs - * @param user the user who is creating the workflow - * @return information about the created workflow - */ - @PostMapping("/projects/{projectId}/workflows") - public ResponseEntity createWorkflow( - @PathVariable String projectId, - @RequestBody CreateWorkflowInputModel inputModel, - User user - ) { - CreateWorkflowOutput createWorkflowOutput = computeService.createWorkflow( - projectId, inputModel.getType(), inputModel.getProperties(), user.getId() - ); - - return ResponseEntity - .accepted() - .body(new CreateWorkflowOutputModel(createWorkflowOutput)); - } - - /** - * Gets the status of a workflow. - * - * @param projectId the project id of the project to which the workflow belongs - * @param workflowId the id of the workflow - * @param user the user who is requesting the workflow status - * @return information about the workflow - */ - @GetMapping("/projects/{projectId}/workflows/{workflowId}/status") - public GetWorkflowStatusOutputModel getWorkflowStatus( - @PathVariable String projectId, - @PathVariable String workflowId, - User user - ) { - GetWorkflowStatusOutput getWorkflowStatusOutput = computeService.getWorkflowStatus( - projectId, workflowId, user.getId() - ); - - return new GetWorkflowStatusOutputModel(getWorkflowStatusOutput); - } - - /** - * Gets the workflow. - * - * @param projectId the project id of the project to which the workflow belongs - * @param workflowId the id of the workflow - * @param user the user who is requesting the workflow status - * @return information about the workflow - */ - @GetMapping("/projects/{projectId}/workflows/{workflowId}") - public GetWorkflowOutputModel getWorkflow( - @PathVariable String projectId, - @PathVariable String workflowId, - User user - ) { - GetWorkflowOutput getWorkflowOutput = computeService.getWorkflow( - projectId, workflowId, user.getId() - ); - - return new GetWorkflowOutputModel(getWorkflowOutput); - } - - /** - * Gets the workflows of a project. - * - * @param projectId the project id of the project to which the workflow belongs - * @param running whether to get only running workflows or not running workflows - * @param user the user who is requesting the workflows - * @return information about the workflows - */ - @GetMapping("/projects/{projectId}/workflows") - public GetWorkflowsOutputModel getWorkflows( - @PathVariable String projectId, - @RequestParam(required = false) Boolean running, - User user - ) { - List getWorkflowStatusOutputList; - - if (running == null) - getWorkflowStatusOutputList = computeService.getAllWorkflows(projectId, user.getId()); - else if (running) - getWorkflowStatusOutputList = computeService.getAllRunningWorkflows(projectId, user.getId()); - else - getWorkflowStatusOutputList = computeService.getAllNotRunningWorkflows(projectId, user.getId()); - - return new GetWorkflowsOutputModel(getWorkflowStatusOutputList); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/create_workflow/CreateWorkflowInputModel.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/create_workflow/CreateWorkflowInputModel.java deleted file mode 100644 index d576bd17..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/create_workflow/CreateWorkflowInputModel.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.phyloviz.pwp.compute.http.models.create_workflow; - -import lombok.Data; - -import java.util.Map; - -@Data -public class CreateWorkflowInputModel { - private String type; - private Map properties; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/create_workflow/CreateWorkflowOutputModel.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/create_workflow/CreateWorkflowOutputModel.java deleted file mode 100644 index 4139fab2..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/create_workflow/CreateWorkflowOutputModel.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.phyloviz.pwp.compute.http.models.create_workflow; - -import lombok.Data; -import org.phyloviz.pwp.compute.service.dtos.create_workflow.CreateWorkflowOutput; - -@Data -public class CreateWorkflowOutputModel { - private String workflowId; - - public CreateWorkflowOutputModel(CreateWorkflowOutput createWorkflowOutput) { - this.workflowId = createWorkflowOutput.getWorkflowId(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/get_workflow/GetWorkflowOutputModel.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/get_workflow/GetWorkflowOutputModel.java deleted file mode 100644 index af20cab5..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/get_workflow/GetWorkflowOutputModel.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.phyloviz.pwp.compute.http.models.get_workflow; - -import lombok.Data; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.documents.WorkflowStatus; -import org.phyloviz.pwp.compute.service.dtos.get_workflow.GetWorkflowOutput; - -import java.util.Map; - -@Data -public class GetWorkflowOutputModel { - private String workflowId; - private String type; - private String name; - private WorkflowStatus status; - private String failureReason; - private Map logs; - private double progress; - private Map data; - - public GetWorkflowOutputModel(GetWorkflowOutput getWorkflowOutput) { - this.workflowId = getWorkflowOutput.getWorkflowId(); - this.type = getWorkflowOutput.getType(); - this.name = getWorkflowOutput.getName(); - this.status = getWorkflowOutput.getStatus(); - this.failureReason = getWorkflowOutput.getFailureReason(); - this.logs = getWorkflowOutput.getLogs(); - this.progress = getWorkflowOutput.getProgress(); - this.data = getWorkflowOutput.getData(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java deleted file mode 100644 index 3f7b679e..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.phyloviz.pwp.compute.http.models.get_workflow_status; - -import lombok.Data; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.documents.WorkflowStatus; -import org.phyloviz.pwp.compute.service.dtos.get_workflow.GetWorkflowStatusOutput; - -import java.util.Map; - -@Data -public class GetWorkflowStatusOutputModel { - private String workflowId; - private String type; - private String name; - private WorkflowStatus status; - private String failureReason; - private double progress; - private Map data; - - public GetWorkflowStatusOutputModel(GetWorkflowStatusOutput getWorkflowStatusOutput) { - this.workflowId = getWorkflowStatusOutput.getWorkflowId(); - this.type = getWorkflowStatusOutput.getType(); - this.name = getWorkflowStatusOutput.getName(); - this.status = getWorkflowStatusOutput.getStatus(); - this.failureReason = getWorkflowStatusOutput.getFailureReason(); - this.progress = getWorkflowStatusOutput.getProgress(); - this.data = getWorkflowStatusOutput.getData(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/get_workflows/GetWorkflowsOutputModel.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/get_workflows/GetWorkflowsOutputModel.java deleted file mode 100644 index 04b9d672..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/models/get_workflows/GetWorkflowsOutputModel.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.phyloviz.pwp.compute.http.models.get_workflows; - -import lombok.Data; -import org.phyloviz.pwp.compute.http.models.get_workflow_status.GetWorkflowStatusOutputModel; -import org.phyloviz.pwp.compute.service.dtos.get_workflow.GetWorkflowStatusOutput; - -import java.util.List; - -@Data -public class GetWorkflowsOutputModel { - private List workflows; - - public GetWorkflowsOutputModel(List getWorkflowStatusOutput) { - this.workflows = getWorkflowStatusOutput.stream().map(GetWorkflowStatusOutputModel::new).toList(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/pipeline/ComputeExceptionHandler.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/pipeline/ComputeExceptionHandler.java deleted file mode 100644 index a15ebc48..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/http/pipeline/ComputeExceptionHandler.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.phyloviz.pwp.compute.http.pipeline; - -import org.phyloviz.pwp.compute.service.exceptions.DatasetDoesNotExistException; -import org.phyloviz.pwp.compute.service.exceptions.DistanceMatrixDoesNotExistException; -import org.phyloviz.pwp.compute.service.exceptions.InvalidWorkflowException; -import org.phyloviz.pwp.compute.service.exceptions.TreeDoesNotExistException; -import org.phyloviz.pwp.compute.service.exceptions.TreeViewDoesNotExistException; -import org.phyloviz.pwp.compute.service.exceptions.WorkflowInstanceNotFoundException; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; -import org.zalando.problem.Problem; -import org.zalando.problem.Status; - -@RestControllerAdvice -public class ComputeExceptionHandler { - - /** - * Handles Bad Request Exceptions. - * - * @param e the exception - * @return a Problem with the status Bad Request - */ - @ExceptionHandler(value = { - InvalidWorkflowException.class, - DatasetDoesNotExistException.class, - DistanceMatrixDoesNotExistException.class, - TreeDoesNotExistException.class, - TreeViewDoesNotExistException.class, - WorkflowInstanceNotFoundException.class - }) - public Problem handleBadRequestException(Exception e) { - return Problem.builder() - .withTitle("Bad Request") - .withDetail(e.getMessage()) - .withStatus(Status.BAD_REQUEST) - .build(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/ToolTemplateRepository.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/ToolTemplateRepository.java deleted file mode 100644 index e637c0a9..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/ToolTemplateRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template; - -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.ToolTemplate; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface ToolTemplateRepository { - - Optional findByName(String name); -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java deleted file mode 100644 index d35d72ff..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.converters; - -import lombok.RequiredArgsConstructor; -import org.bson.Document; -import org.jetbrains.annotations.NotNull; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.AccessDetailsTemplate; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.AccessTemplate; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.AccessTypeTemplate; -import org.phyloviz.pwp.shared.repository.metadata.DocumentConversionException; -import org.springframework.core.convert.converter.Converter; -import org.springframework.data.convert.ReadingConverter; -import org.springframework.data.mongodb.core.convert.MongoConverter; - -@ReadingConverter -@RequiredArgsConstructor -public class AccessTemplateDeserializer implements Converter { - private final MongoConverter mongoConverter; - - @Override - public AccessTemplate convert(@NotNull Document document) { - try { - AccessTypeTemplate type = AccessTypeTemplate.valueOf(document.getString("_type").toUpperCase()); - - Class detailsClass = type.getDetailsClass(); - Document detailsDocument = (Document) document.get("details"); - AccessDetailsTemplate details = mongoConverter.read(detailsClass, detailsDocument); - - return AccessTemplate.builder() - .type(type) - .details(details) - .build(); - - } catch (Exception e) { - throw new DocumentConversionException("Error converting Document to AccessTemplate:" + e); - } - } -} - diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java deleted file mode 100644 index 0ae8b332..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.converters; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.JsonObject; -import lombok.SneakyThrows; -import org.bson.Document; -import org.jetbrains.annotations.NotNull; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.AccessDetailsTemplate; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.AccessTemplate; -import org.springframework.core.convert.converter.Converter; -import org.springframework.data.convert.WritingConverter; - - -@WritingConverter -public class AccessTemplateSerializer implements Converter { - - private final ObjectMapper objectMapper = new ObjectMapper(); - - @SneakyThrows - @Override - public Document convert(@NotNull AccessTemplate accessTemplate) { - JsonObject json = new JsonObject(); - json.addProperty("_type", accessTemplate.getType().toString()); - AccessDetailsTemplate details = accessTemplate.getDetails(); - - json.addProperty("details", objectMapper.writeValueAsString(details)); - - return Document.parse(json.toString()); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java deleted file mode 100644 index c64ab2fe..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.converters; - -import org.jetbrains.annotations.NotNull; -import org.springframework.core.convert.converter.Converter; -import org.springframework.core.convert.converter.ConverterFactory; -import org.springframework.data.convert.ReadingConverter; - -public class CaseInsensitiveEnumDeserializerFactory implements ConverterFactory { - @NotNull - @Override - public Converter getConverter(@NotNull Class targetType) { - Class enumType = targetType; - while (enumType != null && !enumType.isEnum()) - enumType = enumType.getSuperclass(); - - if (enumType == null) - throw new IllegalArgumentException("The target type " + targetType.getName() + " does not refer to an enum"); - - return new CaseInsensitiveEnumDeserializer(enumType); - } - - @ReadingConverter - public static class CaseInsensitiveEnumDeserializer> implements Converter> { - private final Class enumType; - - public CaseInsensitiveEnumDeserializer(Class enumType) { - this.enumType = enumType; - } - - @Override - public Enum convert(String source) { - return Enum.valueOf(enumType, source.toUpperCase()); - } - } -} - diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java deleted file mode 100644 index 58fac089..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.converters; - -import org.springframework.core.convert.converter.Converter; -import org.springframework.data.convert.WritingConverter; - -@WritingConverter -public class CaseInsensitiveEnumSerializer implements Converter, String> { - @Override - public String convert(Enum source) { - return source.name().toLowerCase(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/GeneralTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/GeneralTemplate.java deleted file mode 100644 index 9f9864d6..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/GeneralTemplate.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents; - -import lombok.Builder; -import lombok.Data; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.General; - -@Data -@Builder -public class GeneralTemplate { - - private final String name; - - private final String description; - - public General build(ToolTemplateData data) { - return General.builder() - .name(name + "-" + data.getWorkflowId()) - .description(description) - .build(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/ToolTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/ToolTemplate.java deleted file mode 100644 index 4186c17b..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/ToolTemplate.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents; - - -import lombok.Builder; -import lombok.Data; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.AccessTemplate; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.library.LibraryTemplate; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.Tool; -import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.mapping.Document; - -import java.util.List; - -@Data -@Builder -@Document(collection = "tool-templates") -public class ToolTemplate { - // TODO: Maybe remove this duplicated GeneralTemplate/General code? doing this so there's no coupling between the two - private final GeneralTemplate general; - private final AccessTemplate access; - private final List library; - @Id - private String id; - - public Tool buildApiTool(ToolTemplateData data) { - return Tool.builder() - .general(general.build(data)) - .access(access.build()) - .library(library.stream().map(LibraryTemplate::build).toList()) - .build(); - } - - public Tool buildLibraryTool(ToolTemplateData data) { - return Tool.builder() - .general(general.build(data)) - .access(access.build(data)) - .library(library.stream().map(LibraryTemplate::build).toList()) - .build(); - } - -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/ToolTemplateData.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/ToolTemplateData.java deleted file mode 100644 index 5940275c..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/ToolTemplateData.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents; - -import lombok.Getter; - -import java.util.HashMap; -import java.util.Map; - -public class ToolTemplateData { - @Getter - private final String projectId; - - @Getter - private final String workflowId; - - private final Map values; - - private ToolTemplateData(String projectId, String workflowId, Map values) { - this.projectId = projectId; - this.workflowId = workflowId; - this.values = values; - } - - public static ToolTemplateDataBuilder builder() { - return new ToolTemplateDataBuilder(); - } - - public Map toMap() { - HashMap map = new HashMap<>(values); - map.put("projectId", projectId); - map.put("workflowId", workflowId); - - return map; - } - - public void put(String key, String value) { - values.put(key, value); - } - - public Map getValues() { - return Map.copyOf(values); - } - - public static class ToolTemplateDataBuilder { - private final Map values = new HashMap<>(); - private String projectId; - private String workflowId; - - public ToolTemplateDataBuilder projectId(String projectId) { - this.projectId = projectId; - return this; - } - - public ToolTemplateDataBuilder workflowId(String workflowId) { - this.workflowId = workflowId; - return this; - } - - public ToolTemplateDataBuilder put(String key, String value) { - values.put(key, value); - return this; - } - - public ToolTemplateDataBuilder putAll(Map properties) { - this.values.putAll(properties); - return this; - } - - public ToolTemplateData build() { - if (projectId == null) - throw new IllegalStateException("ProjectId is required"); - - if (workflowId == null) - throw new IllegalStateException("WorkflowId is required"); - - return new ToolTemplateData(projectId, workflowId, values); - } - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java deleted file mode 100644 index 8255e3ef..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access; - -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.AccessDetails; - -public interface AccessDetailsTemplate { - AccessDetails build(); -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java deleted file mode 100644 index c481ef6e..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access; - -import lombok.Builder; -import lombok.Data; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.ToolTemplateData; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.library.LibraryAccessDetailsTemplate; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.Access; -import org.springframework.data.mongodb.core.mapping.Field; - -@Data -@Builder -public class AccessTemplate { - @Field("_type") - private final AccessTypeTemplate type; - - private final AccessDetailsTemplate details; - - public Access build(ToolTemplateData data) { - if (!(details instanceof LibraryAccessDetailsTemplate libraryDetails)) - throw new IllegalArgumentException("Details must be of type LibraryAccessTemplate to instantiate template with volumes"); - - return Access.builder() - .type(type.build()) - .details(libraryDetails.build(data)) - .build(); - } - - public Access build() { - return Access.builder() - .type(type.build()) - .details(details.build()) - .build(); - } - -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java deleted file mode 100644 index ba811e7f..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.api.ApiAccessDetailsTemplate; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.library.LibraryAccessDetailsTemplate; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.AccessType; - -@RequiredArgsConstructor -public enum AccessTypeTemplate { - LIBRARY(LibraryAccessDetailsTemplate.class), - API(ApiAccessDetailsTemplate.class); - - @Getter - private final Class detailsClass; - - public AccessType build() { - return AccessType.valueOf(this.name()); - } -} - - diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java deleted file mode 100644 index 2ad74fea..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.api; - -import lombok.Data; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.AccessDetailsTemplate; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.api.ApiAccessDetails; - -@Data -public class ApiAccessDetailsTemplate implements AccessDetailsTemplate { - - private final String url; - - private final String apiKey; - - @Override - public ApiAccessDetails build() { - return ApiAccessDetails.builder() - .url(url) - .apiKey(apiKey) - .build(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java deleted file mode 100644 index f75db6ba..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.library; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.library.DockerAutoRemove; - -@Getter -@RequiredArgsConstructor -public enum DockerAutoRemoveTemplate { - NEVER, - SUCCESS, - FORCE; - - public DockerAutoRemove build() { - return DockerAutoRemove.valueOf(this.name()); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java deleted file mode 100644 index 6f22b567..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.library; - -import lombok.Builder; -import lombok.Data; -import org.apache.commons.text.StringSubstitutor; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.ToolTemplateData; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.library.DockerVolume; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.library.VolumeType; -import org.springframework.data.mongodb.core.mapping.Field; - -import java.util.Map; - -@Data -@Builder -public class DockerVolumeTemplate { - private final String source; - - private final String target; - - @Field("_type") - private final VolumeType type; - - public DockerVolume buildDockerVolume(ToolTemplateData data) { - - Map toolValues = data.toMap(); - - StringSubstitutor sub = new StringSubstitutor(toolValues) - .setEnableUndefinedVariableException(true); - - return DockerVolume.builder() - .source(sub.replace(this.source)) - .target(sub.replace(this.target)) - .type(type) - .build(); - } - - public DockerVolume buildDockerVolume() { - return DockerVolume.builder() - .source(source) - .target(target) - .type(type) - .build(); - } - -} \ No newline at end of file diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java deleted file mode 100644 index 9f2ee563..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.library; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.ToolTemplateData; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.AccessDetailsTemplate; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.library.LibraryAccessDetails; - -import java.util.List; - -@Data -@Builder -@AllArgsConstructor -public class LibraryAccessDetailsTemplate implements AccessDetailsTemplate { - - private final String address; - - private final String dockerUrl; - - private final String dockerImage; - - private final String dockerContainer; - - private final DockerAutoRemoveTemplate dockerAutoRemove; - - private final String dockerNetworkMode; - - private final String dockerApiVersion; - - private final List dockerVolumes; - - public LibraryAccessDetails build(ToolTemplateData data) { - - return LibraryAccessDetails.builder() - .address(address) - .dockerUrl(dockerUrl) - .dockerImage(dockerImage) - .dockerContainer(dockerContainer) - .dockerAutoRemove(dockerAutoRemove.build()) - .dockerNetworkMode(dockerNetworkMode) - .dockerApiVersion(dockerApiVersion) - .dockerVolumes(dockerVolumes.stream() - .map(dockerVolumeTemplate -> dockerVolumeTemplate.buildDockerVolume(data)).toList()) - .build(); - } - - @Override - public LibraryAccessDetails build() { - return LibraryAccessDetails.builder() - .address(address) - .dockerUrl(dockerUrl) - .dockerImage(dockerImage) - .dockerContainer(dockerContainer) - .dockerAutoRemove(dockerAutoRemove.build()) - .dockerNetworkMode(dockerNetworkMode) - .dockerApiVersion(dockerApiVersion) - .dockerVolumes(dockerVolumes.stream().map(DockerVolumeTemplate::buildDockerVolume).toList()) - .build(); - } - - -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java deleted file mode 100644 index cb493cae..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.library; - -import lombok.Builder; -import lombok.Data; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.library.Command; - -import java.util.List; - -@Data -@Builder -public class CommandTemplate { - - private final String name; - - private final List invocation; - - private final List allowedValues; - private final List allowedCommandSets; - private final String description; - - public Command build() { - return Command.builder() - .name(name) - .invocation(this.invocation != null ? List.copyOf(this.invocation) : List.of()) - .allowedValues(this.allowedValues != null ? List.copyOf(this.allowedValues) : List.of()) - .allowedCommandSets(this.allowedCommandSets != null ? List.copyOf(this.allowedCommandSets) : List.of()) - .description(description) - .build(); - } - -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java deleted file mode 100644 index ac00964e..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.library; - -import lombok.Builder; -import lombok.Data; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.library.Library; - -import java.util.List; - -@Data -@Builder -public class LibraryTemplate { - - private final String name; - private final int order; - - private final String invocation; - private final boolean allowCommandRep; - - private final List commands; - - public Library build() { - return Library.builder() - .order(order) - .name(name) - .invocation(invocation) - .allowCommandRep(allowCommandRep) - .commands(commands.stream().map(CommandTemplate::build).toList()) - .build(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java deleted file mode 100644 index 64b1a6b8..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.mongo; - -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.ToolTemplate; -import org.springframework.data.mongodb.repository.MongoRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface ToolTemplateMongoRepository extends MongoRepository { - - Optional findToolTemplateByGeneralName(String name); -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java deleted file mode 100644 index 9fabd346..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.mongo; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.ToolTemplateRepository; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.ToolTemplate; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -@RequiredArgsConstructor -public class ToolTemplateRepositoryMongo implements ToolTemplateRepository { - private final ToolTemplateMongoRepository toolTemplateMongoRepository; - - @Override - public Optional findByName(String name) { - return toolTemplateMongoRepository.findToolTemplateByGeneralName(name); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java deleted file mode 100644 index 9636f0bc..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances; - -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.documents.WorkflowInstance; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -@Repository -public interface WorkflowInstanceRepository { - - Optional findById(String id); - - List findAllByProjectId(String projectId); - - List findAllByProjectIdAndNotRunning(String projectId); - - List findAllByProjectIdAndRunning(String projectId); - - WorkflowInstance save(WorkflowInstance workflowInstance); -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java deleted file mode 100644 index 8721f67d..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.documents; - -import lombok.Data; -import org.phyloviz.pwp.compute.service.flowviz.models.workflow.Workflow; -import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.mapping.Document; - -import java.util.Map; - -@Data -@Document(collection = "workflow-instances") -public class WorkflowInstance { - @Id - private String id; - - private String projectId; - - private String type; - - private String name; - - private Workflow workflow; - - private WorkflowStatus status; - - private String failureReason; - - private Map logs; - - private double progress; - - private Map data; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java deleted file mode 100644 index 9d96ede7..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.documents; - -public enum WorkflowStatus { - RUNNING, - SUCCESS, - FAILED -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java deleted file mode 100644 index 397df1f7..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.mongo; - -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.documents.WorkflowInstance; -import org.springframework.data.mongodb.repository.MongoRepository; -import org.springframework.data.mongodb.repository.Query; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public interface WorkflowInstanceMongoRepository extends MongoRepository { - - List findAllByProjectId(String projectId); - - @Query("{ 'projectId' : ?0, 'status' : { $in: ['SUCCESS', 'FAILED'] } }") - List findAllByProjectIdAndNotRunning(String projectId); - - @Query("{ 'projectId' : ?0, 'status' : 'RUNNING' }") - List findAllByProjectIdAndRunning(String projectId); -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java deleted file mode 100644 index 3bf3eb93..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.mongo; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.WorkflowInstanceRepository; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.documents.WorkflowInstance; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -@Repository -@RequiredArgsConstructor -public class WorkflowInstanceRepositoryMongo implements WorkflowInstanceRepository { - - private final WorkflowInstanceMongoRepository workflowInstanceMongoRepository; - - @Override - public Optional findById(String id) { - return workflowInstanceMongoRepository.findById(id); - } - - @Override - public List findAllByProjectId(String projectId) { - return workflowInstanceMongoRepository.findAllByProjectId(projectId); - } - - @Override - public List findAllByProjectIdAndNotRunning(String projectId) { - return workflowInstanceMongoRepository.findAllByProjectIdAndNotRunning(projectId); - } - - @Override - public List findAllByProjectIdAndRunning(String projectId) { - return workflowInstanceMongoRepository.findAllByProjectIdAndRunning(projectId); - } - - @Override - public WorkflowInstance save(WorkflowInstance workflowInstance) { - return workflowInstanceMongoRepository.save(workflowInstance); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java deleted file mode 100644 index e9afb396..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template; - -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents.WorkflowTemplate; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -@Repository -public interface WorkflowTemplateRepository { - - /** - * Finds a workflow template by its type. - * - * @param type the type of the workflow template - * @return the workflow template - */ - Optional findByType(String type); - - /** - * Finds all workflow templates. - * - * @return the list of workflow templates - */ - List findAll(); -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/ActionTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/ActionTemplate.java deleted file mode 100644 index 72b01ed5..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/ActionTemplate.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents; - -import lombok.Builder; -import lombok.Data; -import org.apache.commons.text.StringSubstitutor; -import org.phyloviz.pwp.compute.service.flowviz.models.workflow.tasks.Action; - -@Data -@Builder -public class ActionTemplate { - private final String command; - - public Action buildAction(WorkflowTemplateData workflowTemplateData) { - StringSubstitutor sub = new StringSubstitutor(workflowTemplateData.toMap()) - .setEnableUndefinedVariableException(true); - - return Action.builder() - .command(sub.replace(this.command)) - .build(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/TaskTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/TaskTemplate.java deleted file mode 100644 index 862bb793..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/TaskTemplate.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents; - -import lombok.Builder; -import lombok.Data; -import org.phyloviz.pwp.compute.service.flowviz.models.workflow.tasks.Task; - -import java.util.List; - -@Data -@Builder -public class TaskTemplate { - - private final String taskId; - - private final String tool; - - private final ActionTemplate action; - - private final List children; - - public Task buildTask(WorkflowTemplateData workflowTemplateData) { - return Task.builder() - .id(taskId) - .tool(tool + "-" + workflowTemplateData.getWorkflowId()) - .action(action.buildAction(workflowTemplateData)) - .children(this.children != null ? List.copyOf(this.children) : List.of()) - .build(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java deleted file mode 100644 index b5d6ffc1..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents; - -import lombok.Data; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents.arguments.WorkflowTemplateArgumentProperties; -import org.phyloviz.pwp.compute.service.exceptions.WorkflowTemplateConfigurationException; -import org.phyloviz.pwp.compute.service.flowviz.models.workflow.Workflow; -import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.mapping.Document; - -import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; -import java.util.List; -import java.util.Map; - - -@Data -@Document(collection = "workflow-templates") -public class WorkflowTemplate { - - private final String type; - private final String name; - private final String description; - private final Map arguments; - private final List tasks; - @Id - private String id; - - public WorkflowTemplate(String id, String type, String name, String description, Map arguments, List tasks) { - if (type == null || type.isBlank()) { - throw new WorkflowTemplateConfigurationException( - String.format("Workflow template %s - type cannot be null or blank", id)); - } - if (name == null || name.isBlank()) { - throw new WorkflowTemplateConfigurationException( - String.format("Workflow template %s - name cannot be null or blank", id)); - } - if (description == null || description.isBlank()) { - throw new WorkflowTemplateConfigurationException( - String.format("Workflow template %s - description cannot be null or blank", id)); - } - if (arguments == null || arguments.isEmpty()) { - throw new WorkflowTemplateConfigurationException( - String.format("Workflow template %s - arguments cannot be null or empty", id)); - } - if (tasks == null || tasks.isEmpty()) { - throw new WorkflowTemplateConfigurationException( - String.format("Workflow template %s - tasks cannot be null or empty", id)); - } - tasks.stream().map(TaskTemplate::getTaskId).forEach(taskId -> { - if (tasks.stream().filter(task -> task.getTaskId().equals(taskId)).count() > 1) { - throw new WorkflowTemplateConfigurationException( - String.format("Workflow template %s - tasks - taskId %s is not unique", id, taskId)); - } - }); - - arguments.forEach((key, value) -> { - if (key.equals("projectId")) { - throw new WorkflowTemplateConfigurationException( - String.format("Workflow template %s - arguments - projectId is a reserved argument name", id)); - } - if (key.equals("workflowId")) { - throw new WorkflowTemplateConfigurationException( - String.format("Workflow template %s - arguments - workflowId is a reserved argument name", id)); - } - }); - - this.type = type; - this.name = name; - this.description = description; - this.arguments = arguments; - this.tasks = tasks; - } - - public Workflow buildWorkflow(WorkflowTemplateData workflowTemplateData) { - - return Workflow.builder() - .name(type + "-" + workflowTemplateData.getWorkflowId()) - .description(description) - // Need to set start date to be in the past to allow workflow to run immediately - .startDate(LocalDateTime.now().minus(1, ChronoUnit.DAYS)) - .tasks(tasks.stream().map(task -> task.buildTask(workflowTemplateData)).toList()) - .build(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java deleted file mode 100644 index 299a317d..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents; - -import lombok.Getter; - -import java.util.HashMap; -import java.util.Map; - -public class WorkflowTemplateData { - @Getter - private final String projectId; - - @Getter - private final String workflowId; - - private final Map values; - - private WorkflowTemplateData(String projectId, String workflowId, Map values) { - this.projectId = projectId; - this.workflowId = workflowId; - this.values = values; - } - - public static WorkflowTemplateDataBuilder builder() { - return new WorkflowTemplateDataBuilder(); - } - - public Map toMap() { - HashMap map = new HashMap<>(values); - map.put("projectId", projectId); - map.put("workflowId", workflowId); - - return map; - } - - public void put(String key, String value) { - values.put(key, value); - } - - public Map getValues() { - return Map.copyOf(values); - } - - public static class WorkflowTemplateDataBuilder { - private final Map values = new HashMap<>(); - private String projectId; - private String workflowId; - - public WorkflowTemplateDataBuilder projectId(String projectId) { - this.projectId = projectId; - return this; - } - - public WorkflowTemplateDataBuilder workflowId(String workflowId) { - this.workflowId = workflowId; - return this; - } - - public WorkflowTemplateDataBuilder put(String key, String value) { - values.put(key, value); - return this; - } - - public WorkflowTemplateDataBuilder putAll(Map values) { - this.values.putAll(values); - return this; - } - - public WorkflowTemplateData build() { - if (projectId == null) - throw new IllegalStateException("ProjectId is required"); - - if (workflowId == null) - throw new IllegalStateException("WorkflowId is required"); - - return new WorkflowTemplateData(projectId, workflowId, values); - } - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java deleted file mode 100644 index 3064cd6b..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents.arguments; - -import lombok.Getter; -import org.phyloviz.pwp.compute.service.exceptions.WorkflowTemplateConfigurationException; -import org.springframework.data.mongodb.core.mapping.Field; - -import java.util.List; - -@Getter -public class WorkflowTemplateArgumentProperties { - private final WorkflowTemplateArgumentType type; - - private final boolean required; - - private final String prefix; - - @Field("allowed-values") - private final List allowedValues; - - private final String pattern; - - public WorkflowTemplateArgumentProperties(WorkflowTemplateArgumentType type, Boolean required, String prefix, List allowedValues, - String pattern) { - this.type = type; - - if (type == WorkflowTemplateArgumentType.STRING) { - if (allowedValues == null || allowedValues.isEmpty()) { - throw new WorkflowTemplateConfigurationException("Arguments of type 'string' must have allowed values"); - } - } else if (allowedValues != null) { - throw new WorkflowTemplateConfigurationException("Only arguments of type 'string' can have allowed values"); - } - - this.allowedValues = allowedValues; - this.required = required == null || required; - this.prefix = prefix; - this.pattern = pattern; - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java deleted file mode 100644 index 73bba66c..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents.arguments; - -public enum WorkflowTemplateArgumentType { - OBJECTID, - UUID, - STRING, - NUMBER, - REGEX, - DATASETID, - DISTANCEMATRIXID, - TREEID, - TREEVIEWID -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java deleted file mode 100644 index d19af6ee..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.mongo; - -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents.WorkflowTemplate; -import org.springframework.data.mongodb.repository.MongoRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface WorkflowTemplateMongoRepository extends MongoRepository { - - /** - * Finds a workflow template by its type. - * - * @param type the type of the workflow template - * @return the workflow template - */ - Optional findByType(String type); -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java deleted file mode 100644 index 3a8e8d90..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.mongo; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.WorkflowTemplateRepository; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents.WorkflowTemplate; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -@Repository -@RequiredArgsConstructor -public class WorkflowTemplateRepositoryMongo implements WorkflowTemplateRepository { - private final WorkflowTemplateMongoRepository repository; - - @Override - public Optional findByType(String type) { - return repository.findByType(type); - } - - @Override - public List findAll() { - return repository.findAll(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/ComputeService.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/ComputeService.java deleted file mode 100644 index 78d0872c..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/ComputeService.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.phyloviz.pwp.compute.service; - -import org.phyloviz.pwp.compute.service.dtos.create_workflow.CreateWorkflowOutput; -import org.phyloviz.pwp.compute.service.dtos.get_workflow.GetWorkflowOutput; -import org.phyloviz.pwp.compute.service.dtos.get_workflow.GetWorkflowStatusOutput; - -import java.util.List; -import java.util.Map; - -/** - * Service for the Compute Microservice. - */ -public interface ComputeService { - - /** - * Creates a new workflow. - * - * @param projectId the project id where the workflow will be created - * @param type the type of the workflow - * @param properties the properties of the workflow - * @param userId the id of the user who created the workflow - * @return the output information of the workflow - */ - CreateWorkflowOutput createWorkflow( - String projectId, - String type, - Map properties, - String userId - ); - - /** - * Gets the status of a workflow. - * - * @param projectId the project id where the workflow is located - * @param workflowId the workflow id - * @param userId the id of the user who is requesting the workflow status - * @return the output information of the workflow - */ - GetWorkflowStatusOutput getWorkflowStatus(String projectId, String workflowId, String userId); - - /** - * Gets workflow. - * - * @param projectId the project id where the workflow is located - * @param workflowId the workflow id - * @param userId the id of the user who is requesting the workflow - * @return the output information of the workflow - */ - GetWorkflowOutput getWorkflow(String projectId, String workflowId, String userId); - - /** - * Gets all the workflows of a project. - * - * @param projectId the project id where the workflows are located - * @param userId the id of the user who is requesting the workflows - * @return the output information of the workflows - */ - List getAllWorkflows(String projectId, String userId); - - /** - * Gets all the running workflows of a project. - * - * @param projectId the project id where the workflows are located - * @param userId the id of the user who is requesting the workflows - * @return the output information of the workflows - */ - List getAllRunningWorkflows(String projectId, String userId); - - /** - * Gets all the not running workflows of a project. - * - * @param projectId the project id where the workflows are located - * @param userId the id of the user who is requesting the workflows - * @return the output information of the workflows - */ - List getAllNotRunningWorkflows(String projectId, String userId); -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/ComputeServiceImpl.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/ComputeServiceImpl.java deleted file mode 100644 index 85cea232..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/ComputeServiceImpl.java +++ /dev/null @@ -1,430 +0,0 @@ -package org.phyloviz.pwp.compute.service; - -import org.bson.types.ObjectId; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.ToolTemplateRepository; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.ToolTemplate; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.ToolTemplateData; -import org.phyloviz.pwp.compute.repository.metadata.templates.tool_template.documents.access.AccessTypeTemplate; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.WorkflowInstanceRepository; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.documents.WorkflowInstance; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.documents.WorkflowStatus; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.WorkflowTemplateRepository; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents.TaskTemplate; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents.WorkflowTemplate; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents.WorkflowTemplateData; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_template.documents.arguments.WorkflowTemplateArgumentProperties; -import org.phyloviz.pwp.compute.service.dtos.create_workflow.CreateWorkflowOutput; -import org.phyloviz.pwp.compute.service.dtos.get_workflow.GetWorkflowOutput; -import org.phyloviz.pwp.compute.service.dtos.get_workflow.GetWorkflowStatusOutput; -import org.phyloviz.pwp.compute.service.exceptions.InvalidWorkflowException; -import org.phyloviz.pwp.compute.service.exceptions.TemplateNotFound; -import org.phyloviz.pwp.compute.service.exceptions.WorkflowInstanceNotFoundException; -import org.phyloviz.pwp.compute.service.flowviz.FLOWViZClient; -import org.phyloviz.pwp.compute.service.flowviz.exceptions.UnexpectedResponseException; -import org.phyloviz.pwp.compute.service.flowviz.models.get_workflow.AirflowWorkflowStatus; -import org.phyloviz.pwp.compute.service.flowviz.models.get_workflow.GetWorkflowResponse; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.Tool; -import org.phyloviz.pwp.compute.service.flowviz.models.workflow.GetWorkflowTaskLogResponse; -import org.phyloviz.pwp.compute.service.flowviz.models.workflow.Workflow; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; -import org.phyloviz.pwp.shared.utils.UUIDUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Service -@Transactional -public class ComputeServiceImpl implements ComputeService { - - private final ProjectRepository projectRepository; - - private final WorkflowTemplateRepository workflowTemplateRepository; - private final WorkflowInstanceRepository workflowInstanceRepository; - private final ToolTemplateRepository toolTemplateRepository; - private final FLOWViZClient flowVizClient; - - /** - * Constructor. Calls the {@link WorkflowTemplateRepository#findAll()} method to validate the workflow templates - * using the constructor. - */ - ComputeServiceImpl( - ProjectRepository projectRepository, - WorkflowTemplateRepository workflowTemplateRepository, - WorkflowInstanceRepository workflowInstanceRepository, - ToolTemplateRepository toolTemplateRepository, - FLOWViZClient flowVizClient - ) { - this.projectRepository = projectRepository; - this.workflowTemplateRepository = workflowTemplateRepository; - this.workflowInstanceRepository = workflowInstanceRepository; - this.toolTemplateRepository = toolTemplateRepository; - this.flowVizClient = flowVizClient; - - workflowTemplateRepository.findAll(); - } - - @Override - public CreateWorkflowOutput createWorkflow( - String projectId, - String workflowType, - Map workflowProperties, - String userId - ) { - validateObjectIdArgument(projectId, "projectId"); - - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - return createWorkflow(projectId, workflowType, workflowProperties); - } - - @Override - public GetWorkflowStatusOutput getWorkflowStatus(String projectId, String workflowId, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - WorkflowInstance workflowInstance = workflowInstanceRepository - .findById(workflowId) - .orElseThrow(WorkflowInstanceNotFoundException::new); - - return getWorkflowStatusOutput(workflowInstance); - } - - @Override - public GetWorkflowOutput getWorkflow(String projectId, String workflowId, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - WorkflowInstance workflowInstance = workflowInstanceRepository - .findById(workflowId) - .orElseThrow(WorkflowInstanceNotFoundException::new); - - return getWorkflowOutput(workflowInstance); - } - - @Override - public List getAllWorkflows(String projectId, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - return workflowInstanceRepository.findAllByProjectId(projectId).stream() - .map(this::getWorkflowStatusOutput).toList(); - } - - @Override - public List getAllRunningWorkflows(String projectId, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - return workflowInstanceRepository.findAllByProjectIdAndRunning(projectId).stream() - .map(this::getWorkflowStatusOutput) - .filter(w -> w.getStatus() == WorkflowStatus.RUNNING).toList(); - } - - @Override - public List getAllNotRunningWorkflows(String projectId, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - return workflowInstanceRepository.findAllByProjectIdAndNotRunning(projectId).stream() - .map(this::getWorkflowStatusOutput).toList(); - } - - /** - * Gets the status of the workflow. - *

- * If the workflow instance metadata has the status as running, updates the workflow instance status by calling the FLOWViZ API to get the status of - * the workflow to confirm if it is still running. - * - * @param workflowInstance the workflow instance metadata - * @return information about the workflow - */ - private GetWorkflowStatusOutput getWorkflowStatusOutput(WorkflowInstance workflowInstance) { - if (workflowInstance.getStatus() == WorkflowStatus.RUNNING) { - updateWorkflowStatusFromFLOWViZ(workflowInstance); - } - - return new GetWorkflowStatusOutput( - workflowInstance.getId(), - workflowInstance.getType(), - workflowInstance.getName(), - workflowInstance.getStatus(), - workflowInstance.getFailureReason(), - workflowInstance.getProgress(), - workflowInstance.getData() - ); - } - - /** - * Gets the status of the workflow. - *

- * If the workflow instance metadata has the status as running, updates the workflow instance status by calling the FLOWViZ API to get the status of - * the workflow to confirm if it is still running. - * - * @param workflowInstance the workflow instance metadata - * @return information about the workflow - */ - private GetWorkflowOutput getWorkflowOutput(WorkflowInstance workflowInstance) { - updateWorkflowFromFLOWViZ(workflowInstance); - - return new GetWorkflowOutput( - workflowInstance.getId(), - workflowInstance.getType(), - workflowInstance.getName(), - workflowInstance.getStatus(), - workflowInstance.getFailureReason(), - workflowInstance.getLogs(), - workflowInstance.getProgress(), - workflowInstance.getData() - ); - } - - /** - * Updates the workflow status using the FLOWViZ API, getting the status of the workflow to confirm if it is still running. - * - * @param workflowInstance the workflow instance metadata - */ - private void updateWorkflowStatusFromFLOWViZ(WorkflowInstance workflowInstance) { - GetWorkflowResponse workflow; - try { - workflow = flowVizClient.workflowService().getWorkflow(workflowInstance.getWorkflow().getName()); - } catch (UnexpectedResponseException e) { - if (e.getResponse().code() == 404) { - return; - } else - throw e; - } - - List workflowRuns = workflow.getAirflow().getRuns(); - - if (workflowRuns.isEmpty()) - return; - - AirflowWorkflowStatus airflowWorkflowStatus = workflowRuns.get(0); - - String airflowStatus = airflowWorkflowStatus.getState(); - - switch (airflowStatus) { - case "running", "queued", "no_status" -> { - } - case "success" -> { - workflowInstance.setStatus(WorkflowStatus.SUCCESS); - workflowInstance.setProgress(100); - workflowInstanceRepository.save(workflowInstance); - } - case "failed" -> { - workflowInstance.setStatus(WorkflowStatus.FAILED); - if (workflowInstance.getFailureReason() == null) { - workflowInstance.setFailureReason("Internal Server Error"); - } - workflowInstanceRepository.save(workflowInstance); - } - default -> throw new IllegalStateException("Unexpected airflow status value: " + airflowStatus); - } - } - - /** - * Updates the workflow using the FLOWViZ API. - * - * @param workflowInstance the workflow instance metadata - */ - private void updateWorkflowFromFLOWViZ(WorkflowInstance workflowInstance) { - GetWorkflowResponse workflow; - try { - workflow = flowVizClient.workflowService().getWorkflow(workflowInstance.getWorkflow().getName()); - - } catch (UnexpectedResponseException e) { - if (e.getResponse().code() == 404) { - return; - } else - throw e; - } - - List workflowRuns = workflow.getAirflow().getRuns(); - - if (workflowRuns.isEmpty()) - return; - - AirflowWorkflowStatus airflowWorkflowStatus = workflowRuns.get(0); - - String airflowStatus = airflowWorkflowStatus.getState(); - String dagRunId = airflowWorkflowStatus.getDagRunId(); - - Map logs = new HashMap<>(workflowInstance.getWorkflow().getTasks().size()); - - workflowInstance.getWorkflow().getTasks().forEach((task) -> { - try { - GetWorkflowTaskLogResponse workflowTaskLogResponse; - workflowTaskLogResponse = flowVizClient.workflowService().getWorkflowDagRunTaskLog(workflowInstance.getWorkflow().getName(), dagRunId, "task_" + task.getId(), "1"); - - logs.put(task.getId(), workflowTaskLogResponse.getContent()); - } catch (UnexpectedResponseException e) { - if (e.getResponse().code() != 404) - throw e; - } - }); - - workflowInstance.setLogs(logs); - workflowInstanceRepository.save(workflowInstance); - - switch (airflowStatus) { - case "running", "queued", "no_status" -> { - } - case "success" -> { - workflowInstance.setStatus(WorkflowStatus.SUCCESS); - workflowInstance.setProgress(100); - workflowInstanceRepository.save(workflowInstance); - } - case "failed" -> { - workflowInstance.setStatus(WorkflowStatus.FAILED); - if (workflowInstance.getFailureReason() == null) { - workflowInstance.setFailureReason("Internal Server Error"); - } - workflowInstanceRepository.save(workflowInstance); - } - default -> throw new IllegalStateException("Unexpected airflow status value: " + airflowStatus); - } - } - - private CreateWorkflowOutput createWorkflow(String projectId, String workflowType, Map properties) { - //TODO: Fix transactions - - WorkflowTemplate workflowTemplate = workflowTemplateRepository - .findByType(workflowType) - .orElseThrow(() -> new InvalidWorkflowException("Workflow type not found")); - - validateCreateWorkflowArguments(workflowTemplate.getArguments(), properties); - - Map workflowInstanceData = new HashMap<>(properties); - workflowInstanceData.put("projectId", projectId); - - WorkflowInstance workflowInstance = new WorkflowInstance(); - workflowInstance.setProjectId(projectId); - workflowInstance.setType(workflowType); - workflowInstance.setName(workflowTemplate.getName()); - workflowInstance.setStatus(WorkflowStatus.RUNNING); - workflowInstance.setProgress(0.0); - workflowInstance.setData(workflowInstanceData); - workflowInstance = workflowInstanceRepository.save(workflowInstance); - - String workflowId = workflowInstance.getId(); - Map tools = new HashMap<>(); - - // Iterate over the tasks in the schema and create new tools for the instance - for (TaskTemplate taskTemplate : workflowTemplate.getTasks()) { - - String toolName = taskTemplate.getTool(); - if (tools.containsKey(toolName)) - continue; - - ToolTemplate toolTemplate = toolTemplateRepository - .findByName(toolName) - .orElseThrow(() -> new TemplateNotFound("Tool template not found")); - - AccessTypeTemplate accessType = toolTemplate.getAccess().getType(); - - ToolTemplateData toolTemplateData = ToolTemplateData.builder() - .projectId(projectId) - .workflowId(workflowId) - .putAll(properties) - .build(); - - Tool tool; - if (accessType == AccessTypeTemplate.LIBRARY) - tool = toolTemplate.buildLibraryTool(toolTemplateData); - else - tool = toolTemplate.buildApiTool(toolTemplateData); - - tools.put(toolName, tool); - } - - WorkflowTemplateData workflowTemplateData = WorkflowTemplateData.builder() - .projectId(projectId) - .workflowId(workflowId) - .putAll(properties) - .build(); - - Workflow workflow = workflowTemplate.buildWorkflow(workflowTemplateData); - - workflowInstance.setWorkflow(workflow); - - workflowInstanceRepository.save(workflowInstance); - - for (Tool tool : tools.values()) - flowVizClient.toolService().postTool(tool); - - flowVizClient.workflowService().postWorkflow(workflow); - - return new CreateWorkflowOutput(workflowId); - } - - /** - * Validates that the arguments received in the request are valid for the workflow template. Verifies that all - * required arguments are present and that the types are correct. - * - * @param createWorkflowArguments the arguments defined in the workflow template - * @param properties the arguments received in the request - */ - private void validateCreateWorkflowArguments(Map createWorkflowArguments, - Map properties) { - properties.keySet().stream().filter(key -> !createWorkflowArguments.containsKey(key)).findAny() - .ifPresent(key -> { - throw new InvalidWorkflowException(String.format("Unknown argument: '%s'", key)); - }); - - createWorkflowArguments.forEach((argumentName, argumentProperties) -> { - boolean propertyExists = properties.containsKey(argumentName); - if (argumentProperties.isRequired() && !propertyExists) - throw new InvalidWorkflowException(String.format("Missing argument: '%s'", argumentName)); - - switch (argumentProperties.getType()) { - case OBJECTID, DATASETID -> validateObjectIdArgument(properties.get(argumentName), argumentName); - case UUID, DISTANCEMATRIXID, TREEID, TREEVIEWID -> - validateUUIDArgument(properties.get(argumentName), argumentName); - case STRING -> validateStringArgument(properties.get(argumentName), argumentName, - argumentProperties.getAllowedValues()); - case NUMBER -> validateNumberArgument(properties.get(argumentName), argumentName); - case REGEX -> validateRegexArgument(properties.get(argumentName), argumentName, - argumentProperties.getPattern()); - } - - if (argumentProperties.getPrefix() != null && properties.containsKey(argumentName)) { - properties.put(argumentName, argumentProperties.getPrefix() + properties.get(argumentName)); - } - }); - } - - private void validateObjectIdArgument(String argument, String argumentName) { - if (!ObjectId.isValid(argument)) - throw new InvalidWorkflowException(String.format("Invalid argument: '%s'. Must be a valid ObjectId.", argumentName)); - } - - private void validateUUIDArgument(String argument, String argumentName) { - if (!UUIDUtils.isValidUUID(argument)) - throw new InvalidWorkflowException(String.format("Invalid argument: '%s'. Must be a valid UUID.", argumentName)); - } - - private void validateStringArgument(String argument, String argumentName, List allowedValues) { - if (!allowedValues.contains(argument)) - throw new InvalidWorkflowException(String.format( - "Invalid argument: '%s'. Must be one of the allowed values: %s", argumentName, allowedValues) - ); - } - - private void validateNumberArgument(String argument, String argumentName) { - try { - Double.parseDouble(argument); - } catch (NumberFormatException e) { - throw new InvalidWorkflowException(String.format("Invalid argument: '%s'. Must be a number.", argumentName)); - } - } - - private void validateRegexArgument(String argument, String argumentName, String pattern) { - if (!argument.matches(pattern)) - throw new InvalidWorkflowException(String.format("Invalid argument: '%s'. Must match the pattern: %s", argumentName, pattern)); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/dtos/create_workflow/CreateWorkflowOutput.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/dtos/create_workflow/CreateWorkflowOutput.java deleted file mode 100644 index 1b3cf703..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/dtos/create_workflow/CreateWorkflowOutput.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.phyloviz.pwp.compute.service.dtos.create_workflow; - -import lombok.Data; - -@Data -public class CreateWorkflowOutput { - private final String workflowId; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/dtos/get_workflow/GetWorkflowOutput.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/dtos/get_workflow/GetWorkflowOutput.java deleted file mode 100644 index 137b6e4d..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/dtos/get_workflow/GetWorkflowOutput.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.phyloviz.pwp.compute.service.dtos.get_workflow; - -import lombok.Data; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.documents.WorkflowStatus; - -import java.util.Map; - -@Data -public class GetWorkflowOutput { - private final String workflowId; - private final String type; - private final String name; - private final WorkflowStatus status; - private final String failureReason; - private final Map logs; - private final double progress; - private final Map data; -} \ No newline at end of file diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/dtos/get_workflow/GetWorkflowStatusOutput.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/dtos/get_workflow/GetWorkflowStatusOutput.java deleted file mode 100644 index 0ec89070..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/dtos/get_workflow/GetWorkflowStatusOutput.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.phyloviz.pwp.compute.service.dtos.get_workflow; - -import lombok.Data; -import org.phyloviz.pwp.compute.repository.metadata.templates.workflow_instances.documents.WorkflowStatus; - -import java.util.Map; - -@Data -public class GetWorkflowStatusOutput { - private final String workflowId; - private final String type; - private final String name; - private final WorkflowStatus status; - private final String failureReason; - private final double progress; - private final Map data; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/DatasetDoesNotExistException.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/DatasetDoesNotExistException.java deleted file mode 100644 index 0c1574cc..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/DatasetDoesNotExistException.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.compute.service.exceptions; - -public class DatasetDoesNotExistException extends RuntimeException { - public DatasetDoesNotExistException() { - super("Dataset not found"); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/DistanceMatrixDoesNotExistException.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/DistanceMatrixDoesNotExistException.java deleted file mode 100644 index 2eb10873..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/DistanceMatrixDoesNotExistException.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.compute.service.exceptions; - -public class DistanceMatrixDoesNotExistException extends RuntimeException { - public DistanceMatrixDoesNotExistException() { - super("Distance matrix not found"); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/InvalidWorkflowException.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/InvalidWorkflowException.java deleted file mode 100644 index 0053119d..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/InvalidWorkflowException.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.compute.service.exceptions; - -public class InvalidWorkflowException extends RuntimeException { - public InvalidWorkflowException(String msg) { - super(msg); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/ProjectDoesNotExistException.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/ProjectDoesNotExistException.java deleted file mode 100644 index e03790d1..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/ProjectDoesNotExistException.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.compute.service.exceptions; - -public class ProjectDoesNotExistException extends RuntimeException { - public ProjectDoesNotExistException() { - super("Project not found"); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/TemplateNotFound.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/TemplateNotFound.java deleted file mode 100644 index 6b49c2a7..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/TemplateNotFound.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.compute.service.exceptions; - -public class TemplateNotFound extends RuntimeException { - public TemplateNotFound(String msg) { - super(msg); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/TreeDoesNotExistException.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/TreeDoesNotExistException.java deleted file mode 100644 index bf1d9268..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/TreeDoesNotExistException.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.compute.service.exceptions; - -public class TreeDoesNotExistException extends RuntimeException { - public TreeDoesNotExistException() { - super("Tree not found"); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/TreeViewDoesNotExistException.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/TreeViewDoesNotExistException.java deleted file mode 100644 index 7d244e43..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/TreeViewDoesNotExistException.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.compute.service.exceptions; - -public class TreeViewDoesNotExistException extends RuntimeException { - public TreeViewDoesNotExistException() { - super("Tree view not found"); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/WorkflowInstanceNotFoundException.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/WorkflowInstanceNotFoundException.java deleted file mode 100644 index 952d5155..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/WorkflowInstanceNotFoundException.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.compute.service.exceptions; - -public class WorkflowInstanceNotFoundException extends RuntimeException { - public WorkflowInstanceNotFoundException() { - super("Workflow not found"); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/WorkflowTemplateConfigurationException.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/WorkflowTemplateConfigurationException.java deleted file mode 100644 index 197b380f..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/exceptions/WorkflowTemplateConfigurationException.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.compute.service.exceptions; - -public class WorkflowTemplateConfigurationException extends RuntimeException { - public WorkflowTemplateConfigurationException(String message) { - super(message); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/FLOWViZClient.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/FLOWViZClient.java deleted file mode 100644 index f650f106..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/FLOWViZClient.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz; - -import lombok.Getter; -import org.phyloviz.pwp.compute.service.flowviz.identity.Credentials; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.ToolService; -import org.phyloviz.pwp.compute.service.flowviz.models.workflow.WorkflowService; - -/** - * Client for the FLOWViZ API. - */ -@Getter -public class FLOWViZClient extends FLOWViZHttpService { - - FLOWViZClient(String baseUrl, Credentials credentials) { - super(baseUrl, credentials); - } - - public static FLOWViZClientBuilder builder() { - return new FLOWViZClientBuilder(); - } - - /** - * Create a new tool service. - * - * @return the tool service - */ - public ToolService toolService() { - return new ToolService(this); - } - - /** - * Create a new workflow service. - * - * @return the workflow service - */ - public WorkflowService workflowService() { - return new WorkflowService(this); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/FLOWViZClientBuilder.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/FLOWViZClientBuilder.java deleted file mode 100644 index 1100c37a..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/FLOWViZClientBuilder.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz; - -import org.phyloviz.pwp.compute.service.flowviz.exceptions.AuthenticationException; -import org.phyloviz.pwp.compute.service.flowviz.identity.Credentials; - -/** - * Builder for the {@link FLOWViZClient}. - */ -public class FLOWViZClientBuilder { - private String baseUrl; - private Credentials credentials; - - /** - * Set the credentials to authenticate with. - * - * @param username the username - * @param password the password - * @return the builder - */ - public FLOWViZClientBuilder credentials(String username, String password) { - this.credentials = new Credentials(username, password); - return this; - } - - /** - * Set the base URL of the FLOWViZ API. - * - * @param baseUrl the base URL - * @return the builder - */ - public FLOWViZClientBuilder baseUrl(String baseUrl) { - this.baseUrl = baseUrl; - return this; - } - - /** - * Build the {@link FLOWViZClient}. - * - * @return the client - * @throws AuthenticationException if the credentials are invalid - */ - public FLOWViZClient authenticate() throws AuthenticationException { - if (baseUrl == null) - throw new IllegalStateException("baseUrl is required"); - - if (credentials == null) - throw new IllegalStateException("credentials are required"); - - return new FLOWViZClient(baseUrl, credentials); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/FLOWViZHttpService.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/FLOWViZHttpService.java deleted file mode 100644 index 14d753c5..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/FLOWViZHttpService.java +++ /dev/null @@ -1,259 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonSyntaxException; -import com.google.gson.stream.JsonReader; -import okhttp3.MediaType; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; -import okhttp3.ResponseBody; -import org.phyloviz.pwp.compute.service.flowviz.adapters.AccessDeserializer; -import org.phyloviz.pwp.compute.service.flowviz.adapters.AccessSerializer; -import org.phyloviz.pwp.compute.service.flowviz.adapters.LocalDateTimeDeserializer; -import org.phyloviz.pwp.compute.service.flowviz.adapters.LocalDateTimeSerializer; -import org.phyloviz.pwp.compute.service.flowviz.exceptions.AuthenticationException; -import org.phyloviz.pwp.compute.service.flowviz.exceptions.ConnectionRefusedException; -import org.phyloviz.pwp.compute.service.flowviz.exceptions.UnexpectedResponseException; -import org.phyloviz.pwp.compute.service.flowviz.identity.Credentials; -import org.phyloviz.pwp.compute.service.flowviz.identity.Token; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.Access; - -import java.io.IOException; -import java.time.LocalDateTime; - - -/** - * Service for communicating with FLOWViZ API. - */ -public class FLOWViZHttpService { - - protected final Credentials credentials; - private final String baseUrl; - private final OkHttpClient client; - private final Gson gson; - protected Token token; - - public FLOWViZHttpService(String baseUrl, Credentials credentials) { - this.baseUrl = baseUrl; - this.credentials = credentials; - this.client = new OkHttpClient(); - this.gson = new GsonBuilder() - .registerTypeAdapter(Access.class, new AccessSerializer()) - .registerTypeAdapter(Access.class, new AccessDeserializer()) - .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()) - .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeDeserializer()) - .create(); - try { - this.token = authenticate(credentials); - } catch (final AuthenticationException | ConnectionRefusedException e) { - this.token = null; - } - } - - public FLOWViZHttpService(FLOWViZHttpService httpService) { - this.baseUrl = httpService.baseUrl; - this.client = httpService.client; - this.gson = httpService.gson; - this.token = httpService.token; - this.credentials = httpService.credentials; - } - - /** - * Authenticate with the FLOWViZ API. - * - * @param credentials the credentials to authenticate with - * @return the authentication token - */ - private Token authenticate(Credentials credentials) { - try { - return this.post("/login", credentials, Token.class); - } catch (UnexpectedResponseException e) { - throw new AuthenticationException("Failed to authenticate"); - } - } - - /** - * Execute a request. - * - * @param request the request to execute - * @param resClazz the class of the response - * @param the type of the response - * @return the response - * @throws ConnectionRefusedException if the connection was refused - * @throws UnexpectedResponseException if the response was unexpected - */ - private T execute( - Request request, - Class resClazz - ) throws ConnectionRefusedException, UnexpectedResponseException { - try (Response response = this.client.newCall(request).execute()) { - - if (!response.isSuccessful()) - throw new UnexpectedResponseException(response); - - ResponseBody responseBody = response.body(); - - if (responseBody == null) - throw new IllegalStateException("Response body is null"); - - try { - JsonReader reader = new JsonReader(responseBody.charStream()); - if (resClazz == null || resClazz == Void.class || resClazz == Void.TYPE) - return null; - return gson.fromJson(reader, resClazz); - } catch (JsonSyntaxException e) { - throw new UnexpectedResponseException(response); - } - } catch (IOException e) { - throw new ConnectionRefusedException(e); - } - } - - /** - * Add the authentication token to a request. - * - * @param builder the request builder - * @return the request with the authentication token - */ - private Request addTokenToRequest(Request.Builder builder) { - if (this.token != null) - return builder.header("Authorization", "Bearer " + this.token.getToken()).build(); - else - return builder.build(); - } - - /** - * Generate a request body from an object. - * - * @param body the object to generate the request body from - * @return the request body - */ - private RequestBody generateRequestBody(Object body) { - return RequestBody.create( - this.gson.toJson(body), - MediaType.parse("application/json") - ); - } - - /** - * Execute a request. - * - * @param reqBuilder the request builder - * @param path the path to execute the request on - * @param resClazz the class of the response - * @param the type of the response - * @return the response - * @throws ConnectionRefusedException if the connection was refused - * @throws UnexpectedResponseException if the response was unexpected - */ - private T execute( - Request.Builder reqBuilder, - String path, - Class resClazz - ) throws ConnectionRefusedException, UnexpectedResponseException { - reqBuilder = reqBuilder.url(this.baseUrl + path); - - Request request = addTokenToRequest(reqBuilder); - - try { - return execute(request, resClazz); - } catch (final UnexpectedResponseException e) { - if (e.getResponse().code() == 401) { - this.token = authenticate(this.credentials); - request = addTokenToRequest(reqBuilder); - return execute(request, resClazz); - } - - throw e; - } - } - - /** - * Execute a POST request. - * - * @param path the path to execute the request on - * @param resClazz the class of the response - * @param the type of the response - * @return the response - * @throws ConnectionRefusedException if the connection was refused - * @throws UnexpectedResponseException if the response was unexpected - */ - public T post( - String path, - Object body, - Class resClazz - ) throws ConnectionRefusedException, UnexpectedResponseException { - return execute( - new Request.Builder().post(generateRequestBody(body)), - path, - resClazz - ); - } - - /** - * Execute a PUT request. - * - * @param path the path to execute the request on - * @param resClazz the class of the response - * @param the type of the response - * @return the response - * @throws ConnectionRefusedException if the connection was refused - * @throws UnexpectedResponseException if the response was unexpected - */ - public T put( - String path, - Object body, - Class resClazz - ) throws ConnectionRefusedException, UnexpectedResponseException { - return execute( - new Request.Builder().put(generateRequestBody(body)), - path, - resClazz - ); - } - - /** - * Execute a GET request. - * - * @param path the path to execute the request on - * @param resClazz the class of the response - * @param the type of the response - * @return the response - * @throws ConnectionRefusedException if the connection was refused - * @throws UnexpectedResponseException if the response was unexpected - */ - public T get( - String path, - Class resClazz - ) throws ConnectionRefusedException, UnexpectedResponseException { - return execute( - new Request.Builder().get(), - path, - resClazz - ); - } - - /** - * Execute a DELETE request. - * - * @param path the path to execute the request on - * @param resClazz the class of the response - * @param the type of the response - * @return the response - * @throws ConnectionRefusedException if the connection was refused - * @throws UnexpectedResponseException if the response was unexpected - */ - public T delete( - String path, - Class resClazz - ) throws ConnectionRefusedException, UnexpectedResponseException { - return execute( - new Request.Builder().delete(), - path, - resClazz - ); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/AccessDeserializer.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/AccessDeserializer.java deleted file mode 100644 index 58ab7c29..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/AccessDeserializer.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.adapters; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.Access; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.AccessDetails; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.AccessType; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.api.ApiAccessDetails; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.library.LibraryAccessDetails; - -import java.lang.reflect.Type; -import java.util.Map; - -/** - * Deserializes an {@link Access} object from JSON. - */ -public class AccessDeserializer implements JsonDeserializer { - - @Override - public Access deserialize( - JsonElement json, - Type typeOfT, - JsonDeserializationContext context - ) throws JsonParseException { - JsonObject jsonObject = json.getAsJsonObject(); - - AccessType type = null; - AccessDetails details = null; - - for (Map.Entry entry : jsonObject.entrySet()) { - String name = entry.getKey(); - - switch (name) { - case "_type" -> type = AccessType.valueOf(entry.getValue().getAsString().toUpperCase()); - case "api" -> details = context.deserialize(entry.getValue(), ApiAccessDetails.class); - case "library" -> details = context.deserialize(entry.getValue(), LibraryAccessDetails.class); - default -> throw new JsonParseException("Unknown access field: " + name); - } - } - - if (type == null) - throw new JsonParseException("Access type is missing"); - - if (details == null) - throw new JsonParseException("Access details are missing"); - - if (type == AccessType.LIBRARY && !(details instanceof LibraryAccessDetails)) - throw new JsonParseException( - "Access details are not of type LibraryAccessDetails even though type is LIBRARY" - ); - - if (type == AccessType.API && !(details instanceof ApiAccessDetails)) - throw new JsonParseException("Access details are not of type ApiAccessDetails even though type is API"); - - return Access.builder() - .type(type) - .details(details) - .build(); - } -} - - diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/AccessSerializer.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/AccessSerializer.java deleted file mode 100644 index d2e79788..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/AccessSerializer.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.adapters; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.Access; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.AccessDetails; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.api.ApiAccessDetails; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.library.LibraryAccessDetails; - -import java.lang.reflect.Type; - -/** - * Serializes {@link Access} objects to JSON. - */ -public class AccessSerializer implements JsonSerializer { - - @Override - public JsonElement serialize(Access access, Type typeOfSrc, JsonSerializationContext context) { - JsonObject json = new JsonObject(); - json.addProperty("_type", access.getType().toString().toLowerCase()); - AccessDetails details = access.getDetails(); - - if (details instanceof LibraryAccessDetails) - json.add("library", context.serialize(details, LibraryAccessDetails.class)); - else if (details instanceof ApiAccessDetails) - json.add("api", context.serialize(details, ApiAccessDetails.class)); - else - throw new IllegalArgumentException("Unknown access details type: " + details.getClass().getName()); - - return json; - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/LocalDateTimeDeserializer.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/LocalDateTimeDeserializer.java deleted file mode 100644 index c47a56fd..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/LocalDateTimeDeserializer.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.adapters; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; - -import java.lang.reflect.Type; -import java.time.LocalDateTime; -import java.time.ZonedDateTime; - -/** - * Deserializes {@link LocalDateTime} objects from JSON. - */ -public class LocalDateTimeDeserializer implements JsonDeserializer { - - @Override - public LocalDateTime deserialize( - JsonElement json, - Type type, - JsonDeserializationContext jsonDeserializationContext - ) { - return ZonedDateTime.parse(json.getAsJsonPrimitive().getAsString()).toLocalDateTime(); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/LocalDateTimeSerializer.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/LocalDateTimeSerializer.java deleted file mode 100644 index f4215ba9..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/adapters/LocalDateTimeSerializer.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.adapters; - -import com.google.gson.JsonElement; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -import java.lang.reflect.Type; -import java.time.LocalDateTime; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; - -/** - * Serializes {@link LocalDateTime} objects to JSON. - */ -public class LocalDateTimeSerializer implements JsonSerializer { - - @Override - public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context) { - ZonedDateTime zonedDateTime = src.atZone(ZoneOffset.UTC); - return new JsonPrimitive(zonedDateTime.toString()); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/exceptions/AuthenticationException.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/exceptions/AuthenticationException.java deleted file mode 100644 index f7094bad..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/exceptions/AuthenticationException.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.exceptions; - -public class AuthenticationException extends RuntimeException { - public AuthenticationException(String message) { - super(message); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/exceptions/ConnectionRefusedException.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/exceptions/ConnectionRefusedException.java deleted file mode 100644 index 87a9f110..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/exceptions/ConnectionRefusedException.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.exceptions; - -import java.io.IOException; - -public class ConnectionRefusedException extends RuntimeException { - public ConnectionRefusedException(IOException e) { - super("Connection refused", e); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/exceptions/UnexpectedResponseException.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/exceptions/UnexpectedResponseException.java deleted file mode 100644 index f8da5606..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/exceptions/UnexpectedResponseException.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.exceptions; - -import lombok.Getter; -import okhttp3.Response; - -public class UnexpectedResponseException extends RuntimeException { - @Getter - private final Response response; - - public UnexpectedResponseException(Response response) { - super("Unexpected response: " + response); - this.response = response; - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/identity/Credentials.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/identity/Credentials.java deleted file mode 100644 index ebdbf13b..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/identity/Credentials.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.identity; - -import lombok.Data; - -@Data -public class Credentials { - private final String username; - private final String password; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/identity/Token.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/identity/Token.java deleted file mode 100644 index 221ea674..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/identity/Token.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.identity; - -import com.google.gson.annotations.SerializedName; -import lombok.Data; - -@Data -public class Token { - @SerializedName("jwt") - private String token; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/AirflowData.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/AirflowData.java deleted file mode 100644 index 4c842bd5..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/AirflowData.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.get_workflow; - -import lombok.Data; - -import java.util.List; - -@Data -public class AirflowData { - - private final List runs; -} \ No newline at end of file diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java deleted file mode 100644 index 13190bc1..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.get_workflow; - -import com.google.gson.annotations.SerializedName; -import lombok.Data; - - -@Data -public class AirflowWorkflowStatus { - - @SerializedName("dag_run_id") - private final String dagRunId; - private final String state; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/GetWorkflowResponse.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/GetWorkflowResponse.java deleted file mode 100644 index 80e6c1d5..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/GetWorkflowResponse.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.get_workflow; - -import lombok.Data; - -@Data -public class GetWorkflowResponse { - - private AirflowData airflow; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/WorkflowState.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/WorkflowState.java deleted file mode 100644 index 950b0d49..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/get_workflow/WorkflowState.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.get_workflow; - - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Getter -public enum WorkflowState { - QUEUED("queued"), - SUCCESS("success"), - FAILED("failed"); - - private final String value; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/General.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/General.java deleted file mode 100644 index b4677cba..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/General.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool; - -import lombok.Builder; -import lombok.Data; - -@Data -@Builder -public class General { - - private final String name; - - private final String description; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/Tool.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/Tool.java deleted file mode 100644 index bab95fab..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/Tool.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool; - -import lombok.Builder; -import lombok.Data; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.Access; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.library.Library; - -import java.util.List; - -@Data -@Builder -public class Tool { - - private final General general; - - private final Access access; - - private final List library; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/ToolService.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/ToolService.java deleted file mode 100644 index 06186c69..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/ToolService.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool; - -import org.phyloviz.pwp.compute.service.flowviz.FLOWViZHttpService; -import org.phyloviz.pwp.compute.service.flowviz.exceptions.ConnectionRefusedException; -import org.phyloviz.pwp.compute.service.flowviz.exceptions.UnexpectedResponseException; - -public class ToolService extends FLOWViZHttpService { - - public ToolService(FLOWViZHttpService httpService) { - super(httpService); - } - - public void postTool(Tool tool) throws UnexpectedResponseException, ConnectionRefusedException { - this.post("/tool", tool, Void.class); - } - - public void getTool(String id) throws UnexpectedResponseException, ConnectionRefusedException { - this.get("/tool/" + id, Tool.class); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/Access.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/Access.java deleted file mode 100644 index 88128d0a..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/Access.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool.access; - -import lombok.Builder; -import lombok.Data; - -@Data -@Builder -public class Access { - public final AccessType type; - public final AccessDetails details; -} \ No newline at end of file diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/AccessDetails.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/AccessDetails.java deleted file mode 100644 index 470f5931..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/AccessDetails.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool.access; - -public interface AccessDetails { -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/AccessType.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/AccessType.java deleted file mode 100644 index 6b54823a..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/AccessType.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool.access; - -import com.google.gson.annotations.SerializedName; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -public enum AccessType { - @SerializedName("library") - LIBRARY, - @SerializedName("api") - API -} \ No newline at end of file diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/api/ApiAccessDetails.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/api/ApiAccessDetails.java deleted file mode 100644 index 8ceb6005..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/api/ApiAccessDetails.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool.access.api; - -import lombok.Builder; -import lombok.Data; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.AccessDetails; - -@Data -@Builder -public class ApiAccessDetails implements AccessDetails { - - private final String url; - - private final String apiKey; -} \ No newline at end of file diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/DockerAutoRemove.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/DockerAutoRemove.java deleted file mode 100644 index 93037e60..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/DockerAutoRemove.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool.access.library; - -import com.google.gson.annotations.SerializedName; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -@RequiredArgsConstructor -public enum DockerAutoRemove { - @SerializedName("never") - NEVER, - @SerializedName("success") - SUCCESS, - @SerializedName("force") - FORCE -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/DockerVolume.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/DockerVolume.java deleted file mode 100644 index baeeae0e..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/DockerVolume.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool.access.library; - -import com.google.gson.annotations.SerializedName; -import lombok.Builder; -import lombok.Data; - -@Data -@Builder -public class DockerVolume { - - private final String source; - - private final String target; - - @SerializedName("_type") - private final VolumeType type; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/LibraryAccessDetails.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/LibraryAccessDetails.java deleted file mode 100644 index bea04533..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/LibraryAccessDetails.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool.access.library; - -import lombok.Builder; -import lombok.Data; -import org.phyloviz.pwp.compute.service.flowviz.models.tool.access.AccessDetails; - -import java.util.List; - -@Data -@Builder -public class LibraryAccessDetails implements AccessDetails { - - private final String address; - - private final String dockerUrl; - - private final String dockerImage; - - private final String dockerContainer; - - private final DockerAutoRemove dockerAutoRemove; - - private final String dockerNetworkMode; - - private final String dockerApiVersion; - - private final List dockerVolumes; -} - diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/VolumeType.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/VolumeType.java deleted file mode 100644 index 061c6b3f..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/access/library/VolumeType.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool.access.library; - -import com.google.gson.annotations.SerializedName; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -public enum VolumeType { - @SerializedName("bind") - BIND, - @SerializedName("volume") - VOLUME -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/library/Command.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/library/Command.java deleted file mode 100644 index 1aeaac16..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/library/Command.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool.library; - -import lombok.Builder; -import lombok.Data; - -import java.util.List; - -@Data -@Builder -public -class Command { - - private final String name; - - private final List invocation; - - private final List allowedValues; - private final List allowedCommandSets; - private final String description; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/library/Library.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/library/Library.java deleted file mode 100644 index 766ba8ed..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/tool/library/Library.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.tool.library; - -import lombok.Builder; -import lombok.Data; - -import java.util.List; - -@Data -@Builder -public class Library { - - private final String name; - private final int order; - - private final String invocation; - private final boolean allowCommandRep; - - private final List commands; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java deleted file mode 100644 index be6f1f46..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.workflow; - -import lombok.Data; - -@Data -public class GetWorkflowTaskLogResponse { - private String content; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/Workflow.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/Workflow.java deleted file mode 100644 index a11ab209..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/Workflow.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.workflow; - - -import com.google.gson.annotations.SerializedName; -import lombok.Builder; -import lombok.Data; -import org.phyloviz.pwp.compute.service.flowviz.models.workflow.tasks.Task; - -import java.time.LocalDateTime; -import java.util.List; - -@Data -@Builder -public class Workflow { - - private final String name; - - - private final String description; - - @SerializedName("start_date") - private final LocalDateTime startDate; - - private final List tasks; -} - - - diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/WorkflowService.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/WorkflowService.java deleted file mode 100644 index a91d99b6..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/WorkflowService.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.workflow; - -import org.phyloviz.pwp.compute.service.flowviz.FLOWViZHttpService; -import org.phyloviz.pwp.compute.service.flowviz.exceptions.ConnectionRefusedException; -import org.phyloviz.pwp.compute.service.flowviz.exceptions.UnexpectedResponseException; -import org.phyloviz.pwp.compute.service.flowviz.models.get_workflow.GetWorkflowResponse; - -public class WorkflowService extends FLOWViZHttpService { - - public WorkflowService(FLOWViZHttpService httpService) { - super(httpService); - } - - public void postWorkflow(Workflow workflow) throws UnexpectedResponseException, ConnectionRefusedException { - this.post("/workflow", workflow, Void.class); - } - - public GetWorkflowResponse getWorkflow(String name) throws UnexpectedResponseException, ConnectionRefusedException { - return this.get("/workflow/" + name, GetWorkflowResponse.class); - } - - public GetWorkflowTaskLogResponse getWorkflowDagRunTaskLog(String name, String dagRunId, String taskId, String logId) { - return this.get("/workflow/" + name + "/" + dagRunId + "/tasks/" + taskId + "/logs/" + logId, GetWorkflowTaskLogResponse.class); - } -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/tasks/Action.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/tasks/Action.java deleted file mode 100644 index 7e7922b0..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/tasks/Action.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.workflow.tasks; - -import lombok.Builder; -import lombok.Data; - -@Data -@Builder -public class Action { - private final String command; -} diff --git a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/tasks/Task.java b/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/tasks/Task.java deleted file mode 100644 index b34d3f0d..00000000 --- a/src/backend/microservices/compute/src/main/java/org/phyloviz/pwp/compute/service/flowviz/models/workflow/tasks/Task.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz.models.workflow.tasks; - -import lombok.Builder; -import lombok.Data; - -import java.util.List; - -@Data -@Builder -public class Task { - - private final String id; - - private final String tool; - - private final Action action; - - private final List children; -} diff --git a/src/backend/microservices/compute/src/main/resources/application.yml b/src/backend/microservices/compute/src/main/resources/application.yml deleted file mode 100644 index 36451515..00000000 --- a/src/backend/microservices/compute/src/main/resources/application.yml +++ /dev/null @@ -1,15 +0,0 @@ -server: - port: 8086 - -spring: - config: - import: application-shared.yml - -flowviz: - url: http://localhost:3000/flowapi - username: admin - password: admin - -logging: - level: - root: debug \ No newline at end of file diff --git a/src/backend/microservices/compute/src/test/java/org/phyloviz/pwp/compute/service/flowviz/FlowVizClientIntegrationTest.java b/src/backend/microservices/compute/src/test/java/org/phyloviz/pwp/compute/service/flowviz/FlowVizClientIntegrationTest.java deleted file mode 100644 index c2494098..00000000 --- a/src/backend/microservices/compute/src/test/java/org/phyloviz/pwp/compute/service/flowviz/FlowVizClientIntegrationTest.java +++ /dev/null @@ -1,139 +0,0 @@ -package org.phyloviz.pwp.compute.service.flowviz; - -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class FlowVizClientIntegrationTest { - - // TODO: Fix this test - // FlowVizClient flowVizClient = FlowVizClient - // .builder() - // .baseUrl("http://localhost:3000/flowapi") - // .credentials("admin", "admin") - // .authenticate(); - // - // Gson gson = new GsonBuilder() - // .registerTypeAdapter(Access.class, new AccessSerializer()) - // .registerTypeAdapter(Access.class, new AccessDeserializer()) - // .create(); - - // @Test - // void toolService() { - // - // Tool tool = Tool.builder() - // .general(General.builder() - // .name("Phylolib") - // .description("The phylolib library") - // .build()) - // .access(Access.builder() - // .type(AccessType.LIBRARY) - // .details(LibraryAccess.builder() - // .address("localhost") - // .dockerUrl("unix://var/run/docker.sock") - // .dockerImage("luanab/phylolib") - // .dockerContainer("phylolib") - // .dockerAutoRemove(DockerAutoRemove.NEVER) - // .dockerNetworkMode("bridge") - // .dockerApiVersion("auto") - // .dockerVolumes(Collections.singletonList(DockerVolume.builder() - // .source("/opt/.phylolibVol") - // .target("/phylolib") - // .type(VolumeType.BIND) - // .build())) - // .build()) - // .build()) - // .library(Arrays.asList( - // Library.builder() - // .name("Arguments") - // .order(0) - // .invocation("-args") - // .allowCommandRep(false) - // .commands(List.of( - // Command.builder().name("help").invocation(List.of("help")).build(), - // Command.builder().name("distance").invocation(List.of("distance")) - // .allowedValues(List.of("hamming", "grapetree", "kimura")) - // .allowedCommandSets(List.of("Options")) - // .build(), - // Command.builder().name("correction").invocation(List.of("correction")) - // .allowedValues(List.of("jukescantor")) - // .allowedCommandSets(List.of("Options")) - // .build(), - // Command.builder().name("algorithm").invocation(List.of("algorithm")) - // .allowedValues(List.of( - // "goeburst", "edmonds", "sl", "cl", "upgma", "upgmc", - // "wpgma", "wpgmc", "saitounei", "studierkepler", "unj")) - // .allowedCommandSets(List.of("Options")) - // .build(), - // Command.builder().name("optimization").invocation(List.of("optimization")) - // .allowedValues(List.of("lbr")) - // .allowedCommandSets(List.of("Options")) - // .build() - // )) - // .build(), - // Library.builder() - // .name("Options") - // .order(1) - // .allowCommandRep(true) - // .commands(List.of( - // Command.builder().name("File Output") - // .description("Output file as : with format being (asymmetric|symmetric|newick|nexus)") - // .invocation(List.of("-o", "--out")) - // .allowedValues(List.of("file")) - // .build(), - // Command.builder().name("Dataset Input") - // .description("Input dataset file as : with format being (fasta|ml|snp)") - // .invocation(List.of("-d", "--dataset")) - // .allowedValues(List.of("file")) - // .build(), - // Command.builder().name("Distance Matrix Input") - // .description("Input distance matrix file as : with format being (asymmetric|symmetric)") - // .invocation(List.of("-m", "--matrix")) - // .allowedValues(List.of("file")) - // .build(), - // Command.builder().name("Phylogenetic Tree Input") - // .description("Input phylogenetic tree file as : with format being (newick|nexus)") - // .invocation(List.of("-t", "--tree")) - // .allowedValues(List.of("file")) - // .build(), - // Command.builder().name("Limit of focus variants") - // .description("Limit of locus variants to consider using goeBURST algorithm [default: 3]") - // .invocation(List.of("-l", "--lvs")) - // .allowedValues(List.of("file")) - // .build() - // )) - // .build() - // )) - // .build(); - // - // flowVizClient.toolService().postTool(tool); - // } - // - // @Test - // void workflowService() { - // Workflow workflow = Workflow.builder() - // .name("PhylolibWorkflow") - // .description("A test workflow for Phylolib") - // .startDate(OffsetDateTime.parse("2022-11-29T19:45:00.000Z").toLocalDateTime()) - // .tasks(Arrays.asList( - // Task.builder() - // .id("hamming") - // .tool("Phylolib") - // .action(Action.builder() - // .command("distance hamming --dataset=ml:/phylolib/data/datasets/10.txt --out=symmetric:/phylolib/out.txt") - // .build()) - // .children(Collections.singletonList("upgma")) - // .build(), - // Task.builder() - // .id("upgma") - // .tool("Phylolib") - // .action(Action.builder() - // .command("algorithm upgma --out=newick:/phylolib/tree.txt --matrix=symmetric:/phylolib/out.txt") - // .build()) - // .children(Collections.emptyList()) - // .build() - // )) - // .build(); - // - // this.flowVizClient.workflowService().postWorkflow(workflow); - // } -} \ No newline at end of file diff --git a/src/backend/microservices/file-transfer/Dockerfile b/src/backend/microservices/file-transfer/Dockerfile deleted file mode 100644 index c007539a..00000000 --- a/src/backend/microservices/file-transfer/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM openjdk:17-jdk-alpine -COPY build/libs/file-transfer-0.0.1-SNAPSHOT.jar /app.jar - -ENTRYPOINT ["java", "-jar", "/app.jar"] \ No newline at end of file diff --git a/src/backend/microservices/file-transfer/build.gradle b/src/backend/microservices/file-transfer/build.gradle deleted file mode 100644 index deb3302b..00000000 --- a/src/backend/microservices/file-transfer/build.gradle +++ /dev/null @@ -1,39 +0,0 @@ -plugins { - id 'application' - id 'org.springframework.boot' version '3.0.4' - id 'io.spring.dependency-management' version '1.1.0' - id "io.freefair.lombok" version "8.0.0-rc2" -} - -group 'phylovizwebplatform' -version '0.0.1-SNAPSHOT' -sourceCompatibility = '17' - -ext { - set('jupiterVersion', "5.8.1") -} - -repositories { - mavenCentral() -} - -dependencies { - implementation project(path: ':microservices:shared') - - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'org.junit.jupiter:junit-jupiter-api' version { jupiterVersion } - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' version { jupiterVersion } - - implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' - - implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2' - implementation 'org.zalando:problem-spring-web-starter:0.27.0' - - implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.6' -} - -test { - useJUnitPlatform() -} \ No newline at end of file diff --git a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/FileTransferMicroserviceApplication.java b/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/FileTransferMicroserviceApplication.java deleted file mode 100644 index d58f4222..00000000 --- a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/FileTransferMicroserviceApplication.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.phyloviz.pwp.file_transfer; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * Main class for the FileTransfer Microservice of the PHYLOViZ Web Platform. - */ -@SpringBootApplication -public class FileTransferMicroserviceApplication { - - /** - * Entry point for the FileTransfer Microservice. - * - * @param args arguments passed to the application - */ - public static void main(String[] args) { - SpringApplication.run(FileTransferMicroserviceApplication.class, args); - } -} diff --git a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/config/DataRepositoryConfig.java b/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/config/DataRepositoryConfig.java deleted file mode 100644 index 6329b550..00000000 --- a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/config/DataRepositoryConfig.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.phyloviz.pwp.file_transfer.config; - -import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataPhyloDBDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreePhyloDBDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewPhyloDBDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataPhyloDBDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataS3DataRepositorySpecificData; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Map; - -/** - * Configuration class for the Data Repositories. - */ -@Configuration -public class DataRepositoryConfig { - - @Bean - public TypingDataDataRepositoryRegistry typingDataDataRepositoryRegistry(ApplicationContext context) { - return new TypingDataDataRepositoryRegistryImpl(context, Map.of( - TypingDataDataRepositoryId.S3, TypingDataS3DataRepository.class - ), Map.of( - TypingDataDataRepositoryId.S3, TypingDataS3DataRepositorySpecificData.class, - TypingDataDataRepositoryId.PHYLODB, TypingDataPhyloDBDataRepositorySpecificData.class - )); - } - - @Bean - public IsolateDataDataRepositoryRegistry isolateDataDataRepositoryRegistry(ApplicationContext context) { - return new IsolateDataDataRepositoryRegistryImpl(context, Map.of( - IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepository.class - ), Map.of( - IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepositorySpecificData.class, - IsolateDataDataRepositoryId.PHYLODB, IsolateDataPhyloDBDataRepositorySpecificData.class - )); - } - - @Bean - public DistanceMatrixDataRepositoryRegistry distanceMatrixDataRepositoryRegistry(ApplicationContext context) { - return new DistanceMatrixDataRepositoryRegistryImpl(context, Map.of( - DistanceMatrixDataRepositoryId.S3, DistanceMatrixS3DataRepository.class - ), Map.of( - DistanceMatrixDataRepositoryId.S3, DistanceMatrixS3DataRepositorySpecificData.class - )); - } - - @Bean - public TreeDataRepositoryRegistry treeDataRepositoryRegistry(ApplicationContext context) { - return new TreeDataRepositoryRegistryImpl(context, Map.of( - TreeDataRepositoryId.S3, TreeS3DataRepository.class - ), Map.of( - TreeDataRepositoryId.S3, TreeS3DataRepositorySpecificData.class, - TreeDataRepositoryId.PHYLODB, TreePhyloDBDataRepositorySpecificData.class - )); - } - - @Bean - public TreeViewDataRepositoryRegistry treeViewDataRepositoryRegistry(ApplicationContext context) { - return new TreeViewDataRepositoryRegistryImpl(context, Map.of( - TreeViewDataRepositoryId.S3, TreeViewS3DataRepository.class - ), Map.of( - TreeViewDataRepositoryId.S3, TreeViewS3DataRepositorySpecificData.class, - TreeViewDataRepositoryId.PHYLODB, TreeViewPhyloDBDataRepositorySpecificData.class - )); - } -} diff --git a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/config/FileTransferConfig.java b/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/config/FileTransferConfig.java deleted file mode 100644 index 5c17105f..00000000 --- a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/config/FileTransferConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.phyloviz.pwp.file_transfer.config; - -import org.phyloviz.pwp.shared.config.ResourceServerSharedConfig; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; - -/** - * Configuration class for the FileTransfer Microservice. - */ -@Configuration -@Import({ResourceServerSharedConfig.class}) -public class FileTransferConfig { -} \ No newline at end of file diff --git a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/controllers/FileTransferController.java b/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/controllers/FileTransferController.java deleted file mode 100644 index e2a81c3e..00000000 --- a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/controllers/FileTransferController.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.phyloviz.pwp.file_transfer.http.controllers; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.file_transfer.http.models.isolate_data.UploadIsolateDataOutputModel; -import org.phyloviz.pwp.file_transfer.http.models.typing_data.UploadTypingDataOutputModel; -import org.phyloviz.pwp.file_transfer.service.FileTransferService; -import org.phyloviz.pwp.shared.domain.User; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.UploadIsolateDataOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.UploadTypingDataOutput; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestPart; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.support.ServletUriComponentsBuilder; - -import java.net.URI; - -/** - * Controller for the File Transfer Microservice. - */ -@RestController -@RequiredArgsConstructor -public class FileTransferController { - - private final FileTransferService fileTransferService; - - /** - * Uploads a typing data. - * - * @param projectId the name of the project to which the typing data will be uploaded - * @param file the file to be uploaded - * @param user the user that is uploading the typing data - * @return information about the uploaded typing data - */ - @PostMapping(path = "/projects/{projectId}/files/typing-data", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) - public ResponseEntity uploadTypingData( - @PathVariable String projectId, - @RequestPart MultipartFile file, - @RequestPart String type, - User user - ) { - UploadTypingDataOutput uploadTypingDataOutput = fileTransferService.uploadTypingData( - projectId, file, type, user.getId() - ); - - URI location = ServletUriComponentsBuilder.fromCurrentRequest() - .path("/{typingDataId}") - .buildAndExpand(uploadTypingDataOutput.getTypingDataId()) - .toUri(); - - return ResponseEntity - .created(location) - .body(new UploadTypingDataOutputModel(uploadTypingDataOutput)); - } - - /** - * Downloads the contents of a typing data file. - * - * @param projectId the name of the project the typing data belongs to - * @param typingDataId the id of the typing data to be downloaded - * @param user the user that is downloading the typing data - * @return the contents of the typing data file - */ - @GetMapping(path = "/projects/{projectId}/files/typing-data/{typingDataId}/file") - public String downloadTypingData( - @PathVariable String projectId, - @PathVariable String typingDataId, - User user - ) { - return fileTransferService.downloadTypingData(projectId, typingDataId, user.getId()); - } - - /** - * Uploads an isolate data. - * - * @param projectId the name of the project to which the isolate data will be uploaded - * @param file the file to be uploaded - * @param user the user that is uploading the isolate data - * @return information about the uploaded isolate data - */ - @PostMapping(path = "/projects/{projectId}/files/isolate-data", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) - public ResponseEntity uploadIsolateData( - @PathVariable String projectId, - @RequestPart MultipartFile file, - User user - ) { - UploadIsolateDataOutput uploadIsolateDataOutput = fileTransferService.uploadIsolateData(projectId, file, user.getId()); - - URI location = ServletUriComponentsBuilder.fromCurrentRequest() - .path("/{isolateDataId}") - .buildAndExpand(uploadIsolateDataOutput.getIsolateDataId()) - .toUri(); - - return ResponseEntity - .created(location) - .body(new UploadIsolateDataOutputModel(uploadIsolateDataOutput)); - } - - /** - * Downloads the contents of an isolate data file. - * - * @param projectId the name of the project the isolate data belongs to - * @param isolateDataId the id of the isolate data to be downloaded - * @param user the user that is downloading the isolate data - * @return the contents of the isolate data file - */ - @GetMapping(path = "/projects/{projectId}/files/isolate-data/{isolateDataId}/file") - public String downloadIsolateData( - @PathVariable String projectId, - @PathVariable String isolateDataId, - User user - ) { - return fileTransferService.downloadIsolateData(projectId, isolateDataId, user.getId()); - } -} diff --git a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/models/isolate_data/UploadIsolateDataOutputModel.java b/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/models/isolate_data/UploadIsolateDataOutputModel.java deleted file mode 100644 index 8b31eb79..00000000 --- a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/models/isolate_data/UploadIsolateDataOutputModel.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.phyloviz.pwp.file_transfer.http.models.isolate_data; - -import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.UploadIsolateDataOutput; - -@Data -public class UploadIsolateDataOutputModel { - private String projectId; - private String isolateDataId; - - public UploadIsolateDataOutputModel(UploadIsolateDataOutput uploadIsolateDataOutput) { - this.projectId = uploadIsolateDataOutput.getProjectId(); - this.isolateDataId = uploadIsolateDataOutput.getIsolateDataId(); - } -} diff --git a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/models/typing_data/UploadTypingDataOutputModel.java b/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/models/typing_data/UploadTypingDataOutputModel.java deleted file mode 100644 index f947ce4a..00000000 --- a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/models/typing_data/UploadTypingDataOutputModel.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.phyloviz.pwp.file_transfer.http.models.typing_data; - -import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.UploadTypingDataOutput; - -@Data -public class UploadTypingDataOutputModel { - private String projectId; - private String typingDataId; - - public UploadTypingDataOutputModel(UploadTypingDataOutput uploadTypingDataOutput) { - this.projectId = uploadTypingDataOutput.getProjectId(); - this.typingDataId = uploadTypingDataOutput.getTypingDataId(); - } -} diff --git a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/pipeline/FileTransferExceptionHandler.java b/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/pipeline/FileTransferExceptionHandler.java deleted file mode 100644 index ade1228c..00000000 --- a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/http/pipeline/FileTransferExceptionHandler.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.phyloviz.pwp.file_transfer.http.pipeline; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; -import org.springframework.web.multipart.MaxUploadSizeExceededException; -import org.zalando.problem.Problem; -import org.zalando.problem.Status; - -@RestControllerAdvice -public class FileTransferExceptionHandler { - - @Value("${spring.servlet.multipart.max-file-size}") - private String maxUploadSize; - - /** - * Handles Multipart Max Upload Size Exceptions. - * - * @param e the exception - * @return a Problem with the status Bad Request - */ - @ExceptionHandler(value = { - MaxUploadSizeExceededException.class - }) - public Problem handleMultipartMaxUploadException(Exception e) { - return Problem.builder() - .withTitle("Bad Request") - .withDetail("Maximum file upload size exceeded (Max is " + maxUploadSize + ")") - .withStatus(Status.BAD_REQUEST) - .build(); - } -} diff --git a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/service/FileTransferService.java b/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/service/FileTransferService.java deleted file mode 100644 index 3179dde3..00000000 --- a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/service/FileTransferService.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.phyloviz.pwp.file_transfer.service; - -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.UploadIsolateDataOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.UploadTypingDataOutput; -import org.springframework.web.multipart.MultipartFile; - -/** - * Service for the File Transfer Microservice. - */ -public interface FileTransferService { - - /** - * Uploads a typing data. - * - * @param projectId the name of the project to which the typing data will be uploaded - * @param file the file to be uploaded - * @param type the type of the typing data - * @param userId the id of the user that is uploading the typing data - * @return information about the uploaded typing data - */ - UploadTypingDataOutput uploadTypingData(String projectId, MultipartFile file, String type, String userId); - - /** - * Downloads the contents of a typing data file. - * - * @param projectId the name of the project the typing data belongs to - * @param typingDataId the id of the typing data to be downloaded - * @param userId the id of the user that is downloading the typing data - * @return the contents of the typing data file - */ - String downloadTypingData(String projectId, String typingDataId, String userId); - - /** - * Uploads an isolate data. - * - * @param projectId the name of the project to which the isolate data will be uploaded - * @param file the file to be uploaded - * @param userId the id of the user that is uploading the isolate data - * @return information about the uploaded isolate data - */ - UploadIsolateDataOutput uploadIsolateData(String projectId, MultipartFile file, String userId); - - /** - * Downloads the contents of an isolate data file. - * - * @param projectId the name of the project the isolate data belongs to - * @param isolateDataId the id of the isolate data to be downloaded - * @param userId the id of the user that is downloading the isolate data - * @return the contents of the isolate data file - */ - String downloadIsolateData(String projectId, String isolateDataId, String userId); -} diff --git a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/service/FileTransferServiceImpl.java b/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/service/FileTransferServiceImpl.java deleted file mode 100644 index db7ca265..00000000 --- a/src/backend/microservices/file-transfer/src/main/java/org/phyloviz/pwp/file_transfer/service/FileTransferServiceImpl.java +++ /dev/null @@ -1,162 +0,0 @@ -package org.phyloviz.pwp.file_transfer.service; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.TypingDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.UploadIsolateDataOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.UploadTypingDataOutput; -import org.phyloviz.pwp.shared.service.exceptions.FileCorruptedException; -import org.phyloviz.pwp.shared.service.exceptions.IsolateDataNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.MultipartFileReadException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TypingDataNotFoundException; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.multipart.MultipartFile; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -@Service -@Transactional -@RequiredArgsConstructor -public class FileTransferServiceImpl implements FileTransferService { - - private final ProjectRepository projectRepository; - - private final TypingDataMetadataRepository typingDataMetadataRepository; - private final IsolateDataMetadataRepository isolateDataMetadataRepository; - - private final IsolateDataDataRepositoryFactory isolateDataDataRepositoryFactory; - private final TypingDataDataRepositoryFactory typingDataDataRepositoryFactory; - - @Value("${data-repositories.upload-typing-data-repository}") - private TypingDataDataRepositoryId uploadTypingDataRepositoryId; - - @Value("${data-repositories.download-typing-data-repository}") - private TypingDataDataRepositoryId downloadTypingDataRepositoryId; - - @Value("${data-repositories.upload-isolate-data-repository}") - private IsolateDataDataRepositoryId uploadIsolateDataRepositoryId; - - @Value("${data-repositories.download-isolate-data-repository}") - private IsolateDataDataRepositoryId downloadIsolateDataRepositoryId; - - @Override - public UploadTypingDataOutput uploadTypingData(String projectId, MultipartFile file, String type, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - String typingDataId = UUID.randomUUID().toString(); - - TypingDataDataRepositorySpecificData typingDataDataRepositorySpecificData = typingDataDataRepositoryFactory - .getRepository(uploadTypingDataRepositoryId) - .uploadTypingData(projectId, typingDataId, file); - - TypingDataMetadata typingDataMetadata = new TypingDataMetadata( - projectId, - typingDataId, - type, - file.getOriginalFilename(), - Map.of(uploadTypingDataRepositoryId, typingDataDataRepositorySpecificData) - ); - - typingDataMetadataRepository.save(typingDataMetadata); - - return new UploadTypingDataOutput(projectId, typingDataId); - } - - @Override - public String downloadTypingData(String projectId, String typingDataId, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - TypingDataMetadata typingDataMetadata = typingDataMetadataRepository - .findByProjectIdAndTypingDataId(projectId, typingDataId) - .orElseThrow(TypingDataNotFoundException::new); - - if (!typingDataMetadata.getRepositorySpecificData().containsKey(downloadTypingDataRepositoryId)) - throw new FileCorruptedException("Typing Data isn't in the file storage, but has metadata."); - - TypingDataDataRepositorySpecificData repositorySpecificData = typingDataMetadata - .getRepositorySpecificData() - .get(downloadTypingDataRepositoryId); - - TypingDataDataRepository typingDataDataRepository = typingDataDataRepositoryFactory.getRepository(downloadTypingDataRepositoryId); - - return typingDataDataRepository.downloadTypingData(repositorySpecificData); - } - - @Override - public UploadIsolateDataOutput uploadIsolateData(String projectId, MultipartFile file, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - String isolateDataId = UUID.randomUUID().toString(); - - IsolateDataDataRepositorySpecificData isolateDataDataRepositorySpecificData = isolateDataDataRepositoryFactory - .getRepository(uploadIsolateDataRepositoryId) - .uploadIsolateData(projectId, isolateDataId, file); - - IsolateDataMetadata isolateDataMetadata = new IsolateDataMetadata( - projectId, - isolateDataId, - getIsolateDataKeys(file), - file.getOriginalFilename(), - Map.of(uploadIsolateDataRepositoryId, isolateDataDataRepositorySpecificData) - ); - - isolateDataMetadataRepository.save(isolateDataMetadata); - - return new UploadIsolateDataOutput(projectId, isolateDataId); - } - - @Override - public String downloadIsolateData(String projectId, String isolateDataId, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - IsolateDataMetadata isolateDataMetadata = isolateDataMetadataRepository - .findByProjectIdAndIsolateDataId(projectId, isolateDataId) - .orElseThrow(IsolateDataNotFoundException::new); - - if (!isolateDataMetadata.getRepositorySpecificData().containsKey(downloadIsolateDataRepositoryId)) - throw new FileCorruptedException("Isolate Data isn't in the file storage, but has metadata."); - - IsolateDataDataRepositorySpecificData repositorySpecificData = isolateDataMetadata - .getRepositorySpecificData() - .get(downloadIsolateDataRepositoryId); - - IsolateDataDataRepository isolateDataDataRepository = isolateDataDataRepositoryFactory.getRepository(downloadIsolateDataRepositoryId); - - return isolateDataDataRepository.downloadIsolateData(repositorySpecificData); - } - - private List getIsolateDataKeys(MultipartFile file) { - try { - BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream())); - String firstLine = reader.readLine(); - reader.close(); - - return List.of(firstLine.split("\t+")); - } catch (IOException e) { - throw new MultipartFileReadException("Could not read first line of file", e); - } - } -} diff --git a/src/backend/microservices/file-transfer/src/main/resources/application.yml b/src/backend/microservices/file-transfer/src/main/resources/application.yml deleted file mode 100644 index c3be64b6..00000000 --- a/src/backend/microservices/file-transfer/src/main/resources/application.yml +++ /dev/null @@ -1,20 +0,0 @@ -server: - port: 8089 - -spring: - config: - import: application-shared.yml - servlet: - multipart: - max-file-size: 1GB - max-request-size: 1GB - -data-repositories: - upload-typing-data-repository: S3 - download-typing-data-repository: S3 - upload-isolate-data-repository: S3 - download-isolate-data-repository: S3 - -logging: - level: - root: debug \ No newline at end of file diff --git a/src/backend/microservices/compute/Dockerfile b/src/backend/microservices/pwp/Dockerfile similarity index 56% rename from src/backend/microservices/compute/Dockerfile rename to src/backend/microservices/pwp/Dockerfile index c89e0065..75c743a6 100644 --- a/src/backend/microservices/compute/Dockerfile +++ b/src/backend/microservices/pwp/Dockerfile @@ -1,4 +1,4 @@ FROM openjdk:17-jdk-alpine -COPY build/libs/compute-0.0.1-SNAPSHOT.jar /app.jar +COPY build/libs/pwp-0.0.1-SNAPSHOT.jar /app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] \ No newline at end of file diff --git a/src/backend/microservices/pwp/build.gradle b/src/backend/microservices/pwp/build.gradle index 058e284a..b86124dc 100644 --- a/src/backend/microservices/pwp/build.gradle +++ b/src/backend/microservices/pwp/build.gradle @@ -1,8 +1,8 @@ plugins { - id 'application' - id 'org.springframework.boot' version '3.0.4' - id 'io.spring.dependency-management' version '1.1.0' - id "io.freefair.lombok" version "8.0.0-rc2" + id 'application' + id 'org.springframework.boot' version '3.0.4' + id 'io.spring.dependency-management' version '1.1.0' + id "io.freefair.lombok" version "8.0.0-rc2" } group 'phylovizwebplatform' @@ -10,37 +10,36 @@ version '0.0.1-SNAPSHOT' sourceCompatibility = '17' ext { - set('jupiterVersion', "5.8.1") + set('jupiterVersion', "5.8.1") } repositories { - mavenCentral() + mavenCentral() } dependencies { - implementation project(path: ':microservices:shared-phylodb') - implementation project(path: ':microservices:shared') + implementation project(path: ':microservices:shared') - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'org.junit.jupiter:junit-jupiter-api' version { jupiterVersion } - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' version { jupiterVersion } + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'org.junit.jupiter:junit-jupiter-api' version { jupiterVersion } + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' version { jupiterVersion } - implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' - implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' + implementation 'org.springframework.boot:spring-boot-starter-validation' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2' - implementation 'org.zalando:problem-spring-web-starter:0.27.0' + implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2' + implementation 'org.zalando:problem-spring-web-starter:0.27.0' - implementation 'com.squareup.okhttp3:okhttp:4.10.0' - implementation 'com.google.code.gson:gson:2.10.1' - implementation 'org.apache.commons:commons-text:1.10.0' + implementation 'com.squareup.okhttp3:okhttp:4.10.0' + implementation 'com.google.code.gson:gson:2.10.1' + implementation 'org.apache.commons:commons-text:1.10.0' - implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.6' - testImplementation 'junit:junit:4.13.1' + implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.6' + testImplementation 'junit:junit:4.13.1' } test { - useJUnitPlatform() + useJUnitPlatform() } \ No newline at end of file diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java index 6f10ae17..e5eb6d2a 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java @@ -1,11 +1,11 @@ package org.phyloviz.pwp.config; + import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixS3DataRepository; import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixS3DataRepositorySpecificData; import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataPhyloDBDataRepositorySpecificData; import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataS3DataRepositorySpecificData; import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistryImpl; @@ -19,20 +19,13 @@ import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistryImpl; import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreePhyloDBDataRepositorySpecificData; import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeS3DataRepositorySpecificData; import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewPhyloDBDataRepositorySpecificData; import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewS3DataRepositorySpecificData; import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataPhyloDBDataRepositorySpecificData; import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.isolate_data.IsolateDataPhyloDBDataRepository; -import org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.tree.TreePhyloDBDataRepository; -import org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.tree_view.TreeViewPhyloDBDataRepository; -import org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.typing_data.TypingDataPhyloDBDataRepository; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -48,23 +41,19 @@ public class DataRepositoryConfig { @Bean public TypingDataDataRepositoryRegistry typingDataDataRepositoryRegistry(ApplicationContext context) { return new TypingDataDataRepositoryRegistryImpl(context, Map.of( - TypingDataDataRepositoryId.S3, TypingDataS3DataRepository.class, - TypingDataDataRepositoryId.PHYLODB, TypingDataPhyloDBDataRepository.class + TypingDataDataRepositoryId.S3, TypingDataS3DataRepository.class ), Map.of( - TypingDataDataRepositoryId.S3, TypingDataS3DataRepositorySpecificData.class, - TypingDataDataRepositoryId.PHYLODB, TypingDataPhyloDBDataRepositorySpecificData.class + TypingDataDataRepositoryId.S3, TypingDataS3DataRepositorySpecificData.class )); } @Bean public IsolateDataDataRepositoryRegistry isolateDataDataRepositoryRegistry(ApplicationContext context) { return new IsolateDataDataRepositoryRegistryImpl(context, Map.of( - IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepository.class, - IsolateDataDataRepositoryId.PHYLODB, IsolateDataPhyloDBDataRepository.class + IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepository.class ), Map.of( - IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepositorySpecificData.class, - IsolateDataDataRepositoryId.PHYLODB, IsolateDataPhyloDBDataRepositorySpecificData.class + IsolateDataDataRepositoryId.S3, IsolateDataS3DataRepositorySpecificData.class )); } @@ -80,22 +69,18 @@ public DistanceMatrixDataRepositoryRegistry distanceMatrixDataRepositoryRegistry @Bean public TreeDataRepositoryRegistry treeDataRepositoryRegistry(ApplicationContext context) { return new TreeDataRepositoryRegistryImpl(context, Map.of( - TreeDataRepositoryId.S3, TreeS3DataRepository.class, - TreeDataRepositoryId.PHYLODB, TreePhyloDBDataRepository.class + TreeDataRepositoryId.S3, TreeS3DataRepository.class ), Map.of( - TreeDataRepositoryId.S3, TreeS3DataRepositorySpecificData.class, - TreeDataRepositoryId.PHYLODB, TreePhyloDBDataRepositorySpecificData.class + TreeDataRepositoryId.S3, TreeS3DataRepositorySpecificData.class )); } @Bean public TreeViewDataRepositoryRegistry treeViewDataRepositoryRegistry(ApplicationContext context) { return new TreeViewDataRepositoryRegistryImpl(context, Map.of( - TreeViewDataRepositoryId.S3, TreeViewS3DataRepository.class, - TreeViewDataRepositoryId.PHYLODB, TreeViewPhyloDBDataRepository.class + TreeViewDataRepositoryId.S3, TreeViewS3DataRepository.class ), Map.of( - TreeViewDataRepositoryId.S3, TreeViewS3DataRepositorySpecificData.class, - TreeViewDataRepositoryId.PHYLODB, TreeViewPhyloDBDataRepositorySpecificData.class + TreeViewDataRepositoryId.S3, TreeViewS3DataRepositorySpecificData.class )); } } diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java index d4828ea8..667f1ec1 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java @@ -18,7 +18,6 @@ import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.converters.TreeViewMetadataSerializer; import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.converters.TypingDataMetadataDeserializer; import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.converters.TypingDataMetadataSerializer; -import org.phyloviz.pwp.shared_phylodb.config.ResourceServerSharedPhylodbConfig; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; @@ -39,7 +38,7 @@ * Configuration class for the Compute Microservice. */ @Configuration -@Import({ResourceServerSharedConfig.class, ResourceServerSharedPhylodbConfig.class}) +@Import({ResourceServerSharedConfig.class}) public class PWPConfig { private final String flowVizUsername; private final String flowVizPassword; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java index 6e0812a9..e90fb1a7 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java @@ -1,12 +1,6 @@ package org.phyloviz.pwp.http.controllers; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.domain.User; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; import org.phyloviz.pwp.http.models.get_tree_view.GetTreeViewOutputModel; import org.phyloviz.pwp.http.models.isolate_data.get_isolate_data_rows.GetIsolateDataRowsOutputModel; import org.phyloviz.pwp.http.models.isolate_data.get_isolate_data_schema.GetIsolateDataKeysOutputModel; @@ -15,6 +9,12 @@ import org.phyloviz.pwp.http.models.typing_data.get_typing_data_profiles.GetTypingDataProfilesOutputModel; import org.phyloviz.pwp.http.models.typing_data.get_typing_data_schema.GetTypingDataSchemaOutputModel; import org.phyloviz.pwp.service.VisualizationService; +import org.phyloviz.pwp.shared.domain.User; +import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; +import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; +import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; import org.springframework.web.bind.annotation.*; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java index 079d3ebd..6374bd29 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java @@ -1,8 +1,8 @@ package org.phyloviz.pwp.http.models.get_tree_view; import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; import org.phyloviz.pwp.http.models.save_tree_view.TransformationsModel; +import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java index 99286656..15d16f04 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java @@ -1,8 +1,8 @@ package org.phyloviz.pwp.http.models.isolate_data.get_isolate_data_rows; import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; import org.phyloviz.pwp.http.models.isolate_data.IsolateDataRowModel; +import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java index 9d6bd808..df2d0f61 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java @@ -1,8 +1,8 @@ package org.phyloviz.pwp.http.models.save_tree_view; import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewInput; import org.phyloviz.pwp.http.models.get_tree_view.NodeModel; +import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewInput; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java index c7f0b26a..fc0eada3 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java @@ -1,8 +1,8 @@ package org.phyloviz.pwp.http.models.typing_data.get_typing_data_profiles; import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; import org.phyloviz.pwp.http.models.typing_data.TypingDataProfileModel; +import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java index 9c48f95e..31a19f74 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java @@ -1,6 +1,7 @@ package org.phyloviz.pwp.service; import lombok.RequiredArgsConstructor; +import org.phyloviz.pwp.service.exceptions.IndexingNeededException; import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixDataRepository; import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; @@ -40,7 +41,6 @@ import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewInput; import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; import org.phyloviz.pwp.shared.service.exceptions.*; -import org.phyloviz.pwp.service.exceptions.IndexingNeededException; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/backend/microservices/pwp/src/main/resources/application.yml b/src/backend/microservices/pwp/src/main/resources/application.yml index e6e2361f..e0e5443d 100644 --- a/src/backend/microservices/pwp/src/main/resources/application.yml +++ b/src/backend/microservices/pwp/src/main/resources/application.yml @@ -17,9 +17,9 @@ data-repositories: get-distance-matrix-repository: S3 get-tree-repository: S3 - get-tree-view-repository: PHYLODB - get-typing-data-repository: PHYLODB - get-isolate-data-repository: PHYLODB + get-tree-view-repository: S3 + get-typing-data-repository: S3 + get-isolate-data-repository: S3 flowviz: url: http://localhost:3000/flowapi diff --git a/src/backend/microservices/shared-phylodb/build.gradle b/src/backend/microservices/shared-phylodb/build.gradle deleted file mode 100644 index fb79c9ca..00000000 --- a/src/backend/microservices/shared-phylodb/build.gradle +++ /dev/null @@ -1,36 +0,0 @@ -plugins { - id 'java-library' - id 'org.springframework.boot' version '3.0.4' - id 'io.spring.dependency-management' version '1.1.0' - id "io.freefair.lombok" version "8.0.0-rc2" -} - -group 'phylovizwebplatform' -version '0.0.1-SNAPSHOT' -sourceCompatibility = '17' - -repositories { - mavenCentral() -} - -dependencies { - implementation project(path: ':microservices:shared') - - implementation files('libs/phylodb-1.0.0.jar') - implementation 'org.springframework.boot:spring-boot-starter-data-neo4j' - - implementation 'org.springframework.boot:spring-boot-starter-web' - testImplementation 'org.springframework.boot:spring-boot-starter-test' -} - -test { - useJUnitPlatform() -} - -bootJar { - enabled = false -} - -jar { - enabled = true -} \ No newline at end of file diff --git a/src/backend/microservices/shared-phylodb/libs/phylodb-1.0.0.jar b/src/backend/microservices/shared-phylodb/libs/phylodb-1.0.0.jar deleted file mode 100644 index d668385cc6bec79e43f0566e907d77b86936a9a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273217 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 Uz1AMHhxqUDFicJ!K)s^-f2L{N`~Uy| diff --git a/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/config/ResourceServerSharedPhylodbConfig.java b/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/config/ResourceServerSharedPhylodbConfig.java deleted file mode 100644 index aba141d9..00000000 --- a/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/config/ResourceServerSharedPhylodbConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.phyloviz.pwp.shared_phylodb.config; - -import org.phyloviz.pwp.shared.config.ResourceServerSharedConfig; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; - -@Configuration -@Import({ResourceServerSharedConfig.class}) -@ComponentScan(basePackages = {"org.phyloviz.pwp.shared_phylodb", "pt.ist.meic.phylodb"}) -public class ResourceServerSharedPhylodbConfig { - -} \ No newline at end of file diff --git a/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/isolate_data/IsolateDataPhyloDBDataRepository.java b/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/isolate_data/IsolateDataPhyloDBDataRepository.java deleted file mode 100644 index ef2ca087..00000000 --- a/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/isolate_data/IsolateDataPhyloDBDataRepository.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.isolate_data; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataPhyloDBDataRepositorySpecificData; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.IsolateDataRow; -import org.springframework.stereotype.Repository; -import org.springframework.web.multipart.MultipartFile; -import pt.ist.meic.phylodb.typing.isolate.IsolateRepository; -import pt.ist.meic.phylodb.typing.isolate.model.Ancillary; -import pt.ist.meic.phylodb.typing.isolate.model.Isolate; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -@Repository -@RequiredArgsConstructor -public class IsolateDataPhyloDBDataRepository implements IsolateDataDataRepository { - private final IsolateRepository isolateRepository; - - @Override - public IsolateDataDataRepositorySpecificData uploadIsolateData(String projectId, String isolateDataId, MultipartFile multipartFile) { - throw new UnsupportedOperationException("Not supported."); - } - - @Override - public String downloadIsolateData(IsolateDataDataRepositorySpecificData isolateDataDataRepositorySpecificData) { - throw new UnsupportedOperationException("Not supported."); - } - - @Override - public GetIsolateDataRowsOutput getIsolateDataRows(IsolateDataDataRepositorySpecificData isolateDataDataRepositorySpecificData, int limit, int offset) { - IsolateDataPhyloDBDataRepositorySpecificData repositorySpecificData = - (IsolateDataPhyloDBDataRepositorySpecificData) isolateDataDataRepositorySpecificData; - - List isolates = isolateRepository.findAll( - offset, - limit, - repositorySpecificData.getProjectId(), - repositorySpecificData.getDatasetIds().get(0) - ).orElseThrow(() -> new RuntimeException("Isolates not found in PhyloDB")); - - return new GetIsolateDataRowsOutput( - isolates.stream() - .filter(isolate -> isolate.getProfile() != null) - .map(isolate -> new IsolateDataRow( - isolate.getPrimaryKey().getId(), - isolate.getProfile().getPrimaryKey().getId(), - Arrays.stream(isolate.getAncillaries()).collect( - Collectors.toMap(Ancillary::getKey, Ancillary::getValue) - ) - ) - ).toList(), - isolates.size() - ); - } - - @Override - public void deleteIsolateData(IsolateDataDataRepositorySpecificData isolateDataDataRepositorySpecificData) { - // throw new UnsupportedOperationException("Not implemented yet."); TODO: implement - } -} diff --git a/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/tree/TreePhyloDBDataRepository.java b/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/tree/TreePhyloDBDataRepository.java deleted file mode 100644 index 73006f7f..00000000 --- a/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/tree/TreePhyloDBDataRepository.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.tree; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; -import org.springframework.stereotype.Repository; -import pt.ist.meic.phylodb.analysis.inference.InferenceService; - -@Repository -@RequiredArgsConstructor -public class TreePhyloDBDataRepository implements TreeDataRepository { - private final InferenceService inferenceService; - - @Override - public String getTree(TreeDataRepositorySpecificData treeDataRepositorySpecificData) { - throw new UnsupportedOperationException("Not implemented yet"); - } - - @Override - public void deleteTree(TreeDataRepositorySpecificData treeDataRepositorySpecificData) { - // throw new UnsupportedOperationException("Not implemented yet."); TODO: implement - } -} diff --git a/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/tree_view/TreeViewPhyloDBDataRepository.java b/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/tree_view/TreeViewPhyloDBDataRepository.java deleted file mode 100644 index 2c0c808a..00000000 --- a/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/tree_view/TreeViewPhyloDBDataRepository.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.tree_view; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewPhyloDBDataRepositorySpecificData; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Edge; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Node; -import org.springframework.stereotype.Repository; -import pt.ist.meic.phylodb.analysis.inference.InferenceService; -import pt.ist.meic.phylodb.analysis.inference.model.Inference; -import pt.ist.meic.phylodb.analysis.visualization.VisualizationRepository; -import pt.ist.meic.phylodb.analysis.visualization.VisualizationService; -import pt.ist.meic.phylodb.analysis.visualization.model.Visualization; -import pt.ist.meic.phylodb.typing.profile.ProfileRepository; -import pt.ist.meic.phylodb.typing.profile.model.Profile; - -import java.util.HashMap; -import java.util.List; - -@Repository -@RequiredArgsConstructor -public class TreeViewPhyloDBDataRepository implements TreeViewDataRepository { - - private final VisualizationService visualizationService; - private final InferenceService inferenceService; - private final ProfileRepository profileRepository; - private final VisualizationRepository visualizationRepository; - - @Override - public GetTreeViewOutput getTreeView(TreeViewDataRepositorySpecificData treeViewDataRepositorySpecificData) { - TreeViewPhyloDBDataRepositorySpecificData repositorySpecificData = - (TreeViewPhyloDBDataRepositorySpecificData) treeViewDataRepositorySpecificData; - - Inference inference = inferenceService.getInference( - repositorySpecificData.getProjectId(), - repositorySpecificData.getDatasetId(), - repositorySpecificData.getInferenceId() - ).orElseThrow(() -> new RuntimeException("Inference not found in PhyloDB")); - - Visualization visualization = visualizationService.getVisualization( - repositorySpecificData.getProjectId(), - repositorySpecificData.getDatasetId(), - repositorySpecificData.getInferenceId(), - repositorySpecificData.getVisualizationId() - ).orElseThrow(() -> new RuntimeException("Visualization not found in PhyloDB")); - - List edges = inference.getEdges().stream().map(edge -> new Edge( - edge.getFrom().getPrimaryKey().getId(), - edge.getTo().getPrimaryKey().getId(), - edge.getWeight() - )).toList(); - - List profiles = profileRepository.findAll( - 0, - Integer.MAX_VALUE, - repositorySpecificData.getProjectId(), - repositorySpecificData.getDatasetId() - ).orElseThrow(() -> new RuntimeException("Profiles not found in PhyloDB")); - - HashMap profilesMap = new HashMap<>(); - - profiles.forEach(profile -> profilesMap.put(profile.getPrimaryKey().getId(), profile)); - - List nodes = visualization.getCoordinates().stream().map(coordinate -> { - Profile.PrimaryKey profileKey = coordinate.getProfile(); - - Profile profile = profilesMap.get(profileKey.getId()); - - return new Node( - profileKey.getId(), - new double[]{coordinate.getX(), coordinate.getY()}, - profile.getAllelesReferences().stream().map(alleleReference -> - alleleReference.getPrimaryKey().getId() - ).toList() // TODO add ancillary data - ); - }).toList(); - - return new GetTreeViewOutput( - nodes, - nodes.size(), - edges, - edges.size(), - null - ); - } - - @Override - public void saveTreeView(TreeViewDataRepositorySpecificData treeViewDataRepositorySpecificData, List nodes) { - // TODO implement save visualization in PhyloDB - - /*TreeViewPhyloDBDataRepositorySpecificData repositorySpecificData = - (TreeViewPhyloDBDataRepositorySpecificData) treeViewDataRepositorySpecificData; - - Visualization visualization = visualizationService.getVisualization( - repositorySpecificData.getProjectId(), - repositorySpecificData.getDatasetId(), - repositorySpecificData.getInferenceId(), - repositorySpecificData.getVisualizationId() - ).orElseThrow(() -> new RuntimeException("Visualization not found in PhyloDB")); - - List newCoordinates = nodes.stream().map(node -> new Coordinate( - new Profile.PrimaryKey( - repositorySpecificData.getProjectId(), - repositorySpecificData.getDatasetId(), - node.getSt() - ), - 0, - node.getCoordinates()[0], - node.getCoordinates()[1] - )).toList(); - - visualizationRepository.save(new Visualization( - visualization.getPrimaryKey().getProjectId(), - visualization.getPrimaryKey().getDatasetId(), - visualization.getPrimaryKey().getInferenceId(), - visualization.getPrimaryKey().getId(), - visualization.isDeprecated(), - visualization.getAlgorithm(), - newCoordinates - ));*/ - } - - @Override - public void deleteTreeView(TreeViewDataRepositorySpecificData treeViewDataRepositorySpecificData) { - // throw new UnsupportedOperationException("Not implemented yet."); // TODO: Implement - } -} diff --git a/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/typing_data/TypingDataPhyloDBDataRepository.java b/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/typing_data/TypingDataPhyloDBDataRepository.java deleted file mode 100644 index aeb88ffd..00000000 --- a/src/backend/microservices/shared-phylodb/src/main/java/org/phyloviz/pwp/shared_phylodb/repository/data/phylodb/typing_data/TypingDataPhyloDBDataRepository.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.phyloviz.pwp.shared_phylodb.repository.data.phylodb.typing_data; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataPhyloDBDataRepositorySpecificData; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.TypingDataProfile; -import org.springframework.stereotype.Repository; -import org.springframework.web.multipart.MultipartFile; -import pt.ist.meic.phylodb.typing.dataset.model.Dataset; -import pt.ist.meic.phylodb.typing.profile.ProfileRepository; -import pt.ist.meic.phylodb.typing.profile.model.Profile; -import pt.ist.meic.phylodb.typing.schema.SchemaRepository; -import pt.ist.meic.phylodb.typing.schema.model.Schema; - -import java.util.List; - -@Repository -@RequiredArgsConstructor -public class TypingDataPhyloDBDataRepository implements TypingDataDataRepository { - private final ProfileRepository profileRepository; - private final SchemaRepository schemaRepository; - - @Override - public TypingDataDataRepositorySpecificData uploadTypingData(String projectId, String typingDataId, MultipartFile multipartFile) { - throw new UnsupportedOperationException("Not supported."); - } - - @Override - public String downloadTypingData(TypingDataDataRepositorySpecificData typingDataDataRepositorySpecificData) { - throw new UnsupportedOperationException("Not supported."); - } - - @Override - public GetTypingDataSchemaOutput getTypingDataSchema(TypingDataDataRepositorySpecificData typingDataDataRepositorySpecificData) { - TypingDataPhyloDBDataRepositorySpecificData repositorySpecificData = - (TypingDataPhyloDBDataRepositorySpecificData) typingDataDataRepositorySpecificData; - - Schema schema = schemaRepository.find(new Dataset.PrimaryKey( - repositorySpecificData.getProjectId(), - repositorySpecificData.getDatasetIds().get(0)) - ).orElseThrow(() -> new RuntimeException("Schema not found in PhyloDB")); - - return new GetTypingDataSchemaOutput( - schema.getType().getName(), - schema.getLociIds() - ); - } - - @Override - public GetTypingDataProfilesOutput getTypingDataProfiles(TypingDataDataRepositorySpecificData typingDataDataRepositorySpecificData, int limit, int offset) { - TypingDataPhyloDBDataRepositorySpecificData repositorySpecificData = - (TypingDataPhyloDBDataRepositorySpecificData) typingDataDataRepositorySpecificData; - - List profiles = profileRepository.findAll( - offset, - limit, - repositorySpecificData.getProjectId(), - repositorySpecificData.getDatasetIds().get(0) - ).orElseThrow(() -> new RuntimeException("Profiles not found in PhyloDB")); - - return new GetTypingDataProfilesOutput( - profiles.stream().map(profile -> new TypingDataProfile( - profile.getPrimaryKey().getId(), - profile.getAllelesReferences().stream().map(alleleReference -> - alleleReference.getPrimaryKey().getId() - ).toList() - ) - ).toList(), - profiles.size() - ); - } - - @Override - public void deleteTypingData(TypingDataDataRepositorySpecificData typingDataDataRepositorySpecificData) { - // throw new UnsupportedOperationException("Not implemented yet."); TODO: implement - } -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/MongoConfig.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/MongoConfig.java index 38946db5..537d9de2 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/MongoConfig.java +++ b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/MongoConfig.java @@ -19,12 +19,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.convert.converter.Converter; import org.springframework.data.mongodb.MongoDatabaseFactory; -import org.springframework.data.mongodb.core.convert.DbRefResolver; -import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; -import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper; -import org.springframework.data.mongodb.core.convert.MappingMongoConverter; -import org.springframework.data.mongodb.core.convert.MongoConverter; -import org.springframework.data.mongodb.core.convert.MongoCustomConversions; +import org.springframework.data.mongodb.core.convert.*; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java index 4220d207..5e0dc202 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java +++ b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java @@ -4,16 +4,7 @@ import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.exc.IgnoredPropertyException; import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException; -import org.phyloviz.pwp.shared.service.exceptions.DatasetNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.DistanceMatrixNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.FileCorruptedException; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.IsolateDataNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TreeNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TreeViewNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TypingDataNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.UnauthorizedException; +import org.phyloviz.pwp.shared.service.exceptions.*; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; diff --git a/src/backend/microservices/shared/src/main/resources/application-shared.yml b/src/backend/microservices/shared/src/main/resources/application-shared.yml index ac37e9b5..7b494a47 100644 --- a/src/backend/microservices/shared/src/main/resources/application-shared.yml +++ b/src/backend/microservices/shared/src/main/resources/application-shared.yml @@ -1,10 +1,9 @@ s3: - access-key-id: SETUP - secret-access-key: SETUP + access-key-id: AKIATCKANASTL7VVHAEK + secret-access-key: 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 bucket: phyloviz-web-platform region: eu-west-3 - endpoint: SETUP - + endpoint: https://s3.eu-west-3.amazonaws.com spring: data: diff --git a/src/backend/microservices/visualization/Dockerfile b/src/backend/microservices/visualization/Dockerfile deleted file mode 100644 index c0ff91c6..00000000 --- a/src/backend/microservices/visualization/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM openjdk:17-jdk-alpine -COPY build/libs/visualization-0.0.1-SNAPSHOT.jar /app.jar - -ENTRYPOINT ["java", "-jar", "/app.jar"] \ No newline at end of file diff --git a/src/backend/microservices/visualization/build.gradle b/src/backend/microservices/visualization/build.gradle deleted file mode 100644 index b2bd2bac..00000000 --- a/src/backend/microservices/visualization/build.gradle +++ /dev/null @@ -1,41 +0,0 @@ -plugins { - id 'application' - id 'org.springframework.boot' version '3.0.4' - id 'io.spring.dependency-management' version '1.1.0' - id "io.freefair.lombok" version "8.0.0-rc2" -} - -group 'phylovizwebplatform' -version '0.0.1-SNAPSHOT' -sourceCompatibility = '17' - -ext { - set('jupiterVersion', "5.8.1") -} - -repositories { - mavenCentral() -} - -dependencies { - implementation project(path: ':microservices:shared-phylodb') - implementation project(path: ':microservices:shared') - - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'org.junit.jupiter:junit-jupiter-api' version { jupiterVersion } - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' version { jupiterVersion } - - implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' - implementation 'org.springframework.boot:spring-boot-starter-actuator' - - implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2' - implementation 'org.zalando:problem-spring-web-starter:0.27.0' - - implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.6' -} - -test { - useJUnitPlatform() -} \ No newline at end of file diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/VisualizationMicroserviceApplication.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/VisualizationMicroserviceApplication.java deleted file mode 100644 index d2355e57..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/VisualizationMicroserviceApplication.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.phyloviz.pwp.visualization; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * Main class for the Visualization Microservice of the PHYLOViZ Web Platform. - */ -@SpringBootApplication -public class VisualizationMicroserviceApplication { - - - /** - * Entry point for the Visualization Microservice. - * - * @param args arguments passed to the application - */ - public static void main(String[] args) { - SpringApplication.run(VisualizationMicroserviceApplication.class, args); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/config/VisualizationConfig.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/config/VisualizationConfig.java deleted file mode 100644 index 20d26e33..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/config/VisualizationConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.phyloviz.pwp.visualization.config; - -import org.phyloviz.pwp.shared.config.ResourceServerSharedConfig; -import org.phyloviz.pwp.shared_phylodb.config.ResourceServerSharedPhylodbConfig; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; - -/** - * Configuration class for the Visualization Microservice. - */ -@Configuration -@Import({ResourceServerSharedConfig.class, ResourceServerSharedPhylodbConfig.class}) -public class VisualizationConfig { -} \ No newline at end of file diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/controllers/VisualizationController.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/controllers/VisualizationController.java deleted file mode 100644 index 3b463a0a..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/controllers/VisualizationController.java +++ /dev/null @@ -1,211 +0,0 @@ -package org.phyloviz.pwp.visualization.http.controllers; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.domain.User; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; -import org.phyloviz.pwp.visualization.http.models.get_tree_view.GetTreeViewOutputModel; -import org.phyloviz.pwp.visualization.http.models.isolate_data.get_isolate_data_rows.GetIsolateDataRowsOutputModel; -import org.phyloviz.pwp.visualization.http.models.isolate_data.get_isolate_data_schema.GetIsolateDataKeysOutputModel; -import org.phyloviz.pwp.visualization.http.models.save_tree_view.SaveTreeViewInputModel; -import org.phyloviz.pwp.visualization.http.models.save_tree_view.SaveTreeViewOutputModel; -import org.phyloviz.pwp.visualization.http.models.typing_data.get_typing_data_profiles.GetTypingDataProfilesOutputModel; -import org.phyloviz.pwp.visualization.http.models.typing_data.get_typing_data_schema.GetTypingDataSchemaOutputModel; -import org.phyloviz.pwp.visualization.service.VisualizationService; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -/** - * Controller for the Visualization Microservice. - */ -@RestController -@RequiredArgsConstructor -public class VisualizationController { - - private final VisualizationService visualizationService; - - /** - * Gets a distance matrix. - * - * @param projectId the id of the project - * @param datasetId the id of the dataset - * @param distanceMatrixId the id of the distance matrix - * @param user the user - * @return the distance matrix in string - */ - @GetMapping("/projects/{projectId}/datasets/{datasetId}/distance-matrices/{distanceMatrixId}") - public String getDistanceMatrix( - @PathVariable String projectId, - @PathVariable String datasetId, - @PathVariable String distanceMatrixId, - User user - ) { - return visualizationService.getDistanceMatrix(projectId, datasetId, distanceMatrixId, user.getId()); - } - - /** - * Gets a tree. - * - * @param projectId the id of the project - * @param datasetId the id of the dataset - * @param treeId the id of the tree - * @param user the user - * @return the tree in newick string format - */ - @GetMapping("/projects/{projectId}/datasets/{datasetId}/trees/{treeId}") - public String getTree( - @PathVariable String projectId, - @PathVariable String datasetId, - @PathVariable String treeId, - User user - ) { - return visualizationService.getTree(projectId, datasetId, treeId, user.getId()); - } - - /** - * Gets a tree view. - * - * @param projectId the id of the project - * @param datasetId the id of the dataset - * @param treeViewId the id of the tree view - * @param user the user - * @return the tree view - */ - @GetMapping("/projects/{projectId}/datasets/{datasetId}/tree-views/{treeViewId}") - public GetTreeViewOutputModel getTreeView( - @PathVariable String projectId, - @PathVariable String datasetId, - @PathVariable String treeViewId, - User user - ) { - GetTreeViewOutput getTreeViewOutput = visualizationService.getTreeView(projectId, datasetId, treeViewId, user.getId()); - - return new GetTreeViewOutputModel(getTreeViewOutput); - } - - /** - * Saves a tree view coordinates and applied transformations. - * - * @param projectId the id of the project - * @param datasetId the id of the dataset - * @param treeViewId the id of the tree view - * @param inputModel the input model - * @param user the user - * @return the tree view - */ - @PostMapping("/projects/{projectId}/datasets/{datasetId}/tree-views/{treeViewId}") - public SaveTreeViewOutputModel saveTreeView( - @PathVariable String projectId, - @PathVariable String datasetId, - @PathVariable String treeViewId, - @RequestBody SaveTreeViewInputModel inputModel, - User user - ) { - SaveTreeViewOutput saveTreeViewOutput = visualizationService.saveTreeView( - projectId, datasetId, treeViewId, - inputModel.toDto(), user.getId()); - - return new SaveTreeViewOutputModel(saveTreeViewOutput); - } - - /** - * Gets a typing data's schema. - * - * @param projectId the id of the project - * @param typingDataId the id of the typing data - * @param user the user - * @return the typing data schema - */ - @GetMapping("/projects/{projectId}/files/typing-data/{typingDataId}/schema") - public GetTypingDataSchemaOutputModel getTypingDataSchema( - @PathVariable String projectId, - @PathVariable String typingDataId, - User user - ) { - GetTypingDataSchemaOutput getTypingDataSchemaOutput = visualizationService.getTypingDataSchema( - projectId, typingDataId, user.getId() - ); - - return new GetTypingDataSchemaOutputModel(getTypingDataSchemaOutput); - } - - /** - * Gets a typing data's profiles, with pagination. - * - * @param projectId the id of the project - * @param typingDataId the id of the typing data - * @param limit the limit of profiles to return - * @param offset the offset of profiles to return - * @param user the user - * @return the typing data's profiles - */ - @GetMapping("/projects/{projectId}/files/typing-data/{typingDataId}/profiles") - public GetTypingDataProfilesOutputModel getTypingDataProfiles( - @PathVariable String projectId, - @PathVariable String typingDataId, - @RequestParam int limit, - @RequestParam int offset, - User user - ) { - GetTypingDataProfilesOutput getTypingDataProfilesOutput = visualizationService.getTypingDataProfiles( - projectId, typingDataId, limit, offset, user.getId() - ); - - return new GetTypingDataProfilesOutputModel(getTypingDataProfilesOutput); - } - - /** - * Gets the keys of an isolate data. - * - * @param projectId the id of the project - * @param isolateDataId the id of the isolate data - * @param user the user - * @return the isolate data keys - */ - @GetMapping("/projects/{projectId}/files/isolate-data/{isolateDataId}/keys") - public GetIsolateDataKeysOutputModel getIsolateDataKeys( - @PathVariable String projectId, - @PathVariable String isolateDataId, - User user - ) { - List keys = visualizationService.getIsolateDataKeys( - projectId, isolateDataId, user.getId() - ); - - return new GetIsolateDataKeysOutputModel(keys); - } - - /** - * Gets the rows of an isolate data, with pagination. - * - * @param projectId the id of the project - * @param isolateDataId the id of the isolate data - * @param limit the limit of rows to return - * @param offset the offset of rows to return - * @param user the user - * @return the isolate data rows - */ - @GetMapping("/projects/{projectId}/files/isolate-data/{isolateDataId}/rows") - public GetIsolateDataRowsOutputModel getIsolateDataRows( - @PathVariable String projectId, - @PathVariable String isolateDataId, - @RequestParam int limit, - @RequestParam int offset, - User user - ) { - GetIsolateDataRowsOutput getIsolateDataRowsOutput = visualizationService.getIsolateDataRows( - projectId, isolateDataId, limit, offset, user.getId() - ); - - return new GetIsolateDataRowsOutputModel(getIsolateDataRowsOutput); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/get_tree_view/EdgeModel.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/get_tree_view/EdgeModel.java deleted file mode 100644 index 9ccf3983..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/get_tree_view/EdgeModel.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.phyloviz.pwp.visualization.http.models.get_tree_view; - -import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Edge; - -@Data -public class EdgeModel { - private String from; - private String to; - private long weight; - - public EdgeModel(Edge edge) { - this.from = edge.getFrom(); - this.to = edge.getTo(); - this.weight = edge.getWeight(); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/get_tree_view/GetTreeViewOutputModel.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/get_tree_view/GetTreeViewOutputModel.java deleted file mode 100644 index 87e47962..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/get_tree_view/GetTreeViewOutputModel.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.phyloviz.pwp.visualization.http.models.get_tree_view; - -import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; -import org.phyloviz.pwp.visualization.http.models.save_tree_view.TransformationsModel; - -import java.util.List; - -/** - * Output model for the get tree view endpoint. - */ -@Data -public class GetTreeViewOutputModel { - private List nodes; - private int nodesTotalCount; - private List edges; - private int edgesTotalCount; - private TransformationsModel transformations; - - public GetTreeViewOutputModel(GetTreeViewOutput getTreeViewOutput) { - this.nodes = getTreeViewOutput.getNodes().stream().map(NodeModel::new).toList(); - this.nodesTotalCount = getTreeViewOutput.getNodesTotalCount(); - this.edges = getTreeViewOutput.getEdges().stream().map(EdgeModel::new).toList(); - this.edgesTotalCount = getTreeViewOutput.getEdgesTotalCount(); - this.transformations = getTreeViewOutput.getTransformations() != null ? - new TransformationsModel(getTreeViewOutput.getTransformations()) - : null; - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/get_tree_view/NodeModel.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/get_tree_view/NodeModel.java deleted file mode 100644 index 567a9e06..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/get_tree_view/NodeModel.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.phyloviz.pwp.visualization.http.models.get_tree_view; - -import lombok.Data; -import lombok.NoArgsConstructor; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Node; - -import java.util.List; - -/** - * Model for a tree node. - */ -@Data -@NoArgsConstructor -public class NodeModel { - private String st; - private double[] coordinates; - private List profile; - - public NodeModel(Node node) { - this.st = node.getSt(); - this.coordinates = node.getCoordinates(); - this.profile = node.getProfile(); - } - - public Node toDto() { - return new Node(st, coordinates, profile); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/isolate_data/IsolateDataRowModel.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/isolate_data/IsolateDataRowModel.java deleted file mode 100644 index 8001aaa2..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/isolate_data/IsolateDataRowModel.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.phyloviz.pwp.visualization.http.models.isolate_data; - -import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.IsolateDataRow; - -import java.util.Map; - -/** - * Model for the isolate data. - */ -@Data -public class IsolateDataRowModel { - private String id; - private String profileId; - private Map row; - - public IsolateDataRowModel(IsolateDataRow isolateDataRow) { - this.id = isolateDataRow.getId(); - this.profileId = isolateDataRow.getProfileId(); - this.row = isolateDataRow.getRow(); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java deleted file mode 100644 index d21d02e1..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.phyloviz.pwp.visualization.http.models.isolate_data.get_isolate_data_rows; - -import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; -import org.phyloviz.pwp.visualization.http.models.isolate_data.IsolateDataRowModel; - -import java.util.List; - -@Data -public class GetIsolateDataRowsOutputModel { - private List rows; - private int totalCount; - - public GetIsolateDataRowsOutputModel(GetIsolateDataRowsOutput getIsolateDataRowsOutput) { - this.rows = getIsolateDataRowsOutput.getRows().stream().map(IsolateDataRowModel::new).toList(); - this.totalCount = getIsolateDataRowsOutput.getTotalCount(); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java deleted file mode 100644 index 9aebf598..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.phyloviz.pwp.visualization.http.models.isolate_data.get_isolate_data_schema; - -import lombok.Data; - -import java.util.List; - -/** - * Output model for the GetIsolateDataKeys endpoint. - */ -@Data -public class GetIsolateDataKeysOutputModel { - private final List keys; -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/save_tree_view/SaveTreeViewInputModel.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/save_tree_view/SaveTreeViewInputModel.java deleted file mode 100644 index 8d15dbc0..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/save_tree_view/SaveTreeViewInputModel.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.phyloviz.pwp.visualization.http.models.save_tree_view; - -import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewInput; -import org.phyloviz.pwp.visualization.http.models.get_tree_view.NodeModel; - -import java.util.List; - -/** - * Input model for the save tree view endpoint. - */ -@Data -public class SaveTreeViewInputModel { - private List nodes; - private TransformationsModel transformations; - - public SaveTreeViewInput toDto() { - return new SaveTreeViewInput(nodes.stream().map(NodeModel::toDto).toList(), transformations.toDto()); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/save_tree_view/SaveTreeViewOutputModel.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/save_tree_view/SaveTreeViewOutputModel.java deleted file mode 100644 index d2831e01..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/save_tree_view/SaveTreeViewOutputModel.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.phyloviz.pwp.visualization.http.models.save_tree_view; - -import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; - -/** - * Output model for the save tree view endpoint. - */ -@Data -public class SaveTreeViewOutputModel { - private String projectId; - private String datasetId; - private String treeViewId; - - public SaveTreeViewOutputModel(SaveTreeViewOutput saveTreeViewOutput) { - this.projectId = saveTreeViewOutput.getProjectId(); - this.datasetId = saveTreeViewOutput.getDatasetId(); - this.treeViewId = saveTreeViewOutput.getTreeViewId(); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/save_tree_view/TransformationsModel.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/save_tree_view/TransformationsModel.java deleted file mode 100644 index 22f87364..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/save_tree_view/TransformationsModel.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.phyloviz.pwp.visualization.http.models.save_tree_view; - -import lombok.Data; -import lombok.NoArgsConstructor; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Transformations; - -/** - * Transformations model for the Tree View. - */ -@Data -@NoArgsConstructor -public class TransformationsModel { - private double linkSpring; - private double linkDistance; - private double gravity; - private double repulsion; - private double friction; - private double repulsionTheta; - private double decay; - private double nodeSize; - private boolean nodeLabel; - private double nodeLabelSize; - private double linkWidth; - private boolean linkLabel; - private double linkLabelSize; - private String linkLabelType; - - public TransformationsModel(Transformations transformations) { - this.linkSpring = transformations.getLinkSpring(); - this.linkDistance = transformations.getLinkDistance(); - this.gravity = transformations.getGravity(); - this.repulsion = transformations.getRepulsion(); - this.friction = transformations.getFriction(); - this.repulsionTheta = transformations.getRepulsionTheta(); - this.decay = transformations.getDecay(); - this.nodeSize = transformations.getNodeSize(); - this.nodeLabel = transformations.isNodeLabel(); - this.nodeLabelSize = transformations.getNodeLabelSize(); - this.linkWidth = transformations.getLinkWidth(); - this.linkLabel = transformations.isLinkLabel(); - this.linkLabelSize = transformations.getLinkLabelSize(); - this.linkLabelType = transformations.getLinkLabelType(); - } - - public Transformations toDto() { - return new Transformations(linkSpring, linkDistance, gravity, repulsion, friction, repulsionTheta, decay, - nodeSize, nodeLabel, nodeLabelSize, linkWidth, linkLabel, linkLabelSize, linkLabelType); - } -} \ No newline at end of file diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/typing_data/TypingDataProfileModel.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/typing_data/TypingDataProfileModel.java deleted file mode 100644 index be518b4b..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/typing_data/TypingDataProfileModel.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.phyloviz.pwp.visualization.http.models.typing_data; - -import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.TypingDataProfile; - -import java.util.List; - -/** - * Model for a profile. - */ -@Data -public class TypingDataProfileModel { - private String id; - private List profile; - - public TypingDataProfileModel(TypingDataProfile typingDataProfile) { - this.id = typingDataProfile.getId(); - this.profile = typingDataProfile.getProfile().stream().toList(); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java deleted file mode 100644 index 889668b6..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.phyloviz.pwp.visualization.http.models.typing_data.get_typing_data_profiles; - -import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; -import org.phyloviz.pwp.visualization.http.models.typing_data.TypingDataProfileModel; - -import java.util.List; - -/** - * Output model for the get typing data profiles endpoint. - */ -@Data -public class GetTypingDataProfilesOutputModel { - private List profiles; - private int totalCount; - - public GetTypingDataProfilesOutputModel(GetTypingDataProfilesOutput getTypingDataProfilesOutput) { - this.profiles = getTypingDataProfilesOutput.getProfiles().stream().map(TypingDataProfileModel::new).toList(); - this.totalCount = getTypingDataProfilesOutput.getTotalCount(); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java deleted file mode 100644 index 50138588..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.phyloviz.pwp.visualization.http.models.typing_data.get_typing_data_schema; - -import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; - -import java.util.List; - -/** - * Output model for the get typing data profiles endpoint. - */ -@Data -public class GetTypingDataSchemaOutputModel { - private final String type; - private final List loci; - - public GetTypingDataSchemaOutputModel(GetTypingDataSchemaOutput getTypingDataSchemaOutput) { - this.type = getTypingDataSchemaOutput.getType(); - this.loci = getTypingDataSchemaOutput.getLoci(); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/pipeline/VisualizationExceptionHandler.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/pipeline/VisualizationExceptionHandler.java deleted file mode 100644 index 7ff089c9..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/http/pipeline/VisualizationExceptionHandler.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.phyloviz.pwp.visualization.http.pipeline; - -import org.phyloviz.pwp.visualization.service.exceptions.IndexingNeededException; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; -import org.zalando.problem.Problem; -import org.zalando.problem.Status; - -@RestControllerAdvice -public class VisualizationExceptionHandler { - - /** - * Handles Indexing Needed Exceptions. - * - * @param e the exception - * @return a Problem with the status Bad Request - */ - @ExceptionHandler(value = { - IndexingNeededException.class - }) - public Problem handleIndexingNeededException(Exception e) { - return Problem.builder() - .withTitle("Indexing Needed") - .withDetail(e.getMessage()) - .withStatus(Status.BAD_REQUEST) - .build(); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/service/VisualizationService.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/service/VisualizationService.java deleted file mode 100644 index 9423fe48..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/service/VisualizationService.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.phyloviz.pwp.visualization.service; - -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewInput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; - -import java.util.List; - -/** - * Service for the Visualization Microservice. - */ -public interface VisualizationService { - - /** - * Gets a distance matrix. - * - * @param projectId the id of the project - * @param datasetId the id of the dataset - * @param distanceMatrixId the id of the distance matrix - * @param userId the id of the user - * @return the distance matrix in string - */ - String getDistanceMatrix(String projectId, String datasetId, String distanceMatrixId, String userId); - - /** - * Gets a tree. - * - * @param projectId the id of the project - * @param datasetId the id of the dataset - * @param treeId the id of the tree - * @param userId the id of the user - * @return the tree in newick string format - */ - String getTree(String projectId, String datasetId, String treeId, String userId); - - /** - * Gets a tree view. - * - * @param projectId the id of the project - * @param datasetId the id of the dataset - * @param treeViewId the id of the tree view - * @param userId the id of the user - * @return the tree view - */ - GetTreeViewOutput getTreeView(String projectId, String datasetId, String treeViewId, String userId); - - /** - * Saves a tree view coordinates and applied transformations. - * - * @param projectId the id of the project - * @param datasetId the id of the dataset - * @param treeViewId the id of the tree view - * @param inputModel the input model - * @param userId the id of the user - * @return the tree view - */ - SaveTreeViewOutput saveTreeView(String projectId, String datasetId, String treeViewId, SaveTreeViewInput inputModel, - String userId); - - /** - * Gets a typing data's schema. - * - * @param projectId the id of the project - * @param typingDataId the id of the typing data - * @param userId the id of the user - * @return the typing data schema - */ - GetTypingDataSchemaOutput getTypingDataSchema(String projectId, String typingDataId, String userId); - - /** - * Gets a typing data's profiles, with pagination. - * - * @param projectId the id of the project - * @param typingDataId the id of the typing data - * @param limit the limit of the profiles - * @param offset the offset of the profiles - * @param userId the id of the user - * @return the typing data profiles - */ - GetTypingDataProfilesOutput getTypingDataProfiles(String projectId, String typingDataId, int limit, int offset, - String userId); - - /** - * Gets the keys of an isolate data. - * - * @param projectId the id of the project - * @param isolateDataId the id of the isolate data - * @param userId the id of the user - * @return the isolate data keys - */ - List getIsolateDataKeys(String projectId, String isolateDataId, String userId); - - /** - * Gets the rows of an isolate data, with pagination. - * - * @param projectId the id of the project - * @param isolateDataId the id of the isolate data - * @param limit the limit of the rows - * @param offset the offset of the rows - * @param userId the id of the user - * @return the isolate data rows - */ - GetIsolateDataRowsOutput getIsolateDataRows(String projectId, String isolateDataId, int limit, int offset, - String userId); -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/service/VisualizationServiceImpl.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/service/VisualizationServiceImpl.java deleted file mode 100644 index 59e88352..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/service/VisualizationServiceImpl.java +++ /dev/null @@ -1,276 +0,0 @@ -package org.phyloviz.pwp.visualization.service; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixDataRepository; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.DistanceMatrixMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree.TreeMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.TreeMetadata; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.TreeViewMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.TreeViewMetadata; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.TypingDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewInput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; -import org.phyloviz.pwp.shared.service.exceptions.DatasetNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.DistanceMatrixNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.IsolateDataNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TreeNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TreeViewNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TypingDataNotFoundException; -import org.phyloviz.pwp.visualization.service.exceptions.IndexingNeededException; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -@Transactional -@RequiredArgsConstructor -public class VisualizationServiceImpl implements VisualizationService { - - private final ProjectRepository projectRepository; - private final DatasetRepository datasetRepository; - - private final DistanceMatrixMetadataRepository distanceMatrixMetadataRepository; - private final TreeMetadataRepository treeMetadataRepository; - private final TreeViewMetadataRepository treeViewMetadataRepository; - private final TypingDataMetadataRepository typingDataMetadataRepository; - private final IsolateDataMetadataRepository isolateDataMetadataRepository; - - private final DistanceMatrixDataRepositoryFactory distanceMatrixDataRepositoryFactory; - private final TreeDataRepositoryFactory treeDataRepositoryFactory; - private final TreeViewDataRepositoryFactory treeViewDataRepositoryFactory; - private final TypingDataDataRepositoryFactory typingDataDataRepositoryFactory; - private final IsolateDataDataRepositoryFactory isolateDataDataRepositoryFactory; - - @Value("${data-repositories.get-distance-matrix-repository}") - private DistanceMatrixDataRepositoryId getDistanceMatrixRepositoryId; - - @Value("${data-repositories.get-tree-repository}") - private TreeDataRepositoryId getTreeRepositoryId; - - @Value("${data-repositories.get-tree-view-repository}") - private TreeViewDataRepositoryId getTreeViewRepositoryId; - - @Value("${data-repositories.get-typing-data-repository}") - private TypingDataDataRepositoryId getTypingDataRepositoryId; - - @Value("${data-repositories.get-isolate-data-repository}") - private IsolateDataDataRepositoryId getIsolateDataRepositoryId; - - @Override - public String getDistanceMatrix(String projectId, String datasetId, String distanceMatrixId, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - if (!datasetRepository.existsByProjectIdAndId(projectId, datasetId)) - throw new DatasetNotFoundException(); - - DistanceMatrixMetadata distanceMatrix = distanceMatrixMetadataRepository - .findByProjectIdAndDatasetIdAndDistanceMatrixId(projectId, datasetId, distanceMatrixId) - .orElseThrow(DistanceMatrixNotFoundException::new); - - if (!distanceMatrix.getRepositorySpecificData().containsKey(getDistanceMatrixRepositoryId)) - throw new IndexingNeededException("Distance Matrix isn't indexed in the database. Indexing of Distance Matrix required."); - - DistanceMatrixDataRepositorySpecificData repositorySpecificData = distanceMatrix - .getRepositorySpecificData() - .get(getDistanceMatrixRepositoryId); - - DistanceMatrixDataRepository distanceMatrixDataRepository = distanceMatrixDataRepositoryFactory - .getRepository(getDistanceMatrixRepositoryId); - - return distanceMatrixDataRepository.getDistanceMatrix(repositorySpecificData); - } - - @Override - public String getTree(String projectId, String datasetId, String treeId, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - if (!datasetRepository.existsByProjectIdAndId(projectId, datasetId)) - throw new DatasetNotFoundException(); - - TreeMetadata treeMetadata = treeMetadataRepository - .findByProjectIdAndDatasetIdAndTreeId(projectId, datasetId, treeId) - .orElseThrow(TreeNotFoundException::new); - - if (!treeMetadata.getRepositorySpecificData().containsKey(getTreeRepositoryId)) - throw new IndexingNeededException("Tree isn't indexed in the database. Indexing of Tree required."); - - TreeDataRepositorySpecificData repositorySpecificData = treeMetadata - .getRepositorySpecificData() - .get(getTreeRepositoryId); - - TreeDataRepository treeDataRepository = treeDataRepositoryFactory - .getRepository(getTreeRepositoryId); - - return treeDataRepository.getTree(repositorySpecificData); - } - - @Override - public GetTreeViewOutput getTreeView(String projectId, String datasetId, String treeViewId, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - if (!datasetRepository.existsByProjectIdAndId(projectId, datasetId)) - throw new DatasetNotFoundException(); - - TreeViewMetadata treeViewMetadata = treeViewMetadataRepository - .findByProjectIdAndDatasetIdAndTreeViewId(projectId, datasetId, treeViewId) - .orElseThrow(TreeViewNotFoundException::new); - - if (!treeViewMetadata.getRepositorySpecificData().containsKey(getTreeViewRepositoryId)) - throw new IndexingNeededException("Tree View isn't indexed in the database. Indexing of Tree View required."); - - TreeViewDataRepositorySpecificData repositorySpecificData = treeViewMetadata - .getRepositorySpecificData() - .get(getTreeViewRepositoryId); - - TreeViewDataRepository treeViewDataRepository = treeViewDataRepositoryFactory.getRepository(getTreeViewRepositoryId); - - GetTreeViewOutput output = treeViewDataRepository.getTreeView(repositorySpecificData); - - return new GetTreeViewOutput( - output.getNodes(), - output.getNodesTotalCount(), - output.getEdges(), - output.getEdgesTotalCount(), - treeViewMetadata.getTransformations() - ); - } - - @Override - public SaveTreeViewOutput saveTreeView(String projectId, String datasetId, String treeViewId, SaveTreeViewInput inputModel, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - if (!datasetRepository.existsByProjectIdAndId(projectId, datasetId)) - throw new DatasetNotFoundException(); - - TreeViewMetadata treeViewMetadata = treeViewMetadataRepository - .findByProjectIdAndDatasetIdAndTreeViewId(projectId, datasetId, treeViewId) - .orElseThrow(TreeViewNotFoundException::new); - - if (!treeViewMetadata.getRepositorySpecificData().containsKey(getTreeViewRepositoryId)) - throw new IndexingNeededException("Tree View isn't indexed in the database. Indexing of Tree View required."); - - TreeViewDataRepositorySpecificData repositorySpecificData = treeViewMetadata - .getRepositorySpecificData() - .get(getTreeViewRepositoryId); - - TreeViewDataRepository treeViewDataRepository = treeViewDataRepositoryFactory.getRepository(getTreeViewRepositoryId); - - treeViewMetadata.setTransformations(inputModel.getTransformations()); - treeViewMetadataRepository.save(treeViewMetadata); - - treeViewDataRepository.saveTreeView(repositorySpecificData, inputModel.getNodes()); - - return new SaveTreeViewOutput(projectId, datasetId, treeViewId); - } - - @Override - public GetTypingDataSchemaOutput getTypingDataSchema(String projectId, String typingDataId, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - TypingDataMetadata typingDataMetadata = typingDataMetadataRepository - .findByProjectIdAndTypingDataId(projectId, typingDataId) - .orElseThrow(TypingDataNotFoundException::new); - - if (!typingDataMetadata.getRepositorySpecificData().containsKey(getTypingDataRepositoryId)) - throw new IndexingNeededException("Typing Data isn't indexed in the database. Indexing of Typing Data required."); - - TypingDataDataRepositorySpecificData repositorySpecificData = typingDataMetadata - .getRepositorySpecificData() - .get(getTypingDataRepositoryId); - - TypingDataDataRepository typingDataDataRepository = typingDataDataRepositoryFactory.getRepository(getTypingDataRepositoryId); - - return typingDataDataRepository.getTypingDataSchema(repositorySpecificData); - } - - @Override - public GetTypingDataProfilesOutput getTypingDataProfiles(String projectId, String typingDataId, int limit, int offset, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - TypingDataMetadata typingDataMetadata = typingDataMetadataRepository - .findByProjectIdAndTypingDataId(projectId, typingDataId) - .orElseThrow(TypingDataNotFoundException::new); - - if (!typingDataMetadata.getRepositorySpecificData().containsKey(getTypingDataRepositoryId)) - throw new IndexingNeededException("Typing Data isn't indexed in the database. Indexing of Typing Data required."); - - TypingDataDataRepositorySpecificData repositorySpecificData = typingDataMetadata - .getRepositorySpecificData() - .get(getTypingDataRepositoryId); - - TypingDataDataRepository typingDataDataRepository = typingDataDataRepositoryFactory.getRepository(getTypingDataRepositoryId); - - return typingDataDataRepository.getTypingDataProfiles(repositorySpecificData, limit, offset); - } - - @Override - public List getIsolateDataKeys(String projectId, String isolateDataId, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - IsolateDataMetadata isolateDataMetadata = isolateDataMetadataRepository - .findByProjectIdAndIsolateDataId(projectId, isolateDataId) - .orElseThrow(IsolateDataNotFoundException::new); - - return isolateDataMetadata.getKeys(); - } - - @Override - public GetIsolateDataRowsOutput getIsolateDataRows(String projectId, String isolateDataId, int limit, int offset, String userId) { - if (!projectRepository.existsByIdAndOwnerId(projectId, userId)) - throw new ProjectNotFoundException(); - - IsolateDataMetadata isolateDataMetadata = isolateDataMetadataRepository - .findByProjectIdAndIsolateDataId(projectId, isolateDataId) - .orElseThrow(IsolateDataNotFoundException::new); - - if (!isolateDataMetadata.getRepositorySpecificData().containsKey(getIsolateDataRepositoryId)) - throw new IndexingNeededException("Isolate Data isn't indexed in the database. Indexing of Isolate Data required."); - - IsolateDataDataRepositorySpecificData repositorySpecificData = isolateDataMetadata - .getRepositorySpecificData() - .get(getIsolateDataRepositoryId); - - IsolateDataDataRepository isolateDataDataRepository = isolateDataDataRepositoryFactory.getRepository(getIsolateDataRepositoryId); - - return isolateDataDataRepository.getIsolateDataRows(repositorySpecificData, limit, offset); - } -} diff --git a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/service/exceptions/IndexingNeededException.java b/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/service/exceptions/IndexingNeededException.java deleted file mode 100644 index 82e0738d..00000000 --- a/src/backend/microservices/visualization/src/main/java/org/phyloviz/pwp/visualization/service/exceptions/IndexingNeededException.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.phyloviz.pwp.visualization.service.exceptions; - -public class IndexingNeededException extends RuntimeException { - public IndexingNeededException(String message) { - super(message); - } -} diff --git a/src/backend/microservices/visualization/src/main/resources/application.yml b/src/backend/microservices/visualization/src/main/resources/application.yml deleted file mode 100644 index aca9a1e1..00000000 --- a/src/backend/microservices/visualization/src/main/resources/application.yml +++ /dev/null @@ -1,17 +0,0 @@ -server: - port: 8085 - -spring: - config: - import: application-shared.yml - -data-repositories: - get-distance-matrix-repository: S3 - get-tree-repository: S3 - get-tree-view-repository: PHYLODB - get-typing-data-repository: PHYLODB - get-isolate-data-repository: PHYLODB - -logging: - level: - root: debug \ No newline at end of file diff --git a/src/backend/microservices/visualization/src/test/java/org/phyloviz/pwp/visualization/VisualizationMicroserviceApplicationTests.java b/src/backend/microservices/visualization/src/test/java/org/phyloviz/pwp/visualization/VisualizationMicroserviceApplicationTests.java deleted file mode 100644 index a404876d..00000000 --- a/src/backend/microservices/visualization/src/test/java/org/phyloviz/pwp/visualization/VisualizationMicroserviceApplicationTests.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.phyloviz.pwp.visualization; - -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class VisualizationMicroserviceApplicationTests { - - /*@Test - void contextLoads() { - }*/ -} diff --git a/src/backend/settings.gradle b/src/backend/settings.gradle index fb11252f..7d58ccfd 100644 --- a/src/backend/settings.gradle +++ b/src/backend/settings.gradle @@ -1,6 +1,4 @@ rootProject.name = 'phyloviz-web-platform' include 'microservices:gateway' include 'microservices:shared' -include 'microservices:shared-phylodb' include 'microservices:pwp' -findProject(':microservices:shared-phylodb')?.name = 'shared-phylodb' diff --git a/test/.env b/test/.env deleted file mode 100644 index be13d82a..00000000 --- a/test/.env +++ /dev/null @@ -1 +0,0 @@ -COMPOSE_PROJECT_NAME=phyloviz-web-platform-test diff --git a/test/docker-compose.yml b/test/docker-compose.yml deleted file mode 100644 index ce8ec212..00000000 --- a/test/docker-compose.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: '3.9' -services: - s3ninja: - container_name: s3ninja - image: scireum/s3-ninja:latest - ports: - - "9444:9000" - volumes: - - "./s3ninja-data:/data" \ No newline at end of file From 3534300320b1bc9cb9cb859b77c1860af5446985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jesus?= Date: Wed, 7 Feb 2024 15:49:04 +0000 Subject: [PATCH 6/7] Removed shared module. --- src/backend/microservices/pwp/build.gradle | 8 +- .../pwp/config/DataRepositoryConfig.java | 50 ++-- .../pwp}/config/FilterChainConfig.java | 2 +- .../org/phyloviz/pwp}/config/MongoConfig.java | 28 +-- .../org/phyloviz/pwp/config/PWPConfig.java | 31 ++- .../pwp}/config/ProblemJsonConfig.java | 2 +- .../config/UserArgumentResolverConfig.java | 4 +- .../java/org/phyloviz/pwp}/domain/User.java | 2 +- .../http/controllers/ComputeController.java | 236 +++++++++--------- .../controllers/FileTransferController.java | 6 +- .../controllers/VisualizationController.java | 12 +- .../projects/ProjectsController.java | 4 +- .../projects/datasets/DatasetsController.java | 2 +- .../DistanceMatricesController.java | 2 +- .../tree_views/TreeViewsController.java | 2 +- .../datasets/trees/TreesController.java | 2 +- .../projects/files/FilesController.java | 2 +- .../http/models/get_tree_view/EdgeModel.java | 2 +- .../get_tree_view/GetTreeViewOutputModel.java | 2 +- .../http/models/get_tree_view/NodeModel.java | 2 +- .../isolate_data/IsolateDataRowModel.java | 2 +- .../UploadIsolateDataOutputModel.java | 2 +- .../GetIsolateDataRowsOutputModel.java | 2 +- .../get_projects/GetProjectsOutputModel.java | 2 +- .../get_projects/GetProjectsProjectModel.java | 2 +- .../SaveTreeViewInputModel.java | 2 +- .../SaveTreeViewOutputModel.java | 2 +- .../save_tree_view/TransformationsModel.java | 2 +- .../typing_data/TypingDataProfileModel.java | 2 +- .../UploadTypingDataOutputModel.java | 2 +- .../GetTypingDataProfilesOutputModel.java | 2 +- .../GetTypingDataSchemaOutputModel.java | 2 +- .../AdministrationExceptionHandler.java | 6 +- .../http/pipeline/UserArgumentResolver.java | 4 +- .../advice/ProblemJsonResponseBodyAdvice.java | 2 +- .../AuthenticationExceptionHandler.java | 2 +- .../handlers/SharedExceptionHandler.java | 4 +- .../repository/data/S3FileRepository.java | 2 +- .../repository/data/S3FileRepositoryImpl.java | 6 +- .../DistanceMatrixDataRepositoryId.java | 5 + .../DistanceMatrixDataRepository.java | 4 +- .../DistanceMatrixS3DataRepository.java | 8 +- ...tanceMatrixDataRepositorySpecificData.java | 4 + ...nceMatrixS3DataRepositorySpecificData.java | 2 +- .../IsolateDataDataRepositoryId.java | 2 +- .../repository/IsolateDataDataRepository.java | 6 +- .../IsolateDataS3DataRepository.java | 10 +- ...IsolateDataDataRepositorySpecificData.java | 4 + ...DataPhyloDBDataRepositorySpecificData.java | 2 +- ...olateDataS3DataRepositorySpecificData.java | 2 +- .../AbstractDataRepositoryRegistry.java | 2 +- .../data/registry/DataRepositoryFactory.java | 2 +- .../data/registry/DataRepositoryRegistry.java | 2 +- .../DistanceMatrixDataRepositoryFactory.java | 10 +- .../DistanceMatrixDataRepositoryRegistry.java | 10 + ...tanceMatrixDataRepositoryRegistryImpl.java | 10 +- .../IsolateDataDataRepositoryFactory.java | 10 +- .../IsolateDataDataRepositoryRegistry.java | 10 + ...IsolateDataDataRepositoryRegistryImpl.java | 10 +- .../tree/TreeDataRepositoryFactory.java | 10 +- .../tree/TreeDataRepositoryRegistry.java | 10 + .../tree/TreeDataRepositoryRegistryImpl.java | 10 +- .../TreeViewDataRepositoryFactory.java | 10 +- .../TreeViewDataRepositoryRegistry.java | 10 + .../TreeViewDataRepositoryRegistryImpl.java | 10 +- .../TypingDataDataRepositoryFactory.java | 10 +- .../TypingDataDataRepositoryRegistry.java | 10 + .../TypingDataDataRepositoryRegistryImpl.java | 10 +- .../data/tree/TreeDataRepositoryId.java | 2 +- .../tree/repository/TreeDataRepository.java | 4 +- .../tree/repository/TreeS3DataRepository.java | 8 +- .../TreeDataRepositorySpecificData.java | 4 + ...TreePhyloDBDataRepositorySpecificData.java | 2 +- .../TreeS3DataRepositorySpecificData.java | 2 +- .../tree_view/TreeViewDataRepositoryId.java | 2 +- .../repository/TreeViewDataRepository.java | 8 +- .../repository/TreeViewS3DataRepository.java | 8 +- .../TreeViewDataRepositorySpecificData.java | 4 + ...ViewPhyloDBDataRepositorySpecificData.java | 2 +- .../TreeViewS3DataRepositorySpecificData.java | 2 +- .../TypingDataDataRepositoryId.java | 2 +- .../repository/TypingDataDataRepository.java | 8 +- .../TypingDataS3DataRepository.java | 12 +- .../TypingDataDataRepositorySpecificData.java | 4 + ...DataPhyloDBDataRepositorySpecificData.java | 2 +- ...ypingDataS3DataRepositorySpecificData.java | 2 +- .../metadata/DocumentConversionException.java | 2 +- .../metadata/dataset/DatasetRepository.java | 4 +- .../metadata/dataset/documents/Dataset.java | 2 +- .../dataset/mongo/DatasetMongoRepository.java | 4 +- .../dataset/mongo/DatasetRepositoryMongo.java | 6 +- .../DistanceMatrixMetadataRepository.java | 4 +- .../documents/DistanceMatrixMetadata.java | 10 +- .../DistanceMatrixMetadataDeserializer.java | 16 +- .../source/DistanceMatrixSource.java | 4 + .../source/DistanceMatrixSourceFunction.java | 2 +- .../source/DistanceMatrixSourceType.java | 2 +- ...DistanceMatrixMetadataMongoRepository.java | 4 +- ...DistanceMatrixMetadataRepositoryMongo.java | 6 +- .../IsolateDataMetadataRepository.java | 4 +- .../documents/IsolateDataMetadata.java | 6 +- .../IsolateDataMetadataDeserializer.java | 12 +- .../IsolateDataMetadataSerializer.java | 6 +- .../IsolateDataMetadataMongoRepository.java | 4 +- .../IsolateDataMetadataRepositoryMongo.java | 6 +- .../metadata/project/ProjectRepository.java | 4 +- .../metadata/project/documents/FileIds.java | 2 +- .../metadata/project/documents/Project.java | 2 +- .../project/mongo/ProjectMongoRepository.java | 4 +- .../project/mongo/ProjectRepositoryMongo.java | 6 +- .../AccessTemplateDeserializer.java | 2 +- .../metadata/tree/TreeMetadataRepository.java | 4 +- .../metadata/tree/documents/TreeMetadata.java | 10 +- .../converters/TreeMetadataDeserializer.java | 16 +- .../tree/documents/source/TreeSource.java | 4 + .../TreeSourceAlgorithmDistanceMatrix.java | 2 +- .../source/TreeSourceAlgorithmTypingData.java | 2 +- .../tree/documents/source/TreeSourceFile.java | 2 +- .../tree/documents/source/TreeSourceType.java | 2 +- .../mongo/TreeMetadataMongoRepository.java | 4 +- .../mongo/TreeMetadataRepositoryMongo.java | 6 +- .../tree_view/TreeViewMetadataRepository.java | 4 +- .../tree_view/documents/TreeViewMetadata.java | 10 +- .../TreeViewMetadataDeserializer.java | 16 +- .../TreeViewMetadataSerializer.java | 6 +- .../documents/source/TreeViewSource.java | 2 +- .../TreeViewMetadataMongoRepository.java | 4 +- .../TreeViewMetadataRepositoryMongo.java | 6 +- .../TypingDataMetadataRepository.java | 4 +- .../documents/TypingDataMetadata.java | 6 +- .../TypingDataMetadataDeserializer.java | 12 +- .../TypingDataMetadataSerializer.java | 6 +- .../TypingDataMetadataMongoRepository.java | 4 +- .../TypingDataMetadataRepositoryMongo.java | 6 +- .../pwp/service/ComputeServiceImpl.java | 10 +- .../pwp/service/FileTransferService.java | 4 +- .../pwp/service/FileTransferServiceImpl.java | 32 +-- .../pwp/service/VisualizationService.java | 12 +- .../pwp/service/VisualizationServiceImpl.java | 78 +++--- .../distance_matrix/DistanceMatrixInfo.java | 6 +- .../DistanceMatrixSourceFunctionInfo.java | 2 +- .../GetIsolateDataRowsOutput.java | 2 +- .../files/isolate_data/IsolateDataInfo.java | 2 +- .../files/isolate_data/IsolateDataRow.java | 2 +- .../isolate_data/UploadIsolateDataOutput.java | 2 +- .../GetTypingDataProfilesOutput.java | 2 +- .../GetTypingDataSchemaOutput.java | 2 +- .../files/typing_data/TypingDataInfo.java | 2 +- .../files/typing_data/TypingDataProfile.java | 2 +- .../typing_data/UploadTypingDataOutput.java | 2 +- .../pwp/service/dtos/tree/TreeInfo.java | 10 +- ...TreeSourceAlgorithmDistanceMatrixInfo.java | 2 +- .../TreeSourceAlgorithmTypingDataInfo.java | 2 +- .../service/dtos/tree/TreeSourceFileInfo.java | 2 +- .../pwp}/service/dtos/tree_view/Edge.java | 2 +- .../dtos/tree_view/GetTreeViewOutput.java | 2 +- .../pwp}/service/dtos/tree_view/Node.java | 2 +- .../dtos/tree_view/SaveTreeViewInput.java | 2 +- .../dtos/tree_view/SaveTreeViewOutput.java | 2 +- .../dtos/tree_view/Transformations.java | 2 +- .../service/dtos/tree_view/TreeViewInfo.java | 2 +- .../dtos/tree_view/TreeViewSourceInfo.java | 2 +- .../exceptions/DatasetNotFoundException.java | 2 +- .../DistanceMatrixNotFoundException.java | 2 +- .../exceptions/FileCorruptedException.java | 2 +- .../exceptions/InvalidArgumentException.java | 2 +- .../IsolateDataDoesNotExistException.java | 2 +- .../IsolateDataNotFoundException.java | 2 +- .../MultipartFileReadException.java | 2 +- .../exceptions/ProjectNotFoundException.java | 2 +- .../exceptions/TreeNotFoundException.java | 2 +- .../exceptions/TreeViewNotFoundException.java | 2 +- .../TypingDataDoesNotExistException.java | 2 +- .../TypingDataNotFoundException.java | 2 +- .../exceptions/UnauthorizedException.java | 2 +- .../pwp/service/project/ProjectService.java | 2 +- .../service/project/ProjectServiceImpl.java | 8 +- .../project/dataset/DatasetServiceImpl.java | 16 +- .../DistanceMatrixServiceImpl.java | 20 +- .../project/dataset/tree/TreeServiceImpl.java | 20 +- .../tree_view/TreeViewServiceImpl.java | 18 +- .../project/file/IsolateDataServiceImpl.java | 16 +- .../project/file/TypingDataServiceImpl.java | 16 +- .../org/phyloviz/pwp}/utils/SharedLogger.java | 2 +- .../org/phyloviz/pwp}/utils/UUIDUtils.java | 2 +- .../pwp/src/main/resources/application.yml | 25 +- src/backend/microservices/shared/build.gradle | 47 ---- .../config/ResourceServerSharedConfig.java | 11 - .../DistanceMatrixDataRepositoryId.java | 5 - ...tanceMatrixDataRepositorySpecificData.java | 4 - ...IsolateDataDataRepositorySpecificData.java | 4 - .../DistanceMatrixDataRepositoryRegistry.java | 10 - .../IsolateDataDataRepositoryRegistry.java | 10 - .../tree/TreeDataRepositoryRegistry.java | 10 - .../TreeViewDataRepositoryRegistry.java | 10 - .../TypingDataDataRepositoryRegistry.java | 10 - .../TreeDataRepositorySpecificData.java | 4 - .../TreeViewDataRepositorySpecificData.java | 4 - .../TypingDataDataRepositorySpecificData.java | 4 - .../source/DistanceMatrixSource.java | 4 - .../tree/documents/source/TreeSource.java | 4 - .../src/main/resources/application-shared.yml | 24 -- src/backend/settings.gradle | 1 - 203 files changed, 734 insertions(+), 793 deletions(-) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/config/FilterChainConfig.java (96%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/config/MongoConfig.java (65%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/config/ProblemJsonConfig.java (93%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/config/UserArgumentResolverConfig.java (85%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/domain/User.java (93%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/http/pipeline/UserArgumentResolver.java (92%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/http/pipeline/advice/ProblemJsonResponseBodyAdvice.java (97%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/http/pipeline/advice/exception/handlers/AuthenticationExceptionHandler.java (90%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java (97%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/S3FileRepository.java (94%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/S3FileRepositoryImpl.java (96%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/distance_matrix/repository/DistanceMatrixDataRepository.java (57%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/distance_matrix/repository/DistanceMatrixS3DataRepository.java (69%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/distance_matrix/repository/specific_data/DistanceMatrixS3DataRepositorySpecificData.java (70%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/isolate_data/IsolateDataDataRepositoryId.java (51%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/isolate_data/repository/IsolateDataDataRepository.java (69%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java (78%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/isolate_data/repository/specific_data/IsolateDataPhyloDBDataRepositorySpecificData.java (76%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/isolate_data/repository/specific_data/IsolateDataS3DataRepositorySpecificData.java (77%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/AbstractDataRepositoryRegistry.java (97%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/DataRepositoryFactory.java (89%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/DataRepositoryRegistry.java (90%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryFactory.java (50%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistryImpl.java (62%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/isolate_data/IsolateDataDataRepositoryFactory.java (50%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistryImpl.java (62%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/tree/TreeDataRepositoryFactory.java (51%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistry.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/tree/TreeDataRepositoryRegistryImpl.java (62%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/tree_view/TreeViewDataRepositoryFactory.java (51%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/tree_view/TreeViewDataRepositoryRegistryImpl.java (62%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/typing_data/TypingDataDataRepositoryFactory.java (51%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/registry/typing_data/TypingDataDataRepositoryRegistryImpl.java (62%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/tree/TreeDataRepositoryId.java (51%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/tree/repository/TreeDataRepository.java (54%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/tree/repository/TreeS3DataRepository.java (72%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/tree/repository/specific_data/TreePhyloDBDataRepositorySpecificData.java (77%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/tree/repository/specific_data/TreeS3DataRepositorySpecificData.java (71%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/tree_view/TreeViewDataRepositoryId.java (51%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/tree_view/repository/TreeViewDataRepository.java (54%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/tree_view/repository/TreeViewS3DataRepository.java (72%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/tree_view/repository/specific_data/TreeViewPhyloDBDataRepositorySpecificData.java (78%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/tree_view/repository/specific_data/TreeViewS3DataRepositorySpecificData.java (71%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/typing_data/TypingDataDataRepositoryId.java (51%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/typing_data/repository/TypingDataDataRepository.java (67%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/typing_data/repository/TypingDataS3DataRepository.java (77%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/typing_data/repository/specific_data/TypingDataPhyloDBDataRepositorySpecificData.java (76%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/data/typing_data/repository/specific_data/TypingDataS3DataRepositorySpecificData.java (77%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/DocumentConversionException.java (74%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/dataset/DatasetRepository.java (88%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/dataset/documents/Dataset.java (92%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/dataset/mongo/DatasetMongoRepository.java (84%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/dataset/mongo/DatasetRepositoryMongo.java (88%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/distance_matrix/DistanceMatrixMetadataRepository.java (90%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/distance_matrix/documents/DistanceMatrixMetadata.java (72%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/distance_matrix/documents/converters/DistanceMatrixMetadataDeserializer.java (77%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceFunction.java (73%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceType.java (74%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataMongoRepository.java (88%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataRepositoryMongo.java (88%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/isolate_data/IsolateDataMetadataRepository.java (90%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/isolate_data/documents/IsolateDataMetadata.java (79%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataDeserializer.java (79%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataSerializer.java (87%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/isolate_data/mongo/IsolateDataMetadataMongoRepository.java (88%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/isolate_data/mongo/IsolateDataMetadataRepositoryMongo.java (87%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/project/ProjectRepository.java (90%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/project/documents/FileIds.java (78%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/project/documents/Project.java (90%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/project/mongo/ProjectMongoRepository.java (88%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/project/mongo/ProjectRepositoryMongo.java (83%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree/TreeMetadataRepository.java (91%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree/documents/TreeMetadata.java (72%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree/documents/converters/TreeMetadataDeserializer.java (79%) create mode 100644 src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSource.java rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree/documents/source/TreeSourceAlgorithmDistanceMatrix.java (80%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree/documents/source/TreeSourceAlgorithmTypingData.java (79%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree/documents/source/TreeSourceFile.java (76%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree/documents/source/TreeSourceType.java (82%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree/mongo/TreeMetadataMongoRepository.java (91%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree/mongo/TreeMetadataRepositoryMongo.java (89%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree_view/TreeViewMetadataRepository.java (91%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree_view/documents/TreeViewMetadata.java (74%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree_view/documents/converters/TreeViewMetadataDeserializer.java (78%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree_view/documents/converters/TreeViewMetadataSerializer.java (90%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree_view/documents/source/TreeViewSource.java (70%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree_view/mongo/TreeViewMetadataMongoRepository.java (91%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/tree_view/mongo/TreeViewMetadataRepositoryMongo.java (89%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/typing_data/TypingDataMetadataRepository.java (90%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/typing_data/documents/TypingDataMetadata.java (79%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/typing_data/documents/converters/TypingDataMetadataDeserializer.java (79%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/typing_data/documents/converters/TypingDataMetadataSerializer.java (87%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/typing_data/mongo/TypingDataMetadataMongoRepository.java (88%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/repository/metadata/typing_data/mongo/TypingDataMetadataRepositoryMongo.java (87%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/files/isolate_data/GetIsolateDataRowsOutput.java (77%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/files/isolate_data/IsolateDataRow.java (77%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/files/isolate_data/UploadIsolateDataOutput.java (69%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/files/typing_data/GetTypingDataProfilesOutput.java (78%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/files/typing_data/GetTypingDataSchemaOutput.java (77%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/files/typing_data/TypingDataProfile.java (75%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/files/typing_data/UploadTypingDataOutput.java (69%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree_view/Edge.java (71%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree_view/GetTreeViewOutput.java (85%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree_view/Node.java (79%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree_view/SaveTreeViewInput.java (79%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree_view/SaveTreeViewOutput.java (79%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/dtos/tree_view/Transformations.java (91%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/DatasetNotFoundException.java (74%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/DistanceMatrixNotFoundException.java (76%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/FileCorruptedException.java (74%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/InvalidArgumentException.java (73%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/IsolateDataDoesNotExistException.java (76%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/IsolateDataNotFoundException.java (75%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/MultipartFileReadException.java (75%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/ProjectNotFoundException.java (74%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/TreeNotFoundException.java (73%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/TreeViewNotFoundException.java (74%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/TypingDataDoesNotExistException.java (76%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/TypingDataNotFoundException.java (75%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/service/exceptions/UnauthorizedException.java (76%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/utils/SharedLogger.java (97%) rename src/backend/microservices/{shared/src/main/java/org/phyloviz/pwp/shared => pwp/src/main/java/org/phyloviz/pwp}/utils/UUIDUtils.java (94%) delete mode 100644 src/backend/microservices/shared/build.gradle delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/ResourceServerSharedConfig.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree/TreeDataRepositoryRegistry.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java delete mode 100644 src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSource.java delete mode 100644 src/backend/microservices/shared/src/main/resources/application-shared.yml diff --git a/src/backend/microservices/pwp/build.gradle b/src/backend/microservices/pwp/build.gradle index b86124dc..38d063c2 100644 --- a/src/backend/microservices/pwp/build.gradle +++ b/src/backend/microservices/pwp/build.gradle @@ -18,12 +18,11 @@ repositories { } dependencies { - implementation project(path: ':microservices:shared') - testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.junit.jupiter:junit-jupiter-api' version { jupiterVersion } testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' version { jupiterVersion } + implementation 'org.springframework.boot:spring-boot-starter-data-rest' implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' @@ -38,6 +37,11 @@ dependencies { implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.6' testImplementation 'junit:junit:4.13.1' + + implementation 'software.amazon.awssdk:s3:2.20.28' + implementation 'software.amazon.awssdk:s3-transfer-manager:2.20.28' + + implementation 'org.reflections:reflections:0.10.2' } test { diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java index e5eb6d2a..f5e3ac15 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java @@ -1,31 +1,31 @@ package org.phyloviz.pwp.config; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistryImpl; -import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataS3DataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataS3DataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.DistanceMatrixS3DataRepository; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.specific_data.DistanceMatrixS3DataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.isolate_data.IsolateDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.isolate_data.repository.IsolateDataS3DataRepository; +import org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data.IsolateDataS3DataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistryImpl; +import org.phyloviz.pwp.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistryImpl; +import org.phyloviz.pwp.repository.data.registry.tree.TreeDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.tree.TreeDataRepositoryRegistryImpl; +import org.phyloviz.pwp.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.tree_view.TreeViewDataRepositoryRegistryImpl; +import org.phyloviz.pwp.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.typing_data.TypingDataDataRepositoryRegistryImpl; +import org.phyloviz.pwp.repository.data.tree.TreeDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree.repository.TreeS3DataRepository; +import org.phyloviz.pwp.repository.data.tree.repository.specific_data.TreeS3DataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.tree_view.TreeViewDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree_view.repository.TreeViewS3DataRepository; +import org.phyloviz.pwp.repository.data.tree_view.repository.specific_data.TreeViewS3DataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.typing_data.TypingDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.typing_data.repository.TypingDataS3DataRepository; +import org.phyloviz.pwp.repository.data.typing_data.repository.specific_data.TypingDataS3DataRepositorySpecificData; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/FilterChainConfig.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/FilterChainConfig.java similarity index 96% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/FilterChainConfig.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/FilterChainConfig.java index eea7e0db..23b73a87 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/FilterChainConfig.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/FilterChainConfig.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.config; +package org.phyloviz.pwp.config; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/MongoConfig.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/MongoConfig.java similarity index 65% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/MongoConfig.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/MongoConfig.java index 537d9de2..9b214052 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/MongoConfig.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/MongoConfig.java @@ -1,19 +1,19 @@ -package org.phyloviz.pwp.shared.config; +package org.phyloviz.pwp.config; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.converters.DistanceMatrixMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.converters.IsolateDataMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.converters.IsolateDataMetadataSerializer; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.converters.TreeMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.converters.TreeViewMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.converters.TreeViewMetadataSerializer; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.converters.TypingDataMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.converters.TypingDataMetadataSerializer; +import org.phyloviz.pwp.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.tree.TreeDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.converters.DistanceMatrixMetadataDeserializer; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.converters.IsolateDataMetadataDeserializer; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.converters.IsolateDataMetadataSerializer; +import org.phyloviz.pwp.repository.metadata.tree.documents.converters.TreeMetadataDeserializer; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.converters.TreeViewMetadataDeserializer; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.converters.TreeViewMetadataSerializer; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.converters.TypingDataMetadataDeserializer; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.converters.TypingDataMetadataSerializer; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java index 667f1ec1..9c019e01 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java @@ -4,20 +4,19 @@ import org.phyloviz.pwp.repository.metadata.templates.tool_template.converters.AccessTemplateSerializer; import org.phyloviz.pwp.repository.metadata.templates.tool_template.converters.CaseInsensitiveEnumDeserializerFactory; import org.phyloviz.pwp.service.flowviz.FLOWViZClient; -import org.phyloviz.pwp.shared.config.ResourceServerSharedConfig; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.converters.DistanceMatrixMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.converters.IsolateDataMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.converters.IsolateDataMetadataSerializer; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.converters.TreeMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.converters.TreeViewMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.converters.TreeViewMetadataSerializer; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.converters.TypingDataMetadataDeserializer; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.converters.TypingDataMetadataSerializer; +import org.phyloviz.pwp.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.tree.TreeDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.converters.DistanceMatrixMetadataDeserializer; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.converters.IsolateDataMetadataDeserializer; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.converters.IsolateDataMetadataSerializer; +import org.phyloviz.pwp.repository.metadata.tree.documents.converters.TreeMetadataDeserializer; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.converters.TreeViewMetadataDeserializer; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.converters.TreeViewMetadataSerializer; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.converters.TypingDataMetadataDeserializer; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.converters.TypingDataMetadataSerializer; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; @@ -35,10 +34,10 @@ import java.util.List; /** - * Configuration class for the Compute Microservice. + * Configuration class for the PHYLOViZ web platform (PWP). + * Contains beans for the FLOWViZ client, the Mongo transaction manager, and the Mongo custom conversions. */ @Configuration -@Import({ResourceServerSharedConfig.class}) public class PWPConfig { private final String flowVizUsername; private final String flowVizPassword; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/ProblemJsonConfig.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/ProblemJsonConfig.java similarity index 93% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/ProblemJsonConfig.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/ProblemJsonConfig.java index ce10d9b2..770f1c53 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/ProblemJsonConfig.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/ProblemJsonConfig.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.config; +package org.phyloviz.pwp.config; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/UserArgumentResolverConfig.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/UserArgumentResolverConfig.java similarity index 85% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/UserArgumentResolverConfig.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/UserArgumentResolverConfig.java index 16b1b922..f58418d7 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/UserArgumentResolverConfig.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/UserArgumentResolverConfig.java @@ -1,7 +1,7 @@ -package org.phyloviz.pwp.shared.config; +package org.phyloviz.pwp.config; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.http.pipeline.UserArgumentResolver; +import org.phyloviz.pwp.http.pipeline.UserArgumentResolver; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/domain/User.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/domain/User.java similarity index 93% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/domain/User.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/domain/User.java index a13cc5df..f827b553 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/domain/User.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/domain/User.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.domain; +package org.phyloviz.pwp.domain; import lombok.Data; import org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthentication; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java index 57cff768..cb0c5eca 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java @@ -1,118 +1,118 @@ -package org.phyloviz.pwp.http.controllers; - -import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.http.models.create_workflow.CreateWorkflowInputModel; -import org.phyloviz.pwp.http.models.create_workflow.CreateWorkflowOutputModel; -import org.phyloviz.pwp.http.models.get_workflow.GetWorkflowOutputModel; -import org.phyloviz.pwp.http.models.get_workflow_status.GetWorkflowStatusOutputModel; -import org.phyloviz.pwp.http.models.get_workflows.GetWorkflowsOutputModel; -import org.phyloviz.pwp.service.ComputeService; -import org.phyloviz.pwp.service.dtos.create_workflow.CreateWorkflowOutput; -import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowOutput; -import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowStatusOutput; -import org.phyloviz.pwp.shared.domain.User; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * Controller for the Compute Microservice. - */ -@RestController -@RequiredArgsConstructor -public class ComputeController { - - private final ComputeService computeService; - - /** - * Create a new workflow. - * - * @param inputModel input model for the workflow - * @param projectId the project id of the project to which the workflow belongs - * @param user the user who is creating the workflow - * @return information about the created workflow - */ - @PostMapping("/projects/{projectId}/workflows") - public ResponseEntity createWorkflow( - @PathVariable String projectId, - @RequestBody CreateWorkflowInputModel inputModel, - User user - ) { - CreateWorkflowOutput createWorkflowOutput = computeService.createWorkflow( - projectId, inputModel.getType(), inputModel.getProperties(), user.getId() - ); - - return ResponseEntity - .accepted() - .body(new CreateWorkflowOutputModel(createWorkflowOutput)); - } - - /** - * Gets the status of a workflow. - * - * @param projectId the project id of the project to which the workflow belongs - * @param workflowId the id of the workflow - * @param user the user who is requesting the workflow status - * @return information about the workflow - */ - @GetMapping("/projects/{projectId}/workflows/{workflowId}/status") - public GetWorkflowStatusOutputModel getWorkflowStatus( - @PathVariable String projectId, - @PathVariable String workflowId, - User user - ) { - GetWorkflowStatusOutput getWorkflowStatusOutput = computeService.getWorkflowStatus( - projectId, workflowId, user.getId() - ); - - return new GetWorkflowStatusOutputModel(getWorkflowStatusOutput); - } - - /** - * Gets the workflow. - * - * @param projectId the project id of the project to which the workflow belongs - * @param workflowId the id of the workflow - * @param user the user who is requesting the workflow status - * @return information about the workflow - */ - @GetMapping("/projects/{projectId}/workflows/{workflowId}") - public GetWorkflowOutputModel getWorkflow( - @PathVariable String projectId, - @PathVariable String workflowId, - User user - ) { - GetWorkflowOutput getWorkflowOutput = computeService.getWorkflow( - projectId, workflowId, user.getId() - ); - - return new GetWorkflowOutputModel(getWorkflowOutput); - } - - /** - * Gets the workflows of a project. - * - * @param projectId the project id of the project to which the workflow belongs - * @param running whether to get only running workflows or not running workflows - * @param user the user who is requesting the workflows - * @return information about the workflows - */ - @GetMapping("/projects/{projectId}/workflows") - public GetWorkflowsOutputModel getWorkflows( - @PathVariable String projectId, - @RequestParam(required = false) Boolean running, - User user - ) { - List getWorkflowStatusOutputList; - - if (running == null) - getWorkflowStatusOutputList = computeService.getAllWorkflows(projectId, user.getId()); - else if (running) - getWorkflowStatusOutputList = computeService.getAllRunningWorkflows(projectId, user.getId()); - else - getWorkflowStatusOutputList = computeService.getAllNotRunningWorkflows(projectId, user.getId()); - - return new GetWorkflowsOutputModel(getWorkflowStatusOutputList); - } -} +//package org.phyloviz.pwp.http.controllers; +// +//import lombok.RequiredArgsConstructor; +//import org.phyloviz.pwp.http.models.create_workflow.CreateWorkflowInputModel; +//import org.phyloviz.pwp.http.models.create_workflow.CreateWorkflowOutputModel; +//import org.phyloviz.pwp.http.models.get_workflow.GetWorkflowOutputModel; +//import org.phyloviz.pwp.http.models.get_workflow_status.GetWorkflowStatusOutputModel; +//import org.phyloviz.pwp.http.models.get_workflows.GetWorkflowsOutputModel; +//import org.phyloviz.pwp.service.ComputeService; +//import org.phyloviz.pwp.service.dtos.create_workflow.CreateWorkflowOutput; +//import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowOutput; +//import org.phyloviz.pwp.service.dtos.get_workflow.GetWorkflowStatusOutput; +//import org.phyloviz.pwp.domain.User; +//import org.springframework.http.ResponseEntity; +//import org.springframework.web.bind.annotation.*; +// +//import java.util.List; +// +///** +// * Controller for the Compute Microservice. +// */ +//@RestController +//@RequiredArgsConstructor +//public class ComputeController { +// +// private final ComputeService computeService; +// +// /** +// * Create a new workflow. +// * +// * @param inputModel input model for the workflow +// * @param projectId the project id of the project to which the workflow belongs +// * @param user the user who is creating the workflow +// * @return information about the created workflow +// */ +// @PostMapping("/projects/{projectId}/workflows") +// public ResponseEntity createWorkflow( +// @PathVariable String projectId, +// @RequestBody CreateWorkflowInputModel inputModel, +// User user +// ) { +// CreateWorkflowOutput createWorkflowOutput = computeService.createWorkflow( +// projectId, inputModel.getType(), inputModel.getProperties(), user.getId() +// ); +// +// return ResponseEntity +// .accepted() +// .body(new CreateWorkflowOutputModel(createWorkflowOutput)); +// } +// +// /** +// * Gets the status of a workflow. +// * +// * @param projectId the project id of the project to which the workflow belongs +// * @param workflowId the id of the workflow +// * @param user the user who is requesting the workflow status +// * @return information about the workflow +// */ +// @GetMapping("/projects/{projectId}/workflows/{workflowId}/status") +// public GetWorkflowStatusOutputModel getWorkflowStatus( +// @PathVariable String projectId, +// @PathVariable String workflowId, +// User user +// ) { +// GetWorkflowStatusOutput getWorkflowStatusOutput = computeService.getWorkflowStatus( +// projectId, workflowId, user.getId() +// ); +// +// return new GetWorkflowStatusOutputModel(getWorkflowStatusOutput); +// } +// +// /** +// * Gets the workflow. +// * +// * @param projectId the project id of the project to which the workflow belongs +// * @param workflowId the id of the workflow +// * @param user the user who is requesting the workflow status +// * @return information about the workflow +// */ +// @GetMapping("/projects/{projectId}/workflows/{workflowId}") +// public GetWorkflowOutputModel getWorkflow( +// @PathVariable String projectId, +// @PathVariable String workflowId, +// User user +// ) { +// GetWorkflowOutput getWorkflowOutput = computeService.getWorkflow( +// projectId, workflowId, user.getId() +// ); +// +// return new GetWorkflowOutputModel(getWorkflowOutput); +// } +// +// /** +// * Gets the workflows of a project. +// * +// * @param projectId the project id of the project to which the workflow belongs +// * @param running whether to get only running workflows or not running workflows +// * @param user the user who is requesting the workflows +// * @return information about the workflows +// */ +// @GetMapping("/projects/{projectId}/workflows") +// public GetWorkflowsOutputModel getWorkflows( +// @PathVariable String projectId, +// @RequestParam(required = false) Boolean running, +// User user +// ) { +// List getWorkflowStatusOutputList; +// +// if (running == null) +// getWorkflowStatusOutputList = computeService.getAllWorkflows(projectId, user.getId()); +// else if (running) +// getWorkflowStatusOutputList = computeService.getAllRunningWorkflows(projectId, user.getId()); +// else +// getWorkflowStatusOutputList = computeService.getAllNotRunningWorkflows(projectId, user.getId()); +// +// return new GetWorkflowsOutputModel(getWorkflowStatusOutputList); +// } +//} diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java index dac3c9a5..ec4e0476 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java @@ -4,9 +4,9 @@ import org.phyloviz.pwp.http.models.isolate_data.UploadIsolateDataOutputModel; import org.phyloviz.pwp.http.models.typing_data.UploadTypingDataOutputModel; import org.phyloviz.pwp.service.FileTransferService; -import org.phyloviz.pwp.shared.domain.User; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.UploadIsolateDataOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.UploadTypingDataOutput; +import org.phyloviz.pwp.domain.User; +import org.phyloviz.pwp.service.dtos.files.isolate_data.UploadIsolateDataOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.UploadTypingDataOutput; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java index e90fb1a7..cdd9bfb6 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java @@ -9,12 +9,12 @@ import org.phyloviz.pwp.http.models.typing_data.get_typing_data_profiles.GetTypingDataProfilesOutputModel; import org.phyloviz.pwp.http.models.typing_data.get_typing_data_schema.GetTypingDataSchemaOutputModel; import org.phyloviz.pwp.service.VisualizationService; -import org.phyloviz.pwp.shared.domain.User; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; +import org.phyloviz.pwp.domain.User; +import org.phyloviz.pwp.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.GetTypingDataProfilesOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.GetTypingDataSchemaOutput; +import org.phyloviz.pwp.service.dtos.tree_view.GetTreeViewOutput; +import org.phyloviz.pwp.service.dtos.tree_view.SaveTreeViewOutput; import org.springframework.web.bind.annotation.*; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java index a882cfdf..1783ead4 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java @@ -12,8 +12,8 @@ import org.phyloviz.pwp.service.dtos.project.FullProjectInfo; import org.phyloviz.pwp.service.dtos.project.UpdateProjectOutput; import org.phyloviz.pwp.service.project.ProjectService; -import org.phyloviz.pwp.shared.domain.User; -import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; +import org.phyloviz.pwp.domain.User; +import org.phyloviz.pwp.repository.metadata.project.documents.Project; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java index 1da86137..c338da56 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java @@ -15,7 +15,7 @@ import org.phyloviz.pwp.service.dtos.dataset.SetIsolateDataOfDatasetOutput; import org.phyloviz.pwp.service.dtos.dataset.UpdateDatasetOutput; import org.phyloviz.pwp.service.project.dataset.DatasetService; -import org.phyloviz.pwp.shared.domain.User; +import org.phyloviz.pwp.domain.User; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java index 7067fa88..bed3e33f 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java @@ -6,7 +6,7 @@ import org.phyloviz.pwp.http.models.distance_matrices.update_distance_matrix.UpdateDistanceMatrixOutputModel; import org.phyloviz.pwp.service.dtos.distance_matrix.UpdateDistanceMatrixOutput; import org.phyloviz.pwp.service.project.dataset.distance_matrix.DistanceMatrixService; -import org.phyloviz.pwp.shared.domain.User; +import org.phyloviz.pwp.domain.User; import org.springframework.web.bind.annotation.*; /** diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java index 036bee98..de6c652c 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java @@ -6,7 +6,7 @@ import org.phyloviz.pwp.http.models.tree_views.update_tree_view.UpdateTreeViewOutputModel; import org.phyloviz.pwp.service.dtos.tree_view.UpdateTreeViewOutput; import org.phyloviz.pwp.service.project.dataset.tree_view.TreeViewService; -import org.phyloviz.pwp.shared.domain.User; +import org.phyloviz.pwp.domain.User; import org.springframework.web.bind.annotation.*; /** diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java index 18220fce..5cbb9aa7 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java @@ -6,7 +6,7 @@ import org.phyloviz.pwp.http.models.trees.update_tree_view.UpdateTreeOutputModel; import org.phyloviz.pwp.service.dtos.tree.UpdateTreeOutput; import org.phyloviz.pwp.service.project.dataset.tree.TreeService; -import org.phyloviz.pwp.shared.domain.User; +import org.phyloviz.pwp.domain.User; import org.springframework.web.bind.annotation.*; /** diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java index 61c21113..528fe725 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java @@ -11,7 +11,7 @@ import org.phyloviz.pwp.service.dtos.files.typing_data.UpdateTypingDataOutput; import org.phyloviz.pwp.service.project.file.IsolateDataService; import org.phyloviz.pwp.service.project.file.TypingDataService; -import org.phyloviz.pwp.shared.domain.User; +import org.phyloviz.pwp.domain.User; import org.springframework.web.bind.annotation.*; /** diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java index a8cb56da..299d99b2 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.http.models.get_tree_view; import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Edge; +import org.phyloviz.pwp.service.dtos.tree_view.Edge; @Data public class EdgeModel { diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java index 6374bd29..c621c25d 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java @@ -2,7 +2,7 @@ import lombok.Data; import org.phyloviz.pwp.http.models.save_tree_view.TransformationsModel; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; +import org.phyloviz.pwp.service.dtos.tree_view.GetTreeViewOutput; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java index df5c35c5..55e18ce2 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java @@ -2,7 +2,7 @@ import lombok.Data; import lombok.NoArgsConstructor; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Node; +import org.phyloviz.pwp.service.dtos.tree_view.Node; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java index 035899d0..204c4d96 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.http.models.isolate_data; import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.IsolateDataRow; +import org.phyloviz.pwp.service.dtos.files.isolate_data.IsolateDataRow; import java.util.Map; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java index e87443c2..562e41ff 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.http.models.isolate_data; import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.UploadIsolateDataOutput; +import org.phyloviz.pwp.service.dtos.files.isolate_data.UploadIsolateDataOutput; @Data public class UploadIsolateDataOutputModel { diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java index 15d16f04..1696d49c 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java @@ -2,7 +2,7 @@ import lombok.Data; import org.phyloviz.pwp.http.models.isolate_data.IsolateDataRowModel; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; +import org.phyloviz.pwp.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java index ea3e1135..9d68871e 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.http.models.projects.get_projects; import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; +import org.phyloviz.pwp.repository.metadata.project.documents.Project; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java index b809ec73..48b0c8f2 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.http.models.projects.get_projects; import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; +import org.phyloviz.pwp.repository.metadata.project.documents.Project; @Data public class GetProjectsProjectModel { diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java index df2d0f61..824403d8 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java @@ -2,7 +2,7 @@ import lombok.Data; import org.phyloviz.pwp.http.models.get_tree_view.NodeModel; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewInput; +import org.phyloviz.pwp.service.dtos.tree_view.SaveTreeViewInput; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java index 7306e5c8..9c36929e 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.http.models.save_tree_view; import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; +import org.phyloviz.pwp.service.dtos.tree_view.SaveTreeViewOutput; /** * Output model for the save tree view endpoint. diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java index f82b7447..be2053cf 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java @@ -2,7 +2,7 @@ import lombok.Data; import lombok.NoArgsConstructor; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Transformations; +import org.phyloviz.pwp.service.dtos.tree_view.Transformations; /** * Transformations model for the Tree View. diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java index 25d4252c..f793e06d 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.http.models.typing_data; import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.TypingDataProfile; +import org.phyloviz.pwp.service.dtos.files.typing_data.TypingDataProfile; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java index 6f72fc63..485204cf 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.http.models.typing_data; import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.UploadTypingDataOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.UploadTypingDataOutput; @Data public class UploadTypingDataOutputModel { diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java index fc0eada3..b8156591 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java @@ -2,7 +2,7 @@ import lombok.Data; import org.phyloviz.pwp.http.models.typing_data.TypingDataProfileModel; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.GetTypingDataProfilesOutput; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java index bb544120..a702dd12 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.http.models.typing_data.get_typing_data_schema; import lombok.Data; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.GetTypingDataSchemaOutput; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java index f2dbbebe..401cdf98 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java @@ -2,9 +2,9 @@ import org.phyloviz.pwp.service.exceptions.DeniedFileDeletionException; import org.phyloviz.pwp.service.exceptions.DeniedResourceDeletionException; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.IsolateDataDoesNotExistException; -import org.phyloviz.pwp.shared.service.exceptions.TypingDataDoesNotExistException; +import org.phyloviz.pwp.service.exceptions.InvalidArgumentException; +import org.phyloviz.pwp.service.exceptions.IsolateDataDoesNotExistException; +import org.phyloviz.pwp.service.exceptions.TypingDataDoesNotExistException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.zalando.problem.Problem; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/UserArgumentResolver.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/UserArgumentResolver.java similarity index 92% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/UserArgumentResolver.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/UserArgumentResolver.java index c244c28d..2ffafaf0 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/UserArgumentResolver.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/UserArgumentResolver.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.http.pipeline; +package org.phyloviz.pwp.http.pipeline; -import org.phyloviz.pwp.shared.domain.User; +import org.phyloviz.pwp.domain.User; import org.springframework.core.MethodParameter; import org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthentication; import org.springframework.stereotype.Component; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/ProblemJsonResponseBodyAdvice.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/ProblemJsonResponseBodyAdvice.java similarity index 97% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/ProblemJsonResponseBodyAdvice.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/ProblemJsonResponseBodyAdvice.java index d2f5b080..7f28a525 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/ProblemJsonResponseBodyAdvice.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/ProblemJsonResponseBodyAdvice.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.http.pipeline.advice; +package org.phyloviz.pwp.http.pipeline.advice; import org.springframework.core.MethodParameter; import org.springframework.http.HttpStatus; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/exception/handlers/AuthenticationExceptionHandler.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/AuthenticationExceptionHandler.java similarity index 90% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/exception/handlers/AuthenticationExceptionHandler.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/AuthenticationExceptionHandler.java index d332386a..ca1b2f88 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/exception/handlers/AuthenticationExceptionHandler.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/AuthenticationExceptionHandler.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.http.pipeline.advice.exception.handlers; +package org.phyloviz.pwp.http.pipeline.advice.exception.handlers; import org.springframework.security.core.AuthenticationException; import org.springframework.web.bind.annotation.ExceptionHandler; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java similarity index 97% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java index 5e0dc202..20bedfb0 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java @@ -1,10 +1,10 @@ -package org.phyloviz.pwp.shared.http.pipeline.advice.exception.handlers; +package org.phyloviz.pwp.http.pipeline.advice.exception.handlers; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.exc.IgnoredPropertyException; import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException; -import org.phyloviz.pwp.shared.service.exceptions.*; +import org.phyloviz.pwp.service.exceptions.*; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepository.java similarity index 94% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepository.java index eaff9d62..a4f177d2 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepository.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data; +package org.phyloviz.pwp.repository.data; import org.springframework.web.multipart.MultipartFile; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepositoryImpl.java similarity index 96% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepositoryImpl.java index e5ad8c7f..a791bc31 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/S3FileRepositoryImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepositoryImpl.java @@ -1,7 +1,7 @@ -package org.phyloviz.pwp.shared.repository.data; +package org.phyloviz.pwp.repository.data; -import org.phyloviz.pwp.shared.service.exceptions.FileCorruptedException; -import org.phyloviz.pwp.shared.service.exceptions.MultipartFileReadException; +import org.phyloviz.pwp.service.exceptions.FileCorruptedException; +import org.phyloviz.pwp.service.exceptions.MultipartFileReadException; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Repository; import org.springframework.web.multipart.MultipartFile; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java new file mode 100644 index 00000000..91fee1a5 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java @@ -0,0 +1,5 @@ +package org.phyloviz.pwp.repository.data.distance_matrix; + +public enum DistanceMatrixDataRepositoryId { + S3 +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/DistanceMatrixDataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixDataRepository.java similarity index 57% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/DistanceMatrixDataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixDataRepository.java index 296b143b..a54ca8dc 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/DistanceMatrixDataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixDataRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.data.distance_matrix.repository; +package org.phyloviz.pwp.repository.data.distance_matrix.repository; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; public interface DistanceMatrixDataRepository { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/DistanceMatrixS3DataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixS3DataRepository.java similarity index 69% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/DistanceMatrixS3DataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixS3DataRepository.java index 28cacd99..ef627e46 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/DistanceMatrixS3DataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixS3DataRepository.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.distance_matrix.repository; +package org.phyloviz.pwp.repository.data.distance_matrix.repository; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.S3FileRepository; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixS3DataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.S3FileRepository; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.specific_data.DistanceMatrixS3DataRepositorySpecificData; import org.springframework.stereotype.Repository; @Repository diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java new file mode 100644 index 00000000..66929fb5 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java @@ -0,0 +1,4 @@ +package org.phyloviz.pwp.repository.data.distance_matrix.repository.specific_data; + +public interface DistanceMatrixDataRepositorySpecificData { +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/specific_data/DistanceMatrixS3DataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixS3DataRepositorySpecificData.java similarity index 70% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/specific_data/DistanceMatrixS3DataRepositorySpecificData.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixS3DataRepositorySpecificData.java index 6bf06152..43fa77ce 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/specific_data/DistanceMatrixS3DataRepositorySpecificData.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixS3DataRepositorySpecificData.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data; +package org.phyloviz.pwp.repository.data.distance_matrix.repository.specific_data; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/IsolateDataDataRepositoryId.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/IsolateDataDataRepositoryId.java similarity index 51% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/IsolateDataDataRepositoryId.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/IsolateDataDataRepositoryId.java index f03a381f..bc8fa7dd 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/IsolateDataDataRepositoryId.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/IsolateDataDataRepositoryId.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.isolate_data; +package org.phyloviz.pwp.repository.data.isolate_data; public enum IsolateDataDataRepositoryId { S3, diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/IsolateDataDataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataDataRepository.java similarity index 69% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/IsolateDataDataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataDataRepository.java index 89c3d7da..c91e3977 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/IsolateDataDataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataDataRepository.java @@ -1,7 +1,7 @@ -package org.phyloviz.pwp.shared.repository.data.isolate_data.repository; +package org.phyloviz.pwp.repository.data.isolate_data.repository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; +import org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; +import org.phyloviz.pwp.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; import org.springframework.web.multipart.MultipartFile; public interface IsolateDataDataRepository { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java similarity index 78% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java index d6105eab..a288f509 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java @@ -1,10 +1,10 @@ -package org.phyloviz.pwp.shared.repository.data.isolate_data.repository; +package org.phyloviz.pwp.repository.data.isolate_data.repository; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.S3FileRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; +import org.phyloviz.pwp.repository.data.S3FileRepository; +import org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data.IsolateDataS3DataRepositorySpecificData; +import org.phyloviz.pwp.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; import org.springframework.stereotype.Repository; import org.springframework.web.multipart.MultipartFile; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java new file mode 100644 index 00000000..8b7b53c7 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java @@ -0,0 +1,4 @@ +package org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data; + +public interface IsolateDataDataRepositorySpecificData { +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/specific_data/IsolateDataPhyloDBDataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataPhyloDBDataRepositorySpecificData.java similarity index 76% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/specific_data/IsolateDataPhyloDBDataRepositorySpecificData.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataPhyloDBDataRepositorySpecificData.java index f076b26a..e4a89647 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/specific_data/IsolateDataPhyloDBDataRepositorySpecificData.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataPhyloDBDataRepositorySpecificData.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data; +package org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/specific_data/IsolateDataS3DataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataS3DataRepositorySpecificData.java similarity index 77% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/specific_data/IsolateDataS3DataRepositorySpecificData.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataS3DataRepositorySpecificData.java index 56b6c081..3646d4f9 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/specific_data/IsolateDataS3DataRepositorySpecificData.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataS3DataRepositorySpecificData.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data; +package org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/AbstractDataRepositoryRegistry.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/AbstractDataRepositoryRegistry.java similarity index 97% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/AbstractDataRepositoryRegistry.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/AbstractDataRepositoryRegistry.java index 1d9ce5d7..e2e58d4b 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/AbstractDataRepositoryRegistry.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/AbstractDataRepositoryRegistry.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.registry; +package org.phyloviz.pwp.repository.data.registry; import jakarta.annotation.PostConstruct; import org.springframework.context.ApplicationContext; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/DataRepositoryFactory.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryFactory.java similarity index 89% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/DataRepositoryFactory.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryFactory.java index e21fe918..d2a8f967 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/DataRepositoryFactory.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryFactory.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.registry; +package org.phyloviz.pwp.repository.data.registry; import lombok.RequiredArgsConstructor; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/DataRepositoryRegistry.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryRegistry.java similarity index 90% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/DataRepositoryRegistry.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryRegistry.java index b888822f..cd54ef29 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/DataRepositoryRegistry.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryRegistry.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.registry; +package org.phyloviz.pwp.repository.data.registry; public interface DataRepositoryRegistry, R, D> { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryFactory.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryFactory.java similarity index 50% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryFactory.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryFactory.java index 0f04af8c..847bfdb1 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryFactory.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryFactory.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.registry.distance_matrix; +package org.phyloviz.pwp.repository.data.registry.distance_matrix; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixDataRepository; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.DataRepositoryFactory; +import org.phyloviz.pwp.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.DistanceMatrixDataRepository; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.DataRepositoryFactory; import org.springframework.stereotype.Component; @Component diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java new file mode 100644 index 00000000..09c1a1b4 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java @@ -0,0 +1,10 @@ +package org.phyloviz.pwp.repository.data.registry.distance_matrix; + +import org.phyloviz.pwp.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.DistanceMatrixDataRepository; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.DataRepositoryRegistry; + +public interface DistanceMatrixDataRepositoryRegistry extends + DataRepositoryRegistry { +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistryImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistryImpl.java similarity index 62% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistryImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistryImpl.java index 2cf1fb61..76764a47 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistryImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistryImpl.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.registry.distance_matrix; +package org.phyloviz.pwp.repository.data.registry.distance_matrix; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixDataRepository; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.AbstractDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.DistanceMatrixDataRepository; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.AbstractDataRepositoryRegistry; import org.springframework.context.ApplicationContext; import java.util.Map; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/isolate_data/IsolateDataDataRepositoryFactory.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryFactory.java similarity index 50% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/isolate_data/IsolateDataDataRepositoryFactory.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryFactory.java index 960eac3f..a8049063 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/isolate_data/IsolateDataDataRepositoryFactory.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryFactory.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.registry.isolate_data; +package org.phyloviz.pwp.repository.data.registry.isolate_data; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.DataRepositoryFactory; +import org.phyloviz.pwp.repository.data.isolate_data.IsolateDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.isolate_data.repository.IsolateDataDataRepository; +import org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.DataRepositoryFactory; import org.springframework.stereotype.Component; @Component diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java new file mode 100644 index 00000000..51e6ac2e --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java @@ -0,0 +1,10 @@ +package org.phyloviz.pwp.repository.data.registry.isolate_data; + +import org.phyloviz.pwp.repository.data.isolate_data.IsolateDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.isolate_data.repository.IsolateDataDataRepository; +import org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.DataRepositoryRegistry; + +public interface IsolateDataDataRepositoryRegistry extends + DataRepositoryRegistry { +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistryImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistryImpl.java similarity index 62% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistryImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistryImpl.java index f11e3aab..44d5e459 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistryImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistryImpl.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.registry.isolate_data; +package org.phyloviz.pwp.repository.data.registry.isolate_data; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.AbstractDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.isolate_data.IsolateDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.isolate_data.repository.IsolateDataDataRepository; +import org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.AbstractDataRepositoryRegistry; import org.springframework.context.ApplicationContext; import java.util.Map; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree/TreeDataRepositoryFactory.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryFactory.java similarity index 51% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree/TreeDataRepositoryFactory.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryFactory.java index 6a4251d5..359c92be 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree/TreeDataRepositoryFactory.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryFactory.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.registry.tree; +package org.phyloviz.pwp.repository.data.registry.tree; -import org.phyloviz.pwp.shared.repository.data.registry.DataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.DataRepositoryFactory; +import org.phyloviz.pwp.repository.data.tree.TreeDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree.repository.TreeDataRepository; +import org.phyloviz.pwp.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; import org.springframework.stereotype.Component; @Component diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistry.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistry.java new file mode 100644 index 00000000..62c0cb73 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistry.java @@ -0,0 +1,10 @@ +package org.phyloviz.pwp.repository.data.registry.tree; + +import org.phyloviz.pwp.repository.data.registry.DataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.tree.TreeDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree.repository.TreeDataRepository; +import org.phyloviz.pwp.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; + +public interface TreeDataRepositoryRegistry extends + DataRepositoryRegistry { +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree/TreeDataRepositoryRegistryImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistryImpl.java similarity index 62% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree/TreeDataRepositoryRegistryImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistryImpl.java index 22e1637b..5017e56f 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree/TreeDataRepositoryRegistryImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistryImpl.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.registry.tree; +package org.phyloviz.pwp.repository.data.registry.tree; -import org.phyloviz.pwp.shared.repository.data.registry.AbstractDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.AbstractDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.tree.TreeDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree.repository.TreeDataRepository; +import org.phyloviz.pwp.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; import org.springframework.context.ApplicationContext; import java.util.Map; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree_view/TreeViewDataRepositoryFactory.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryFactory.java similarity index 51% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree_view/TreeViewDataRepositoryFactory.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryFactory.java index 43d8c29e..60b564a8 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree_view/TreeViewDataRepositoryFactory.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryFactory.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.registry.tree_view; +package org.phyloviz.pwp.repository.data.registry.tree_view; -import org.phyloviz.pwp.shared.repository.data.registry.DataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.DataRepositoryFactory; +import org.phyloviz.pwp.repository.data.tree_view.TreeViewDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree_view.repository.TreeViewDataRepository; +import org.phyloviz.pwp.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; import org.springframework.stereotype.Component; @Component diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java new file mode 100644 index 00000000..503a4dd1 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java @@ -0,0 +1,10 @@ +package org.phyloviz.pwp.repository.data.registry.tree_view; + +import org.phyloviz.pwp.repository.data.registry.DataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.tree_view.TreeViewDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree_view.repository.TreeViewDataRepository; +import org.phyloviz.pwp.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; + +public interface TreeViewDataRepositoryRegistry extends + DataRepositoryRegistry { +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree_view/TreeViewDataRepositoryRegistryImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistryImpl.java similarity index 62% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree_view/TreeViewDataRepositoryRegistryImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistryImpl.java index 632498d8..5ff237ad 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree_view/TreeViewDataRepositoryRegistryImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistryImpl.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.registry.tree_view; +package org.phyloviz.pwp.repository.data.registry.tree_view; -import org.phyloviz.pwp.shared.repository.data.registry.AbstractDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.AbstractDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.tree_view.TreeViewDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree_view.repository.TreeViewDataRepository; +import org.phyloviz.pwp.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; import org.springframework.context.ApplicationContext; import java.util.Map; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/typing_data/TypingDataDataRepositoryFactory.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryFactory.java similarity index 51% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/typing_data/TypingDataDataRepositoryFactory.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryFactory.java index c3260495..0cd671b4 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/typing_data/TypingDataDataRepositoryFactory.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryFactory.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.registry.typing_data; +package org.phyloviz.pwp.repository.data.registry.typing_data; -import org.phyloviz.pwp.shared.repository.data.registry.DataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.DataRepositoryFactory; +import org.phyloviz.pwp.repository.data.typing_data.TypingDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.typing_data.repository.TypingDataDataRepository; +import org.phyloviz.pwp.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; import org.springframework.stereotype.Component; @Component diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java new file mode 100644 index 00000000..0d3cad47 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java @@ -0,0 +1,10 @@ +package org.phyloviz.pwp.repository.data.registry.typing_data; + +import org.phyloviz.pwp.repository.data.registry.DataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.typing_data.TypingDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.typing_data.repository.TypingDataDataRepository; +import org.phyloviz.pwp.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; + +public interface TypingDataDataRepositoryRegistry extends + DataRepositoryRegistry { +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/typing_data/TypingDataDataRepositoryRegistryImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistryImpl.java similarity index 62% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/typing_data/TypingDataDataRepositoryRegistryImpl.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistryImpl.java index 7f1b6de5..81fa9030 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/typing_data/TypingDataDataRepositoryRegistryImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistryImpl.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.registry.typing_data; +package org.phyloviz.pwp.repository.data.registry.typing_data; -import org.phyloviz.pwp.shared.repository.data.registry.AbstractDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.AbstractDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.typing_data.TypingDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.typing_data.repository.TypingDataDataRepository; +import org.phyloviz.pwp.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; import org.springframework.context.ApplicationContext; import java.util.Map; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/TreeDataRepositoryId.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/TreeDataRepositoryId.java similarity index 51% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/TreeDataRepositoryId.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/TreeDataRepositoryId.java index baf43251..448f57f7 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/TreeDataRepositoryId.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/TreeDataRepositoryId.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.tree; +package org.phyloviz.pwp.repository.data.tree; public enum TreeDataRepositoryId { PHYLODB, diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/TreeDataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeDataRepository.java similarity index 54% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/TreeDataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeDataRepository.java index d22d757b..a17f52b3 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/TreeDataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeDataRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.data.tree.repository; +package org.phyloviz.pwp.repository.data.tree.repository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; public interface TreeDataRepository { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/TreeS3DataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeS3DataRepository.java similarity index 72% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/TreeS3DataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeS3DataRepository.java index 8cea1ef7..37f61f81 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/TreeS3DataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeS3DataRepository.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.tree.repository; +package org.phyloviz.pwp.repository.data.tree.repository; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.S3FileRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeS3DataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.S3FileRepository; +import org.phyloviz.pwp.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.tree.repository.specific_data.TreeS3DataRepositorySpecificData; import org.springframework.stereotype.Repository; @Repository diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java new file mode 100644 index 00000000..c1806160 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java @@ -0,0 +1,4 @@ +package org.phyloviz.pwp.repository.data.tree.repository.specific_data; + +public interface TreeDataRepositorySpecificData { +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/specific_data/TreePhyloDBDataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreePhyloDBDataRepositorySpecificData.java similarity index 77% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/specific_data/TreePhyloDBDataRepositorySpecificData.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreePhyloDBDataRepositorySpecificData.java index fdc93792..9a665a6c 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/specific_data/TreePhyloDBDataRepositorySpecificData.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreePhyloDBDataRepositorySpecificData.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data; +package org.phyloviz.pwp.repository.data.tree.repository.specific_data; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/specific_data/TreeS3DataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeS3DataRepositorySpecificData.java similarity index 71% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/specific_data/TreeS3DataRepositorySpecificData.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeS3DataRepositorySpecificData.java index a3464943..cccd0c2e 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/specific_data/TreeS3DataRepositorySpecificData.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeS3DataRepositorySpecificData.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data; +package org.phyloviz.pwp.repository.data.tree.repository.specific_data; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/TreeViewDataRepositoryId.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/TreeViewDataRepositoryId.java similarity index 51% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/TreeViewDataRepositoryId.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/TreeViewDataRepositoryId.java index e6d523b9..3ef54c6a 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/TreeViewDataRepositoryId.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/TreeViewDataRepositoryId.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.tree_view; +package org.phyloviz.pwp.repository.data.tree_view; public enum TreeViewDataRepositoryId { PHYLODB, diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/TreeViewDataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewDataRepository.java similarity index 54% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/TreeViewDataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewDataRepository.java index 491b48d9..0521a6bf 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/TreeViewDataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewDataRepository.java @@ -1,8 +1,8 @@ -package org.phyloviz.pwp.shared.repository.data.tree_view.repository; +package org.phyloviz.pwp.repository.data.tree_view.repository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Node; +import org.phyloviz.pwp.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; +import org.phyloviz.pwp.service.dtos.tree_view.GetTreeViewOutput; +import org.phyloviz.pwp.service.dtos.tree_view.Node; import java.util.List; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/TreeViewS3DataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewS3DataRepository.java similarity index 72% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/TreeViewS3DataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewS3DataRepository.java index c9826616..48ade0e3 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/TreeViewS3DataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewS3DataRepository.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.data.tree_view.repository; +package org.phyloviz.pwp.repository.data.tree_view.repository; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Node; +import org.phyloviz.pwp.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; +import org.phyloviz.pwp.service.dtos.tree_view.GetTreeViewOutput; +import org.phyloviz.pwp.service.dtos.tree_view.Node; import org.springframework.stereotype.Repository; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java new file mode 100644 index 00000000..7a793749 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java @@ -0,0 +1,4 @@ +package org.phyloviz.pwp.repository.data.tree_view.repository.specific_data; + +public interface TreeViewDataRepositorySpecificData { +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/specific_data/TreeViewPhyloDBDataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewPhyloDBDataRepositorySpecificData.java similarity index 78% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/specific_data/TreeViewPhyloDBDataRepositorySpecificData.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewPhyloDBDataRepositorySpecificData.java index 39b12028..f169a9b0 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/specific_data/TreeViewPhyloDBDataRepositorySpecificData.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewPhyloDBDataRepositorySpecificData.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data; +package org.phyloviz.pwp.repository.data.tree_view.repository.specific_data; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/specific_data/TreeViewS3DataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewS3DataRepositorySpecificData.java similarity index 71% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/specific_data/TreeViewS3DataRepositorySpecificData.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewS3DataRepositorySpecificData.java index c5181aae..cac460ad 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/specific_data/TreeViewS3DataRepositorySpecificData.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewS3DataRepositorySpecificData.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data; +package org.phyloviz.pwp.repository.data.tree_view.repository.specific_data; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/TypingDataDataRepositoryId.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/TypingDataDataRepositoryId.java similarity index 51% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/TypingDataDataRepositoryId.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/TypingDataDataRepositoryId.java index c314cdf6..522065b4 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/TypingDataDataRepositoryId.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/TypingDataDataRepositoryId.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.typing_data; +package org.phyloviz.pwp.repository.data.typing_data; public enum TypingDataDataRepositoryId { S3, diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/TypingDataDataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataDataRepository.java similarity index 67% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/TypingDataDataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataDataRepository.java index d9fd0b21..84cc989e 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/TypingDataDataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataDataRepository.java @@ -1,8 +1,8 @@ -package org.phyloviz.pwp.shared.repository.data.typing_data.repository; +package org.phyloviz.pwp.repository.data.typing_data.repository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; +import org.phyloviz.pwp.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; +import org.phyloviz.pwp.service.dtos.files.typing_data.GetTypingDataProfilesOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.GetTypingDataSchemaOutput; import org.springframework.web.multipart.MultipartFile; public interface TypingDataDataRepository { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/TypingDataS3DataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataS3DataRepository.java similarity index 77% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/TypingDataS3DataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataS3DataRepository.java index 2b6a566f..4a269f61 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/TypingDataS3DataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataS3DataRepository.java @@ -1,11 +1,11 @@ -package org.phyloviz.pwp.shared.repository.data.typing_data.repository; +package org.phyloviz.pwp.repository.data.typing_data.repository; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.S3FileRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataS3DataRepositorySpecificData; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; +import org.phyloviz.pwp.repository.data.S3FileRepository; +import org.phyloviz.pwp.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.typing_data.repository.specific_data.TypingDataS3DataRepositorySpecificData; +import org.phyloviz.pwp.service.dtos.files.typing_data.GetTypingDataProfilesOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.GetTypingDataSchemaOutput; import org.springframework.stereotype.Repository; import org.springframework.web.multipart.MultipartFile; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java new file mode 100644 index 00000000..3b079b34 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java @@ -0,0 +1,4 @@ +package org.phyloviz.pwp.repository.data.typing_data.repository.specific_data; + +public interface TypingDataDataRepositorySpecificData { +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/specific_data/TypingDataPhyloDBDataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataPhyloDBDataRepositorySpecificData.java similarity index 76% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/specific_data/TypingDataPhyloDBDataRepositorySpecificData.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataPhyloDBDataRepositorySpecificData.java index c65f51d6..0575dd41 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/specific_data/TypingDataPhyloDBDataRepositorySpecificData.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataPhyloDBDataRepositorySpecificData.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data; +package org.phyloviz.pwp.repository.data.typing_data.repository.specific_data; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/specific_data/TypingDataS3DataRepositorySpecificData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataS3DataRepositorySpecificData.java similarity index 77% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/specific_data/TypingDataS3DataRepositorySpecificData.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataS3DataRepositorySpecificData.java index efa254b4..6557ef9c 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/specific_data/TypingDataS3DataRepositorySpecificData.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataS3DataRepositorySpecificData.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data; +package org.phyloviz.pwp.repository.data.typing_data.repository.specific_data; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/DocumentConversionException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/DocumentConversionException.java similarity index 74% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/DocumentConversionException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/DocumentConversionException.java index 68c21062..083c08dc 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/DocumentConversionException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/DocumentConversionException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.metadata; +package org.phyloviz.pwp.repository.metadata; public class DocumentConversionException extends RuntimeException { public DocumentConversionException(String message) { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/dataset/DatasetRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/DatasetRepository.java similarity index 88% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/dataset/DatasetRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/DatasetRepository.java index 91a0adf5..2326c30e 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/dataset/DatasetRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/DatasetRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.dataset; +package org.phyloviz.pwp.repository.metadata.dataset; -import org.phyloviz.pwp.shared.repository.metadata.dataset.documents.Dataset; +import org.phyloviz.pwp.repository.metadata.dataset.documents.Dataset; import java.util.List; import java.util.Optional; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/dataset/documents/Dataset.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/documents/Dataset.java similarity index 92% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/dataset/documents/Dataset.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/documents/Dataset.java index a56a04e9..464bbb9d 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/dataset/documents/Dataset.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/documents/Dataset.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.metadata.dataset.documents; +package org.phyloviz.pwp.repository.metadata.dataset.documents; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/dataset/mongo/DatasetMongoRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetMongoRepository.java similarity index 84% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/dataset/mongo/DatasetMongoRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetMongoRepository.java index 84177cb2..58ce1360 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/dataset/mongo/DatasetMongoRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetMongoRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.dataset.mongo; +package org.phyloviz.pwp.repository.metadata.dataset.mongo; -import org.phyloviz.pwp.shared.repository.metadata.dataset.documents.Dataset; +import org.phyloviz.pwp.repository.metadata.dataset.documents.Dataset; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/dataset/mongo/DatasetRepositoryMongo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetRepositoryMongo.java similarity index 88% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/dataset/mongo/DatasetRepositoryMongo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetRepositoryMongo.java index b0fc90d1..92f20b9d 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/dataset/mongo/DatasetRepositoryMongo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetRepositoryMongo.java @@ -1,8 +1,8 @@ -package org.phyloviz.pwp.shared.repository.metadata.dataset.mongo; +package org.phyloviz.pwp.repository.metadata.dataset.mongo; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.dataset.documents.Dataset; +import org.phyloviz.pwp.repository.metadata.dataset.DatasetRepository; +import org.phyloviz.pwp.repository.metadata.dataset.documents.Dataset; import org.springframework.stereotype.Repository; import java.util.List; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/DistanceMatrixMetadataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/DistanceMatrixMetadataRepository.java similarity index 90% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/DistanceMatrixMetadataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/DistanceMatrixMetadataRepository.java index 638903cd..3ea0341f 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/DistanceMatrixMetadataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/DistanceMatrixMetadataRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.distance_matrix; +package org.phyloviz.pwp.repository.metadata.distance_matrix; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; import java.util.List; import java.util.Optional; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/DistanceMatrixMetadata.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/DistanceMatrixMetadata.java similarity index 72% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/DistanceMatrixMetadata.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/DistanceMatrixMetadata.java index ea276958..d3edca2b 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/DistanceMatrixMetadata.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/DistanceMatrixMetadata.java @@ -1,12 +1,12 @@ -package org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents; +package org.phyloviz.pwp.repository.metadata.distance_matrix.documents; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source.DistanceMatrixSource; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceType; +import org.phyloviz.pwp.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.source.DistanceMatrixSource; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceType; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/converters/DistanceMatrixMetadataDeserializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/converters/DistanceMatrixMetadataDeserializer.java similarity index 77% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/converters/DistanceMatrixMetadataDeserializer.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/converters/DistanceMatrixMetadataDeserializer.java index 4f32e784..5d3a92a0 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/converters/DistanceMatrixMetadataDeserializer.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/converters/DistanceMatrixMetadataDeserializer.java @@ -1,14 +1,14 @@ -package org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.converters; +package org.phyloviz.pwp.repository.metadata.distance_matrix.documents.converters; import lombok.RequiredArgsConstructor; import org.bson.Document; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.metadata.DocumentConversionException; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source.DistanceMatrixSource; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceType; +import org.phyloviz.pwp.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryRegistry; +import org.phyloviz.pwp.repository.metadata.DocumentConversionException; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.source.DistanceMatrixSource; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceType; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.ReadingConverter; import org.springframework.data.mongodb.core.convert.MongoConverter; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java new file mode 100644 index 00000000..542a9054 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java @@ -0,0 +1,4 @@ +package org.phyloviz.pwp.repository.metadata.distance_matrix.documents.source; + +public interface DistanceMatrixSource { +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceFunction.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceFunction.java similarity index 73% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceFunction.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceFunction.java index ffafedf1..576ea499 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceFunction.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceFunction.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source; +package org.phyloviz.pwp.repository.metadata.distance_matrix.documents.source; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceType.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceType.java similarity index 74% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceType.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceType.java index 4698b9b2..b1fce8f6 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceType.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceType.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source; +package org.phyloviz.pwp.repository.metadata.distance_matrix.documents.source; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataMongoRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataMongoRepository.java similarity index 88% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataMongoRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataMongoRepository.java index 29f2db1d..4cbc04cf 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataMongoRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataMongoRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.distance_matrix.mongo; +package org.phyloviz.pwp.repository.metadata.distance_matrix.mongo; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataRepositoryMongo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataRepositoryMongo.java similarity index 88% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataRepositoryMongo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataRepositoryMongo.java index 28aba5a7..86f72f39 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataRepositoryMongo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataRepositoryMongo.java @@ -1,8 +1,8 @@ -package org.phyloviz.pwp.shared.repository.metadata.distance_matrix.mongo; +package org.phyloviz.pwp.repository.metadata.distance_matrix.mongo; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.DistanceMatrixMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; +import org.phyloviz.pwp.repository.metadata.distance_matrix.DistanceMatrixMetadataRepository; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Repository; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/IsolateDataMetadataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/IsolateDataMetadataRepository.java similarity index 90% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/IsolateDataMetadataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/IsolateDataMetadataRepository.java index d364f0ca..f7cefed0 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/IsolateDataMetadataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/IsolateDataMetadataRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.isolate_data; +package org.phyloviz.pwp.repository.metadata.isolate_data; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.IsolateDataMetadata; import java.util.List; import java.util.Optional; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/documents/IsolateDataMetadata.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/IsolateDataMetadata.java similarity index 79% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/documents/IsolateDataMetadata.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/IsolateDataMetadata.java index 72c1ca79..967de8c7 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/documents/IsolateDataMetadata.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/IsolateDataMetadata.java @@ -1,10 +1,10 @@ -package org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents; +package org.phyloviz.pwp.repository.metadata.isolate_data.documents; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.isolate_data.IsolateDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataDeserializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataDeserializer.java similarity index 79% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataDeserializer.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataDeserializer.java index fb15cf5d..2996435a 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataDeserializer.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataDeserializer.java @@ -1,12 +1,12 @@ -package org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.converters; +package org.phyloviz.pwp.repository.metadata.isolate_data.documents.converters; import lombok.RequiredArgsConstructor; import org.bson.Document; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.metadata.DocumentConversionException; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; +import org.phyloviz.pwp.repository.data.isolate_data.IsolateDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.isolate_data.IsolateDataDataRepositoryRegistry; +import org.phyloviz.pwp.repository.metadata.DocumentConversionException; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.IsolateDataMetadata; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.ReadingConverter; import org.springframework.data.mongodb.core.convert.MongoConverter; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataSerializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataSerializer.java similarity index 87% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataSerializer.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataSerializer.java index ecf24e45..16d62e0a 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataSerializer.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataSerializer.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.converters; +package org.phyloviz.pwp.repository.metadata.isolate_data.documents.converters; import lombok.RequiredArgsConstructor; import org.bson.Document; -import org.phyloviz.pwp.shared.repository.metadata.DocumentConversionException; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; +import org.phyloviz.pwp.repository.metadata.DocumentConversionException; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.IsolateDataMetadata; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.WritingConverter; import org.springframework.data.mongodb.core.convert.MongoConverter; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/mongo/IsolateDataMetadataMongoRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataMongoRepository.java similarity index 88% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/mongo/IsolateDataMetadataMongoRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataMongoRepository.java index f9d9d8fb..ab6af236 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/mongo/IsolateDataMetadataMongoRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataMongoRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.isolate_data.mongo; +package org.phyloviz.pwp.repository.metadata.isolate_data.mongo; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.IsolateDataMetadata; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/mongo/IsolateDataMetadataRepositoryMongo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataRepositoryMongo.java similarity index 87% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/mongo/IsolateDataMetadataRepositoryMongo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataRepositoryMongo.java index 20e7257b..ebfbb544 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/isolate_data/mongo/IsolateDataMetadataRepositoryMongo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataRepositoryMongo.java @@ -1,8 +1,8 @@ -package org.phyloviz.pwp.shared.repository.metadata.isolate_data.mongo; +package org.phyloviz.pwp.repository.metadata.isolate_data.mongo; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; +import org.phyloviz.pwp.repository.metadata.isolate_data.IsolateDataMetadataRepository; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.IsolateDataMetadata; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Repository; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/ProjectRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/ProjectRepository.java similarity index 90% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/ProjectRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/ProjectRepository.java index 9fd12d98..85366cb2 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/ProjectRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/ProjectRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.project; +package org.phyloviz.pwp.repository.metadata.project; -import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; +import org.phyloviz.pwp.repository.metadata.project.documents.Project; import java.util.List; import java.util.Optional; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/documents/FileIds.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/FileIds.java similarity index 78% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/documents/FileIds.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/FileIds.java index 2b7a56c8..1f8a50da 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/documents/FileIds.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/FileIds.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.metadata.project.documents; +package org.phyloviz.pwp.repository.metadata.project.documents; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/documents/Project.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/Project.java similarity index 90% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/documents/Project.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/Project.java index f29c703b..341e4531 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/documents/Project.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/Project.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.metadata.project.documents; +package org.phyloviz.pwp.repository.metadata.project.documents; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/mongo/ProjectMongoRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectMongoRepository.java similarity index 88% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/mongo/ProjectMongoRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectMongoRepository.java index ab4a8340..0e48f7d5 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/mongo/ProjectMongoRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectMongoRepository.java @@ -1,7 +1,7 @@ -package org.phyloviz.pwp.shared.repository.metadata.project.mongo; +package org.phyloviz.pwp.repository.metadata.project.mongo; -import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; +import org.phyloviz.pwp.repository.metadata.project.documents.Project; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/mongo/ProjectRepositoryMongo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectRepositoryMongo.java similarity index 83% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/mongo/ProjectRepositoryMongo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectRepositoryMongo.java index b797f619..dbfe1b5f 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/project/mongo/ProjectRepositoryMongo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectRepositoryMongo.java @@ -1,8 +1,8 @@ -package org.phyloviz.pwp.shared.repository.metadata.project.mongo; +package org.phyloviz.pwp.repository.metadata.project.mongo; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; +import org.phyloviz.pwp.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.repository.metadata.project.documents.Project; import org.springframework.stereotype.Repository; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java index 3fb4dc2e..c6e86ce7 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java @@ -6,7 +6,7 @@ import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.AccessDetailsTemplate; import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.AccessTemplate; import org.phyloviz.pwp.repository.metadata.templates.tool_template.documents.access.AccessTypeTemplate; -import org.phyloviz.pwp.shared.repository.metadata.DocumentConversionException; +import org.phyloviz.pwp.repository.metadata.DocumentConversionException; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.ReadingConverter; import org.springframework.data.mongodb.core.convert.MongoConverter; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/TreeMetadataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/TreeMetadataRepository.java similarity index 91% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/TreeMetadataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/TreeMetadataRepository.java index 7fd8b9ae..541ec151 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/TreeMetadataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/TreeMetadataRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree; +package org.phyloviz.pwp.repository.metadata.tree; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.TreeMetadata; +import org.phyloviz.pwp.repository.metadata.tree.documents.TreeMetadata; import java.util.List; import java.util.Optional; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/TreeMetadata.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/TreeMetadata.java similarity index 72% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/TreeMetadata.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/TreeMetadata.java index 3fb4d354..412da763 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/TreeMetadata.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/TreeMetadata.java @@ -1,12 +1,12 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree.documents; +package org.phyloviz.pwp.repository.metadata.tree.documents; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSource; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceType; +import org.phyloviz.pwp.repository.data.tree.TreeDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; +import org.phyloviz.pwp.repository.metadata.tree.documents.source.TreeSource; +import org.phyloviz.pwp.repository.metadata.tree.documents.source.TreeSourceType; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/converters/TreeMetadataDeserializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/converters/TreeMetadataDeserializer.java similarity index 79% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/converters/TreeMetadataDeserializer.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/converters/TreeMetadataDeserializer.java index f791efc5..944dcc20 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/converters/TreeMetadataDeserializer.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/converters/TreeMetadataDeserializer.java @@ -1,14 +1,14 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree.documents.converters; +package org.phyloviz.pwp.repository.metadata.tree.documents.converters; import lombok.RequiredArgsConstructor; import org.bson.Document; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.DocumentConversionException; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.TreeMetadata; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSource; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceType; +import org.phyloviz.pwp.repository.data.registry.tree.TreeDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.tree.TreeDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; +import org.phyloviz.pwp.repository.metadata.DocumentConversionException; +import org.phyloviz.pwp.repository.metadata.tree.documents.TreeMetadata; +import org.phyloviz.pwp.repository.metadata.tree.documents.source.TreeSource; +import org.phyloviz.pwp.repository.metadata.tree.documents.source.TreeSourceType; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.ReadingConverter; import org.springframework.data.mongodb.core.convert.MongoConverter; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSource.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSource.java new file mode 100644 index 00000000..b53412d3 --- /dev/null +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSource.java @@ -0,0 +1,4 @@ +package org.phyloviz.pwp.repository.metadata.tree.documents.source; + +public interface TreeSource { +} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSourceAlgorithmDistanceMatrix.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmDistanceMatrix.java similarity index 80% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSourceAlgorithmDistanceMatrix.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmDistanceMatrix.java index 3c465782..ff5eeb5b 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSourceAlgorithmDistanceMatrix.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmDistanceMatrix.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree.documents.source; +package org.phyloviz.pwp.repository.metadata.tree.documents.source; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSourceAlgorithmTypingData.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmTypingData.java similarity index 79% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSourceAlgorithmTypingData.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmTypingData.java index d820a68b..0f4e1269 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSourceAlgorithmTypingData.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmTypingData.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree.documents.source; +package org.phyloviz.pwp.repository.metadata.tree.documents.source; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSourceFile.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceFile.java similarity index 76% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSourceFile.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceFile.java index 638b3a6c..2e377b70 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSourceFile.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceFile.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree.documents.source; +package org.phyloviz.pwp.repository.metadata.tree.documents.source; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSourceType.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceType.java similarity index 82% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSourceType.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceType.java index 84a934ac..4e52733f 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSourceType.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceType.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree.documents.source; +package org.phyloviz.pwp.repository.metadata.tree.documents.source; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/mongo/TreeMetadataMongoRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataMongoRepository.java similarity index 91% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/mongo/TreeMetadataMongoRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataMongoRepository.java index 78a84a31..39f3394c 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/mongo/TreeMetadataMongoRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataMongoRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree.mongo; +package org.phyloviz.pwp.repository.metadata.tree.mongo; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.TreeMetadata; +import org.phyloviz.pwp.repository.metadata.tree.documents.TreeMetadata; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; import org.springframework.stereotype.Repository; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/mongo/TreeMetadataRepositoryMongo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataRepositoryMongo.java similarity index 89% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/mongo/TreeMetadataRepositoryMongo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataRepositoryMongo.java index 6c8ab99c..569dd63e 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/mongo/TreeMetadataRepositoryMongo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataRepositoryMongo.java @@ -1,8 +1,8 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree.mongo; +package org.phyloviz.pwp.repository.metadata.tree.mongo; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.metadata.tree.TreeMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.TreeMetadata; +import org.phyloviz.pwp.repository.metadata.tree.TreeMetadataRepository; +import org.phyloviz.pwp.repository.metadata.tree.documents.TreeMetadata; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Repository; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/TreeViewMetadataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/TreeViewMetadataRepository.java similarity index 91% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/TreeViewMetadataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/TreeViewMetadataRepository.java index 814cf17a..adaeb567 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/TreeViewMetadataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/TreeViewMetadataRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree_view; +package org.phyloviz.pwp.repository.metadata.tree_view; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.TreeViewMetadata; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.TreeViewMetadata; import java.util.List; import java.util.Optional; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/documents/TreeViewMetadata.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/TreeViewMetadata.java similarity index 74% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/documents/TreeViewMetadata.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/TreeViewMetadata.java index fd09e118..55278984 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/documents/TreeViewMetadata.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/TreeViewMetadata.java @@ -1,12 +1,12 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree_view.documents; +package org.phyloviz.pwp.repository.metadata.tree_view.documents; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.source.TreeViewSource; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Transformations; +import org.phyloviz.pwp.repository.data.tree_view.TreeViewDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.source.TreeViewSource; +import org.phyloviz.pwp.service.dtos.tree_view.Transformations; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/documents/converters/TreeViewMetadataDeserializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataDeserializer.java similarity index 78% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/documents/converters/TreeViewMetadataDeserializer.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataDeserializer.java index 4f5fc35f..273ebf06 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/documents/converters/TreeViewMetadataDeserializer.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataDeserializer.java @@ -1,14 +1,14 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.converters; +package org.phyloviz.pwp.repository.metadata.tree_view.documents.converters; import lombok.RequiredArgsConstructor; import org.bson.Document; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.DocumentConversionException; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.TreeViewMetadata; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.source.TreeViewSource; -import org.phyloviz.pwp.shared.service.dtos.tree_view.Transformations; +import org.phyloviz.pwp.repository.data.registry.tree_view.TreeViewDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.tree_view.TreeViewDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; +import org.phyloviz.pwp.repository.metadata.DocumentConversionException; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.TreeViewMetadata; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.source.TreeViewSource; +import org.phyloviz.pwp.service.dtos.tree_view.Transformations; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.ReadingConverter; import org.springframework.data.mongodb.core.convert.MongoConverter; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/documents/converters/TreeViewMetadataSerializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataSerializer.java similarity index 90% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/documents/converters/TreeViewMetadataSerializer.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataSerializer.java index 91df0a52..724286e0 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/documents/converters/TreeViewMetadataSerializer.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataSerializer.java @@ -1,10 +1,10 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.converters; +package org.phyloviz.pwp.repository.metadata.tree_view.documents.converters; import lombok.RequiredArgsConstructor; import org.bson.Document; import org.bson.types.ObjectId; -import org.phyloviz.pwp.shared.repository.metadata.DocumentConversionException; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.TreeViewMetadata; +import org.phyloviz.pwp.repository.metadata.DocumentConversionException; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.TreeViewMetadata; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.WritingConverter; import org.springframework.data.mongodb.core.convert.MongoConverter; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/documents/source/TreeViewSource.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/source/TreeViewSource.java similarity index 70% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/documents/source/TreeViewSource.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/source/TreeViewSource.java index 7fcdb01e..bd2c1a9e 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/documents/source/TreeViewSource.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/source/TreeViewSource.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.source; +package org.phyloviz.pwp.repository.metadata.tree_view.documents.source; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/mongo/TreeViewMetadataMongoRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataMongoRepository.java similarity index 91% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/mongo/TreeViewMetadataMongoRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataMongoRepository.java index 6d330b05..44d8d565 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/mongo/TreeViewMetadataMongoRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataMongoRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree_view.mongo; +package org.phyloviz.pwp.repository.metadata.tree_view.mongo; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.TreeViewMetadata; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.TreeViewMetadata; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; import org.springframework.stereotype.Repository; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/mongo/TreeViewMetadataRepositoryMongo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataRepositoryMongo.java similarity index 89% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/mongo/TreeViewMetadataRepositoryMongo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataRepositoryMongo.java index c56d1456..24d645f6 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree_view/mongo/TreeViewMetadataRepositoryMongo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataRepositoryMongo.java @@ -1,8 +1,8 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree_view.mongo; +package org.phyloviz.pwp.repository.metadata.tree_view.mongo; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.TreeViewMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.TreeViewMetadata; +import org.phyloviz.pwp.repository.metadata.tree_view.TreeViewMetadataRepository; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.TreeViewMetadata; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Repository; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/TypingDataMetadataRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/TypingDataMetadataRepository.java similarity index 90% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/TypingDataMetadataRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/TypingDataMetadataRepository.java index 7cafbc1d..e60f9a2a 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/TypingDataMetadataRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/TypingDataMetadataRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.typing_data; +package org.phyloviz.pwp.repository.metadata.typing_data; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.TypingDataMetadata; import java.util.List; import java.util.Optional; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/documents/TypingDataMetadata.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/TypingDataMetadata.java similarity index 79% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/documents/TypingDataMetadata.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/TypingDataMetadata.java index ce964512..30995929 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/documents/TypingDataMetadata.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/TypingDataMetadata.java @@ -1,10 +1,10 @@ -package org.phyloviz.pwp.shared.repository.metadata.typing_data.documents; +package org.phyloviz.pwp.repository.metadata.typing_data.documents; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.typing_data.TypingDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/documents/converters/TypingDataMetadataDeserializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataDeserializer.java similarity index 79% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/documents/converters/TypingDataMetadataDeserializer.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataDeserializer.java index 58f8572c..93c052d0 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/documents/converters/TypingDataMetadataDeserializer.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataDeserializer.java @@ -1,12 +1,12 @@ -package org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.converters; +package org.phyloviz.pwp.repository.metadata.typing_data.documents.converters; import lombok.RequiredArgsConstructor; import org.bson.Document; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.DocumentConversionException; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; +import org.phyloviz.pwp.repository.data.registry.typing_data.TypingDataDataRepositoryRegistry; +import org.phyloviz.pwp.repository.data.typing_data.TypingDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.metadata.DocumentConversionException; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.TypingDataMetadata; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.ReadingConverter; import org.springframework.data.mongodb.core.convert.MongoConverter; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/documents/converters/TypingDataMetadataSerializer.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataSerializer.java similarity index 87% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/documents/converters/TypingDataMetadataSerializer.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataSerializer.java index 201f4a89..48ebe893 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/documents/converters/TypingDataMetadataSerializer.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataSerializer.java @@ -1,9 +1,9 @@ -package org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.converters; +package org.phyloviz.pwp.repository.metadata.typing_data.documents.converters; import lombok.RequiredArgsConstructor; import org.bson.Document; -import org.phyloviz.pwp.shared.repository.metadata.DocumentConversionException; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; +import org.phyloviz.pwp.repository.metadata.DocumentConversionException; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.TypingDataMetadata; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.WritingConverter; import org.springframework.data.mongodb.core.convert.MongoConverter; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/mongo/TypingDataMetadataMongoRepository.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataMongoRepository.java similarity index 88% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/mongo/TypingDataMetadataMongoRepository.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataMongoRepository.java index 0f01158e..043d638a 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/mongo/TypingDataMetadataMongoRepository.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataMongoRepository.java @@ -1,6 +1,6 @@ -package org.phyloviz.pwp.shared.repository.metadata.typing_data.mongo; +package org.phyloviz.pwp.repository.metadata.typing_data.mongo; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.TypingDataMetadata; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/mongo/TypingDataMetadataRepositoryMongo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataRepositoryMongo.java similarity index 87% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/mongo/TypingDataMetadataRepositoryMongo.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataRepositoryMongo.java index 90df75d7..f06b59ef 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/typing_data/mongo/TypingDataMetadataRepositoryMongo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataRepositoryMongo.java @@ -1,8 +1,8 @@ -package org.phyloviz.pwp.shared.repository.metadata.typing_data.mongo; +package org.phyloviz.pwp.repository.metadata.typing_data.mongo; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.TypingDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; +import org.phyloviz.pwp.repository.metadata.typing_data.TypingDataMetadataRepository; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.TypingDataMetadata; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Repository; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java index 5d4de231..d937c6ad 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java @@ -26,9 +26,9 @@ import org.phyloviz.pwp.service.flowviz.models.tool.Tool; import org.phyloviz.pwp.service.flowviz.models.workflow.GetWorkflowTaskLogResponse; import org.phyloviz.pwp.service.flowviz.models.workflow.Workflow; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; -import org.phyloviz.pwp.shared.utils.UUIDUtils; +import org.phyloviz.pwp.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.service.exceptions.ProjectNotFoundException; +import org.phyloviz.pwp.utils.UUIDUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -36,8 +36,8 @@ import java.util.List; import java.util.Map; -@Service -@Transactional +//@Service +//@Transactional public class ComputeServiceImpl implements ComputeService { private final ProjectRepository projectRepository; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferService.java index d4ef76c0..3faddc8f 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferService.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferService.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.service; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.UploadIsolateDataOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.UploadTypingDataOutput; +import org.phyloviz.pwp.service.dtos.files.isolate_data.UploadIsolateDataOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.UploadTypingDataOutput; import org.springframework.web.multipart.MultipartFile; /** diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java index eb56d22a..40ebd41d 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java @@ -1,22 +1,22 @@ package org.phyloviz.pwp.service; import lombok.RequiredArgsConstructor; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.TypingDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.UploadIsolateDataOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.UploadTypingDataOutput; -import org.phyloviz.pwp.shared.service.exceptions.*; +import org.phyloviz.pwp.repository.data.isolate_data.IsolateDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.isolate_data.repository.IsolateDataDataRepository; +import org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.isolate_data.IsolateDataDataRepositoryFactory; +import org.phyloviz.pwp.repository.data.registry.typing_data.TypingDataDataRepositoryFactory; +import org.phyloviz.pwp.repository.data.typing_data.TypingDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.typing_data.repository.TypingDataDataRepository; +import org.phyloviz.pwp.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.metadata.isolate_data.IsolateDataMetadataRepository; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.IsolateDataMetadata; +import org.phyloviz.pwp.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.repository.metadata.typing_data.TypingDataMetadataRepository; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.TypingDataMetadata; +import org.phyloviz.pwp.service.dtos.files.isolate_data.UploadIsolateDataOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.UploadTypingDataOutput; +import org.phyloviz.pwp.service.exceptions.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationService.java index 6669162c..edbf45ca 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationService.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationService.java @@ -1,11 +1,11 @@ package org.phyloviz.pwp.service; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewInput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; +import org.phyloviz.pwp.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.GetTypingDataProfilesOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.GetTypingDataSchemaOutput; +import org.phyloviz.pwp.service.dtos.tree_view.GetTreeViewOutput; +import org.phyloviz.pwp.service.dtos.tree_view.SaveTreeViewInput; +import org.phyloviz.pwp.service.dtos.tree_view.SaveTreeViewOutput; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java index 31a19f74..99135ae3 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java @@ -2,45 +2,45 @@ import lombok.RequiredArgsConstructor; import org.phyloviz.pwp.service.exceptions.IndexingNeededException; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixDataRepository; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.DistanceMatrixMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree.TreeMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.TreeMetadata; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.TreeViewMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.TreeViewMetadata; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.TypingDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; -import org.phyloviz.pwp.shared.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataProfilesOutput; -import org.phyloviz.pwp.shared.service.dtos.files.typing_data.GetTypingDataSchemaOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.GetTreeViewOutput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewInput; -import org.phyloviz.pwp.shared.service.dtos.tree_view.SaveTreeViewOutput; -import org.phyloviz.pwp.shared.service.exceptions.*; +import org.phyloviz.pwp.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.DistanceMatrixDataRepository; +import org.phyloviz.pwp.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.isolate_data.IsolateDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.isolate_data.repository.IsolateDataDataRepository; +import org.phyloviz.pwp.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryFactory; +import org.phyloviz.pwp.repository.data.registry.isolate_data.IsolateDataDataRepositoryFactory; +import org.phyloviz.pwp.repository.data.registry.tree.TreeDataRepositoryFactory; +import org.phyloviz.pwp.repository.data.registry.tree_view.TreeViewDataRepositoryFactory; +import org.phyloviz.pwp.repository.data.registry.typing_data.TypingDataDataRepositoryFactory; +import org.phyloviz.pwp.repository.data.tree.TreeDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree.repository.TreeDataRepository; +import org.phyloviz.pwp.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.tree_view.TreeViewDataRepositoryId; +import org.phyloviz.pwp.repository.data.tree_view.repository.TreeViewDataRepository; +import org.phyloviz.pwp.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; +import org.phyloviz.pwp.repository.data.typing_data.TypingDataDataRepositoryId; +import org.phyloviz.pwp.repository.data.typing_data.repository.TypingDataDataRepository; +import org.phyloviz.pwp.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; +import org.phyloviz.pwp.repository.metadata.dataset.DatasetRepository; +import org.phyloviz.pwp.repository.metadata.distance_matrix.DistanceMatrixMetadataRepository; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; +import org.phyloviz.pwp.repository.metadata.isolate_data.IsolateDataMetadataRepository; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.IsolateDataMetadata; +import org.phyloviz.pwp.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.repository.metadata.tree.TreeMetadataRepository; +import org.phyloviz.pwp.repository.metadata.tree.documents.TreeMetadata; +import org.phyloviz.pwp.repository.metadata.tree_view.TreeViewMetadataRepository; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.TreeViewMetadata; +import org.phyloviz.pwp.repository.metadata.typing_data.TypingDataMetadataRepository; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.TypingDataMetadata; +import org.phyloviz.pwp.service.dtos.files.isolate_data.GetIsolateDataRowsOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.GetTypingDataProfilesOutput; +import org.phyloviz.pwp.service.dtos.files.typing_data.GetTypingDataSchemaOutput; +import org.phyloviz.pwp.service.dtos.tree_view.GetTreeViewOutput; +import org.phyloviz.pwp.service.dtos.tree_view.SaveTreeViewInput; +import org.phyloviz.pwp.service.dtos.tree_view.SaveTreeViewOutput; +import org.phyloviz.pwp.service.exceptions.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixInfo.java index bc9a007d..173f4844 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixInfo.java @@ -1,9 +1,9 @@ package org.phyloviz.pwp.service.dtos.distance_matrix; import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceFunction; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceType; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceFunction; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceType; @Data public class DistanceMatrixInfo { diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java index bb735d69..0a2d9133 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.service.dtos.distance_matrix; import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceFunction; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.source.DistanceMatrixSourceFunction; @Data public class DistanceMatrixSourceFunctionInfo implements DistanceMatrixSourceInfo { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/isolate_data/GetIsolateDataRowsOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/GetIsolateDataRowsOutput.java similarity index 77% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/isolate_data/GetIsolateDataRowsOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/GetIsolateDataRowsOutput.java index 82e3af64..634650fe 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/isolate_data/GetIsolateDataRowsOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/GetIsolateDataRowsOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.files.isolate_data; +package org.phyloviz.pwp.service.dtos.files.isolate_data; import lombok.Data; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataInfo.java index 93d8bf21..f0df3fac 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataInfo.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.service.dtos.files.isolate_data; import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.IsolateDataMetadata; import java.util.List; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/isolate_data/IsolateDataRow.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataRow.java similarity index 77% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/isolate_data/IsolateDataRow.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataRow.java index 4393018e..e7fbf1be 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/isolate_data/IsolateDataRow.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataRow.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.files.isolate_data; +package org.phyloviz.pwp.service.dtos.files.isolate_data; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/isolate_data/UploadIsolateDataOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UploadIsolateDataOutput.java similarity index 69% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/isolate_data/UploadIsolateDataOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UploadIsolateDataOutput.java index 79922869..a97c3c53 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/isolate_data/UploadIsolateDataOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UploadIsolateDataOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.files.isolate_data; +package org.phyloviz.pwp.service.dtos.files.isolate_data; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/typing_data/GetTypingDataProfilesOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataProfilesOutput.java similarity index 78% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/typing_data/GetTypingDataProfilesOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataProfilesOutput.java index 3337a7a5..c583d2d7 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/typing_data/GetTypingDataProfilesOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataProfilesOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.files.typing_data; +package org.phyloviz.pwp.service.dtos.files.typing_data; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/typing_data/GetTypingDataSchemaOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataSchemaOutput.java similarity index 77% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/typing_data/GetTypingDataSchemaOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataSchemaOutput.java index 16c1213c..e5559730 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/typing_data/GetTypingDataSchemaOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataSchemaOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.files.typing_data; +package org.phyloviz.pwp.service.dtos.files.typing_data; import lombok.Data; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataInfo.java index 31f9cd2c..41714252 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataInfo.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.service.dtos.files.typing_data; import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.TypingDataMetadata; @Data public class TypingDataInfo { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/typing_data/TypingDataProfile.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataProfile.java similarity index 75% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/typing_data/TypingDataProfile.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataProfile.java index ee3580a0..6cbeba7b 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/typing_data/TypingDataProfile.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataProfile.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.files.typing_data; +package org.phyloviz.pwp.service.dtos.files.typing_data; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/typing_data/UploadTypingDataOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UploadTypingDataOutput.java similarity index 69% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/typing_data/UploadTypingDataOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UploadTypingDataOutput.java index 606f2536..f53b2349 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/files/typing_data/UploadTypingDataOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UploadTypingDataOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.files.typing_data; +package org.phyloviz.pwp.service.dtos.files.typing_data; import lombok.Data; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java index 6fe2f5ca..68a94cfe 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java @@ -1,11 +1,11 @@ package org.phyloviz.pwp.service.dtos.tree; import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.TreeMetadata; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceAlgorithmDistanceMatrix; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceAlgorithmTypingData; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceFile; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceType; +import org.phyloviz.pwp.repository.metadata.tree.documents.TreeMetadata; +import org.phyloviz.pwp.repository.metadata.tree.documents.source.TreeSourceAlgorithmDistanceMatrix; +import org.phyloviz.pwp.repository.metadata.tree.documents.source.TreeSourceAlgorithmTypingData; +import org.phyloviz.pwp.repository.metadata.tree.documents.source.TreeSourceFile; +import org.phyloviz.pwp.repository.metadata.tree.documents.source.TreeSourceType; @Data public class TreeInfo { diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java index 33f4cf14..d5d29430 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.service.dtos.tree; import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceAlgorithmDistanceMatrix; +import org.phyloviz.pwp.repository.metadata.tree.documents.source.TreeSourceAlgorithmDistanceMatrix; @Data public class TreeSourceAlgorithmDistanceMatrixInfo implements TreeSourceInfo { diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java index 1e72c5d0..c1f9d53a 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.service.dtos.tree; import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceAlgorithmTypingData; +import org.phyloviz.pwp.repository.metadata.tree.documents.source.TreeSourceAlgorithmTypingData; @Data public class TreeSourceAlgorithmTypingDataInfo implements TreeSourceInfo { diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java index 107ecfe3..96b3b5c3 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.service.dtos.tree; import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.source.TreeSourceFile; +import org.phyloviz.pwp.repository.metadata.tree.documents.source.TreeSourceFile; @Data public class TreeSourceFileInfo implements TreeSourceInfo { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/Edge.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Edge.java similarity index 71% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/Edge.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Edge.java index 307f5892..81f98195 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/Edge.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Edge.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.tree_view; +package org.phyloviz.pwp.service.dtos.tree_view; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/GetTreeViewOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/GetTreeViewOutput.java similarity index 85% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/GetTreeViewOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/GetTreeViewOutput.java index 911e7c3d..d12e6f95 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/GetTreeViewOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/GetTreeViewOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.tree_view; +package org.phyloviz.pwp.service.dtos.tree_view; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/Node.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Node.java similarity index 79% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/Node.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Node.java index a252bd1c..8237fb1f 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/Node.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Node.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.tree_view; +package org.phyloviz.pwp.service.dtos.tree_view; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/SaveTreeViewInput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewInput.java similarity index 79% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/SaveTreeViewInput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewInput.java index 59fc26f1..df58845e 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/SaveTreeViewInput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewInput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.tree_view; +package org.phyloviz.pwp.service.dtos.tree_view; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/SaveTreeViewOutput.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewOutput.java similarity index 79% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/SaveTreeViewOutput.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewOutput.java index 71e8805d..a0fe184b 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/SaveTreeViewOutput.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewOutput.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.tree_view; +package org.phyloviz.pwp.service.dtos.tree_view; import lombok.Data; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/Transformations.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Transformations.java similarity index 91% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/Transformations.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Transformations.java index fe368c43..a2b54b1f 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/dtos/tree_view/Transformations.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Transformations.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.dtos.tree_view; +package org.phyloviz.pwp.service.dtos.tree_view; import lombok.Data; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java index 026978c2..76da434f 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.service.dtos.tree_view; import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.TreeViewMetadata; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.TreeViewMetadata; @Data public class TreeViewInfo { diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewSourceInfo.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewSourceInfo.java index bd52ef4d..a2e52bd2 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewSourceInfo.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewSourceInfo.java @@ -1,7 +1,7 @@ package org.phyloviz.pwp.service.dtos.tree_view; import lombok.Data; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.source.TreeViewSource; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.source.TreeViewSource; @Data public class TreeViewSourceInfo { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/DatasetNotFoundException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetNotFoundException.java similarity index 74% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/DatasetNotFoundException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetNotFoundException.java index 28843aef..fe12b54d 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/DatasetNotFoundException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetNotFoundException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class DatasetNotFoundException extends RuntimeException { public DatasetNotFoundException() { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/DistanceMatrixNotFoundException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixNotFoundException.java similarity index 76% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/DistanceMatrixNotFoundException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixNotFoundException.java index 78148b44..2ee8a4d4 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/DistanceMatrixNotFoundException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixNotFoundException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class DistanceMatrixNotFoundException extends RuntimeException { public DistanceMatrixNotFoundException() { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/FileCorruptedException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/FileCorruptedException.java similarity index 74% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/FileCorruptedException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/FileCorruptedException.java index ca2f33d0..b3639f28 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/FileCorruptedException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/FileCorruptedException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class FileCorruptedException extends RuntimeException { public FileCorruptedException(String message) { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/InvalidArgumentException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidArgumentException.java similarity index 73% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/InvalidArgumentException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidArgumentException.java index 0a2f9ccb..ff0d7fdb 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/InvalidArgumentException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidArgumentException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class InvalidArgumentException extends RuntimeException { public InvalidArgumentException(String msg) { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/IsolateDataDoesNotExistException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataDoesNotExistException.java similarity index 76% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/IsolateDataDoesNotExistException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataDoesNotExistException.java index 84ad41e4..1d4c45af 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/IsolateDataDoesNotExistException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataDoesNotExistException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class IsolateDataDoesNotExistException extends RuntimeException { public IsolateDataDoesNotExistException() { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/IsolateDataNotFoundException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataNotFoundException.java similarity index 75% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/IsolateDataNotFoundException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataNotFoundException.java index e46f7561..38eb59fa 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/IsolateDataNotFoundException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataNotFoundException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class IsolateDataNotFoundException extends RuntimeException { public IsolateDataNotFoundException() { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/MultipartFileReadException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/MultipartFileReadException.java similarity index 75% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/MultipartFileReadException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/MultipartFileReadException.java index 0405eb90..b9c39d1a 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/MultipartFileReadException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/MultipartFileReadException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class MultipartFileReadException extends RuntimeException { public MultipartFileReadException(String msg, Throwable e) { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/ProjectNotFoundException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectNotFoundException.java similarity index 74% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/ProjectNotFoundException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectNotFoundException.java index 36f01c83..ed3102d6 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/ProjectNotFoundException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectNotFoundException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class ProjectNotFoundException extends RuntimeException { public ProjectNotFoundException() { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/TreeNotFoundException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeNotFoundException.java similarity index 73% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/TreeNotFoundException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeNotFoundException.java index e7d062d7..c764a4b1 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/TreeNotFoundException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeNotFoundException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class TreeNotFoundException extends RuntimeException { public TreeNotFoundException() { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/TreeViewNotFoundException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewNotFoundException.java similarity index 74% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/TreeViewNotFoundException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewNotFoundException.java index 3fa186a8..ee79e0d8 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/TreeViewNotFoundException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewNotFoundException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class TreeViewNotFoundException extends RuntimeException { public TreeViewNotFoundException() { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/TypingDataDoesNotExistException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataDoesNotExistException.java similarity index 76% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/TypingDataDoesNotExistException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataDoesNotExistException.java index a8b4eec6..8240a7f0 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/TypingDataDoesNotExistException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataDoesNotExistException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class TypingDataDoesNotExistException extends RuntimeException { public TypingDataDoesNotExistException() { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/TypingDataNotFoundException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataNotFoundException.java similarity index 75% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/TypingDataNotFoundException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataNotFoundException.java index acda88c9..03d64376 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/TypingDataNotFoundException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataNotFoundException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class TypingDataNotFoundException extends RuntimeException { public TypingDataNotFoundException() { diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/UnauthorizedException.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/UnauthorizedException.java similarity index 76% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/UnauthorizedException.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/UnauthorizedException.java index bdefbd8c..94a0db0f 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/service/exceptions/UnauthorizedException.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/UnauthorizedException.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.service.exceptions; +package org.phyloviz.pwp.service.exceptions; public class UnauthorizedException extends RuntimeException { public UnauthorizedException() { diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectService.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectService.java index 2d8aba10..4bdbe88a 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectService.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectService.java @@ -3,7 +3,7 @@ import org.phyloviz.pwp.service.dtos.project.CreateProjectOutput; import org.phyloviz.pwp.service.dtos.project.FullProjectInfo; import org.phyloviz.pwp.service.dtos.project.UpdateProjectOutput; -import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; +import org.phyloviz.pwp.repository.metadata.project.documents.Project; import java.util.List; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectServiceImpl.java index b0ff95a9..92bdff13 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectServiceImpl.java @@ -8,10 +8,10 @@ import org.phyloviz.pwp.service.project.dataset.DatasetService; import org.phyloviz.pwp.service.project.file.IsolateDataService; import org.phyloviz.pwp.service.project.file.TypingDataService; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.project.documents.Project; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; +import org.phyloviz.pwp.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.repository.metadata.project.documents.Project; +import org.phyloviz.pwp.service.exceptions.InvalidArgumentException; +import org.phyloviz.pwp.service.exceptions.ProjectNotFoundException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetServiceImpl.java index f546765c..596db2c3 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetServiceImpl.java @@ -8,14 +8,14 @@ import org.phyloviz.pwp.service.project.dataset.distance_matrix.DistanceMatrixService; import org.phyloviz.pwp.service.project.dataset.tree.TreeService; import org.phyloviz.pwp.service.project.dataset.tree_view.TreeViewService; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.dataset.documents.Dataset; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.TypingDataMetadataRepository; -import org.phyloviz.pwp.shared.service.exceptions.*; -import org.phyloviz.pwp.shared.utils.UUIDUtils; +import org.phyloviz.pwp.repository.metadata.dataset.DatasetRepository; +import org.phyloviz.pwp.repository.metadata.dataset.documents.Dataset; +import org.phyloviz.pwp.repository.metadata.isolate_data.IsolateDataMetadataRepository; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.IsolateDataMetadata; +import org.phyloviz.pwp.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.repository.metadata.typing_data.TypingDataMetadataRepository; +import org.phyloviz.pwp.service.exceptions.*; +import org.phyloviz.pwp.utils.UUIDUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java index 9c9be1ea..8b2f8978 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java @@ -4,16 +4,16 @@ import org.phyloviz.pwp.service.dtos.distance_matrix.DistanceMatrixInfo; import org.phyloviz.pwp.service.dtos.distance_matrix.UpdateDistanceMatrixOutput; import org.phyloviz.pwp.service.exceptions.DeniedResourceDeletionException; -import org.phyloviz.pwp.shared.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.DistanceMatrixMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree.TreeMetadataRepository; -import org.phyloviz.pwp.shared.service.exceptions.DatasetNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.DistanceMatrixNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; +import org.phyloviz.pwp.repository.data.registry.distance_matrix.DistanceMatrixDataRepositoryFactory; +import org.phyloviz.pwp.repository.metadata.dataset.DatasetRepository; +import org.phyloviz.pwp.repository.metadata.distance_matrix.DistanceMatrixMetadataRepository; +import org.phyloviz.pwp.repository.metadata.distance_matrix.documents.DistanceMatrixMetadata; +import org.phyloviz.pwp.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.repository.metadata.tree.TreeMetadataRepository; +import org.phyloviz.pwp.service.exceptions.DatasetNotFoundException; +import org.phyloviz.pwp.service.exceptions.DistanceMatrixNotFoundException; +import org.phyloviz.pwp.service.exceptions.InvalidArgumentException; +import org.phyloviz.pwp.service.exceptions.ProjectNotFoundException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeServiceImpl.java index 3e5a1052..d1945f6d 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeServiceImpl.java @@ -4,16 +4,16 @@ import org.phyloviz.pwp.service.dtos.tree.TreeInfo; import org.phyloviz.pwp.service.dtos.tree.UpdateTreeOutput; import org.phyloviz.pwp.service.exceptions.DeniedResourceDeletionException; -import org.phyloviz.pwp.shared.repository.data.registry.tree.TreeDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree.TreeMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree.documents.TreeMetadata; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.TreeViewMetadataRepository; -import org.phyloviz.pwp.shared.service.exceptions.DatasetNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TreeNotFoundException; +import org.phyloviz.pwp.repository.data.registry.tree.TreeDataRepositoryFactory; +import org.phyloviz.pwp.repository.metadata.dataset.DatasetRepository; +import org.phyloviz.pwp.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.repository.metadata.tree.TreeMetadataRepository; +import org.phyloviz.pwp.repository.metadata.tree.documents.TreeMetadata; +import org.phyloviz.pwp.repository.metadata.tree_view.TreeViewMetadataRepository; +import org.phyloviz.pwp.service.exceptions.DatasetNotFoundException; +import org.phyloviz.pwp.service.exceptions.InvalidArgumentException; +import org.phyloviz.pwp.service.exceptions.ProjectNotFoundException; +import org.phyloviz.pwp.service.exceptions.TreeNotFoundException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewServiceImpl.java index f1c938af..48cdb2c7 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewServiceImpl.java @@ -3,15 +3,15 @@ import lombok.RequiredArgsConstructor; import org.phyloviz.pwp.service.dtos.tree_view.TreeViewInfo; import org.phyloviz.pwp.service.dtos.tree_view.UpdateTreeViewOutput; -import org.phyloviz.pwp.shared.repository.data.registry.tree_view.TreeViewDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.TreeViewMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.tree_view.documents.TreeViewMetadata; -import org.phyloviz.pwp.shared.service.exceptions.DatasetNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TreeViewNotFoundException; +import org.phyloviz.pwp.repository.data.registry.tree_view.TreeViewDataRepositoryFactory; +import org.phyloviz.pwp.repository.metadata.dataset.DatasetRepository; +import org.phyloviz.pwp.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.repository.metadata.tree_view.TreeViewMetadataRepository; +import org.phyloviz.pwp.repository.metadata.tree_view.documents.TreeViewMetadata; +import org.phyloviz.pwp.service.exceptions.DatasetNotFoundException; +import org.phyloviz.pwp.service.exceptions.InvalidArgumentException; +import org.phyloviz.pwp.service.exceptions.ProjectNotFoundException; +import org.phyloviz.pwp.service.exceptions.TreeViewNotFoundException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataServiceImpl.java index d35bbdb7..8ab78550 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataServiceImpl.java @@ -4,14 +4,14 @@ import org.phyloviz.pwp.service.dtos.files.isolate_data.IsolateDataInfo; import org.phyloviz.pwp.service.dtos.files.isolate_data.UpdateIsolateDataOutput; import org.phyloviz.pwp.service.exceptions.DeniedFileDeletionException; -import org.phyloviz.pwp.shared.repository.data.registry.isolate_data.IsolateDataDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.IsolateDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.isolate_data.documents.IsolateDataMetadata; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.IsolateDataNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; +import org.phyloviz.pwp.repository.data.registry.isolate_data.IsolateDataDataRepositoryFactory; +import org.phyloviz.pwp.repository.metadata.dataset.DatasetRepository; +import org.phyloviz.pwp.repository.metadata.isolate_data.IsolateDataMetadataRepository; +import org.phyloviz.pwp.repository.metadata.isolate_data.documents.IsolateDataMetadata; +import org.phyloviz.pwp.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.service.exceptions.InvalidArgumentException; +import org.phyloviz.pwp.service.exceptions.IsolateDataNotFoundException; +import org.phyloviz.pwp.service.exceptions.ProjectNotFoundException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataServiceImpl.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataServiceImpl.java index 2c94e55f..effe713a 100644 --- a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataServiceImpl.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataServiceImpl.java @@ -4,14 +4,14 @@ import org.phyloviz.pwp.service.dtos.files.typing_data.TypingDataInfo; import org.phyloviz.pwp.service.dtos.files.typing_data.UpdateTypingDataOutput; import org.phyloviz.pwp.service.exceptions.DeniedFileDeletionException; -import org.phyloviz.pwp.shared.repository.data.registry.typing_data.TypingDataDataRepositoryFactory; -import org.phyloviz.pwp.shared.repository.metadata.dataset.DatasetRepository; -import org.phyloviz.pwp.shared.repository.metadata.project.ProjectRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.TypingDataMetadataRepository; -import org.phyloviz.pwp.shared.repository.metadata.typing_data.documents.TypingDataMetadata; -import org.phyloviz.pwp.shared.service.exceptions.InvalidArgumentException; -import org.phyloviz.pwp.shared.service.exceptions.ProjectNotFoundException; -import org.phyloviz.pwp.shared.service.exceptions.TypingDataNotFoundException; +import org.phyloviz.pwp.repository.data.registry.typing_data.TypingDataDataRepositoryFactory; +import org.phyloviz.pwp.repository.metadata.dataset.DatasetRepository; +import org.phyloviz.pwp.repository.metadata.project.ProjectRepository; +import org.phyloviz.pwp.repository.metadata.typing_data.TypingDataMetadataRepository; +import org.phyloviz.pwp.repository.metadata.typing_data.documents.TypingDataMetadata; +import org.phyloviz.pwp.service.exceptions.InvalidArgumentException; +import org.phyloviz.pwp.service.exceptions.ProjectNotFoundException; +import org.phyloviz.pwp.service.exceptions.TypingDataNotFoundException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/utils/SharedLogger.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/utils/SharedLogger.java similarity index 97% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/utils/SharedLogger.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/utils/SharedLogger.java index c3682af8..2ee2a1ff 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/utils/SharedLogger.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/utils/SharedLogger.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.utils; +package org.phyloviz.pwp.utils; import org.slf4j.LoggerFactory; diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/utils/UUIDUtils.java b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/utils/UUIDUtils.java similarity index 94% rename from src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/utils/UUIDUtils.java rename to src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/utils/UUIDUtils.java index 7b421d0b..f9f52bd8 100644 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/utils/UUIDUtils.java +++ b/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/utils/UUIDUtils.java @@ -1,4 +1,4 @@ -package org.phyloviz.pwp.shared.utils; +package org.phyloviz.pwp.utils; import java.util.UUID; diff --git a/src/backend/microservices/pwp/src/main/resources/application.yml b/src/backend/microservices/pwp/src/main/resources/application.yml index e0e5443d..16729f78 100644 --- a/src/backend/microservices/pwp/src/main/resources/application.yml +++ b/src/backend/microservices/pwp/src/main/resources/application.yml @@ -1,9 +1,30 @@ server: port: 8088 +s3: + access-key-id: AKIATCKANASTL7VVHAEK + secret-access-key: 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 + bucket: phyloviz-web-platform + region: eu-west-3 + endpoint: https://s3.eu-west-3.amazonaws.com + spring: - config: - import: application-shared.yml + data: + mongodb: + host: localhost + port: 28017 + database: phyloviz-web-platform + authentication-database: admin + auto-index-creation: true + security: + oauth2: + resourceserver: + opaquetoken: + introspection-uri: http://localhost:8082/realms/phyloviz-web-platform/protocol/openid-connect/token/introspect + client-id: phyloviz-web-platform-client + client-secret: 3rG9M1rnH7gKX29QujY7HQedPs7KT1Iu +# jwt: +# jwk-set-uri: http://localhost:8082/realms/phyloviz-web-platform/protocol/openid-connect/certs servlet: multipart: max-file-size: 1GB diff --git a/src/backend/microservices/shared/build.gradle b/src/backend/microservices/shared/build.gradle deleted file mode 100644 index c123e211..00000000 --- a/src/backend/microservices/shared/build.gradle +++ /dev/null @@ -1,47 +0,0 @@ -plugins { - id 'java-library' - id 'org.springframework.boot' version '3.0.4' - id 'io.spring.dependency-management' version '1.1.0' - id "io.freefair.lombok" version "8.0.0-rc2" -} - -group 'phylovizwebplatform' -version '0.0.1-SNAPSHOT' -sourceCompatibility = '17' - -repositories { - mavenCentral() -} - -dependencies { - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' - - implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' - testImplementation 'org.springframework.boot:spring-boot-starter-test' - - implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2' - implementation 'org.zalando:problem-spring-web-starter:0.27.0' - - implementation 'software.amazon.awssdk:s3:2.20.28' - implementation 'software.amazon.awssdk:s3-transfer-manager:2.20.28' - - implementation 'org.reflections:reflections:0.10.2' - - implementation 'org.springframework.boot:spring-boot-starter-data-rest' - implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.6' -} - -test { - useJUnitPlatform() -} - -bootJar { - enabled = false -} - -jar { - enabled = true -} \ No newline at end of file diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/ResourceServerSharedConfig.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/ResourceServerSharedConfig.java deleted file mode 100644 index 6fe56ef7..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/config/ResourceServerSharedConfig.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.phyloviz.pwp.shared.config; - - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages = {"org.phyloviz.pwp.shared"}) -public class ResourceServerSharedConfig { - -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java deleted file mode 100644 index 5286e47b..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.phyloviz.pwp.shared.repository.data.distance_matrix; - -public enum DistanceMatrixDataRepositoryId { - S3 -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java deleted file mode 100644 index 35b70094..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data; - -public interface DistanceMatrixDataRepositorySpecificData { -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java deleted file mode 100644 index 8c82eaed..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data; - -public interface IsolateDataDataRepositorySpecificData { -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java deleted file mode 100644 index b8cacacf..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.phyloviz.pwp.shared.repository.data.registry.distance_matrix; - -import org.phyloviz.pwp.shared.repository.data.distance_matrix.DistanceMatrixDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.DistanceMatrixDataRepository; -import org.phyloviz.pwp.shared.repository.data.distance_matrix.repository.specific_data.DistanceMatrixDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.DataRepositoryRegistry; - -public interface DistanceMatrixDataRepositoryRegistry extends - DataRepositoryRegistry { -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java deleted file mode 100644 index d6c1a337..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.phyloviz.pwp.shared.repository.data.registry.isolate_data; - -import org.phyloviz.pwp.shared.repository.data.isolate_data.IsolateDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.IsolateDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.isolate_data.repository.specific_data.IsolateDataDataRepositorySpecificData; -import org.phyloviz.pwp.shared.repository.data.registry.DataRepositoryRegistry; - -public interface IsolateDataDataRepositoryRegistry extends - DataRepositoryRegistry { -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree/TreeDataRepositoryRegistry.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree/TreeDataRepositoryRegistry.java deleted file mode 100644 index f4c9bbe7..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree/TreeDataRepositoryRegistry.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.phyloviz.pwp.shared.repository.data.registry.tree; - -import org.phyloviz.pwp.shared.repository.data.registry.DataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.tree.TreeDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree.repository.TreeDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data.TreeDataRepositorySpecificData; - -public interface TreeDataRepositoryRegistry extends - DataRepositoryRegistry { -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java deleted file mode 100644 index f2121c0d..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.phyloviz.pwp.shared.repository.data.registry.tree_view; - -import org.phyloviz.pwp.shared.repository.data.registry.DataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.tree_view.TreeViewDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.TreeViewDataRepository; -import org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data.TreeViewDataRepositorySpecificData; - -public interface TreeViewDataRepositoryRegistry extends - DataRepositoryRegistry { -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java deleted file mode 100644 index 5a0df3ea..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.phyloviz.pwp.shared.repository.data.registry.typing_data; - -import org.phyloviz.pwp.shared.repository.data.registry.DataRepositoryRegistry; -import org.phyloviz.pwp.shared.repository.data.typing_data.TypingDataDataRepositoryId; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.TypingDataDataRepository; -import org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data.TypingDataDataRepositorySpecificData; - -public interface TypingDataDataRepositoryRegistry extends - DataRepositoryRegistry { -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java deleted file mode 100644 index f6411629..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.phyloviz.pwp.shared.repository.data.tree.repository.specific_data; - -public interface TreeDataRepositorySpecificData { -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java deleted file mode 100644 index 5867fe7b..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.phyloviz.pwp.shared.repository.data.tree_view.repository.specific_data; - -public interface TreeViewDataRepositorySpecificData { -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java deleted file mode 100644 index c356480c..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.phyloviz.pwp.shared.repository.data.typing_data.repository.specific_data; - -public interface TypingDataDataRepositorySpecificData { -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java deleted file mode 100644 index 5219ef39..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.phyloviz.pwp.shared.repository.metadata.distance_matrix.documents.source; - -public interface DistanceMatrixSource { -} diff --git a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSource.java b/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSource.java deleted file mode 100644 index 3309283c..00000000 --- a/src/backend/microservices/shared/src/main/java/org/phyloviz/pwp/shared/repository/metadata/tree/documents/source/TreeSource.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.phyloviz.pwp.shared.repository.metadata.tree.documents.source; - -public interface TreeSource { -} diff --git a/src/backend/microservices/shared/src/main/resources/application-shared.yml b/src/backend/microservices/shared/src/main/resources/application-shared.yml deleted file mode 100644 index 7b494a47..00000000 --- a/src/backend/microservices/shared/src/main/resources/application-shared.yml +++ /dev/null @@ -1,24 +0,0 @@ -s3: - access-key-id: AKIATCKANASTL7VVHAEK - secret-access-key: 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 - bucket: phyloviz-web-platform - region: eu-west-3 - endpoint: https://s3.eu-west-3.amazonaws.com - -spring: - data: - mongodb: - host: localhost - port: 28017 - database: phyloviz-web-platform - authentication-database: admin - auto-index-creation: true - security: - oauth2: - resourceserver: - opaquetoken: - introspection-uri: http://localhost:8082/realms/phyloviz-web-platform/protocol/openid-connect/token/introspect - client-id: phyloviz-web-platform-client - client-secret: whCCD9r37qj8mx9H7R4mzIrSezYf3H7R -# jwt: -# jwk-set-uri: http://localhost:8082/realms/phyloviz-web-platform/protocol/openid-connect/certs \ No newline at end of file diff --git a/src/backend/settings.gradle b/src/backend/settings.gradle index 7d58ccfd..153d8fa9 100644 --- a/src/backend/settings.gradle +++ b/src/backend/settings.gradle @@ -1,4 +1,3 @@ rootProject.name = 'phyloviz-web-platform' include 'microservices:gateway' -include 'microservices:shared' include 'microservices:pwp' From f357a8a402093df753b0a500a0c2062e7fb5ec84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jesus?= Date: Fri, 9 Feb 2024 22:23:26 +0000 Subject: [PATCH 7/7] Removed microservices module. --- .gitattributes | 5 +++++ docker-compose.yml | 6 +++--- src/backend/{microservices/pwp => core}/Dockerfile | 0 src/backend/{microservices/pwp => core}/build.gradle | 0 .../src/main/java/org/phyloviz/pwp/PWPApplication.java | 0 .../java/org/phyloviz/pwp/config/DataRepositoryConfig.java | 0 .../java/org/phyloviz/pwp/config/FilterChainConfig.java | 0 .../src/main/java/org/phyloviz/pwp/config/MongoConfig.java | 0 .../src/main/java/org/phyloviz/pwp/config/PWPConfig.java | 0 .../java/org/phyloviz/pwp/config/ProblemJsonConfig.java | 0 .../org/phyloviz/pwp/config/UserArgumentResolverConfig.java | 0 .../src/main/java/org/phyloviz/pwp/domain/User.java | 0 .../phyloviz/pwp/http/controllers/ComputeController.java | 0 .../pwp/http/controllers/FileTransferController.java | 0 .../pwp/http/controllers/VisualizationController.java | 0 .../pwp/http/controllers/projects/ProjectsController.java | 0 .../controllers/projects/datasets/DatasetsController.java | 0 .../distance_matrices/DistanceMatricesController.java | 0 .../projects/datasets/tree_views/TreeViewsController.java | 0 .../projects/datasets/trees/TreesController.java | 0 .../http/controllers/projects/files/FilesController.java | 0 .../models/create_workflow/CreateWorkflowInputModel.java | 0 .../models/create_workflow/CreateWorkflowOutputModel.java | 0 .../org/phyloviz/pwp/http/models/datasets/DatasetModel.java | 0 .../datasets/create_dataset/CreateDatasetInputModel.java | 0 .../datasets/create_dataset/CreateDatasetOutputModel.java | 0 .../datasets/delete_dataset/DeleteDatasetOutputModel.java | 0 .../models/datasets/get_dataset/GetDatasetOutputModel.java | 0 .../datasets/get_datasets/GetDatasetsOutputModel.java | 0 .../SetIsolateDataOfDatasetInputModel.java | 0 .../SetIsolateDataOfDatasetOutputModel.java | 0 .../datasets/update_dataset/UpdateDatasetInputModel.java | 0 .../datasets/update_dataset/UpdateDatasetOutputModel.java | 0 .../models/distance_matrices/DistanceMatrixOutputModel.java | 0 .../DistanceMatrixSourceFunctionOutputModel.java | 0 .../distance_matrices/DistanceMatrixSourceOutputModel.java | 0 .../DeleteDistanceMatrixOutputModel.java | 0 .../UpdateDistanceMatrixInputModel.java | 0 .../UpdateDistanceMatrixOutputModel.java | 0 .../java/org/phyloviz/pwp/http/models/files/FilesModel.java | 0 .../http/models/files/isolate_data/IsolateDataModel.java | 0 .../delete_isolate_data/DeleteIsolateDataOutputModel.java | 0 .../update_isolate_data/UpdateIsolateDataInputModel.java | 0 .../update_isolate_data/UpdateIsolateDataOutputModel.java | 0 .../pwp/http/models/files/typing_data/TypingDataModel.java | 0 .../delete_typing_data/DeleteTypingDataOutputModel.java | 0 .../update_typing_data/UpdateTypingDataInputModel.java | 0 .../update_typing_data/UpdateTypingDataOutputModel.java | 0 .../phyloviz/pwp/http/models/get_tree_view/EdgeModel.java | 0 .../http/models/get_tree_view/GetTreeViewOutputModel.java | 0 .../phyloviz/pwp/http/models/get_tree_view/NodeModel.java | 0 .../http/models/get_workflow/GetWorkflowOutputModel.java | 0 .../get_workflow_status/GetWorkflowStatusOutputModel.java | 0 .../http/models/get_workflows/GetWorkflowsOutputModel.java | 0 .../pwp/http/models/isolate_data/IsolateDataRowModel.java | 0 .../models/isolate_data/UploadIsolateDataOutputModel.java | 0 .../GetIsolateDataRowsOutputModel.java | 0 .../GetIsolateDataKeysOutputModel.java | 0 .../org/phyloviz/pwp/http/models/projects/ProjectModel.java | 0 .../projects/create_project/CreateProjectInputModel.java | 0 .../projects/create_project/CreateProjectOutputModel.java | 0 .../projects/delete_project/DeleteProjectOutputModel.java | 0 .../models/projects/get_project/GetProjectOutputModel.java | 0 .../projects/get_projects/GetProjectsOutputModel.java | 0 .../projects/get_projects/GetProjectsProjectModel.java | 0 .../projects/update_project/UpdateProjectInputModel.java | 0 .../projects/update_project/UpdateProjectOutputModel.java | 0 .../http/models/save_tree_view/SaveTreeViewInputModel.java | 0 .../http/models/save_tree_view/SaveTreeViewOutputModel.java | 0 .../http/models/save_tree_view/TransformationsModel.java | 0 .../pwp/http/models/tree_views/TreeViewOutputModel.java | 0 .../http/models/tree_views/TreeViewSourceOutputModel.java | 0 .../delete_tree_view/DeleteTreeViewOutputModel.java | 0 .../update_tree_view/UpdateTreeViewInputModel.java | 0 .../update_tree_view/UpdateTreeViewOutputModel.java | 0 .../org/phyloviz/pwp/http/models/trees/TreeOutputModel.java | 0 .../trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java | 0 .../trees/TreeSourceAlgorithmTypingDataOutputModel.java | 0 .../pwp/http/models/trees/TreeSourceFileOutputModel.java | 0 .../pwp/http/models/trees/TreeSourceOutputModel.java | 0 .../models/trees/delete_tree/DeleteTreeOutputModel.java | 0 .../models/trees/update_tree_view/UpdateTreeInputModel.java | 0 .../trees/update_tree_view/UpdateTreeOutputModel.java | 0 .../pwp/http/models/typing_data/TypingDataProfileModel.java | 0 .../models/typing_data/UploadTypingDataOutputModel.java | 0 .../GetTypingDataProfilesOutputModel.java | 0 .../GetTypingDataSchemaOutputModel.java | 0 .../pwp/http/pipeline/AdministrationExceptionHandler.java | 0 .../phyloviz/pwp/http/pipeline/ComputeExceptionHandler.java | 0 .../pwp/http/pipeline/FileTransferExceptionHandler.java | 0 .../phyloviz/pwp/http/pipeline/UserArgumentResolver.java | 0 .../pwp/http/pipeline/VisualizationExceptionHandler.java | 0 .../http/pipeline/advice/ProblemJsonResponseBodyAdvice.java | 0 .../exception/handlers/AuthenticationExceptionHandler.java | 0 .../advice/exception/handlers/SharedExceptionHandler.java | 0 .../org/phyloviz/pwp/repository/data/S3FileRepository.java | 0 .../phyloviz/pwp/repository/data/S3FileRepositoryImpl.java | 0 .../distance_matrix/DistanceMatrixDataRepositoryId.java | 0 .../repository/DistanceMatrixDataRepository.java | 0 .../repository/DistanceMatrixS3DataRepository.java | 0 .../DistanceMatrixDataRepositorySpecificData.java | 0 .../DistanceMatrixS3DataRepositorySpecificData.java | 0 .../data/isolate_data/IsolateDataDataRepositoryId.java | 0 .../isolate_data/repository/IsolateDataDataRepository.java | 0 .../repository/IsolateDataS3DataRepository.java | 0 .../IsolateDataDataRepositorySpecificData.java | 0 .../IsolateDataPhyloDBDataRepositorySpecificData.java | 0 .../IsolateDataS3DataRepositorySpecificData.java | 0 .../data/registry/AbstractDataRepositoryRegistry.java | 0 .../pwp/repository/data/registry/DataRepositoryFactory.java | 0 .../repository/data/registry/DataRepositoryRegistry.java | 0 .../DistanceMatrixDataRepositoryFactory.java | 0 .../DistanceMatrixDataRepositoryRegistry.java | 0 .../DistanceMatrixDataRepositoryRegistryImpl.java | 0 .../isolate_data/IsolateDataDataRepositoryFactory.java | 0 .../isolate_data/IsolateDataDataRepositoryRegistry.java | 0 .../isolate_data/IsolateDataDataRepositoryRegistryImpl.java | 0 .../data/registry/tree/TreeDataRepositoryFactory.java | 0 .../data/registry/tree/TreeDataRepositoryRegistry.java | 0 .../data/registry/tree/TreeDataRepositoryRegistryImpl.java | 0 .../registry/tree_view/TreeViewDataRepositoryFactory.java | 0 .../registry/tree_view/TreeViewDataRepositoryRegistry.java | 0 .../tree_view/TreeViewDataRepositoryRegistryImpl.java | 0 .../typing_data/TypingDataDataRepositoryFactory.java | 0 .../typing_data/TypingDataDataRepositoryRegistry.java | 0 .../typing_data/TypingDataDataRepositoryRegistryImpl.java | 0 .../pwp/repository/data/tree/TreeDataRepositoryId.java | 0 .../repository/data/tree/repository/TreeDataRepository.java | 0 .../data/tree/repository/TreeS3DataRepository.java | 0 .../specific_data/TreeDataRepositorySpecificData.java | 0 .../TreePhyloDBDataRepositorySpecificData.java | 0 .../specific_data/TreeS3DataRepositorySpecificData.java | 0 .../repository/data/tree_view/TreeViewDataRepositoryId.java | 0 .../data/tree_view/repository/TreeViewDataRepository.java | 0 .../data/tree_view/repository/TreeViewS3DataRepository.java | 0 .../specific_data/TreeViewDataRepositorySpecificData.java | 0 .../TreeViewPhyloDBDataRepositorySpecificData.java | 0 .../specific_data/TreeViewS3DataRepositorySpecificData.java | 0 .../data/typing_data/TypingDataDataRepositoryId.java | 0 .../typing_data/repository/TypingDataDataRepository.java | 0 .../typing_data/repository/TypingDataS3DataRepository.java | 0 .../specific_data/TypingDataDataRepositorySpecificData.java | 0 .../TypingDataPhyloDBDataRepositorySpecificData.java | 0 .../TypingDataS3DataRepositorySpecificData.java | 0 .../repository/metadata/DocumentConversionException.java | 0 .../pwp/repository/metadata/dataset/DatasetRepository.java | 0 .../pwp/repository/metadata/dataset/documents/Dataset.java | 0 .../metadata/dataset/mongo/DatasetMongoRepository.java | 0 .../metadata/dataset/mongo/DatasetRepositoryMongo.java | 0 .../distance_matrix/DistanceMatrixMetadataRepository.java | 0 .../distance_matrix/documents/DistanceMatrixMetadata.java | 0 .../converters/DistanceMatrixMetadataDeserializer.java | 0 .../documents/source/DistanceMatrixSource.java | 0 .../documents/source/DistanceMatrixSourceFunction.java | 0 .../documents/source/DistanceMatrixSourceType.java | 0 .../mongo/DistanceMatrixMetadataMongoRepository.java | 0 .../mongo/DistanceMatrixMetadataRepositoryMongo.java | 0 .../isolate_data/IsolateDataMetadataRepository.java | 0 .../isolate_data/documents/IsolateDataMetadata.java | 0 .../converters/IsolateDataMetadataDeserializer.java | 0 .../documents/converters/IsolateDataMetadataSerializer.java | 0 .../mongo/IsolateDataMetadataMongoRepository.java | 0 .../mongo/IsolateDataMetadataRepositoryMongo.java | 0 .../pwp/repository/metadata/project/ProjectRepository.java | 0 .../pwp/repository/metadata/project/documents/FileIds.java | 0 .../pwp/repository/metadata/project/documents/Project.java | 0 .../metadata/project/mongo/ProjectMongoRepository.java | 0 .../metadata/project/mongo/ProjectRepositoryMongo.java | 0 .../templates/tool_template/ToolTemplateRepository.java | 0 .../converters/AccessTemplateDeserializer.java | 0 .../tool_template/converters/AccessTemplateSerializer.java | 0 .../converters/CaseInsensitiveEnumDeserializerFactory.java | 0 .../converters/CaseInsensitiveEnumSerializer.java | 0 .../templates/tool_template/documents/GeneralTemplate.java | 0 .../templates/tool_template/documents/ToolTemplate.java | 0 .../templates/tool_template/documents/ToolTemplateData.java | 0 .../documents/access/AccessDetailsTemplate.java | 0 .../tool_template/documents/access/AccessTemplate.java | 0 .../tool_template/documents/access/AccessTypeTemplate.java | 0 .../documents/access/api/ApiAccessDetailsTemplate.java | 0 .../documents/access/library/DockerAutoRemoveTemplate.java | 0 .../documents/access/library/DockerVolumeTemplate.java | 0 .../access/library/LibraryAccessDetailsTemplate.java | 0 .../tool_template/documents/library/CommandTemplate.java | 0 .../tool_template/documents/library/LibraryTemplate.java | 0 .../tool_template/mongo/ToolTemplateMongoRepository.java | 0 .../tool_template/mongo/ToolTemplateRepositoryMongo.java | 0 .../workflow_instances/WorkflowInstanceRepository.java | 0 .../workflow_instances/documents/WorkflowInstance.java | 0 .../workflow_instances/documents/WorkflowStatus.java | 0 .../mongo/WorkflowInstanceMongoRepository.java | 0 .../mongo/WorkflowInstanceRepositoryMongo.java | 0 .../workflow_template/WorkflowTemplateRepository.java | 0 .../workflow_template/documents/ActionTemplate.java | 0 .../templates/workflow_template/documents/TaskTemplate.java | 0 .../workflow_template/documents/WorkflowTemplate.java | 0 .../workflow_template/documents/WorkflowTemplateData.java | 0 .../arguments/WorkflowTemplateArgumentProperties.java | 0 .../documents/arguments/WorkflowTemplateArgumentType.java | 0 .../mongo/WorkflowTemplateMongoRepository.java | 0 .../mongo/WorkflowTemplateRepositoryMongo.java | 0 .../repository/metadata/tree/TreeMetadataRepository.java | 0 .../repository/metadata/tree/documents/TreeMetadata.java | 0 .../tree/documents/converters/TreeMetadataDeserializer.java | 0 .../metadata/tree/documents/source/TreeSource.java | 0 .../documents/source/TreeSourceAlgorithmDistanceMatrix.java | 0 .../documents/source/TreeSourceAlgorithmTypingData.java | 0 .../metadata/tree/documents/source/TreeSourceFile.java | 0 .../metadata/tree/documents/source/TreeSourceType.java | 0 .../metadata/tree/mongo/TreeMetadataMongoRepository.java | 0 .../metadata/tree/mongo/TreeMetadataRepositoryMongo.java | 0 .../metadata/tree_view/TreeViewMetadataRepository.java | 0 .../metadata/tree_view/documents/TreeViewMetadata.java | 0 .../documents/converters/TreeViewMetadataDeserializer.java | 0 .../documents/converters/TreeViewMetadataSerializer.java | 0 .../metadata/tree_view/documents/source/TreeViewSource.java | 0 .../tree_view/mongo/TreeViewMetadataMongoRepository.java | 0 .../tree_view/mongo/TreeViewMetadataRepositoryMongo.java | 0 .../metadata/typing_data/TypingDataMetadataRepository.java | 0 .../metadata/typing_data/documents/TypingDataMetadata.java | 0 .../converters/TypingDataMetadataDeserializer.java | 0 .../documents/converters/TypingDataMetadataSerializer.java | 0 .../mongo/TypingDataMetadataMongoRepository.java | 0 .../mongo/TypingDataMetadataRepositoryMongo.java | 0 .../main/java/org/phyloviz/pwp/service/ComputeService.java | 0 .../java/org/phyloviz/pwp/service/ComputeServiceImpl.java | 0 .../java/org/phyloviz/pwp/service/FileTransferService.java | 0 .../org/phyloviz/pwp/service/FileTransferServiceImpl.java | 0 .../java/org/phyloviz/pwp/service/VisualizationService.java | 0 .../org/phyloviz/pwp/service/VisualizationServiceImpl.java | 0 .../service/dtos/create_workflow/CreateWorkflowOutput.java | 0 .../pwp/service/dtos/dataset/CreateDatasetOutput.java | 0 .../phyloviz/pwp/service/dtos/dataset/FullDatasetInfo.java | 0 .../service/dtos/dataset/SetIsolateDataOfDatasetOutput.java | 0 .../pwp/service/dtos/dataset/UpdateDatasetOutput.java | 0 .../service/dtos/distance_matrix/DistanceMatrixInfo.java | 0 .../distance_matrix/DistanceMatrixSourceFunctionInfo.java | 0 .../dtos/distance_matrix/DistanceMatrixSourceInfo.java | 0 .../dtos/distance_matrix/UpdateDistanceMatrixOutput.java | 0 .../java/org/phyloviz/pwp/service/dtos/files/FilesInfo.java | 0 .../dtos/files/isolate_data/GetIsolateDataRowsOutput.java | 0 .../service/dtos/files/isolate_data/IsolateDataInfo.java | 0 .../pwp/service/dtos/files/isolate_data/IsolateDataRow.java | 0 .../dtos/files/isolate_data/UpdateIsolateDataOutput.java | 0 .../dtos/files/isolate_data/UploadIsolateDataOutput.java | 0 .../dtos/files/typing_data/GetTypingDataProfilesOutput.java | 0 .../dtos/files/typing_data/GetTypingDataSchemaOutput.java | 0 .../pwp/service/dtos/files/typing_data/TypingDataInfo.java | 0 .../service/dtos/files/typing_data/TypingDataProfile.java | 0 .../dtos/files/typing_data/UpdateTypingDataOutput.java | 0 .../dtos/files/typing_data/UploadTypingDataOutput.java | 0 .../pwp/service/dtos/get_workflow/GetWorkflowOutput.java | 0 .../service/dtos/get_workflow/GetWorkflowStatusOutput.java | 0 .../pwp/service/dtos/project/CreateProjectOutput.java | 0 .../phyloviz/pwp/service/dtos/project/FullProjectInfo.java | 0 .../pwp/service/dtos/project/UpdateProjectOutput.java | 0 .../java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java | 0 .../dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java | 0 .../dtos/tree/TreeSourceAlgorithmTypingDataInfo.java | 0 .../phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java | 0 .../org/phyloviz/pwp/service/dtos/tree/TreeSourceInfo.java | 0 .../phyloviz/pwp/service/dtos/tree/UpdateTreeOutput.java | 0 .../java/org/phyloviz/pwp/service/dtos/tree_view/Edge.java | 0 .../pwp/service/dtos/tree_view/GetTreeViewOutput.java | 0 .../java/org/phyloviz/pwp/service/dtos/tree_view/Node.java | 0 .../pwp/service/dtos/tree_view/SaveTreeViewInput.java | 0 .../pwp/service/dtos/tree_view/SaveTreeViewOutput.java | 0 .../pwp/service/dtos/tree_view/Transformations.java | 0 .../phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java | 0 .../pwp/service/dtos/tree_view/TreeViewSourceInfo.java | 0 .../pwp/service/dtos/tree_view/UpdateTreeViewOutput.java | 0 .../service/exceptions/DatasetDoesNotExistException.java | 0 .../pwp/service/exceptions/DatasetNotFoundException.java | 0 .../pwp/service/exceptions/DeniedFileDeletionException.java | 0 .../service/exceptions/DeniedResourceDeletionException.java | 0 .../exceptions/DistanceMatrixDoesNotExistException.java | 0 .../service/exceptions/DistanceMatrixNotFoundException.java | 0 .../pwp/service/exceptions/FileCorruptedException.java | 0 .../pwp/service/exceptions/IndexingNeededException.java | 0 .../pwp/service/exceptions/InvalidArgumentException.java | 0 .../pwp/service/exceptions/InvalidWorkflowException.java | 0 .../exceptions/IsolateDataDoesNotExistException.java | 0 .../service/exceptions/IsolateDataNotFoundException.java | 0 .../pwp/service/exceptions/MultipartFileReadException.java | 0 .../service/exceptions/ProjectDoesNotExistException.java | 0 .../pwp/service/exceptions/ProjectNotFoundException.java | 0 .../phyloviz/pwp/service/exceptions/TemplateNotFound.java | 0 .../pwp/service/exceptions/TreeDoesNotExistException.java | 0 .../pwp/service/exceptions/TreeNotFoundException.java | 0 .../service/exceptions/TreeViewDoesNotExistException.java | 0 .../pwp/service/exceptions/TreeViewNotFoundException.java | 0 .../service/exceptions/TypingDataDoesNotExistException.java | 0 .../pwp/service/exceptions/TypingDataNotFoundException.java | 0 .../pwp/service/exceptions/UnauthorizedException.java | 0 .../exceptions/WorkflowInstanceNotFoundException.java | 0 .../exceptions/WorkflowTemplateConfigurationException.java | 0 .../org/phyloviz/pwp/service/flowviz/FLOWViZClient.java | 0 .../phyloviz/pwp/service/flowviz/FLOWViZClientBuilder.java | 0 .../phyloviz/pwp/service/flowviz/FLOWViZHttpService.java | 0 .../pwp/service/flowviz/adapters/AccessDeserializer.java | 0 .../pwp/service/flowviz/adapters/AccessSerializer.java | 0 .../service/flowviz/adapters/LocalDateTimeDeserializer.java | 0 .../service/flowviz/adapters/LocalDateTimeSerializer.java | 0 .../service/flowviz/exceptions/AuthenticationException.java | 0 .../flowviz/exceptions/ConnectionRefusedException.java | 0 .../flowviz/exceptions/UnexpectedResponseException.java | 0 .../phyloviz/pwp/service/flowviz/identity/Credentials.java | 0 .../org/phyloviz/pwp/service/flowviz/identity/Token.java | 0 .../service/flowviz/models/get_workflow/AirflowData.java | 0 .../flowviz/models/get_workflow/AirflowWorkflowStatus.java | 0 .../flowviz/models/get_workflow/GetWorkflowResponse.java | 0 .../service/flowviz/models/get_workflow/WorkflowState.java | 0 .../phyloviz/pwp/service/flowviz/models/tool/General.java | 0 .../org/phyloviz/pwp/service/flowviz/models/tool/Tool.java | 0 .../pwp/service/flowviz/models/tool/ToolService.java | 0 .../pwp/service/flowviz/models/tool/access/Access.java | 0 .../service/flowviz/models/tool/access/AccessDetails.java | 0 .../pwp/service/flowviz/models/tool/access/AccessType.java | 0 .../flowviz/models/tool/access/api/ApiAccessDetails.java | 0 .../models/tool/access/library/DockerAutoRemove.java | 0 .../flowviz/models/tool/access/library/DockerVolume.java | 0 .../models/tool/access/library/LibraryAccessDetails.java | 0 .../flowviz/models/tool/access/library/VolumeType.java | 0 .../pwp/service/flowviz/models/tool/library/Command.java | 0 .../pwp/service/flowviz/models/tool/library/Library.java | 0 .../flowviz/models/workflow/GetWorkflowTaskLogResponse.java | 0 .../pwp/service/flowviz/models/workflow/Workflow.java | 0 .../service/flowviz/models/workflow/WorkflowService.java | 0 .../pwp/service/flowviz/models/workflow/tasks/Action.java | 0 .../pwp/service/flowviz/models/workflow/tasks/Task.java | 0 .../org/phyloviz/pwp/service/project/ProjectService.java | 0 .../phyloviz/pwp/service/project/ProjectServiceImpl.java | 0 .../pwp/service/project/dataset/DatasetService.java | 0 .../pwp/service/project/dataset/DatasetServiceImpl.java | 0 .../dataset/distance_matrix/DistanceMatrixService.java | 0 .../dataset/distance_matrix/DistanceMatrixServiceImpl.java | 0 .../pwp/service/project/dataset/tree/TreeService.java | 0 .../pwp/service/project/dataset/tree/TreeServiceImpl.java | 0 .../service/project/dataset/tree_view/TreeViewService.java | 0 .../project/dataset/tree_view/TreeViewServiceImpl.java | 0 .../pwp/service/project/file/IsolateDataService.java | 0 .../pwp/service/project/file/IsolateDataServiceImpl.java | 0 .../pwp/service/project/file/TypingDataService.java | 0 .../pwp/service/project/file/TypingDataServiceImpl.java | 0 .../src/main/java/org/phyloviz/pwp/utils/SharedLogger.java | 0 .../src/main/java/org/phyloviz/pwp/utils/UUIDUtils.java | 0 src/backend/{microservices => }/gateway/Dockerfile | 0 src/backend/{microservices => }/gateway/build.gradle | 0 .../java/org/phyloviz/pwp/gateway/GatewayApplication.java | 0 .../java/org/phyloviz/pwp/gateway/config/GatewayConfig.java | 0 .../pwp/gateway/config/MicroservicesProperties.java | 0 .../config/ProblemJsonResponseBodyResultHandler.java | 0 .../pwp/gateway/http/NegatePathResourceLookupFunction.java | 0 .../pwp/gateway/http/controllers/AuthController.java | 0 .../gateway/http/exceptions/AuthenticationException.java | 0 .../http/models/get_session/GetSessionOutputModel.java | 0 .../pwp/gateway/http/pipeline/GatewayExceptionHandler.java | 0 .../org/phyloviz/pwp/gateway/GatewayApplicationTests.java | 0 src/backend/settings.gradle | 4 ++-- 359 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 .gitattributes rename src/backend/{microservices/pwp => core}/Dockerfile (100%) rename src/backend/{microservices/pwp => core}/build.gradle (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/PWPApplication.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/config/FilterChainConfig.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/config/MongoConfig.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/config/PWPConfig.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/config/ProblemJsonConfig.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/config/UserArgumentResolverConfig.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/domain/User.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowInputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/datasets/DatasetModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetInputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/datasets/get_dataset/GetDatasetOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/datasets/get_datasets/GetDatasetsOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetInputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/files/FilesModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/IsolateDataModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/TypingDataModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/get_workflow/GetWorkflowOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/get_workflows/GetWorkflowsOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/projects/ProjectModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectInputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/projects/delete_project/DeleteProjectOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/projects/get_project/GetProjectOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectInputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewSourceOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/trees/TreeOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceFileOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/trees/delete_tree/DeleteTreeOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeInputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/pipeline/ComputeExceptionHandler.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/pipeline/FileTransferExceptionHandler.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/pipeline/UserArgumentResolver.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/pipeline/VisualizationExceptionHandler.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/pipeline/advice/ProblemJsonResponseBodyAdvice.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/AuthenticationExceptionHandler.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepositoryImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixDataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixS3DataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixS3DataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/IsolateDataDataRepositoryId.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataDataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataPhyloDBDataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataS3DataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/AbstractDataRepositoryRegistry.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryFactory.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryRegistry.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryFactory.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistryImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryFactory.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistryImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryFactory.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistry.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistryImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryFactory.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistryImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryFactory.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistryImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/tree/TreeDataRepositoryId.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeDataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeS3DataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreePhyloDBDataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeS3DataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/tree_view/TreeViewDataRepositoryId.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewDataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewS3DataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewPhyloDBDataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewS3DataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/typing_data/TypingDataDataRepositoryId.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataDataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataS3DataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataPhyloDBDataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataS3DataRepositorySpecificData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/DocumentConversionException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/DatasetRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/documents/Dataset.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetMongoRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetRepositoryMongo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/DistanceMatrixMetadataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/DistanceMatrixMetadata.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/converters/DistanceMatrixMetadataDeserializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceFunction.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceType.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataMongoRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataRepositoryMongo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/IsolateDataMetadataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/IsolateDataMetadata.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataDeserializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataSerializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataMongoRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataRepositoryMongo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/project/ProjectRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/FileIds.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/Project.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectMongoRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectRepositoryMongo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/ToolTemplateRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/GeneralTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplateData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/ActionTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/TaskTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree/TreeMetadataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/TreeMetadata.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/converters/TreeMetadataDeserializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSource.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmDistanceMatrix.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmTypingData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceFile.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceType.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataMongoRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataRepositoryMongo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/TreeViewMetadataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/TreeViewMetadata.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataDeserializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataSerializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/source/TreeViewSource.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataMongoRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataRepositoryMongo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/TypingDataMetadataRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/TypingDataMetadata.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataDeserializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataSerializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataMongoRepository.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataRepositoryMongo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/ComputeService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/FileTransferService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/VisualizationService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/create_workflow/CreateWorkflowOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/dataset/CreateDatasetOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/dataset/FullDatasetInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/dataset/SetIsolateDataOfDatasetOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/dataset/UpdateDatasetOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/UpdateDistanceMatrixOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/files/FilesInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/GetIsolateDataRowsOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataRow.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UpdateIsolateDataOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UploadIsolateDataOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataProfilesOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataSchemaOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataProfile.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UpdateTypingDataOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UploadTypingDataOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowStatusOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/project/CreateProjectOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/project/FullProjectInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/project/UpdateProjectOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree/UpdateTreeOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Edge.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/GetTreeViewOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Node.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewInput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Transformations.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewSourceInfo.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/UpdateTreeViewOutput.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetDoesNotExistException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetNotFoundException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedFileDeletionException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedResourceDeletionException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixDoesNotExistException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixNotFoundException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/FileCorruptedException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/IndexingNeededException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidArgumentException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidWorkflowException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataDoesNotExistException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataNotFoundException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/MultipartFileReadException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectDoesNotExistException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectNotFoundException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/TemplateNotFound.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/TreeDoesNotExistException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/TreeNotFoundException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewDoesNotExistException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewNotFoundException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataDoesNotExistException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataNotFoundException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/UnauthorizedException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowInstanceNotFoundException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowTemplateConfigurationException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClient.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClientBuilder.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZHttpService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessDeserializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessSerializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeDeserializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeSerializer.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/AuthenticationException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/ConnectionRefusedException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/UnexpectedResponseException.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Credentials.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Token.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowData.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/GetWorkflowResponse.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/WorkflowState.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/General.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/Tool.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/ToolService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/Access.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessDetails.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessType.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/api/ApiAccessDetails.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerAutoRemove.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerVolume.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/LibraryAccessDetails.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/VolumeType.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Command.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Library.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/Workflow.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/WorkflowService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Action.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Task.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/ProjectService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/ProjectServiceImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetServiceImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeServiceImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewServiceImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataServiceImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataService.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataServiceImpl.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/utils/SharedLogger.java (100%) rename src/backend/{microservices/pwp => core}/src/main/java/org/phyloviz/pwp/utils/UUIDUtils.java (100%) rename src/backend/{microservices => }/gateway/Dockerfile (100%) rename src/backend/{microservices => }/gateway/build.gradle (100%) rename src/backend/{microservices => }/gateway/src/main/java/org/phyloviz/pwp/gateway/GatewayApplication.java (100%) rename src/backend/{microservices => }/gateway/src/main/java/org/phyloviz/pwp/gateway/config/GatewayConfig.java (100%) rename src/backend/{microservices => }/gateway/src/main/java/org/phyloviz/pwp/gateway/config/MicroservicesProperties.java (100%) rename src/backend/{microservices => }/gateway/src/main/java/org/phyloviz/pwp/gateway/config/ProblemJsonResponseBodyResultHandler.java (100%) rename src/backend/{microservices => }/gateway/src/main/java/org/phyloviz/pwp/gateway/http/NegatePathResourceLookupFunction.java (100%) rename src/backend/{microservices => }/gateway/src/main/java/org/phyloviz/pwp/gateway/http/controllers/AuthController.java (100%) rename src/backend/{microservices => }/gateway/src/main/java/org/phyloviz/pwp/gateway/http/exceptions/AuthenticationException.java (100%) rename src/backend/{microservices => }/gateway/src/main/java/org/phyloviz/pwp/gateway/http/models/get_session/GetSessionOutputModel.java (100%) rename src/backend/{microservices => }/gateway/src/main/java/org/phyloviz/pwp/gateway/http/pipeline/GatewayExceptionHandler.java (100%) rename src/backend/{microservices => }/gateway/src/test/java/org/phyloviz/pwp/gateway/GatewayApplicationTests.java (100%) diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..34e122cd --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +*.yml filter=ignorelines + +# to delete lines commented with # gitignore in yaml files +# git config --global filter.ignorelines.clean "sed '/^# gitignore/d'" +# git config --global filter.ignorelines.smudge cat \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 03f99aae..63a375e1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -74,9 +74,9 @@ services: depends_on: - tool_registry - pwp: + core: build: - context: ./src/backend/microservices/pwp + context: ./src/backend/core dockerfile: Dockerfile ports: - '8088:8088' @@ -86,7 +86,7 @@ services: gateway: build: - context: ./src/backend/microservices/gateway + context: ./src/backend/gateway dockerfile: Dockerfile ports: - '8083:8083' diff --git a/src/backend/microservices/pwp/Dockerfile b/src/backend/core/Dockerfile similarity index 100% rename from src/backend/microservices/pwp/Dockerfile rename to src/backend/core/Dockerfile diff --git a/src/backend/microservices/pwp/build.gradle b/src/backend/core/build.gradle similarity index 100% rename from src/backend/microservices/pwp/build.gradle rename to src/backend/core/build.gradle diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/PWPApplication.java b/src/backend/core/src/main/java/org/phyloviz/pwp/PWPApplication.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/PWPApplication.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/PWPApplication.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java b/src/backend/core/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/config/DataRepositoryConfig.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/FilterChainConfig.java b/src/backend/core/src/main/java/org/phyloviz/pwp/config/FilterChainConfig.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/FilterChainConfig.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/config/FilterChainConfig.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/MongoConfig.java b/src/backend/core/src/main/java/org/phyloviz/pwp/config/MongoConfig.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/MongoConfig.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/config/MongoConfig.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java b/src/backend/core/src/main/java/org/phyloviz/pwp/config/PWPConfig.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/PWPConfig.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/config/PWPConfig.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/ProblemJsonConfig.java b/src/backend/core/src/main/java/org/phyloviz/pwp/config/ProblemJsonConfig.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/ProblemJsonConfig.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/config/ProblemJsonConfig.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/UserArgumentResolverConfig.java b/src/backend/core/src/main/java/org/phyloviz/pwp/config/UserArgumentResolverConfig.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/config/UserArgumentResolverConfig.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/config/UserArgumentResolverConfig.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/domain/User.java b/src/backend/core/src/main/java/org/phyloviz/pwp/domain/User.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/domain/User.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/domain/User.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/ComputeController.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/FileTransferController.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/VisualizationController.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/projects/ProjectsController.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/DatasetsController.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/distance_matrices/DistanceMatricesController.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/tree_views/TreeViewsController.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/projects/datasets/trees/TreesController.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/controllers/projects/files/FilesController.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowInputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowInputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowInputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowInputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/create_workflow/CreateWorkflowOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/DatasetModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/DatasetModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/DatasetModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/DatasetModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetInputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetInputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetInputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetInputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/create_dataset/CreateDatasetOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/delete_dataset/DeleteDatasetOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/get_dataset/GetDatasetOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/get_dataset/GetDatasetOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/get_dataset/GetDatasetOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/get_dataset/GetDatasetOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/get_datasets/GetDatasetsOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/get_datasets/GetDatasetsOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/get_datasets/GetDatasetsOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/get_datasets/GetDatasetsOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetInputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/set_isolate_data_of_dataset/SetIsolateDataOfDatasetOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetInputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetInputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetInputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetInputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/datasets/update_dataset/UpdateDatasetOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceFunctionOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/DistanceMatrixSourceOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/delete_distance_matrix/DeleteDistanceMatrixOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixInputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/distance_matrices/update_distance_matrix/UpdateDistanceMatrixOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/FilesModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/FilesModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/FilesModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/FilesModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/IsolateDataModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/IsolateDataModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/IsolateDataModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/IsolateDataModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/delete_isolate_data/DeleteIsolateDataOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataInputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/isolate_data/update_isolate_data/UpdateIsolateDataOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/TypingDataModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/TypingDataModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/TypingDataModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/TypingDataModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/delete_typing_data/DeleteTypingDataOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataInputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/files/typing_data/update_typing_data/UpdateTypingDataOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/EdgeModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/GetTreeViewOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/get_tree_view/NodeModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflow/GetWorkflowOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/get_workflow/GetWorkflowOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflow/GetWorkflowOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/get_workflow/GetWorkflowOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/get_workflow_status/GetWorkflowStatusOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflows/GetWorkflowsOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/get_workflows/GetWorkflowsOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/get_workflows/GetWorkflowsOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/get_workflows/GetWorkflowsOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/isolate_data/IsolateDataRowModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/isolate_data/UploadIsolateDataOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_rows/GetIsolateDataRowsOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/isolate_data/get_isolate_data_schema/GetIsolateDataKeysOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/ProjectModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/ProjectModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/ProjectModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/ProjectModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectInputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectInputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectInputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectInputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/create_project/CreateProjectOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/delete_project/DeleteProjectOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/delete_project/DeleteProjectOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/delete_project/DeleteProjectOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/delete_project/DeleteProjectOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_project/GetProjectOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/get_project/GetProjectOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_project/GetProjectOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/get_project/GetProjectOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/get_projects/GetProjectsProjectModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectInputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectInputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectInputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectInputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/projects/update_project/UpdateProjectOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewInputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/SaveTreeViewOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/save_tree_view/TransformationsModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewSourceOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewSourceOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewSourceOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/tree_views/TreeViewSourceOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/tree_views/delete_tree_view/DeleteTreeViewOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewInputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/tree_views/update_tree_view/UpdateTreeViewOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/TreeOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/TreeOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmDistanceMatrixOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceAlgorithmTypingDataOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceFileOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceFileOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceFileOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceFileOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/TreeSourceOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/delete_tree/DeleteTreeOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/delete_tree/DeleteTreeOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/delete_tree/DeleteTreeOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/delete_tree/DeleteTreeOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeInputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeInputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeInputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeInputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/trees/update_tree_view/UpdateTreeOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/typing_data/TypingDataProfileModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/typing_data/UploadTypingDataOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_profiles/GetTypingDataProfilesOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/models/typing_data/get_typing_data_schema/GetTypingDataSchemaOutputModel.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/AdministrationExceptionHandler.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/ComputeExceptionHandler.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/ComputeExceptionHandler.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/ComputeExceptionHandler.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/ComputeExceptionHandler.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/FileTransferExceptionHandler.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/FileTransferExceptionHandler.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/FileTransferExceptionHandler.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/FileTransferExceptionHandler.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/UserArgumentResolver.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/UserArgumentResolver.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/UserArgumentResolver.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/UserArgumentResolver.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/VisualizationExceptionHandler.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/VisualizationExceptionHandler.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/VisualizationExceptionHandler.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/VisualizationExceptionHandler.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/ProblemJsonResponseBodyAdvice.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/advice/ProblemJsonResponseBodyAdvice.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/ProblemJsonResponseBodyAdvice.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/advice/ProblemJsonResponseBodyAdvice.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/AuthenticationExceptionHandler.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/AuthenticationExceptionHandler.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/AuthenticationExceptionHandler.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/AuthenticationExceptionHandler.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java b/src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/http/pipeline/advice/exception/handlers/SharedExceptionHandler.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepositoryImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepositoryImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepositoryImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/S3FileRepositoryImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/DistanceMatrixDataRepositoryId.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixDataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixDataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixDataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixDataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixS3DataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixS3DataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixS3DataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/DistanceMatrixS3DataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixDataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixS3DataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixS3DataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixS3DataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/distance_matrix/repository/specific_data/DistanceMatrixS3DataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/IsolateDataDataRepositoryId.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/IsolateDataDataRepositoryId.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/IsolateDataDataRepositoryId.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/IsolateDataDataRepositoryId.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataDataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataDataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataDataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataDataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/IsolateDataS3DataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataDataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataPhyloDBDataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataPhyloDBDataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataPhyloDBDataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataPhyloDBDataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataS3DataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataS3DataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataS3DataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/isolate_data/repository/specific_data/IsolateDataS3DataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/AbstractDataRepositoryRegistry.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/AbstractDataRepositoryRegistry.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/AbstractDataRepositoryRegistry.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/AbstractDataRepositoryRegistry.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryFactory.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryFactory.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryFactory.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryFactory.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryRegistry.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryRegistry.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryRegistry.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/DataRepositoryRegistry.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryFactory.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryFactory.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryFactory.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryFactory.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistry.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistryImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistryImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistryImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/distance_matrix/DistanceMatrixDataRepositoryRegistryImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryFactory.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryFactory.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryFactory.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryFactory.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistry.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistryImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistryImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistryImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/isolate_data/IsolateDataDataRepositoryRegistryImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryFactory.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryFactory.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryFactory.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryFactory.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistry.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistry.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistry.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistry.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistryImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistryImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistryImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/tree/TreeDataRepositoryRegistryImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryFactory.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryFactory.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryFactory.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryFactory.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistry.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistryImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistryImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistryImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/tree_view/TreeViewDataRepositoryRegistryImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryFactory.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryFactory.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryFactory.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryFactory.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistry.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistryImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistryImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistryImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/registry/typing_data/TypingDataDataRepositoryRegistryImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/TreeDataRepositoryId.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree/TreeDataRepositoryId.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/TreeDataRepositoryId.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree/TreeDataRepositoryId.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeDataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeDataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeDataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeDataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeS3DataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeS3DataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeS3DataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/TreeS3DataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeDataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreePhyloDBDataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreePhyloDBDataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreePhyloDBDataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreePhyloDBDataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeS3DataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeS3DataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeS3DataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree/repository/specific_data/TreeS3DataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/TreeViewDataRepositoryId.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree_view/TreeViewDataRepositoryId.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/TreeViewDataRepositoryId.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree_view/TreeViewDataRepositoryId.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewDataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewDataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewDataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewDataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewS3DataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewS3DataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewS3DataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/TreeViewS3DataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewDataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewPhyloDBDataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewPhyloDBDataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewPhyloDBDataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewPhyloDBDataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewS3DataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewS3DataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewS3DataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/tree_view/repository/specific_data/TreeViewS3DataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/TypingDataDataRepositoryId.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/typing_data/TypingDataDataRepositoryId.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/TypingDataDataRepositoryId.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/typing_data/TypingDataDataRepositoryId.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataDataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataDataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataDataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataDataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataS3DataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataS3DataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataS3DataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/TypingDataS3DataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataDataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataPhyloDBDataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataPhyloDBDataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataPhyloDBDataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataPhyloDBDataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataS3DataRepositorySpecificData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataS3DataRepositorySpecificData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataS3DataRepositorySpecificData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/data/typing_data/repository/specific_data/TypingDataS3DataRepositorySpecificData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/DocumentConversionException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/DocumentConversionException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/DocumentConversionException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/DocumentConversionException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/DatasetRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/DatasetRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/DatasetRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/DatasetRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/documents/Dataset.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/documents/Dataset.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/documents/Dataset.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/documents/Dataset.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetMongoRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetMongoRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetMongoRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetMongoRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetRepositoryMongo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetRepositoryMongo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetRepositoryMongo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/dataset/mongo/DatasetRepositoryMongo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/DistanceMatrixMetadataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/DistanceMatrixMetadataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/DistanceMatrixMetadataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/DistanceMatrixMetadataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/DistanceMatrixMetadata.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/DistanceMatrixMetadata.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/DistanceMatrixMetadata.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/DistanceMatrixMetadata.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/converters/DistanceMatrixMetadataDeserializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/converters/DistanceMatrixMetadataDeserializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/converters/DistanceMatrixMetadataDeserializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/converters/DistanceMatrixMetadataDeserializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSource.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceFunction.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceFunction.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceFunction.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceFunction.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceType.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceType.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceType.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/documents/source/DistanceMatrixSourceType.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataMongoRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataMongoRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataMongoRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataMongoRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataRepositoryMongo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataRepositoryMongo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataRepositoryMongo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/distance_matrix/mongo/DistanceMatrixMetadataRepositoryMongo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/IsolateDataMetadataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/IsolateDataMetadataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/IsolateDataMetadataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/IsolateDataMetadataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/IsolateDataMetadata.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/IsolateDataMetadata.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/IsolateDataMetadata.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/IsolateDataMetadata.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataDeserializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataDeserializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataDeserializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataDeserializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataSerializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataSerializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataSerializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/documents/converters/IsolateDataMetadataSerializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataMongoRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataMongoRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataMongoRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataMongoRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataRepositoryMongo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataRepositoryMongo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataRepositoryMongo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/isolate_data/mongo/IsolateDataMetadataRepositoryMongo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/ProjectRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/project/ProjectRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/ProjectRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/project/ProjectRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/FileIds.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/FileIds.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/FileIds.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/FileIds.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/Project.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/Project.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/Project.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/project/documents/Project.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectMongoRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectMongoRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectMongoRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectMongoRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectRepositoryMongo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectRepositoryMongo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectRepositoryMongo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/project/mongo/ProjectRepositoryMongo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/ToolTemplateRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/ToolTemplateRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/ToolTemplateRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/ToolTemplateRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateDeserializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/AccessTemplateSerializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumDeserializerFactory.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/converters/CaseInsensitiveEnumSerializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/GeneralTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/GeneralTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/GeneralTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/GeneralTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplateData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplateData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplateData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/ToolTemplateData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessDetailsTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/AccessTypeTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/api/ApiAccessDetailsTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerAutoRemoveTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/DockerVolumeTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/access/library/LibraryAccessDetailsTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/CommandTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/documents/library/LibraryTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateMongoRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/tool_template/mongo/ToolTemplateRepositoryMongo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/WorkflowInstanceRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowInstance.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/documents/WorkflowStatus.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceMongoRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_instances/mongo/WorkflowInstanceRepositoryMongo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/WorkflowTemplateRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/ActionTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/ActionTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/ActionTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/ActionTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/TaskTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/TaskTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/TaskTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/TaskTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplate.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/WorkflowTemplateData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentProperties.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/documents/arguments/WorkflowTemplateArgumentType.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateMongoRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/templates/workflow_template/mongo/WorkflowTemplateRepositoryMongo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/TreeMetadataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/TreeMetadataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/TreeMetadataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/TreeMetadataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/TreeMetadata.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/TreeMetadata.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/TreeMetadata.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/TreeMetadata.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/converters/TreeMetadataDeserializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/converters/TreeMetadataDeserializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/converters/TreeMetadataDeserializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/converters/TreeMetadataDeserializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSource.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSource.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSource.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSource.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmDistanceMatrix.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmDistanceMatrix.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmDistanceMatrix.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmDistanceMatrix.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmTypingData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmTypingData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmTypingData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceAlgorithmTypingData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceFile.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceFile.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceFile.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceFile.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceType.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceType.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceType.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/documents/source/TreeSourceType.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataMongoRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataMongoRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataMongoRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataMongoRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataRepositoryMongo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataRepositoryMongo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataRepositoryMongo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree/mongo/TreeMetadataRepositoryMongo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/TreeViewMetadataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/TreeViewMetadataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/TreeViewMetadataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/TreeViewMetadataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/TreeViewMetadata.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/TreeViewMetadata.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/TreeViewMetadata.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/TreeViewMetadata.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataDeserializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataDeserializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataDeserializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataDeserializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataSerializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataSerializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataSerializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/converters/TreeViewMetadataSerializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/source/TreeViewSource.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/source/TreeViewSource.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/source/TreeViewSource.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/documents/source/TreeViewSource.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataMongoRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataMongoRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataMongoRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataMongoRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataRepositoryMongo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataRepositoryMongo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataRepositoryMongo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/tree_view/mongo/TreeViewMetadataRepositoryMongo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/TypingDataMetadataRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/TypingDataMetadataRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/TypingDataMetadataRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/TypingDataMetadataRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/TypingDataMetadata.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/TypingDataMetadata.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/TypingDataMetadata.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/TypingDataMetadata.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataDeserializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataDeserializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataDeserializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataDeserializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataSerializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataSerializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataSerializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/documents/converters/TypingDataMetadataSerializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataMongoRepository.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataMongoRepository.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataMongoRepository.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataMongoRepository.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataRepositoryMongo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataRepositoryMongo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataRepositoryMongo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/repository/metadata/typing_data/mongo/TypingDataMetadataRepositoryMongo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/ComputeService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/ComputeService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/ComputeServiceImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/FileTransferService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/FileTransferService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/FileTransferServiceImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/VisualizationService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/VisualizationService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/VisualizationServiceImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/create_workflow/CreateWorkflowOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/create_workflow/CreateWorkflowOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/create_workflow/CreateWorkflowOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/create_workflow/CreateWorkflowOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/CreateDatasetOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/dataset/CreateDatasetOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/CreateDatasetOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/dataset/CreateDatasetOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/FullDatasetInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/dataset/FullDatasetInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/FullDatasetInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/dataset/FullDatasetInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/SetIsolateDataOfDatasetOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/dataset/SetIsolateDataOfDatasetOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/SetIsolateDataOfDatasetOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/dataset/SetIsolateDataOfDatasetOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/UpdateDatasetOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/dataset/UpdateDatasetOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/dataset/UpdateDatasetOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/dataset/UpdateDatasetOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceFunctionInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/DistanceMatrixSourceInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/UpdateDistanceMatrixOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/UpdateDistanceMatrixOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/UpdateDistanceMatrixOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/distance_matrix/UpdateDistanceMatrixOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/FilesInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/FilesInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/FilesInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/FilesInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/GetIsolateDataRowsOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/GetIsolateDataRowsOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/GetIsolateDataRowsOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/GetIsolateDataRowsOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataRow.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataRow.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataRow.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/IsolateDataRow.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UpdateIsolateDataOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UpdateIsolateDataOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UpdateIsolateDataOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UpdateIsolateDataOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UploadIsolateDataOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UploadIsolateDataOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UploadIsolateDataOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/isolate_data/UploadIsolateDataOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataProfilesOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataProfilesOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataProfilesOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataProfilesOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataSchemaOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataSchemaOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataSchemaOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/GetTypingDataSchemaOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataProfile.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataProfile.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataProfile.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/TypingDataProfile.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UpdateTypingDataOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UpdateTypingDataOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UpdateTypingDataOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UpdateTypingDataOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UploadTypingDataOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UploadTypingDataOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UploadTypingDataOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/files/typing_data/UploadTypingDataOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowStatusOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowStatusOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowStatusOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/get_workflow/GetWorkflowStatusOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/CreateProjectOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/project/CreateProjectOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/CreateProjectOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/project/CreateProjectOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/FullProjectInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/project/FullProjectInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/FullProjectInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/project/FullProjectInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/UpdateProjectOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/project/UpdateProjectOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/project/UpdateProjectOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/project/UpdateProjectOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmDistanceMatrixInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceAlgorithmTypingDataInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceFileInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree/TreeSourceInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/UpdateTreeOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree/UpdateTreeOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree/UpdateTreeOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree/UpdateTreeOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Edge.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Edge.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Edge.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Edge.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/GetTreeViewOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/GetTreeViewOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/GetTreeViewOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/GetTreeViewOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Node.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Node.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Node.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Node.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewInput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewInput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewInput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewInput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/SaveTreeViewOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Transformations.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Transformations.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Transformations.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/Transformations.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewSourceInfo.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewSourceInfo.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewSourceInfo.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/TreeViewSourceInfo.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/UpdateTreeViewOutput.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/UpdateTreeViewOutput.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/UpdateTreeViewOutput.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/dtos/tree_view/UpdateTreeViewOutput.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetDoesNotExistException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetDoesNotExistException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetDoesNotExistException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetDoesNotExistException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetNotFoundException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetNotFoundException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetNotFoundException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/DatasetNotFoundException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedFileDeletionException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedFileDeletionException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedFileDeletionException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedFileDeletionException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedResourceDeletionException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedResourceDeletionException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedResourceDeletionException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/DeniedResourceDeletionException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixDoesNotExistException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixDoesNotExistException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixDoesNotExistException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixDoesNotExistException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixNotFoundException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixNotFoundException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixNotFoundException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/DistanceMatrixNotFoundException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/FileCorruptedException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/FileCorruptedException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/FileCorruptedException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/FileCorruptedException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IndexingNeededException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/IndexingNeededException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IndexingNeededException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/IndexingNeededException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidArgumentException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidArgumentException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidArgumentException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidArgumentException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidWorkflowException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidWorkflowException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidWorkflowException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/InvalidWorkflowException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataDoesNotExistException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataDoesNotExistException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataDoesNotExistException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataDoesNotExistException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataNotFoundException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataNotFoundException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataNotFoundException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/IsolateDataNotFoundException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/MultipartFileReadException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/MultipartFileReadException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/MultipartFileReadException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/MultipartFileReadException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectDoesNotExistException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectDoesNotExistException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectDoesNotExistException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectDoesNotExistException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectNotFoundException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectNotFoundException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectNotFoundException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/ProjectNotFoundException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TemplateNotFound.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TemplateNotFound.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TemplateNotFound.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TemplateNotFound.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeDoesNotExistException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TreeDoesNotExistException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeDoesNotExistException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TreeDoesNotExistException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeNotFoundException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TreeNotFoundException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeNotFoundException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TreeNotFoundException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewDoesNotExistException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewDoesNotExistException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewDoesNotExistException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewDoesNotExistException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewNotFoundException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewNotFoundException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewNotFoundException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TreeViewNotFoundException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataDoesNotExistException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataDoesNotExistException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataDoesNotExistException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataDoesNotExistException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataNotFoundException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataNotFoundException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataNotFoundException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/TypingDataNotFoundException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/UnauthorizedException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/UnauthorizedException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/UnauthorizedException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/UnauthorizedException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowInstanceNotFoundException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowInstanceNotFoundException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowInstanceNotFoundException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowInstanceNotFoundException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowTemplateConfigurationException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowTemplateConfigurationException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowTemplateConfigurationException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/exceptions/WorkflowTemplateConfigurationException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClient.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClient.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClient.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClient.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClientBuilder.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClientBuilder.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClientBuilder.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZClientBuilder.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZHttpService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZHttpService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZHttpService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/FLOWViZHttpService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessDeserializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessDeserializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessDeserializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessDeserializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessSerializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessSerializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessSerializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/AccessSerializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeDeserializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeDeserializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeDeserializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeDeserializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeSerializer.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeSerializer.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeSerializer.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/adapters/LocalDateTimeSerializer.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/AuthenticationException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/AuthenticationException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/AuthenticationException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/AuthenticationException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/ConnectionRefusedException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/ConnectionRefusedException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/ConnectionRefusedException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/ConnectionRefusedException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/UnexpectedResponseException.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/UnexpectedResponseException.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/UnexpectedResponseException.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/exceptions/UnexpectedResponseException.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Credentials.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Credentials.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Credentials.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Credentials.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Token.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Token.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Token.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/identity/Token.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowData.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowData.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowData.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowData.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/AirflowWorkflowStatus.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/GetWorkflowResponse.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/GetWorkflowResponse.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/GetWorkflowResponse.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/GetWorkflowResponse.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/WorkflowState.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/WorkflowState.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/WorkflowState.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/get_workflow/WorkflowState.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/General.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/General.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/General.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/General.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/Tool.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/Tool.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/Tool.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/Tool.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/ToolService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/ToolService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/ToolService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/ToolService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/Access.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/Access.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/Access.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/Access.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessDetails.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessDetails.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessDetails.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessDetails.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessType.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessType.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessType.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/AccessType.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/api/ApiAccessDetails.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/api/ApiAccessDetails.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/api/ApiAccessDetails.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/api/ApiAccessDetails.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerAutoRemove.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerAutoRemove.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerAutoRemove.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerAutoRemove.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerVolume.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerVolume.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerVolume.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/DockerVolume.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/LibraryAccessDetails.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/LibraryAccessDetails.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/LibraryAccessDetails.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/LibraryAccessDetails.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/VolumeType.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/VolumeType.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/VolumeType.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/access/library/VolumeType.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Command.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Command.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Command.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Command.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Library.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Library.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Library.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/tool/library/Library.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/GetWorkflowTaskLogResponse.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/Workflow.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/Workflow.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/Workflow.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/Workflow.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/WorkflowService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/WorkflowService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/WorkflowService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/WorkflowService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Action.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Action.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Action.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Action.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Task.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Task.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Task.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/flowviz/models/workflow/tasks/Task.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/ProjectService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/ProjectService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectServiceImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/ProjectServiceImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/ProjectServiceImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/ProjectServiceImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetServiceImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetServiceImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetServiceImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/DatasetServiceImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/distance_matrix/DistanceMatrixServiceImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeServiceImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeServiceImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeServiceImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/tree/TreeServiceImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewServiceImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewServiceImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewServiceImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/dataset/tree_view/TreeViewServiceImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataServiceImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataServiceImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataServiceImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/file/IsolateDataServiceImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataService.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataService.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataService.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataService.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataServiceImpl.java b/src/backend/core/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataServiceImpl.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataServiceImpl.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/service/project/file/TypingDataServiceImpl.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/utils/SharedLogger.java b/src/backend/core/src/main/java/org/phyloviz/pwp/utils/SharedLogger.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/utils/SharedLogger.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/utils/SharedLogger.java diff --git a/src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/utils/UUIDUtils.java b/src/backend/core/src/main/java/org/phyloviz/pwp/utils/UUIDUtils.java similarity index 100% rename from src/backend/microservices/pwp/src/main/java/org/phyloviz/pwp/utils/UUIDUtils.java rename to src/backend/core/src/main/java/org/phyloviz/pwp/utils/UUIDUtils.java diff --git a/src/backend/microservices/gateway/Dockerfile b/src/backend/gateway/Dockerfile similarity index 100% rename from src/backend/microservices/gateway/Dockerfile rename to src/backend/gateway/Dockerfile diff --git a/src/backend/microservices/gateway/build.gradle b/src/backend/gateway/build.gradle similarity index 100% rename from src/backend/microservices/gateway/build.gradle rename to src/backend/gateway/build.gradle diff --git a/src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/GatewayApplication.java b/src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/GatewayApplication.java similarity index 100% rename from src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/GatewayApplication.java rename to src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/GatewayApplication.java diff --git a/src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/config/GatewayConfig.java b/src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/config/GatewayConfig.java similarity index 100% rename from src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/config/GatewayConfig.java rename to src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/config/GatewayConfig.java diff --git a/src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/config/MicroservicesProperties.java b/src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/config/MicroservicesProperties.java similarity index 100% rename from src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/config/MicroservicesProperties.java rename to src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/config/MicroservicesProperties.java diff --git a/src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/config/ProblemJsonResponseBodyResultHandler.java b/src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/config/ProblemJsonResponseBodyResultHandler.java similarity index 100% rename from src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/config/ProblemJsonResponseBodyResultHandler.java rename to src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/config/ProblemJsonResponseBodyResultHandler.java diff --git a/src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/http/NegatePathResourceLookupFunction.java b/src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/http/NegatePathResourceLookupFunction.java similarity index 100% rename from src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/http/NegatePathResourceLookupFunction.java rename to src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/http/NegatePathResourceLookupFunction.java diff --git a/src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/http/controllers/AuthController.java b/src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/http/controllers/AuthController.java similarity index 100% rename from src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/http/controllers/AuthController.java rename to src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/http/controllers/AuthController.java diff --git a/src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/http/exceptions/AuthenticationException.java b/src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/http/exceptions/AuthenticationException.java similarity index 100% rename from src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/http/exceptions/AuthenticationException.java rename to src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/http/exceptions/AuthenticationException.java diff --git a/src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/http/models/get_session/GetSessionOutputModel.java b/src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/http/models/get_session/GetSessionOutputModel.java similarity index 100% rename from src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/http/models/get_session/GetSessionOutputModel.java rename to src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/http/models/get_session/GetSessionOutputModel.java diff --git a/src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/http/pipeline/GatewayExceptionHandler.java b/src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/http/pipeline/GatewayExceptionHandler.java similarity index 100% rename from src/backend/microservices/gateway/src/main/java/org/phyloviz/pwp/gateway/http/pipeline/GatewayExceptionHandler.java rename to src/backend/gateway/src/main/java/org/phyloviz/pwp/gateway/http/pipeline/GatewayExceptionHandler.java diff --git a/src/backend/microservices/gateway/src/test/java/org/phyloviz/pwp/gateway/GatewayApplicationTests.java b/src/backend/gateway/src/test/java/org/phyloviz/pwp/gateway/GatewayApplicationTests.java similarity index 100% rename from src/backend/microservices/gateway/src/test/java/org/phyloviz/pwp/gateway/GatewayApplicationTests.java rename to src/backend/gateway/src/test/java/org/phyloviz/pwp/gateway/GatewayApplicationTests.java diff --git a/src/backend/settings.gradle b/src/backend/settings.gradle index 153d8fa9..f1603b38 100644 --- a/src/backend/settings.gradle +++ b/src/backend/settings.gradle @@ -1,3 +1,3 @@ rootProject.name = 'phyloviz-web-platform' -include 'microservices:gateway' -include 'microservices:pwp' +include 'gateway' +include 'core'