lib/spatio/api/records.ex

# NOTE: This file is auto generated by OpenAPI Generator 7.22.0 (https://openapi-generator.tech).
# Do not edit this file manually.

defmodule Spatio.Api.Records do
  @moduledoc """
  API calls for all endpoints tagged `Records`.
  """

  alias Spatio.Connection
  import Spatio.RequestBuilder

  @doc """
  Create a record.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `create_record_request` (CreateRecordRequest): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.Record.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec create_record(Tesla.Env.client, Spatio.Model.CreateRecordRequest.t, keyword()) :: {:ok, Spatio.Model.ApiError.t} | {:ok, Spatio.Model.Record.t} | {:error, Tesla.Env.t}
  def create_record(connection, create_record_request, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/records")
      |> add_param(:body, :body, create_record_request)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {201, Spatio.Model.Record},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Create a record type (org-scoped).

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `create_record_type_request` (CreateRecordTypeRequest): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.RecordType.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec create_record_type(Tesla.Env.client, Spatio.Model.CreateRecordTypeRequest.t, keyword()) :: {:ok, Spatio.Model.RecordType.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def create_record_type(connection, create_record_type_request, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/records/types")
      |> add_param(:body, :body, create_record_type_request)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {201, Spatio.Model.RecordType},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Delete a record.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `id` (String.t): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, nil}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec delete_record(Tesla.Env.client, String.t, keyword()) :: {:ok, nil} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def delete_record(connection, id, _opts \\ []) do
    request =
      %{}
      |> method(:delete)
      |> url("/v1/records/#{id}")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {204, false},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Fetch a record.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `id` (String.t): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.Record.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec get_record(Tesla.Env.client, String.t, keyword()) :: {:ok, Spatio.Model.ApiError.t} | {:ok, Spatio.Model.Record.t} | {:error, Tesla.Env.t}
  def get_record(connection, id, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/records/#{id}")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.Record},
      {401, Spatio.Model.ApiError},
      {404, Spatio.Model.ApiError}
    ])
  end

  @doc """
  List record types for an organization.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `organization_id` (String.t): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.RecordTypeListResponse.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec list_record_types(Tesla.Env.client, String.t, keyword()) :: {:ok, Spatio.Model.ApiError.t} | {:ok, Spatio.Model.RecordTypeListResponse.t} | {:error, Tesla.Env.t}
  def list_record_types(connection, organization_id, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/records/types")
      |> add_param(:query, :organization_id, organization_id)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.RecordTypeListResponse},
      {400, Spatio.Model.ApiError},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  List records for an organization. `organization_id` query param is required (handler returns 400 otherwise). 

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `organization_id` (String.t): 
  - `opts` (keyword): Optional parameters
    - `:record_type_id` (String.t): 
    - `:limit` (integer()): 

  ### Returns

  - `{:ok, Spatio.Model.RecordListResponse.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec list_records(Tesla.Env.client, String.t, keyword()) :: {:ok, Spatio.Model.ApiError.t} | {:ok, Spatio.Model.RecordListResponse.t} | {:error, Tesla.Env.t}
  def list_records(connection, organization_id, opts \\ []) do
    optional_params = %{
      :record_type_id => :query,
      :limit => :query
    }

    request =
      %{}
      |> method(:get)
      |> url("/v1/records")
      |> add_param(:query, :organization_id, organization_id)
      |> add_optional_params(optional_params, opts)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.RecordListResponse},
      {400, Spatio.Model.ApiError},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Update a record.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `id` (String.t): 
  - `update_record_request` (UpdateRecordRequest): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.Record.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec update_record(Tesla.Env.client, String.t, Spatio.Model.UpdateRecordRequest.t, keyword()) :: {:ok, Spatio.Model.ApiError.t} | {:ok, Spatio.Model.Record.t} | {:error, Tesla.Env.t}
  def update_record(connection, id, update_record_request, _opts \\ []) do
    request =
      %{}
      |> method(:patch)
      |> url("/v1/records/#{id}")
      |> add_param(:body, :body, update_record_request)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.Record},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Update a record type.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `id` (String.t): 
  - `update_record_type_request` (UpdateRecordTypeRequest): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.RecordType.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec update_record_type(Tesla.Env.client, String.t, Spatio.Model.UpdateRecordTypeRequest.t, keyword()) :: {:ok, Spatio.Model.RecordType.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def update_record_type(connection, id, update_record_type_request, _opts \\ []) do
    request =
      %{}
      |> method(:patch)
      |> url("/v1/records/types/#{id}")
      |> add_param(:body, :body, update_record_type_request)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.RecordType},
      {401, Spatio.Model.ApiError}
    ])
  end
end