180 lines
3.4 KiB
Elixir
180 lines
3.4 KiB
Elixir
defmodule Farmbot.Asset do
|
|
alias Farmbot.Asset.{
|
|
Repo,
|
|
Device,
|
|
DeviceCert,
|
|
DiagnosticDump,
|
|
FarmwareEnv,
|
|
FarmwareInstallation,
|
|
FarmEvent,
|
|
FbosConfig,
|
|
FirmwareConfig,
|
|
Peripheral,
|
|
PinBinding,
|
|
Regimen,
|
|
PersistentRegimen,
|
|
Sequence
|
|
}
|
|
|
|
import Ecto.Query
|
|
|
|
## Begin Device
|
|
|
|
def device() do
|
|
Repo.one(Device) || %Device{}
|
|
end
|
|
|
|
## End Device
|
|
|
|
## Begin FarmEvent
|
|
|
|
@doc "Returns a FarmEvent by its API id."
|
|
def get_farm_event(id) do
|
|
Repo.get_by(FarmEvent, id: id)
|
|
end
|
|
|
|
def update_farm_event!(farm_event, params) do
|
|
FarmEvent.changeset(farm_event, params)
|
|
|> Repo.update!()
|
|
end
|
|
|
|
## End FarmEvent
|
|
|
|
## Begin FbosConfig
|
|
|
|
def fbos_config() do
|
|
Repo.one(FbosConfig) || %FbosConfig{}
|
|
end
|
|
|
|
def fbos_config(field) do
|
|
Map.fetch!(fbos_config(), field)
|
|
end
|
|
|
|
## End FbosConfig
|
|
|
|
## Begin FirmwareConfig
|
|
|
|
def firmware_config() do
|
|
Repo.one(FirmwareConfig) || %FirmwareConfig{}
|
|
end
|
|
|
|
def firmware_config(field) do
|
|
Map.fetch!(firmware_config(), field)
|
|
end
|
|
|
|
## End FirmwareConfig
|
|
|
|
## Begin PersistentRegimen
|
|
|
|
def upsert_persistent_regimen!(%Regimen{} = regimen, %FarmEvent{} = farm_event, params \\ %{}) do
|
|
q =
|
|
from(pr in PersistentRegimen,
|
|
where: pr.regimen_id == ^regimen.local_id and pr.farm_event_id == ^farm_event.local_id
|
|
)
|
|
|
|
pr = Repo.one(q) || %PersistentRegimen{}
|
|
|
|
pr
|
|
|> Repo.preload([:regimen, :farm_event])
|
|
|> PersistentRegimen.changeset(params)
|
|
|> Ecto.Changeset.put_assoc(:regimen, regimen)
|
|
|> Ecto.Changeset.put_assoc(:farm_event, farm_event)
|
|
|> Repo.insert_or_update!()
|
|
end
|
|
|
|
def update_persistent_regimen!(%PersistentRegimen{} = pr, params \\ %{}) do
|
|
pr
|
|
|> PersistentRegimen.changeset(params)
|
|
|> Repo.update!()
|
|
end
|
|
|
|
## End PersistentRegimen
|
|
|
|
## Begin PinBinding
|
|
|
|
@doc "Lists all available pin bindings"
|
|
def list_pin_bindings do
|
|
Repo.all(PinBinding)
|
|
end
|
|
|
|
## End PinBinding
|
|
|
|
## Begin Regimen
|
|
|
|
@doc "Get a regimen by it's API id and FarmEvent API id"
|
|
def get_regimen!(params) do
|
|
Repo.get_by!(Regimen, params)
|
|
end
|
|
|
|
## End Regimen
|
|
|
|
## Begin Sequence
|
|
|
|
@doc "Get a sequence by it's API id"
|
|
def get_sequence!(params) do
|
|
Repo.get_by!(Sequence, params)
|
|
end
|
|
|
|
def get_sequence(params) do
|
|
Repo.get_by(Sequence, params)
|
|
end
|
|
|
|
## End Sequence
|
|
|
|
## Begin FarmwareInstallation
|
|
|
|
@doc "Get a FarmwareManifest by it's name."
|
|
def get_farmware_manifest(package) do
|
|
Repo.all(from(fwi in FarmwareInstallation, select: fwi.manifest))
|
|
|> Enum.find(fn %{package: pkg} -> pkg == package end)
|
|
end
|
|
|
|
## End FarmwareInstallation
|
|
|
|
## Begin FarmwareEnv
|
|
|
|
def list_farmware_env() do
|
|
Repo.all(FarmwareEnv)
|
|
end
|
|
|
|
def new_farmware_env(params) do
|
|
fwe =
|
|
if params["key"] || params[:key] do
|
|
Repo.get_by(FarmwareEnv, key: params["key"] || params[:key])
|
|
else
|
|
%FarmwareEnv{}
|
|
end
|
|
|
|
FarmwareEnv.changeset(fwe, params)
|
|
|> Repo.insert_or_update()
|
|
end
|
|
|
|
## End FarmwareEnv
|
|
|
|
## Begin Peripheral
|
|
|
|
def get_peripheral(args) do
|
|
Repo.get_by(Peripheral, args)
|
|
end
|
|
|
|
## End Peripheral
|
|
|
|
## Begin DiagnosticDump
|
|
|
|
def new_diagnostic_dump(params) do
|
|
DiagnosticDump.changeset(%DiagnosticDump{}, params)
|
|
|> Repo.insert()
|
|
end
|
|
|
|
## End DiagnosticDump
|
|
|
|
## Begin DeviceCert
|
|
|
|
def new_device_cert(params) do
|
|
DeviceCert.changeset(%DeviceCert{}, params)
|
|
|> Repo.insert()
|
|
end
|
|
|
|
## End DeviceCert
|
|
end
|