diff --git a/README.md b/README.md index 7db80e4..9395c57 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,26 @@ -# README +# Ectomobile -This README would normally document whatever steps are necessary to get the -application up and running. +Colector de datos. -Things you may want to cover: +## Configuración -* Ruby version +1. Conseguir la _master key_ desde otrx miembrx del proyecto y colocarla + en `config/master.key`. -* System dependencies + * Si no sos parte del proyecto, podés borrar el archivo + `config/credentials.yml.enc` y recrearlo con: -* Configuration + ```bash + rm config/credentials.yml.enc + make rails args=credentials:edit + ``` -* Database creation + Dentro hay que agregar las variables siguientes con contraseñas de + 128 caracteres, que se pueden generar con `pwgen -1 128`. -* Database initialization + ```yaml + secret_key_base: "contraseña de 128 caracteres" + devise_pepper: "contraseña de 128 caracteres" + ``` -* How to run the test suite - -* Services (job queues, cache servers, search engines, etc.) - -* Deployment instructions - -* ... +2. Adaptar las variables en el archivo `ansible.yml`. diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb deleted file mode 100644 index bb5c189..0000000 --- a/app/controllers/api_controller.rb +++ /dev/null @@ -1,59 +0,0 @@ -# frozen_string_literal: true - -class ApiController < ActionController::API - # TODO: Habilitar esto de alguna forma. - skip_forgery_protection - - rescue_from ActiveRecord::RecordNotFound, with: :bad_request_error - rescue_from ActionController::ParameterMissing, with: :bad_request_error - - # @see {https://docutopia.tupale.co/sutty:nodemecu:api} - def transactions - Transaction.transaction do - transaction = raspberry.transactions.build transaction_params - transaction.id = params[:transaction_uuid] - # TODO: Verificar firma - transaction.signature = headers[:'X-Signature'] - - params[:arduinos]&.each do |a| - arduino = transaction.arduinos.build local_id: a[:id] - - a[:sensores]&.each do |s| - arduino.sensors.build(sensor_params s) - end - end - - if transaction.save - render plain: transaction.uuid, status: :ok - else - head :bad_request - end - end - end - - private - - def bad_request_error - head :bad_request - end - - def raspberry - @raspberry ||= Raspberry.find_or_create_by! params[:controller_id] - end - - # Procesa la transacción - def transaction_params - @transaction_params ||= params.permit(:controller_id, - :timestamp, - :error_code, - :battery_status, - :sample, - :signature, - coordinates: %i[lat lng]) - end - - # Procesa los parámetros de un sensor - def sensor_params(sensor) - sensor.permit(:timestamp, :type, :value, :unit, :error) - end -end diff --git a/app/controllers/readings_controller.rb b/app/controllers/readings_controller.rb new file mode 100644 index 0000000..bbfe0dd --- /dev/null +++ b/app/controllers/readings_controller.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +class ReadingsController < ActionController::API + rescue_from ActiveRecord::RecordNotFound, with: :bad_request_error + rescue_from ActionController::ParameterMissing, with: :bad_request_error + + # @see {https://docutopia.tupale.co/sutty:nodemecu:api} + def create + reading = raspberry.readings.build reading_params + reading.id = params[:transaction_uuid] + # TODO: Verificar firma + reading.signature = headers[:'X-Signature'] + + params[:arduinos]&.each do |a| + arduino = reading.arduinos.build local_id: a[:id] + + a[:sensores]&.each do |s| + arduino.sensors.build(sensor_params s) + end + end + + if reading.save + render plain: reading.uuid, status: :ok + else + head :bad_request + end + end + + private + + def bad_request_error + head :bad_request + end + + def raspberry + @raspberry ||= Raspberry.find_or_create_by! params[:controller_id] + end + + # Procesa la transacción + def reading_params + @reading_params ||= params.permit(:controller_id, + :timestamp, + :error_code, + :battery_status, + :sample, + :signature, + coordinates: %i[lat lng]) + end + + # Procesa los parámetros de un sensor + def sensor_params(sensor) + sensor.permit(:timestamp, :type, :value, :unit, :error) + end +end + diff --git a/app/models/arduino.rb b/app/models/arduino.rb index 98d237c..befda69 100644 --- a/app/models/arduino.rb +++ b/app/models/arduino.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -class Transaction < ApplicationRecord +class Arduino < ApplicationRecord belongs_to :raspberry - belongs_to :transaction + belongs_to :reading has_many :sensores end diff --git a/app/models/raspberry.rb b/app/models/raspberry.rb index 1df8398..56af231 100644 --- a/app/models/raspberry.rb +++ b/app/models/raspberry.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true class Raspberry < ApplicationRecord - has_many :transactions + has_many :readings has_many :arduinos end diff --git a/app/models/transaction.rb b/app/models/reading.rb similarity index 67% rename from app/models/transaction.rb rename to app/models/reading.rb index 4ee88dc..7611809 100644 --- a/app/models/transaction.rb +++ b/app/models/reading.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class Transaction < ApplicationRecord +class Reading < ApplicationRecord belongs_to :raspberry has_many :arduinos end diff --git a/config/routes.rb b/config/routes.rb index 2fa4570..7fd39e1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,10 +1,9 @@ Rails.application.routes.draw do devise_for :users + root 'application#index' - resources :sensors, only: [] do - resources :measurements, only: [:create] - end + mount Blazer::Engine, at: 'blazer' - post :transactions, to: 'api#transactions' + resources :readings, only: %i[create] end diff --git a/db/migrate/20220303161848_rename_transactions_to_readings.rb b/db/migrate/20220303161848_rename_transactions_to_readings.rb new file mode 100644 index 0000000..27f6af2 --- /dev/null +++ b/db/migrate/20220303161848_rename_transactions_to_readings.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class RenameTransactionsToReadings < ActiveRecord::Migration[6.1] + def change + rename_table :transactions, :readings + rename_column :arduinos, :transaction_id, :reading_id + end +end