Skip to content

Commit

Permalink
feat: make service agnostic on repo impl
Browse files Browse the repository at this point in the history
  • Loading branch information
Sulejman Karisik authored and Sulejman Karisik committed Jul 4, 2024
1 parent 96e7ee5 commit 9b1d63b
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 41 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package io.github.genomicdatainfrastructure.discovery.repositories;

import io.github.genomicdatainfrastructure.discovery.model.DatasetSearchQuery;
import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.CkanPackageShowResponse;
import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.PackagesSearchResponse;

public interface DatasetsRepository {

PackagesSearchResponse search(DatasetSearchQuery query, String accessToken);

CkanPackageShowResponse retrieveCkanPackage(String id, String accessToken);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// SPDX-FileCopyrightText: 2024 PNED G.I.E.
//
// SPDX-License-Identifier: Apache-2.0

package io.github.genomicdatainfrastructure.discovery.repositories;

import io.github.genomicdatainfrastructure.discovery.model.DatasetSearchQuery;
import io.github.genomicdatainfrastructure.discovery.model.DatasetsSearchResponse;
import io.github.genomicdatainfrastructure.discovery.remote.ckan.api.CkanQueryApi;
import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.CkanPackageShowResponse;
import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.PackagesSearchResponse;
import io.github.genomicdatainfrastructure.discovery.services.CkanFacetsQueryBuilder;
import io.github.genomicdatainfrastructure.discovery.services.DatasetsSearchService;
import io.github.genomicdatainfrastructure.discovery.services.PackagesSearchResponseMapper;
import io.quarkus.arc.lookup.LookupIfProperty;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import org.eclipse.microprofile.rest.client.inject.RestClient;

@LookupIfProperty(name = "repositories.gdi", stringValue = "true")
@ApplicationScoped
public class GdiDatasetsRepository implements DatasetsRepository {

private static final String SELECTED_FACETS = "[\"access_rights\",\"theme\",\"tags\",\"spatial_uri\",\"organization\",\"publisher_name\",\"res_format\"]";
private final CkanQueryApi ckanQueryApi;

@Inject
public GdiDatasetsRepository(
@RestClient CkanQueryApi ckanQueryApi
) {
this.ckanQueryApi = ckanQueryApi;
}

@Override
public PackagesSearchResponse search(DatasetSearchQuery query, String accessToken) {
var facetsQuery = CkanFacetsQueryBuilder.buildFacetQuery(query);

return ckanQueryApi.packageSearch(
query.getQuery(),
facetsQuery,
query.getSort(),
query.getRows(),
query.getStart(),
SELECTED_FACETS,
accessToken
);
}

@Override
public CkanPackageShowResponse retrieveCkanPackage(String id, String accessToken) {
return ckanQueryApi.packageShow(id, accessToken);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// SPDX-FileCopyrightText: 2024 PNED G.I.E.
//
// SPDX-License-Identifier: Apache-2.0

package io.github.genomicdatainfrastructure.discovery.repositories;

import io.github.genomicdatainfrastructure.discovery.model.DatasetSearchQuery;
import io.github.genomicdatainfrastructure.discovery.remote.ckan.api.CkanQueryApi;
import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.CkanPackageShowResponse;
import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.PackagesSearchResponse;
import io.github.genomicdatainfrastructure.discovery.services.CkanFacetsQueryBuilder;
import io.quarkus.arc.lookup.LookupIfProperty;
import io.quarkus.arc.lookup.LookupUnlessProperty;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.context.Dependent;
import jakarta.inject.Inject;
import org.apache.commons.lang3.NotImplementedException;
import org.eclipse.microprofile.rest.client.inject.RestClient;

@LookupIfProperty(name = "repositories.lndc", stringValue = "true")
@ApplicationScoped
public class LndcDatasetsRepository implements DatasetsRepository {

@Override
public PackagesSearchResponse search(DatasetSearchQuery query, String accessToken) {
throw new NotImplementedException();
}

@Override

public CkanPackageShowResponse retrieveCkanPackage(String id, String accessToken) {
throw new NotImplementedException();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,41 +4,22 @@

package io.github.genomicdatainfrastructure.discovery.services;

import org.eclipse.microprofile.rest.client.inject.RestClient;

import io.github.genomicdatainfrastructure.discovery.repositories.DatasetsRepository;
import io.github.genomicdatainfrastructure.discovery.model.DatasetSearchQuery;
import io.github.genomicdatainfrastructure.discovery.model.DatasetsSearchResponse;
import io.github.genomicdatainfrastructure.discovery.remote.ckan.api.CkanQueryApi;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Instance;
import jakarta.inject.Inject;

@ApplicationScoped
public class CkanDatasetsSearchService implements DatasetsSearchService {

private static final String SELECTED_FACETS = "[\"access_rights\",\"theme\",\"tags\",\"spatial_uri\",\"organization\",\"publisher_name\",\"res_format\"]";

private final CkanQueryApi ckanQueryApi;

@Inject
public CkanDatasetsSearchService(
@RestClient CkanQueryApi ckanQueryApi
) {
this.ckanQueryApi = ckanQueryApi;
}
Instance<DatasetsRepository> datasetsRepository;

@Override
public DatasetsSearchResponse search(DatasetSearchQuery query, String accessToken) {
var facetsQuery = CkanFacetsQueryBuilder.buildFacetQuery(query);

var response = ckanQueryApi.packageSearch(
query.getQuery(),
facetsQuery,
query.getSort(),
query.getRows(),
query.getStart(),
SELECTED_FACETS,
accessToken
);
var response = datasetsRepository.get().search(query, accessToken);

return PackagesSearchResponseMapper.from(response);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,20 @@

package io.github.genomicdatainfrastructure.discovery.services;

import org.eclipse.microprofile.rest.client.inject.RestClient;

import io.github.genomicdatainfrastructure.discovery.repositories.DatasetsRepository;
import io.github.genomicdatainfrastructure.discovery.exceptions.DatasetNotFoundException;
import io.github.genomicdatainfrastructure.discovery.model.RetrievedDataset;
import io.github.genomicdatainfrastructure.discovery.remote.ckan.api.CkanQueryApi;
import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.CkanPackageShowResponse;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Instance;
import jakarta.inject.Inject;
import jakarta.ws.rs.WebApplicationException;

@ApplicationScoped
public class RetrieveDatasetService {

private final CkanQueryApi ckanQueryApi;

@Inject
public RetrieveDatasetService(
@RestClient CkanQueryApi ckanQueryApi
) {
this.ckanQueryApi = ckanQueryApi;
}
Instance<DatasetsRepository> datasetsRepository;

public RetrievedDataset retrieve(String id, String accessToken) {
var response = retrieveCkanPackage(id, accessToken);
Expand All @@ -33,7 +26,7 @@ public RetrievedDataset retrieve(String id, String accessToken) {

public CkanPackageShowResponse retrieveCkanPackage(String id, String accessToken) {
try {
return ckanQueryApi.packageShow(id, accessToken);
return datasetsRepository.get().retrieveCkanPackage(id, accessToken);
} catch (WebApplicationException e) {
if (e.getResponse().getStatus() == 404) {
throw new DatasetNotFoundException(id);
Expand Down
19 changes: 12 additions & 7 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ quarkus.swagger-ui.always-include=true
quarkus.native.additional-build-args=-march=compatibility
quarkus.keycloak.devservices.realm-path=quarkus-realm.json
quarkus.keycloak.devservices.port=32794
quarkus.wiremock.devservices.port=4000
quarkus.wiremock.devservices.port=4001
quarkus.oidc.client-id=backend-service
quarkus.oidc.credentials.secret=secret
quarkus.openapi-generator.codegen.spec.discovery_yaml.enable-security-generation=false
Expand All @@ -27,13 +27,14 @@ quarkus.openapi-generator.codegen.spec.keycloak_yaml.enable-security-generation=
quarkus.openapi-generator.codegen.spec.keycloak_yaml.base-package=io.github.genomicdatainfrastructure.discovery.remote.keycloak
quarkus.openapi-generator.codegen.spec.keycloak_yaml.additional-model-type-annotations=@lombok.Data;@lombok.NoArgsConstructor;@lombok.AllArgsConstructor;@lombok.Builder;@io.quarkus.runtime.annotations.RegisterForReflection
quarkus.openapi-generator.codegen.spec.keycloak_yaml.generate-part-filename=false
quarkus.rest-client.ckan_yaml.url=http://localhost:4000
quarkus.rest-client.keycloak_yaml.url=http://localhost:4000
quarkus.rest-client.ckan_yaml.url=http://localhost:4001
quarkus.rest-client.keycloak_yaml.url=http://localhost:4001
quarkus.rest-client.keycloak_yaml.beacon_idp_alias=LSAAI
quarkus.rest-client.beacon_yaml.url=http://localhost:4000
quarkus.rest-client.beacon_yaml.url=http://localhost:4001
quarkus.rest-client.beacon_yaml.read-timeout=60000
%dev.quarkus.oidc.auth-server-url=https://keycloak-test.healthdata.nl/realms/ckan
%dev.quarkus.oidc.client-id=ckan
%dev.quarkus.oidc.auth-server-url=https://id.portal.dev.gdi.lu/realms/gdi
%dev.quarkus.oidc.client-id=gdi
%dev.quarkus.oidc.credentials.secret=vjKOWL7bU3hzESRegDpprHjPkHoyoMAO
%dev.quarkus.rest-client.ckan_yaml.url=https://ckan-test.healthdata.nl/
%dev.quarkus.rest-client.keycloak_yaml.url=https://keycloak-test.healthdata.nl/realms/ckan
%dev.quarkus.rest-client.beacon_yaml.url=https://beacon-network-backend-demo.ega-archive.org/beacon-network
Expand All @@ -42,5 +43,9 @@ quarkus.rest-client.beacon_yaml.read-timeout=60000
%dev.quarkus.log.category."org.jboss.resteasy.reactive.client.logging".level=DEBUG
quarkus.http.cors=true
quarkus.http.cors.origins=http://localhost:3000
quarkus.http.port=8082
quarkus.http.cors.headers=accept, authorization, content-type, x-requested-with
quarkus.http.cors.methods=POST, OPTIONS, GET
quarkus.http.cors.methods=POST, OPTIONS, GET

repositories.gdi=true
repositories.lndc=false

0 comments on commit 9b1d63b

Please sign in to comment.