diff --git a/app/controllers/app_usages_controller.rb b/app/controllers/app_usages_controller.rb index 8a8d2f3..aba1872 100644 --- a/app/controllers/app_usages_controller.rb +++ b/app/controllers/app_usages_controller.rb @@ -3,12 +3,11 @@ class AppUsagesController < ApplicationController respond_to :json def create - app_usage = AppUsage.new(app_usage_params) - if app_usage.save - render json: {}, - status: :created - else - logger.warn "Error while saving App Usage #{app_usage.errors.full_messages}" + begin + @device.app_usages << AppUsage.create!(app_usage_params) + render json: {}, status: :created + rescue Exception => e + logger.warn "Error while saving App Usage #{e.message}" render json: {}, status: :unprocessable_entity end @@ -16,10 +15,10 @@ class AppUsagesController < ApplicationController private def app_usage_params - params.require(:app_usage). - permit(:package_name, - :usage_duration_in_seconds, - :used_on) - + params.permit(app_usage: + [:package_name, + :usage_duration_in_seconds, + :used_on]).require(:app_usage) + end end diff --git a/app/models/app_usage.rb b/app/models/app_usage.rb index 6ab7371..dd99d93 100644 --- a/app/models/app_usage.rb +++ b/app/models/app_usage.rb @@ -1,3 +1,4 @@ class AppUsage < ActiveRecord::Base validates :package_name, :usage_duration_in_seconds, :used_on, presence: true + belongs_to :device end diff --git a/app/models/device.rb b/app/models/device.rb index c0b9cb6..5325b3e 100644 --- a/app/models/device.rb +++ b/app/models/device.rb @@ -11,6 +11,7 @@ class Device < ActiveRecord::Base has_many :heartbeats, dependent: :destroy has_many :installations, dependent: :destroy + has_many :app_usages, dependent: :nullify scope :active, -> {where("last_heartbeat_recd_time > '#{Time.now.utc - ACTIVE_TIMEFRAME}'")} scope :missing, -> {where("last_heartbeat_recd_time < '#{Time.now.utc - ACTIVE_TIMEFRAME}'AND last_heartbeat_recd_time > '#{Time.now.utc - MISSING_TIMEFRAME}'")} diff --git a/config/routes.rb b/config/routes.rb index 6cf79aa..9f791c7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,5 @@ Rails.application.routes.draw do - post 'app_usages/create', to: 'app_usages#create', :defaults => { :format => :json } + post 'app_usages', to: 'app_usages#create', :defaults => { :format => :json } devise_for :admin_users, ActiveAdmin::Devise.config diff --git a/db/migrate/20160204094618_create_app_usages.rb b/db/migrate/20160204094618_create_app_usages.rb index 8017410..d6c8e88 100644 --- a/db/migrate/20160204094618_create_app_usages.rb +++ b/db/migrate/20160204094618_create_app_usages.rb @@ -4,7 +4,8 @@ class CreateAppUsages < ActiveRecord::Migration t.string :package_name, null: false, index: false t.integer :usage_duration_in_seconds, null: false, index: false t.date :used_on, null: false, index: false - + t.belongs_to :device, foreign_key: true, index: true + t.timestamps null: false end end diff --git a/db/schema.rb b/db/schema.rb index 9bb9c0f..49d60fe 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -53,10 +53,13 @@ ActiveRecord::Schema.define(version: 20160204094618) do t.string "package_name", null: false t.integer "usage_duration_in_seconds", null: false t.date "used_on", null: false + t.integer "device_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false end + add_index "app_usages", ["device_id"], name: "index_app_usages_on_device_id", using: :btree + create_table "apps", force: :cascade do |t| t.string "name" t.string "package_name" @@ -105,6 +108,7 @@ ActiveRecord::Schema.define(version: 20160204094618) do add_index "installations", ["batch_installation_id"], name: "index_installations_on_batch_installation_id", using: :btree add_index "installations", ["device_id"], name: "index_installations_on_device_id", using: :btree + add_foreign_key "app_usages", "devices" add_foreign_key "batch_installations", "apps" add_foreign_key "heartbeats", "devices" add_foreign_key "installations", "batch_installations" diff --git a/spec/controllers/app_usages_controller_spec.rb b/spec/controllers/app_usages_controller_spec.rb index 031ac87..91a07c1 100644 --- a/spec/controllers/app_usages_controller_spec.rb +++ b/spec/controllers/app_usages_controller_spec.rb @@ -9,12 +9,12 @@ RSpec.describe AppUsagesController, type: :controller do request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Token.encode_credentials(device.access_token) end it "Valid params" do - post :create, app_usage: attributes_for(:app_usage), format: :json + post :create, app_usage: [attributes_for(:app_usage)], format: :json expect(response).to have_http_status(:success) end it "InValid Params" do - post :create, app_usage: attributes_for(:invalid_app_usage), format: :json + post :create, app_usage: [attributes_for(:invalid_app_usage)], format: :json expect(response).to have_http_status(:unprocessable_entity) end end diff --git a/spec/models/app_usage_spec.rb b/spec/models/app_usage_spec.rb index 0c5e54c..b46693f 100644 --- a/spec/models/app_usage_spec.rb +++ b/spec/models/app_usage_spec.rb @@ -6,4 +6,5 @@ RSpec.describe AppUsage, type: :model do it { should validate_presence_of :package_name } it { should validate_presence_of :usage_duration_in_seconds } it { should validate_presence_of :used_on } + it { should belong_to :device } end