diff --git a/app/controllers/readings_controller.rb b/app/controllers/readings_controller.rb index 6471d30..0752949 100644 --- a/app/controllers/readings_controller.rb +++ b/app/controllers/readings_controller.rb @@ -39,8 +39,11 @@ class ReadingsController < ActionController::API head :bad_request end + # Registra una Raspberry junto con su llave pública def raspberry - @raspberry ||= Raspberry.find_or_create_by! name: params[:controller_id] + @raspberry ||= Raspberry.find_or_create_by!(name: params[:controller_id]).tap do |r| + r.public_keys.find_or_create_by(content: request.headers[:'X-Public-Key']) + end end # Procesa la transacción diff --git a/app/models/public_key.rb b/app/models/public_key.rb new file mode 100644 index 0000000..236f018 --- /dev/null +++ b/app/models/public_key.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class PublicKey < ApplicationRecord + belongs_to :raspberry + + validates_presence_of :content + validates_uniqueness_of :content +end diff --git a/app/models/raspberry.rb b/app/models/raspberry.rb index 70b3f58..33eb04c 100644 --- a/app/models/raspberry.rb +++ b/app/models/raspberry.rb @@ -3,6 +3,7 @@ class Raspberry < ApplicationRecord has_many :readings has_many :arduinos + has_many :public_keys validates_presence_of :name validates_uniqueness_of :name diff --git a/db/migrate/20220312183608_create_public_keys.rb b/db/migrate/20220312183608_create_public_keys.rb new file mode 100644 index 0000000..157cf60 --- /dev/null +++ b/db/migrate/20220312183608_create_public_keys.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +# Una Raspberry puede tener muchas llaves públicas +class CreatePublicKeys < ActiveRecord::Migration[6.1] + def up + create_table :public_keys, id: :uuid do |t| + t.timestamps + t.uuid :raspberry_id, index: true + t.string :content, null: false, unique: true + end + + Raspberry.find_each do |r| + r.public_keys.create content: r.public_key + end + + remove_column :raspberries, :public_key + end + + def down + add_column :raspberries, :public_key, :string + + Raspberry.find_each do |r| + r.update public_key: r.public_keys.first.public_key + end + + drop_table :public_keys + end +end