labimotion 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/labimotion/api.rb +19 -0
- data/lib/labimotion/apis/converter_api.rb +68 -0
- data/lib/labimotion/apis/generic_dataset_api.rb +50 -0
- data/lib/labimotion/apis/generic_element_api.rb +339 -0
- data/lib/labimotion/apis/labimotion_hub_api.rb +53 -0
- data/lib/labimotion/apis/segment_api.rb +144 -0
- data/lib/labimotion/entities/application_entity.rb +88 -0
- data/lib/labimotion/entities/dataset_entity.rb +16 -0
- data/lib/labimotion/entities/dataset_klass_entity.rb +9 -0
- data/lib/labimotion/entities/element_entity.rb +108 -0
- data/lib/labimotion/entities/element_klass_entity.rb +10 -0
- data/lib/labimotion/entities/element_revision_entity.rb +57 -0
- data/lib/labimotion/entities/eln_element_entity.rb +110 -0
- data/lib/labimotion/entities/generic_entity.rb +54 -0
- data/lib/labimotion/entities/generic_klass_entity.rb +14 -0
- data/lib/labimotion/entities/generic_public_entity.rb +25 -0
- data/lib/labimotion/entities/klass_revision_entity.rb +20 -0
- data/lib/labimotion/entities/segment_entity.rb +62 -0
- data/lib/labimotion/entities/segment_klass_entity.rb +8 -0
- data/lib/labimotion/entities/segment_revision_entity.rb +55 -0
- data/lib/labimotion/helpers/converter_helpers.rb +13 -0
- data/lib/labimotion/helpers/dataset_helpers.rb +38 -0
- data/lib/labimotion/helpers/element_helpers.rb +268 -0
- data/lib/labimotion/helpers/generic_helpers.rb +252 -0
- data/lib/labimotion/helpers/repository_helpers.rb +14 -0
- data/lib/labimotion/helpers/sample_association_helpers.rb +126 -0
- data/lib/labimotion/helpers/search_helpers.rb +62 -0
- data/lib/labimotion/helpers/segment_helpers.rb +97 -0
- data/lib/labimotion/libs/converter.rb +325 -0
- data/lib/labimotion/libs/export_dataset.rb +121 -0
- data/lib/labimotion/libs/nmr_mapper.rb +265 -0
- data/lib/labimotion/libs/nmr_mapper_repo.rb +263 -0
- data/lib/labimotion/libs/template_hub.rb +55 -0
- data/lib/labimotion/models/collections_element.rb +42 -0
- data/lib/labimotion/models/concerns/attachment_converter.rb +42 -0
- data/lib/labimotion/models/concerns/datasetable.rb +50 -0
- data/lib/labimotion/models/concerns/generic_klass_revisions.rb +39 -0
- data/lib/labimotion/models/concerns/generic_revisions.rb +43 -0
- data/lib/labimotion/models/concerns/segmentable.rb +74 -0
- data/lib/labimotion/models/dataset.rb +14 -0
- data/lib/labimotion/models/dataset_klass.rb +25 -0
- data/lib/labimotion/models/dataset_klasses_revision.rb +9 -0
- data/lib/labimotion/models/datasets_revision.rb +9 -0
- data/lib/labimotion/models/element.rb +121 -0
- data/lib/labimotion/models/element_klass.rb +25 -0
- data/lib/labimotion/models/element_klasses_revision.rb +9 -0
- data/lib/labimotion/models/elements_element.rb +11 -0
- data/lib/labimotion/models/elements_revision.rb +8 -0
- data/lib/labimotion/models/elements_sample.rb +11 -0
- data/lib/labimotion/models/segment.rb +14 -0
- data/lib/labimotion/models/segment_klass.rb +24 -0
- data/lib/labimotion/models/segment_klasses_revision.rb +9 -0
- data/lib/labimotion/models/segments_revision.rb +9 -0
- data/lib/labimotion/utils/con_state.rb +13 -0
- data/lib/labimotion/utils/export.rb +112 -0
- data/lib/labimotion/utils/import.rb +186 -0
- data/lib/labimotion/utils/search.rb +112 -0
- data/lib/labimotion/utils/serializer.rb +78 -0
- data/lib/labimotion/version.rb +6 -0
- data/lib/labimotion.rb +95 -0
- metadata +119 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2d2c94d9d6147cab5fd823c611f65c6b41f5140bd018424aae86ca1bd697e1b0
|
4
|
+
data.tar.gz: e5ac11f1be750a698f7285776fc62a1850876b4fa5b53814460f9325d90a832a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1430bdaa9a7721c6d5c09b35abde14ee6d2946a7f394fb65a12b9456b026c6734e027c1c36c24195cd36ec4e5701c7f4bba778f4d2fa31f4e6984e491f05eecb
|
7
|
+
data.tar.gz: 5518460a7151dce59e3c20e6e8ca0422a3d443b8aff7c95fecf63d915aa0a6c2e1555b221548bc58ef7194798c48cb4252c3f89454798d27366d9c4a844b1348
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
## This is the first version of the dataset class
|
4
|
+
module Labimotion
|
5
|
+
## This is the first version of the dataset class
|
6
|
+
class Api
|
7
|
+
def initialize
|
8
|
+
# Initialization code
|
9
|
+
end
|
10
|
+
|
11
|
+
def gget_data
|
12
|
+
'Hello, worlddddddddddddddddddddd!'
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.hello
|
16
|
+
'Hellooooooooooooooooooooo!'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Labimotion
|
4
|
+
class ConverterAPI < Grape::API
|
5
|
+
helpers do
|
6
|
+
end
|
7
|
+
resource :converter do
|
8
|
+
resource :profiles do
|
9
|
+
before do
|
10
|
+
@conf = Rails.configuration.try(:converter).try(:url)
|
11
|
+
@profile = Rails.configuration.try(:converter).try(:profile)
|
12
|
+
error!(406) unless @conf && @profile
|
13
|
+
end
|
14
|
+
desc 'fetch profiles'
|
15
|
+
get do
|
16
|
+
profiles = Labimotion::Converter.fetch_profiles
|
17
|
+
{ profiles: profiles, client: @profile }
|
18
|
+
end
|
19
|
+
desc 'create profile'
|
20
|
+
post do
|
21
|
+
Labimotion::Converter.create_profile(params)
|
22
|
+
end
|
23
|
+
desc 'update profile'
|
24
|
+
route_param :id do
|
25
|
+
put do
|
26
|
+
Labimotion::Converter.update_profile(params)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
desc 'delete profile'
|
30
|
+
route_param :id do
|
31
|
+
delete do
|
32
|
+
id = params[:id]
|
33
|
+
Labimotion::Converter.delete_profile(id)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
resource :options do
|
39
|
+
before do
|
40
|
+
error!(401) unless current_user.profile&.data['converter_admin'] == true
|
41
|
+
@conf = Rails.configuration.try(:converter).try(:url)
|
42
|
+
@profile = Rails.configuration.try(:converter).try(:profile)
|
43
|
+
error!(406) unless @conf && @profile
|
44
|
+
end
|
45
|
+
desc 'fetch options'
|
46
|
+
get do
|
47
|
+
options = Labimotion::Converter.fetch_options
|
48
|
+
{ options: options, client: @profile }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
resource :tables do
|
53
|
+
before do
|
54
|
+
error!(401) unless current_user.profile&.data['converter_admin'] == true
|
55
|
+
@conf = Rails.configuration.try(:converter).try(:url)
|
56
|
+
@profile = Rails.configuration.try(:converter).try(:profile)
|
57
|
+
error!(406) unless @conf && @profile
|
58
|
+
end
|
59
|
+
desc 'create tables'
|
60
|
+
post do
|
61
|
+
res = Labimotion::Converter.create_tables(params[:file][0]['tempfile']) unless params[:file].empty?
|
62
|
+
res['metadata']['file_name'] = params[:file][0]['filename']
|
63
|
+
res
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Labimotion
|
2
|
+
## Generic Dataset API
|
3
|
+
class GenericDatasetAPI < Grape::API
|
4
|
+
include Grape::Kaminari
|
5
|
+
helpers Labimotion::GenericHelpers
|
6
|
+
helpers Labimotion::DatasetHelpers
|
7
|
+
|
8
|
+
resource :generic_dataset do
|
9
|
+
namespace :klasses do
|
10
|
+
desc 'get dataset klasses'
|
11
|
+
get do
|
12
|
+
list = klass_list(true)
|
13
|
+
present list.sort_by(&:place), with: Labimotion::DatasetKlassEntity, root: 'klass'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
namespace :list_dataset_klass do
|
18
|
+
desc 'list Generic Dataset Klass'
|
19
|
+
params do
|
20
|
+
optional :is_active, type: Boolean, desc: 'Active or Inactive Dataset'
|
21
|
+
end
|
22
|
+
get do
|
23
|
+
list = klass_list(params[:is_active])
|
24
|
+
present list, with: Labimotion::DatasetKlassEntity, root: 'klass'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
namespace :fetch_repo do
|
29
|
+
desc 'fetch Generic Dataset Klass from Chemotion Repository'
|
30
|
+
get do
|
31
|
+
fetch_repo('DatasetKlass')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
namespace :create_repo_klass do
|
36
|
+
desc 'create Generic Dataset Klass'
|
37
|
+
params do
|
38
|
+
requires :identifier, type: String, desc: 'Identifier'
|
39
|
+
end
|
40
|
+
post do
|
41
|
+
create_repo_klass(params, current_user)
|
42
|
+
present DatasetKlass.all, with: Labimotion::DatasetKlassEntity, root: 'klass'
|
43
|
+
rescue => e
|
44
|
+
Labimotion.log_exception(e, current_user)
|
45
|
+
{ error: e.message }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,339 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'labimotion/version'
|
4
|
+
module Labimotion
|
5
|
+
# Generic Element API
|
6
|
+
class GenericElementAPI < Grape::API
|
7
|
+
include Grape::Kaminari
|
8
|
+
helpers ContainerHelpers
|
9
|
+
helpers ParamsHelpers
|
10
|
+
helpers CollectionHelpers
|
11
|
+
helpers Labimotion::SampleAssociationHelpers
|
12
|
+
helpers Labimotion::GenericHelpers
|
13
|
+
helpers Labimotion::ElementHelpers
|
14
|
+
|
15
|
+
resource :generic_elements do
|
16
|
+
namespace :klass do
|
17
|
+
desc 'get klass info'
|
18
|
+
params do
|
19
|
+
requires :name, type: String, desc: 'element klass name'
|
20
|
+
end
|
21
|
+
get do
|
22
|
+
ek = Labimotion::ElementKlass.find_by(name: params[:name])
|
23
|
+
present ek, with: Labimotion::ElementKlassEntity, root: 'klass'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
namespace :klasses do
|
28
|
+
desc 'get klasses'
|
29
|
+
params do
|
30
|
+
optional :generic_only, type: Boolean, desc: 'list generic element only'
|
31
|
+
end
|
32
|
+
get do
|
33
|
+
list = klass_list(params[:generic_only])
|
34
|
+
present list, with: Labimotion::ElementKlassEntity, root: 'klass'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
namespace :create_element_klass do
|
39
|
+
desc 'create Generic Element Klass'
|
40
|
+
params do
|
41
|
+
requires :name, type: String, desc: 'Element Klass Name'
|
42
|
+
requires :label, type: String, desc: 'Element Klass Label'
|
43
|
+
requires :klass_prefix, type: String, desc: 'Element Klass Short Label Prefix'
|
44
|
+
optional :icon_name, type: String, desc: 'Element Klass Icon Name'
|
45
|
+
optional :desc, type: String, desc: 'Element Klass Desc'
|
46
|
+
optional :properties_template, type: Hash, desc: 'Element Klass properties template'
|
47
|
+
end
|
48
|
+
post do
|
49
|
+
authenticate_admin!('elements')
|
50
|
+
create_element_klass(current_user, params)
|
51
|
+
status 201
|
52
|
+
rescue ActiveRecord::RecordInvalid => e
|
53
|
+
{ error: e.message }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
namespace :update_element_klass do
|
58
|
+
desc 'update Generic Element Klass'
|
59
|
+
params do
|
60
|
+
requires :id, type: Integer, desc: 'Element Klass ID'
|
61
|
+
optional :label, type: String, desc: 'Element Klass Label'
|
62
|
+
optional :klass_prefix, type: String, desc: 'Element Klass Short Label Prefix'
|
63
|
+
optional :icon_name, type: String, desc: 'Element Klass Icon Name'
|
64
|
+
optional :desc, type: String, desc: 'Element Klass Desc'
|
65
|
+
optional :place, type: String, desc: 'Element Klass Place'
|
66
|
+
end
|
67
|
+
post do
|
68
|
+
authenticate_admin!('elements')
|
69
|
+
update_element_klass(current_user, params)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
namespace :klass_revisions do
|
74
|
+
desc 'list Generic Element Revisions'
|
75
|
+
params do
|
76
|
+
requires :id, type: Integer, desc: 'Generic Element Klass Id'
|
77
|
+
requires :klass, type: String, desc: 'Klass', values: %w[ElementKlass SegmentKlass DatasetKlass]
|
78
|
+
end
|
79
|
+
get do
|
80
|
+
list = list_klass_revisions(params)
|
81
|
+
present list, with: Labimotion::KlassRevisionEntity, root: 'revisions'
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
namespace :element_revisions do
|
86
|
+
desc 'list Generic Element Revisions'
|
87
|
+
params do
|
88
|
+
requires :id, type: Integer, desc: 'Generic Element Id'
|
89
|
+
end
|
90
|
+
get do
|
91
|
+
list = element_revisions(params)
|
92
|
+
present list, with: Labimotion::ElementRevisionEntity, root: 'revisions'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
namespace :delete_klass_revision do
|
97
|
+
desc 'delete Klass Revision'
|
98
|
+
params do
|
99
|
+
requires :id, type: Integer, desc: 'Revision ID'
|
100
|
+
requires :klass_id, type: Integer, desc: 'Klass ID'
|
101
|
+
requires :klass, type: String, desc: 'Klass', values: %w[ElementKlass SegmentKlass DatasetKlass]
|
102
|
+
end
|
103
|
+
post do
|
104
|
+
authenticate_admin!(params[:klass].gsub(/(Klass)/, 's').downcase)
|
105
|
+
delete_klass_revision(params)
|
106
|
+
status 201
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
namespace :delete_revision do
|
111
|
+
desc 'delete Generic Element Revisions'
|
112
|
+
params do
|
113
|
+
requires :id, type: Integer, desc: 'Revision Id'
|
114
|
+
requires :element_id, type: Integer, desc: 'Element ID'
|
115
|
+
requires :klass, type: String, desc: 'Klass', values: %w[Element Segment Dataset]
|
116
|
+
end
|
117
|
+
post do
|
118
|
+
delete_revision(params)
|
119
|
+
status 201
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
namespace :segment_revisions do
|
124
|
+
desc 'list Generic Element Revisions'
|
125
|
+
params do
|
126
|
+
optional :id, type: Integer, desc: 'Generic Element Id'
|
127
|
+
end
|
128
|
+
get do
|
129
|
+
klass = Labimotion::Segment.find(params[:id])
|
130
|
+
list = klass.segments_revisions unless klass.nil?
|
131
|
+
present list&.sort_by(&:created_at).reverse, with: Labimotion::SegmentRevisionEntity, root: 'revisions'
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
namespace :upload_generics_files do
|
136
|
+
desc 'upload generic files'
|
137
|
+
params do
|
138
|
+
requires :att_id, type: Integer, desc: 'Element Id'
|
139
|
+
requires :att_type, type: String, desc: 'Element Type'
|
140
|
+
end
|
141
|
+
after_validation do
|
142
|
+
if params[:att_type] == 'Sample' || params[:att_type] == 'Reaction' || params[:att_type] == 'ResearchPlan'
|
143
|
+
el = "#{params[:att_type]}".constantize.find_by(id: params[:att_id])
|
144
|
+
else
|
145
|
+
el = "Labimotion::#{params[:att_type]}".constantize.find_by(id: params[:att_id])
|
146
|
+
end
|
147
|
+
error!('401 Unauthorized', 401) if el.nil?
|
148
|
+
|
149
|
+
policy_updatable = ElementPolicy.new(current_user, el).update?
|
150
|
+
error!('401 Unauthorized', 401) unless policy_updatable
|
151
|
+
end
|
152
|
+
post do
|
153
|
+
upload_generics_files(current_user, params)
|
154
|
+
true
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
namespace :klasses_all do
|
159
|
+
desc 'get all klasses for admin function'
|
160
|
+
get do
|
161
|
+
list = Labimotion::ElementKlass.all.sort_by { |e| e.place }
|
162
|
+
present list, with: Labimotion::ElementKlassEntity, root: 'klass'
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
namespace :de_activate_klass do
|
167
|
+
desc 'activate or deactivate Generic Klass'
|
168
|
+
params do
|
169
|
+
requires :klass, type: String, desc: 'Klass', values: %w[ElementKlass SegmentKlass DatasetKlass]
|
170
|
+
requires :id, type: Integer, desc: 'Klass ID'
|
171
|
+
requires :is_active, type: Boolean, desc: 'Active or Inactive Klass'
|
172
|
+
end
|
173
|
+
after_validation do
|
174
|
+
authenticate_admin!(params[:klass].gsub(/(Klass)/, 's').downcase)
|
175
|
+
@klz = fetch_klass(params[:klass], params[:id])
|
176
|
+
end
|
177
|
+
post do
|
178
|
+
deactivate_klass(params)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
namespace :delete_klass do
|
183
|
+
desc 'delete Generic Klass'
|
184
|
+
params do
|
185
|
+
requires :klass, type: String, desc: 'Klass', values: %w[ElementKlass SegmentKlass DatasetKlass]
|
186
|
+
requires :id, type: Integer, desc: 'Klass ID'
|
187
|
+
end
|
188
|
+
delete ':id' do
|
189
|
+
delete_klass(params)
|
190
|
+
status 201
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
namespace :update_template do
|
195
|
+
desc 'update Generic Properties Template'
|
196
|
+
params do
|
197
|
+
requires :klass, type: String, desc: 'Klass', values: %w[ElementKlass SegmentKlass DatasetKlass]
|
198
|
+
requires :id, type: Integer, desc: 'Klass ID'
|
199
|
+
requires :properties_template, type: Hash
|
200
|
+
optional :is_release, type: Boolean, default: false
|
201
|
+
end
|
202
|
+
after_validation do
|
203
|
+
authenticate_admin!(params[:klass].gsub(/(Klass)/, 's').downcase)
|
204
|
+
@klz = fetch_klass(params[:klass], params[:id])
|
205
|
+
end
|
206
|
+
post do
|
207
|
+
update_template(params)
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
desc 'Return serialized elements of current user'
|
212
|
+
params do
|
213
|
+
optional :collection_id, type: Integer, desc: 'Collection id'
|
214
|
+
optional :sync_collection_id, type: Integer, desc: 'SyncCollectionsUser id'
|
215
|
+
optional :el_type, type: String, desc: 'element klass name'
|
216
|
+
optional :from_date, type: Integer, desc: 'created_date from in ms'
|
217
|
+
optional :to_date, type: Integer, desc: 'created_date to in ms'
|
218
|
+
optional :filter_created_at, type: Boolean, desc: 'filter by created at or updated at'
|
219
|
+
end
|
220
|
+
paginate per_page: 7, offset: 0, max_per_page: 100
|
221
|
+
get do
|
222
|
+
|
223
|
+
scope = list_serialized_elements(params, current_user)
|
224
|
+
|
225
|
+
reset_pagination_page(scope)
|
226
|
+
if Labimotion::IS_RAILS5 == true
|
227
|
+
generic_elements = paginate(scope).map { |s| ElementListPermissionProxy.new(current_user, s, user_ids).serialized }
|
228
|
+
else
|
229
|
+
generic_elements = paginate(scope).map do |element|
|
230
|
+
Labimotion::ElementEntity.represent(
|
231
|
+
element,
|
232
|
+
displayed_in_list: true,
|
233
|
+
detail_levels: ElementDetailLevelCalculator.new(user: current_user, element: element).detail_levels,
|
234
|
+
)
|
235
|
+
end
|
236
|
+
end
|
237
|
+
{ generic_elements: generic_elements }
|
238
|
+
end
|
239
|
+
|
240
|
+
desc 'Return serialized element by id'
|
241
|
+
params do
|
242
|
+
requires :id, type: Integer, desc: 'Element id'
|
243
|
+
end
|
244
|
+
route_param :id do
|
245
|
+
before do
|
246
|
+
error!('401 Unauthorized', 401) unless current_user.matrix_check_by_name('genericElement') && ElementPolicy.new(current_user, Element.find(params[:id])).read?
|
247
|
+
end
|
248
|
+
|
249
|
+
get do
|
250
|
+
element = Labimotion::Element.find(params[:id])
|
251
|
+
if Labimotion::IS_RAILS5 == true
|
252
|
+
{
|
253
|
+
element: ElementPermissionProxy.new(current_user, element, user_ids).serialized,
|
254
|
+
attachments: Entities::AttachmentEntity.represent(element.attachments)
|
255
|
+
}
|
256
|
+
else
|
257
|
+
{
|
258
|
+
element: Labimotion::ElementEntity.represent(
|
259
|
+
element,
|
260
|
+
detail_levels: ElementDetailLevelCalculator.new(user: current_user, element: element).detail_levels,
|
261
|
+
),
|
262
|
+
attachments: Entities::AttachmentEntity.represent(element.attachments),
|
263
|
+
}
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
desc 'Create a element'
|
269
|
+
params do
|
270
|
+
requires :element_klass, type: Hash
|
271
|
+
requires :name, type: String
|
272
|
+
optional :properties, type: Hash
|
273
|
+
optional :properties_release, type: Hash
|
274
|
+
optional :collection_id, type: Integer
|
275
|
+
requires :container, type: Hash
|
276
|
+
optional :segments, type: Array, desc: 'Segments'
|
277
|
+
end
|
278
|
+
post do
|
279
|
+
begin
|
280
|
+
element = create_element(current_user, params)
|
281
|
+
if Labimotion::IS_RAILS5 == true
|
282
|
+
{
|
283
|
+
element: ElementPermissionProxy.new(current_user, element, user_ids).serialized,
|
284
|
+
attachments: Entities::AttachmentEntity.represent(element.attachments)
|
285
|
+
}
|
286
|
+
else
|
287
|
+
present(
|
288
|
+
element,
|
289
|
+
with: Labimotion::ElementEntity,
|
290
|
+
root: :element,
|
291
|
+
detail_levels: ElementDetailLevelCalculator.new(user: current_user, element: element).detail_levels,
|
292
|
+
)
|
293
|
+
end
|
294
|
+
rescue => e
|
295
|
+
Labimotion.log_exception(e, current_user)
|
296
|
+
raise e
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
300
|
+
desc 'Update element by id'
|
301
|
+
params do
|
302
|
+
requires :id, type: Integer, desc: 'element id'
|
303
|
+
optional :name, type: String
|
304
|
+
requires :properties, type: Hash
|
305
|
+
optional :properties_release, type: Hash
|
306
|
+
requires :container, type: Hash
|
307
|
+
optional :segments, type: Array, desc: 'Segments'
|
308
|
+
end
|
309
|
+
route_param :id do
|
310
|
+
before do
|
311
|
+
error!('401 Unauthorized', 401) unless ElementPolicy.new(current_user, Labimotion::Element.find(params[:id])).update?
|
312
|
+
end
|
313
|
+
|
314
|
+
put do
|
315
|
+
begin
|
316
|
+
element = update_element_by_id(current_user, params)
|
317
|
+
if Labimotion::IS_RAILS5 == true
|
318
|
+
{
|
319
|
+
element: ElementPermissionProxy.new(current_user, element, user_ids).serialized,
|
320
|
+
attachments: Entities::AttachmentEntity.represent(element.attachments)
|
321
|
+
}
|
322
|
+
else
|
323
|
+
{
|
324
|
+
element: Labimotion::ElementEntity.represent(
|
325
|
+
element,
|
326
|
+
detail_levels: ElementDetailLevelCalculator.new(user: current_user, element: element).detail_levels,
|
327
|
+
),
|
328
|
+
attachments: Entities::AttachmentEntity.represent(element.attachments),
|
329
|
+
}
|
330
|
+
end
|
331
|
+
rescue => e
|
332
|
+
Labimotion.log_exception(e, current_user)
|
333
|
+
raise e
|
334
|
+
end
|
335
|
+
end
|
336
|
+
end
|
337
|
+
end
|
338
|
+
end
|
339
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'open-uri'
|
4
|
+
|
5
|
+
# Belong to Chemotion module
|
6
|
+
module Labimotion
|
7
|
+
# API for Public data
|
8
|
+
class LabimotionHubAPI < Grape::API
|
9
|
+
include Grape::Kaminari
|
10
|
+
|
11
|
+
namespace :labimotion_hub do
|
12
|
+
namespace :list do
|
13
|
+
desc "get active generic templates"
|
14
|
+
params do
|
15
|
+
requires :klass, type: String, desc: 'Klass', values: %w[ElementKlass SegmentKlass DatasetKlass]
|
16
|
+
optional :with_props, type: Boolean, desc: 'With Properties', default: false
|
17
|
+
end
|
18
|
+
get do
|
19
|
+
list = "Labimotion::#{params[:klass]}".constantize.where(is_active: true).where.not(released_at: nil)
|
20
|
+
list = list.where(is_generic: true) if params[:klass] == 'ElementKlass'
|
21
|
+
entities = Labimotion::GenericPublicEntity.represent(list, displayed: params[:with_props])
|
22
|
+
# entities.length > 1 ? de_encode_json(entities) : []
|
23
|
+
end
|
24
|
+
end
|
25
|
+
namespace :fetch do
|
26
|
+
desc "get active generic templates"
|
27
|
+
params do
|
28
|
+
requires :klass, type: String, desc: 'Klass', values: %w[ElementKlass SegmentKlass DatasetKlass]
|
29
|
+
# requires :fqdn, type: Integer, desc: 'FQDN'
|
30
|
+
requires :identifier, type: String, desc: 'Identifier'
|
31
|
+
end
|
32
|
+
get do
|
33
|
+
entity = "Labimotion::#{params[:klass]}".constantize.find_by(identifier: params[:identifier])
|
34
|
+
"Labimotion::#{params[:klass]}Entity".constantize.represent(entity)
|
35
|
+
# entities.length > 1 ? de_encode_json(entities) : []
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
namespace :element_klasses_name do
|
40
|
+
desc "get klasses"
|
41
|
+
params do
|
42
|
+
optional :generic_only, type: Boolean, desc: "list generic element only"
|
43
|
+
end
|
44
|
+
get do
|
45
|
+
list = Labimotion::ElementKlass.where(is_active: true) if params[:generic_only].present? && params[:generic_only] == true
|
46
|
+
list = Labimotion::ElementKlass.where(is_active: true) unless params[:generic_only].present? && params[:generic_only] == true
|
47
|
+
list.pluck(:name)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
module Labimotion
|
2
|
+
class SegmentAPI < Grape::API
|
3
|
+
include Grape::Kaminari
|
4
|
+
helpers Labimotion::GenericHelpers
|
5
|
+
helpers Labimotion::SegmentHelpers
|
6
|
+
|
7
|
+
resource :segments do
|
8
|
+
namespace :klasses do
|
9
|
+
desc "get segment klasses"
|
10
|
+
params do
|
11
|
+
optional :element, type: String, desc: "Klass Element, e.g. Sample, Reaction, Mof,..."
|
12
|
+
end
|
13
|
+
get do
|
14
|
+
list = klass_list(params[:element], true)
|
15
|
+
present list, with: Labimotion::SegmentKlassEntity, root: 'klass'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
namespace :list_segment_klass do
|
20
|
+
desc 'list Generic Segment Klass'
|
21
|
+
params do
|
22
|
+
optional :is_active, type: Boolean, desc: 'Active or Inactive Segment'
|
23
|
+
end
|
24
|
+
get do
|
25
|
+
list = klass_list(nil, params[:is_active])
|
26
|
+
present list, with: Labimotion::SegmentKlassEntity, root: 'klass'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
namespace :create_segment_klass do
|
31
|
+
desc 'create Generic Segment Klass'
|
32
|
+
params do
|
33
|
+
requires :label, type: String, desc: 'Segment Klass Label'
|
34
|
+
requires :element_klass, type: Integer, desc: 'Element Klass Id'
|
35
|
+
optional :desc, type: String, desc: 'Segment Klass Desc'
|
36
|
+
optional :place, type: String, desc: 'Segment Klass Place', default: '100'
|
37
|
+
optional :properties_template, type: Hash, desc: 'Element Klass properties template'
|
38
|
+
end
|
39
|
+
after_validation do
|
40
|
+
authenticate_admin!('segments')
|
41
|
+
@klass = fetch_klass('ElementKlass', params[:element_klass])
|
42
|
+
end
|
43
|
+
post do
|
44
|
+
create_segment_klass(current_user, params)
|
45
|
+
rescue ActiveRecord::RecordInvalid => e
|
46
|
+
{ error: e.message }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
namespace :update_segment_klass do
|
51
|
+
desc 'update Generic Segment Klass'
|
52
|
+
params do
|
53
|
+
requires :id, type: Integer, desc: 'Segment Klass ID'
|
54
|
+
optional :label, type: String, desc: 'Segment Klass Label'
|
55
|
+
optional :desc, type: String, desc: 'Segment Klass Desc'
|
56
|
+
optional :place, type: String, desc: 'Segment Klass Place', default: '100'
|
57
|
+
optional :identifier, type: String, desc: 'Segment Identifier'
|
58
|
+
end
|
59
|
+
after_validation do
|
60
|
+
authenticate_admin!('segments')
|
61
|
+
end
|
62
|
+
post do
|
63
|
+
update_segment_klass(current_user, params)
|
64
|
+
rescue => e
|
65
|
+
Labimotion.log_exception(e, current_user)
|
66
|
+
{ error: e.message }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
namespace :fetch_repo_generic_template do
|
71
|
+
desc 'fetch segment templates from repository'
|
72
|
+
params do
|
73
|
+
requires :identifier, type: String, desc: 'identifier'
|
74
|
+
end
|
75
|
+
post do
|
76
|
+
sk_obj = fetch_repo_generic_template('Segment', params[:identifier])
|
77
|
+
sk_obj = sk_obj.deep_symbolize_keys[:generic_template]
|
78
|
+
return { error: 'No template data found' } unless sk_obj.present?
|
79
|
+
|
80
|
+
ek_obj = Labimotion::ElementKlass.find_by(name: sk_obj.dig(:element_klass, :klass_name))
|
81
|
+
return { error: 'No related element data found' } unless ek_obj.present?
|
82
|
+
|
83
|
+
segment_klass = Labimotion::SegmentKlass.find_or_create_by(
|
84
|
+
identifier: sk_obj.dig(:identifier),
|
85
|
+
)
|
86
|
+
segment_klass.update(sk_obj.slice(
|
87
|
+
:label,
|
88
|
+
:desc,
|
89
|
+
:place,
|
90
|
+
:properties_release,
|
91
|
+
:uuid,
|
92
|
+
).merge(
|
93
|
+
is_active: true,
|
94
|
+
properties_template: sk_obj.dig(:properties_release), # properties_release,
|
95
|
+
element_klass: ek_obj,
|
96
|
+
created_by: current_user.id,
|
97
|
+
released_at: DateTime.now,
|
98
|
+
sync_time: DateTime.now,
|
99
|
+
))
|
100
|
+
|
101
|
+
present segment_klass, with: Labimotion::SegmentKlassEntity, root: 'klass'
|
102
|
+
rescue => e
|
103
|
+
Labimotion.log_exception(e, current_user)
|
104
|
+
{ error: e.message }
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
namespace :fetch_repo_generic_template_list do
|
109
|
+
desc 'fetch segment templates from repository'
|
110
|
+
get do
|
111
|
+
fetch_repo_generic_template_list('Segment')
|
112
|
+
rescue => e
|
113
|
+
Labimotion.log_exception(e, current_user)
|
114
|
+
{ error: e.message }
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
namespace :fetch_repo do
|
119
|
+
desc 'fetch Generic Segment Klass from Chemotion Repository'
|
120
|
+
get do
|
121
|
+
fetch_repo('SegmentKlass')
|
122
|
+
rescue => e
|
123
|
+
Labimotion.log_exception(e, current_user)
|
124
|
+
{ error: e.message }
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
namespace :create_repo_klass do
|
129
|
+
desc 'create Generic Segment Klass'
|
130
|
+
params do
|
131
|
+
requires :identifier, type: String, desc: 'Identifier'
|
132
|
+
end
|
133
|
+
post do
|
134
|
+
create_repo_klass(params, current_user)
|
135
|
+
present SegmentKlass.all, with: Labimotion::SegmentKlassEntity, root: 'klass'
|
136
|
+
rescue => e
|
137
|
+
Labimotion.log_exception(e, current_user)
|
138
|
+
## { error: e.message }
|
139
|
+
raise e
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|