defmodule DaProductApp.Mypinpad do import Ecto.Query, warn: false alias DaProductApp.Repo alias DaProductApp.Mypinpad.Host alias DaProductApp.Mypinpad.Transaction alias DaProductApp.Mypinpad.Token def list_hosts, do: Repo.all(Host) def get_host!(id), do: Repo.get!(Host, id) def get_host_by_client_id(client_id), do: Repo.get_by(Host, client_id: client_id) def create_host(attrs), do: %Host{} |> Host.changeset(attrs) |> Repo.insert() def update_host(%Host{} = host, attrs), do: host |> Host.changeset(attrs) |> Repo.update() def delete_host(%Host{} = host), do: Repo.delete(host) def change_host(%Host{} = host, attrs \\ %{}), do: Host.changeset(host, attrs) def list_transactions, do: Repo.all(Transaction) def get_transaction_by_id(tx_id), do: Repo.get_by(Transaction, transaction_id: tx_id) def get_transaction!(id), do: Repo.get!(Transaction, id) def create_transaction(attrs), do: %Transaction{} |> Transaction.changeset(attrs) |> Repo.insert() def update_transaction(%Transaction{} = transaction, attrs), do: transaction |> Transaction.changeset(attrs) |> Repo.update() def create_token(attrs) do # Ensure only one valid token exists per host host_id = attrs[:host_id] || attrs["host_id"] now = DateTime.utc_now() # Delete existing tokens for this host from(t in Token, where: t.host_id == ^host_id) |> Repo.delete_all() %Token{} |> Token.changeset(attrs) |> Repo.insert() end def get_valid_token(access_token) do now = DateTime.utc_now() from(t in Token, where: t.access_token == ^access_token and t.expires_at > ^now) |> Repo.one() end end