Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
ursm committed Aug 13, 2024
1 parent 2867ab9 commit 0e24e59
Show file tree
Hide file tree
Showing 4 changed files with 100 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.2.0"

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 @@ -120,6 +120,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.4)
Expand All @@ -141,6 +143,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 @@ -214,6 +217,7 @@ GEM
timeout
net-smtp (0.5.0)
net-protocol
net-ssh (7.2.3)
nio4r (2.7.3)
nokogiri (1.16.7-aarch64-linux)
racc (~> 1.4)
Expand Down Expand Up @@ -424,15 +428,18 @@ PLATFORMS
DEPENDENCIES
aws-sdk-s3
base62-rb
bcrypt_pbkdf
bootsnap
brakeman
climate_control
debug
ed25519
factory_bot_rails
faraday
faraday-multipart
jb
metabobank_tools!
net-ssh
noodles_gff!
openid_connect
pagy
Expand Down
46 changes: 45 additions & 1 deletion api/app/models/database/dra.rb
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,51 @@ def validate(validation)

class Submitter
def submit(submission)
# do nothing
submitter_id = submission.validation.user.uid
user_id = Dray.submitterdb[:login].where(submitter_id:).get(:usr_id)

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

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

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

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

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

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

Dway.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.submitterdb[: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 0e24e59

Please sign in to comment.