Farmbot-Web-App/app/controllers/api/points_controller.rb

65 lines
1.6 KiB
Ruby

# require_relative "../../lib/mutations/hstore_filter"
module Api
class PointsController < Api::AbstractController
# NOTE: Soft deleted points will be destroyed
# without warning when the device hits
# Points::Create::POINT_SOFT_LIMIT
HARD_DELETE_AFTER = 2.months
# "?filter=all", "?filter=old", "?filter=kept"
ARCHIVAL_SCOPES = {
"all" => Point.all,
"old" => Point.discarded,
"kept" => Point.kept,
}
def index
Point
.discarded
.where("discarded_at < ?", Time.now - HARD_DELETE_AFTER)
.destroy_all
maybe_paginate points(params.fetch(:filter) { "kept" })
end
def show
render json: points.find(params[:id])
end
def search
mutate Points::Query.run(raw_json, points: points)
end
def create
mutate Points::Create.run(raw_json, device_params)
end
def update
mutate Points::Update.run(raw_json, { point: point }, device_params)
end
def destroy
# TODO: We don't need to do batch requests like this any more.
# This should be removed when possible. -RC 1 AUG 2018
ids = params[:id].to_s.split(",").map(&:to_i)
mutate Points::Destroy.run({ point_ids: ids }, device_params)
end
private
def point
@point ||= points.find(params[:id])
end
def points(filter = params[:filter])
@points ||=
(ARCHIVAL_SCOPES[filter] || ARCHIVAL_SCOPES["all"]).where(device_params)
end
def device_params
@device_params ||= { device: current_device }
end
end
end