Skip to content

Commit 113bb15

Browse files
committed
Validate when updating accession
1 parent 0a5303b commit 113bb15

24 files changed

+669
-101
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class AccessionRenewalsController < ApplicationController
2+
def show
3+
@renewal = current_user.accession_renewals.find(params.expect(:id))
4+
end
5+
6+
def create
7+
accession = current_user.accessions.find_by!(number: params.expect(:accession_number))
8+
@renewal = accession.renewals.create!(renewal_params)
9+
10+
RenewAccessionJob.perform_later @renewal
11+
12+
render :show, status: :created
13+
end
14+
15+
private
16+
17+
def renewal_params
18+
params.expect(accession_renewal: [
19+
:file
20+
])
21+
end
22+
end

app/jobs/renew_accession_job.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class RenewAccessionJob < ApplicationJob
2+
def perform(renewal)
3+
renewal.update! progress: :running, started_at: Time.current
4+
5+
sleep 3
6+
7+
ActiveRecord::Base.transaction do
8+
begin
9+
JSON.parse renewal.file.download
10+
rescue JSON::ParserError => e
11+
renewal.validation_details.create!(
12+
severity: 'error',
13+
message: e.message
14+
)
15+
end
16+
17+
if renewal.validation_details.empty?
18+
renewal.validity_valid!
19+
else
20+
renewal.validity_invalid!
21+
end
22+
end
23+
ensure
24+
renewal.update! progress: :finished, finished_at: Time.current unless renewal.canceled?
25+
end
26+
end

app/models/accession.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
class Accession < ApplicationRecord
22
belongs_to :submission
3+
4+
has_many :renewals, dependent: :destroy, class_name: 'AccessionRenewal'
35
end

app/models/accession_renewal.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class AccessionRenewal < ApplicationRecord
2+
belongs_to :accession, inverse_of: :renewals
3+
4+
has_many :validation_details, dependent: :destroy, class_name: 'AccessionRenewalValidationDetail', inverse_of: :renewal
5+
6+
has_one_attached :file
7+
8+
enum :progress, %w[waiting running finished canceled].index_by(&:to_sym)
9+
enum :validity, %w[valid invalid error].index_by(&:to_sym), prefix: true
10+
end
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class AccessionRenewalValidationDetail < ApplicationRecord
2+
belongs_to :renewal, class_name: 'AccessionRenewal'
3+
end

app/models/database/trad/ddbj_record_validator.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class Database::Trad::DDBJRecordValidator
22
def validate(validation)
3-
obj = validation.objs.without_base.sole
3+
obj = validation.objs.without_base.last
44

55
begin
66
JSON.parse(obj.file.download)

app/models/user.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ def self.generate_api_key
55

66
has_many :validations, dependent: :destroy
77

8-
has_many :submissions, through: :validations
9-
has_many :accessions, through: :submissions
8+
has_many :submissions, through: :validations
9+
has_many :accessions, through: :submissions
10+
has_many :accession_renewals, through: :accessions, source: :renewals
1011

1112
before_create do |user|
1213
user.api_key ||= self.class.generate_api_key
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
**accession_renewal.slice(
3+
:id,
4+
:started_at,
5+
:finished_at,
6+
:progress,
7+
:validity,
8+
:created_at
9+
),
10+
11+
validation_details: accession_renewal.validation_details.map {|detail|
12+
{
13+
**detail.slice(
14+
:severity
15+
),
16+
17+
message: detail.message.scrub
18+
}
19+
}
20+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
render(@renewal)
Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
# locals: (accession:)
22

3-
accession.slice(
4-
:number,
5-
:entry_id,
6-
:version,
7-
:last_updated_at
8-
)
3+
{
4+
**accession.slice(
5+
:number,
6+
:entry_id,
7+
:version,
8+
:last_updated_at
9+
),
10+
11+
renewals: render(partial: 'accession_renewals/accession_renewal', collection: accession.renewals)
12+
}

0 commit comments

Comments
 (0)