From 98b579e9e2f3f21151802c72f1892efe8146d090 Mon Sep 17 00:00:00 2001 From: Imad Bourouche Date: Fri, 10 Jan 2025 00:15:06 +0100 Subject: [PATCH 1/3] add artefact route for mod api --- controllers/artefacts.rb | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 controllers/artefacts.rb diff --git a/controllers/artefacts.rb b/controllers/artefacts.rb new file mode 100644 index 00000000..6155aeb0 --- /dev/null +++ b/controllers/artefacts.rb @@ -0,0 +1,27 @@ +class ArtefactsController < ApplicationController + + namespace "/artefacts" do + # Get all Semantic Artefacts + get do + artefacts = nil + check_last_modified_collection(LinkedData::Models::SemanticArtefact) + options = { + allow_views: params['also_include_views'] ||= false, + includes: LinkedData::Models::SemanticArtefact.goo_attrs_to_load([]) + } + artefacts = LinkedData::Models::SemanticArtefact.all_artefacts(options) + reply artefacts + end + + # Get one semantic artefact by ID + get "/:artefactID" do + artefact = LinkedData::Models::SemanticArtefact.find(params["artefactID"]) + error 404, "You must provide a valid `artefactID` to retrieve an artefact" if artefact.nil? + check_last_modified(artefact) + artefact.bring(*LinkedData::Models::SemanticArtefact.goo_attrs_to_load(includes_param)) + reply artefact + end + + end + +end \ No newline at end of file From f6aca8add7f5ab3ae10a5beb27951be73c4d9d38 Mon Sep 17 00:00:00 2001 From: Imad Bourouche Date: Mon, 13 Jan 2025 11:38:18 +0100 Subject: [PATCH 2/3] add distribution routes --- controllers/artefacts.rb | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/controllers/artefacts.rb b/controllers/artefacts.rb index 6155aeb0..fac2fffb 100644 --- a/controllers/artefacts.rb +++ b/controllers/artefacts.rb @@ -22,6 +22,44 @@ class ArtefactsController < ApplicationController reply artefact end + # Display latest distribution + get "/:artefactID/distributions/latest" do + artefact = LinkedData::Models::SemanticArtefact.find(params["artefactID"]) + error 404, "You must provide a valid artefactID to retrieve an artefact" if artefact.nil? + include_status = params["include_status"] && !params["include_status"].empty? ? params["include_status"].to_sym : :any + latest_distribution = artefact.latest_distribution(status: include_status) + + if latest_distribution + check_last_modified(latest_distribution) + latest_distribution.bring(*LinkedData::Models::SemanticArtefactDistribution.goo_attrs_to_load(includes_param)) + end + reply latest_distribution + end + + # Display a distribution + get '/:artefactID/distributions/:distributionID' do + artefact = LinkedData::Models::SemanticArtefact.find(params["artefactID"]) + error 422, "Semantic Artefact #{params["artefactID"]} does not exist" unless artefact + check_last_modified_segment(LinkedData::Models::SemanticArtefactDistribution, [params["artefactID"]]) + artefact_distribution = artefact.distribution(params["distributionID"]) + error 404, "Distribuution with #{params['distributionID']} not found" if artefact_distribution.nil? + artefact_distribution.bring(*LinkedData::Models::SemanticArtefactDistribution.goo_attrs_to_load(includes_param)) + reply artefact_distribution + end + + # Display a distribution + get '/:artefactID/distributions' do + artefact = LinkedData::Models::SemanticArtefact.find(params["artefactID"]) + error 404, "Semantic Artefact #{params["acronym"]} does not exist" unless artefact + check_last_modified_segment(LinkedData::Models::SemanticArtefactDistribution, [params["artefactID"]]) + options = { + status: (params["include_status"] || "ANY"), + includes: LinkedData::Models::SemanticArtefactDistribution.goo_attrs_to_load([]) + } + distros = artefact.all_distributions(options) + reply distros.sort {|a,b| b.distributionId.to_i <=> a.distributionId.to_i } + end + end end \ No newline at end of file From b6128e5cc96026b576369bad4a813a22fb5e0c73 Mon Sep 17 00:00:00 2001 From: Imad Bourouche Date: Thu, 23 Jan 2025 17:21:34 +0100 Subject: [PATCH 3/3] refactor /artefacts route code --- controllers/artefacts.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/controllers/artefacts.rb b/controllers/artefacts.rb index fac2fffb..3e2bdabb 100644 --- a/controllers/artefacts.rb +++ b/controllers/artefacts.rb @@ -3,10 +3,9 @@ class ArtefactsController < ApplicationController namespace "/artefacts" do # Get all Semantic Artefacts get do - artefacts = nil check_last_modified_collection(LinkedData::Models::SemanticArtefact) options = { - allow_views: params['also_include_views'] ||= false, + also_include_views: params['also_include_views'] ||= false, includes: LinkedData::Models::SemanticArtefact.goo_attrs_to_load([]) } artefacts = LinkedData::Models::SemanticArtefact.all_artefacts(options)