defmodule MishkaInstaller.Activity do alias MishkaInstaller.Database.ActivitySchema use MishkaDeveloperTools.DB.CRUD, module: ActivitySchema, error_atom: :activity, repo: MishkaInstaller.repo @behaviour MishkaDeveloperTools.DB.CRUD @doc delegate_to: {MishkaDeveloperTools.DB.CRUD, :crud_add, 1} def create(attrs) do crud_add(attrs) |> notify_subscribers(:activity) end @doc delegate_to: {MishkaDeveloperTools.DB.CRUD, :crud_edit, 1} def edit(attrs) do crud_edit(attrs) |> notify_subscribers(:activity) end @doc delegate_to: {MishkaDeveloperTools.DB.CRUD, :crud_edit, 1} def edit(attrs, allowed_fields) do crud_edit(attrs, allowed_fields) |> notify_subscribers(:activity) end @doc delegate_to: {MishkaDeveloperTools.DB.CRUD, :crud_delete, 1} def delete(id) do crud_delete(id) |> notify_subscribers(:activity) end @doc delegate_to: {MishkaDeveloperTools.DB.CRUD, :crud_get_record, 1} def show_by_id(id) do crud_get_record(id) end @spec create_activity_by_start_child(map(), map()) :: :ignore | {:error, any} | {:ok, pid} | {:ok, pid, any} def create_activity_by_start_child(params, extra \\ %{}) do Task.Supervisor.start_child(__MODULE__, fn -> convert_task_to_db(params, extra) end) end @spec create_activity_by_task(map(), map()) :: Task.t() def create_activity_by_task(params, extra \\ %{}) do Task.Supervisor.async_nolink(__MODULE__, fn -> convert_task_to_db(params, extra) end) end defp convert_task_to_db(params, extra) do create( %{ type: params.type, section: params.section, section_id: params.section_id, priority: params.priority, status: params.status, action: params.action, user_id: params.user_id, extra: extra } ) end if Mix.env() == :test do def notify_subscribers(params, _type_send), do: params else def notify_subscribers({:ok, _, :activity, repo_data} = params, type_send) do Phoenix.PubSub.broadcast(MishkaInstaller.get_config(:pubsub), "activity", {type_send, :ok, repo_data}) params end end end