DatasourceService.java
package se.jobtechdev.personaldatagateway.api.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import se.jobtechdev.personaldatagateway.api.exception.MalformedURLRuntimeException;
import se.jobtechdev.personaldatagateway.api.generated.entities.DatasourceEntity;
import se.jobtechdev.personaldatagateway.api.generated.entities.OrganizationEntity;
import se.jobtechdev.personaldatagateway.api.repository.DatasourceRepository;
import se.jobtechdev.personaldatagateway.api.util.TimeProvider;
import se.jobtechdev.personaldatagateway.api.util.UuidProvider;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.Optional;
import java.util.UUID;
@Component
public class DatasourceService {
private final DatasourceRepository datasourceRepository;
@SuppressWarnings("unused")
@Autowired
public DatasourceService(DatasourceRepository datasourceRepository) {
this.datasourceRepository = datasourceRepository;
}
public Page<DatasourceEntity> getDatasources(Pageable pageable) {
return datasourceRepository.findAll(pageable);
}
public Optional<DatasourceEntity> getDatasourceById(UUID id) {
return datasourceRepository.findById(id);
}
@Transactional
public Optional<DatasourceEntity> createDatasource(
OrganizationEntity organization, String name, String path, String headers, String method) {
final URL datatypeUrl;
try {
datatypeUrl =
URI.create("http://example.com/datatypes/6871e92f-5374-4f83-b743-e9966913cbbb").toURL();
} catch (MalformedURLException e) {
throw new MalformedURLRuntimeException(e);
}
final var datasourceId = UuidProvider.uuid();
final var now = TimeProvider.now();
final var datasource =
new DatasourceEntity(datasourceId, organization, name, datatypeUrl, path, now, now);
datasource.setHeaders(headers);
datasource.setMethod(method);
final var saved = datasourceRepository.save(datasource);
return Optional.of(saved);
}
@Transactional
public DatasourceEntity save(DatasourceEntity datasource) {
return datasourceRepository.save(datasource);
}
@Transactional
public DatasourceEntity update(DatasourceEntity datasource) {
final var updated = TimeProvider.now();
datasource.setUpdated(updated);
return datasourceRepository.save(datasource);
}
}