diff --git a/src/main/java/com/metaformsystems/redline/api/controller/TenantController.java b/src/main/java/com/metaformsystems/redline/api/controller/TenantController.java index 806d0d8..28eb463 100644 --- a/src/main/java/com/metaformsystems/redline/api/controller/TenantController.java +++ b/src/main/java/com/metaformsystems/redline/api/controller/TenantController.java @@ -15,13 +15,15 @@ package com.metaformsystems.redline.api.controller; import com.metaformsystems.redline.api.dto.request.DataPlaneRegistrationRequest; +import com.metaformsystems.redline.api.dto.request.DataspaceRequest; import com.metaformsystems.redline.api.dto.request.ParticipantDeployment; import com.metaformsystems.redline.api.dto.request.PartnerReferenceRequest; import com.metaformsystems.redline.api.dto.request.ServiceProvider; import com.metaformsystems.redline.api.dto.request.TenantRegistration; -import com.metaformsystems.redline.api.dto.response.Dataspace; +import com.metaformsystems.redline.api.dto.response.DataspaceResponse; import com.metaformsystems.redline.api.dto.response.Participant; import com.metaformsystems.redline.api.dto.response.PartnerReference; +import com.metaformsystems.redline.api.dto.response.ServiceProviderResponse; import com.metaformsystems.redline.api.dto.response.Tenant; import com.metaformsystems.redline.domain.service.ServiceProviderService; import com.metaformsystems.redline.domain.service.TenantService; @@ -57,13 +59,19 @@ public TenantController(ServiceProviderService serviceProviderService, TenantSer this.serviceProviderService = serviceProviderService; } + @PostMapping("dataspaces") + public ResponseEntity createDataspace(@RequestBody DataspaceRequest dataspace) { + var saved = serviceProviderService.createDataspace(dataspace); + return ResponseEntity.ok(saved); + } + @GetMapping("dataspaces") // @PreAuthorize("hasRole('USER')") @Operation(summary = "Get all dataspaces", description = "Retrieves a list of all available dataspaces") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Successfully retrieved dataspaces") }) - public ResponseEntity> getDataspaces() { + public ResponseEntity> getDataspaces() { return ResponseEntity.ok(serviceProviderService.getDataspaces()); } @@ -73,7 +81,7 @@ public ResponseEntity> getDataspaces() { @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Successfully retrieved service providers") }) - public ResponseEntity> getServiceProviders() { + public ResponseEntity> getServiceProviders() { return ResponseEntity.ok(serviceProviderService.getServiceProviders()); } @@ -82,10 +90,10 @@ public ResponseEntity createServiceProvider(@RequestBody ServiceProvider serviceProvider) { + public ResponseEntity createServiceProvider(@RequestBody ServiceProvider serviceProvider) { var saved = serviceProviderService.createServiceProvider(serviceProvider); return ResponseEntity.ok(saved); } @@ -217,10 +225,10 @@ public ResponseEntity> getPartners(@PathVariable Long pro @Parameter(name = "participantId", description = "Database ID of the participant", required = true) @Parameter(name = "dataspaceId", description = "Database ID of the dataspace", required = true) public ResponseEntity createPartner(@PathVariable Long providerId, - @PathVariable Long tenantId, - @PathVariable Long participantId, - @PathVariable Long dataspaceId, - @RequestBody PartnerReferenceRequest request) { + @PathVariable Long tenantId, + @PathVariable Long participantId, + @PathVariable Long dataspaceId, + @RequestBody PartnerReferenceRequest request) { var partnerReference = tenantService.createPartnerReference(providerId, tenantId, participantId, dataspaceId, request); // TODO auth check for provider access return ResponseEntity.ok(partnerReference); @@ -236,9 +244,9 @@ public ResponseEntity createPartner(@PathVariable Long provide @Parameter(name = "serviceProviderId", description = "Database ID of the service provider", required = true) @Parameter(name = "tenantId", description = "Database ID of the tenant", required = true) @Parameter(name = "participantId", description = "Database ID of the participant", required = true) - public ResponseEntity> getParticipantDataspaces(@PathVariable Long serviceProviderId, - @PathVariable Long tenantId, - @PathVariable Long participantId) { + public ResponseEntity> getParticipantDataspaces(@PathVariable Long serviceProviderId, + @PathVariable Long tenantId, + @PathVariable Long participantId) { var dataspaces = tenantService.getParticipantDataspaces(participantId); // TODO auth check for provider access return ResponseEntity.ok(dataspaces); diff --git a/src/main/java/com/metaformsystems/redline/api/dto/request/DataspaceRequest.java b/src/main/java/com/metaformsystems/redline/api/dto/request/DataspaceRequest.java new file mode 100644 index 0000000..8558b82 --- /dev/null +++ b/src/main/java/com/metaformsystems/redline/api/dto/request/DataspaceRequest.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2026 Metaform Systems, Inc. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Metaform Systems, Inc. - initial API and implementation + * + */ + +package com.metaformsystems.redline.api.dto.request; + +import java.util.Map; + +public record DataspaceRequest(String name, Map properties) { +} diff --git a/src/main/java/com/metaformsystems/redline/api/dto/response/Dataspace.java b/src/main/java/com/metaformsystems/redline/api/dto/response/DataspaceResponse.java similarity index 80% rename from src/main/java/com/metaformsystems/redline/api/dto/response/Dataspace.java rename to src/main/java/com/metaformsystems/redline/api/dto/response/DataspaceResponse.java index 3a3e228..c4fab0f 100644 --- a/src/main/java/com/metaformsystems/redline/api/dto/response/Dataspace.java +++ b/src/main/java/com/metaformsystems/redline/api/dto/response/DataspaceResponse.java @@ -14,8 +14,10 @@ package com.metaformsystems.redline.api.dto.response; +import java.util.Map; + /** * */ -public record Dataspace(Long id, String name, java.util.Map properties) { +public record DataspaceResponse(Long id, String name, Map properties) { } diff --git a/src/main/java/com/metaformsystems/redline/api/dto/response/ServiceProvider.java b/src/main/java/com/metaformsystems/redline/api/dto/response/ServiceProviderResponse.java similarity index 87% rename from src/main/java/com/metaformsystems/redline/api/dto/response/ServiceProvider.java rename to src/main/java/com/metaformsystems/redline/api/dto/response/ServiceProviderResponse.java index 0e6b37f..dc9aa7f 100644 --- a/src/main/java/com/metaformsystems/redline/api/dto/response/ServiceProvider.java +++ b/src/main/java/com/metaformsystems/redline/api/dto/response/ServiceProviderResponse.java @@ -17,5 +17,5 @@ /** * */ -public record ServiceProvider(Long id, String name) { +public record ServiceProviderResponse(Long id, String name) { } diff --git a/src/main/java/com/metaformsystems/redline/domain/service/ServiceProviderService.java b/src/main/java/com/metaformsystems/redline/domain/service/ServiceProviderService.java index 8e4f598..549ffff 100644 --- a/src/main/java/com/metaformsystems/redline/domain/service/ServiceProviderService.java +++ b/src/main/java/com/metaformsystems/redline/domain/service/ServiceProviderService.java @@ -14,8 +14,11 @@ package com.metaformsystems.redline.domain.service; +import com.metaformsystems.redline.api.dto.request.DataspaceRequest; import com.metaformsystems.redline.api.dto.request.ServiceProvider; -import com.metaformsystems.redline.api.dto.response.Dataspace; +import com.metaformsystems.redline.api.dto.response.DataspaceResponse; +import com.metaformsystems.redline.api.dto.response.ServiceProviderResponse; +import com.metaformsystems.redline.domain.entity.Dataspace; import com.metaformsystems.redline.domain.repository.DataspaceRepository; import com.metaformsystems.redline.domain.repository.ServiceProviderRepository; import org.springframework.stereotype.Service; @@ -34,25 +37,36 @@ public ServiceProviderService(ServiceProviderRepository serviceProviderRepositor } @Transactional - public com.metaformsystems.redline.api.dto.response.ServiceProvider createServiceProvider(ServiceProvider provider) { + public DataspaceResponse createDataspace(DataspaceRequest dataspace) { + var entity = new Dataspace(); + entity.setName(dataspace.name()); + entity.setProperties(dataspace.properties()); + var saved = dataspaceRepository.save(entity); + return new DataspaceResponse(saved.getId(), saved.getName(), saved.getProperties()); + } + + @Transactional + public ServiceProviderResponse createServiceProvider(ServiceProvider provider) { var serviceProvider = new com.metaformsystems.redline.domain.entity.ServiceProvider(); serviceProvider.setName(provider.name()); var saved = serviceProviderRepository.save(serviceProvider); - return new com.metaformsystems.redline.api.dto.response.ServiceProvider(saved.getId(), saved.getName()); + return new ServiceProviderResponse(saved.getId(), saved.getName()); } @Transactional - public List getDataspaces() { + public List getDataspaces() { return dataspaceRepository.findAll().stream() - .map(dataspace -> new Dataspace(dataspace.getId(), dataspace.getName(), dataspace.getProperties())) + .map(dataspace -> new DataspaceResponse(dataspace.getId(), dataspace.getName(), dataspace.getProperties())) .toList(); } @Transactional - public List getServiceProviders() { + public List getServiceProviders() { return serviceProviderRepository.findAll().stream() - .map(provider -> new com.metaformsystems.redline.api.dto.response.ServiceProvider(provider.getId(), provider.getName())) + .map(provider -> new ServiceProviderResponse(provider.getId(), provider.getName())) .toList(); } + + } diff --git a/src/main/java/com/metaformsystems/redline/domain/service/TenantService.java b/src/main/java/com/metaformsystems/redline/domain/service/TenantService.java index ef8933d..a7b25c1 100644 --- a/src/main/java/com/metaformsystems/redline/domain/service/TenantService.java +++ b/src/main/java/com/metaformsystems/redline/domain/service/TenantService.java @@ -18,7 +18,7 @@ import com.metaformsystems.redline.api.dto.request.ParticipantDeployment; import com.metaformsystems.redline.api.dto.request.PartnerReferenceRequest; import com.metaformsystems.redline.api.dto.request.TenantRegistration; -import com.metaformsystems.redline.api.dto.response.Dataspace; +import com.metaformsystems.redline.api.dto.response.DataspaceResponse; import com.metaformsystems.redline.api.dto.response.Participant; import com.metaformsystems.redline.api.dto.response.PartnerReference; import com.metaformsystems.redline.api.dto.response.Tenant; @@ -266,7 +266,7 @@ public List getPartnerReferences(Long participantId, Long data } @Transactional - public List getParticipantDataspaces(Long participantId) { + public List getParticipantDataspaces(Long participantId) { var participant = participantRepository.findById(participantId) .orElseThrow(() -> new ObjectNotFoundException("Participant not found with id: " + participantId)); var dataspaceIds = participant.getDataspaceInfos().stream() @@ -277,7 +277,7 @@ public List getParticipantDataspaces(Long participantId) { } var dataspaces = dataspaceRepository.findAllById(dataspaceIds); return dataspaces.stream() - .map(ds -> new Dataspace(ds.getId(), ds.getName(), ds.getProperties())) + .map(ds -> new DataspaceResponse(ds.getId(), ds.getName(), ds.getProperties())) .toList(); }