Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
ursm committed Jul 4, 2024
1 parent f0b0fd1 commit 0cb9242
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 1 deletion.
3 changes: 3 additions & 0 deletions api/Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@ gem 'rails', '~> 7.1.3'

gem 'aws-sdk-s3'
gem 'base62-rb'
gem 'bcrypt_pbkdf'
gem 'bootsnap', require: false
gem 'ed25519'
gem 'faraday'
gem 'faraday-multipart'
gem 'jb'
gem 'metabobank_tools', github: 'ddbj/metabobank_tools'
gem 'net-ssh'
gem 'noodles_gff', path: '../noodles_gff-rb'
gem 'openid_connect'
gem 'pagy'
Expand Down
7 changes: 7 additions & 0 deletions api/Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ GEM
aws-eventstream (~> 1, >= 1.0.2)
base62-rb (0.3.1)
base64 (0.2.0)
bcrypt_pbkdf (1.1.1)
bcrypt_pbkdf (1.1.1-arm64-darwin)
bigdecimal (3.1.8)
bindata (2.5.0)
bootsnap (1.18.3)
Expand All @@ -142,6 +144,7 @@ GEM
reline (>= 0.3.8)
diff-lcs (1.5.1)
drb (2.2.1)
ed25519 (1.3.0)
email_validator (2.2.4)
activemodel
erubi (1.13.0)
Expand Down Expand Up @@ -213,6 +216,7 @@ GEM
timeout
net-smtp (0.5.0)
net-protocol
net-ssh (7.2.3)
nio4r (2.7.3)
nokogiri (1.16.6-aarch64-linux)
racc (~> 1.4)
Expand Down Expand Up @@ -398,14 +402,17 @@ PLATFORMS
DEPENDENCIES
aws-sdk-s3
base62-rb
bcrypt_pbkdf
bootsnap
climate_control
debug
ed25519
factory_bot_rails
faraday
faraday-multipart
jb
metabobank_tools!
net-ssh
noodles_gff!
openid_connect
pagy
Expand Down
49 changes: 48 additions & 1 deletion api/app/models/database/dra.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,54 @@ def validate(validation)

class Submitter
def submit(submission)
# do nothing
submitter_db = Dway.submitter_db
drmdb = Dway.drmdb

submitter_id = submission.validation.user.uid
user_id = submitter_db[:login].where(submitter_id:).get(:usr_id)

drmdb.transaction isolation: :serializable do
serial = (drmdb[:submission].where(submitter_id:).max(:serial) || 0) + 1

sub_id = drmdb[:submission].insert(
usr_id: user_id,
submitter_id: ,
serial: ,
create_date: Date.current
)

submission_id = "#{submitter_id}-#{serial.to_s.rjust(4, '0')}"

drmdb[:status_history].insert(
sub_id: ,
status: 100 # SubmissionStatus.NEW
)

drmdb[:operation_history].insert(
type: 3, # LogLevel.INFO
summary: 'Status update to new',
usr_id: user_id,
serial: ,
submitter_id:
)

ext_id = drmdb[:ext_entity].insert(
acc_type: 'DRA',
ref_name: submission_id,
status: 0 # ExtStatus.INPUTTING
)

drmdb[:ext_permit].insert(
ext_id: ,
submitter_id:
)

host, user, key_data = ENV.values_at('DRA_SSH_HOST', 'DRA_SSH_USER', 'DRA_SSH_KEY_DATA')

Net::SSH.start host, user, key_data: [key_data] do |ssh|
ssh.exec! "sudo /usr/local/sbin/chroot-createdir.sh #{submitter_id} #{submission_id}"
end
end
end
end
end
45 changes: 45 additions & 0 deletions api/spec/models/database/dra/submitter_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
require 'rails_helper'

RSpec.describe Database::DRA::Submitter, type: :model do
example do
submission = create(:submission, {
validation: build(:validation, :valid, {
user: build(:user, uid: 'alice')
})
})

user_id = Dway.submitter_db[:login].insert(
submitter_id: 'alice',
password: 'password',
)

expect(Net::SSH).to receive(:start)

Database::DRA::Submitter.new.submit submission

expect(Dway.drmdb[:submission].count).to eq(1)

dway_submission = Dway.drmdb[:submission].first
expect(dway_submission).to include(usr_id: user_id, submitter_id: 'alice', serial: 1)

expect(Dway.drmdb[:status_history].count).to eq(1)

status_history = Dway.drmdb[:status_history].first
expect(status_history).to include(sub_id: dway_submission[:sub_id], status: 100)

expect(Dway.drmdb[:operation_history].count).to eq(1)

operation_history = Dway.drmdb[:operation_history].first
expect(operation_history).to include(type: 3, summary: 'Status update to new', usr_id: user_id, serial: 1, submitter_id: 'alice')

expect(Dway.drmdb[:ext_entity].count).to eq(1)

ext_entity = Dway.drmdb[:ext_entity].first
expect(ext_entity).to include(acc_type: 'DRA', ref_name: 'alice-0001', status: 0)

expect(Dway.drmdb[:ext_permit].count).to eq(1)

ext_permit = Dway.drmdb[:ext_permit].first
expect(ext_permit).to include(ext_id: ext_entity[:ext_id], submitter_id: 'alice')
end
end

0 comments on commit 0cb9242

Please sign in to comment.