Lightning.Projects (Lightning v2.13.5-pre)

View Source

The Projects context.

Summary

Functions

Returns an %Ecto.Changeset{} for tracking project changes.

Deletes a project and its related data, including workflows, work orders, steps, jobs, runs, triggers, project users, project credentials, and dataclips

Deletes project dataclips in batches

Deletes a project user and removes their credentials from the project.

Deletes project work orders in batches

Gets a single project.

Gets a single project_user.

Returns the role of a user in a project. Possible roles are :admin, :viewer, :editor, and :owner

Get all project users for a given project

Gets a single project with it's members via project_users.

Fetches projects for a given user from the database.

Lists emails of users with :owner or :admin roles in the project

Returns the list of projects.

Lists all projects that have history retention

Perform, when called with %{"type" => "purge_deleted"} will find projects that are ready for permanent deletion and purge them.

Builds a query to retrieve projects associated with a user.

Should input or output dataclips be saved for runs in this project?

Given a project, this function sets a scheduled deletion date based on the PURGE_DELETED_AFTER_DAYS environment variable. If no ENV is set, this date defaults to NOW but the automatic project purge cronjob will never run. (Note that subsequent logins will be blocked for projects pending deletion.)

Returns an %Ecto.Changeset{} for changing the project scheduled_deletion.

Functions

add_project_users(project, project_users, notify_users \\ true)

@spec add_project_users(Lightning.Projects.Project.t(), [map(), ...], boolean()) ::
  {:ok, [Lightning.Projects.ProjectUser.t(), ...]}
  | {:error, Ecto.Changeset.t()}

cancel_scheduled_deletion(project_id)

change_project(project, attrs \\ %{})

Returns an %Ecto.Changeset{} for tracking project changes.

Examples

iex> change_project(project)
%Ecto.Changeset{data: %Project{}}

create_project(attrs \\ %{}, schedule_email? \\ true)

Creates a project.

Examples

iex> create_project(%{field: value})
{:ok, %Project{}}

iex> create_project(%{field: bad_value})
{:error, %Ecto.Changeset{}}

delete_project(project)

Deletes a project and its related data, including workflows, work orders, steps, jobs, runs, triggers, project users, project credentials, and dataclips

Examples

iex> delete_project(project)
{:ok, %Project{}}

iex> delete_project(project)
{:error, %Ecto.Changeset{}}

delete_project_async(project)

@spec delete_project_async(Lightning.Projects.Project.t()) :: {:ok, Oban.Job.t()}

delete_project_dataclips(project, batch_size \\ 1000)

@spec delete_project_dataclips(Lightning.Projects.Project.t(), non_neg_integer()) ::
  :ok

Deletes project dataclips in batches

delete_project_user!(project_user)

Deletes a project user and removes their credentials from the project.

This function:

  1. Deletes the association between the user and the project
  2. Removes any credentials owned by the user from the project

All operations are performed within a transaction for data consistency.

Parameters

  • project_user: The ProjectUser struct to be deleted

Returns

  • The deleted ProjectUser struct

delete_project_workorders(project, batch_size \\ 1000)

@spec delete_project_workorders(Lightning.Projects.Project.t(), non_neg_integer()) ::
  :ok

Deletes project work orders in batches

export_project(atom, project_id, snapshot_ids \\ nil)

@spec export_project(atom(), Ecto.UUID.t(), [Ecto.UUID.t()] | nil) :: {:ok, binary()}

Exports a project as yaml.

Examples

iex> export_project(:yaml, project_id)
{:ok, string}

find_users_to_notify_of_trigger_failure(project_id)

get_project(id)

get_project!(id)

Gets a single project.

Raises Ecto.NoResultsError if the Project does not exist.

Examples

iex> get_project!(123)
%Project{}

iex> get_project!(456)
** (Ecto.NoResultsError)

get_project_credential(project_id, credential_id)

get_project_user(id)

get_project_user(project, user)

get_project_user!(id)

Gets a single project_user.

Raises Ecto.NoResultsError if the ProjectUser does not exist.

Examples

iex> get_project_user!(123)
%ProjectUser{}

iex> get_project_user!(456)
** (Ecto.NoResultsError)

get_project_user_role(user, project)

Returns the role of a user in a project. Possible roles are :admin, :viewer, :editor, and :owner

Examples

iex> get_project_user_role(user, project)
:admin

iex> get_project_user_role(user, project)
:viewer

iex> get_project_user_role(user, project)
:editor

iex> get_project_user_role(user, project)
:owner

get_project_users!(id)

Get all project users for a given project

get_project_with_users!(id)

Gets a single project with it's members via project_users.

Raises Ecto.NoResultsError if the Project does not exist.

Examples

iex> get_project!(123)
%Project{}

iex> get_project!(456)
** (Ecto.NoResultsError)

get_projects_for_user(user)

@spec get_projects_for_user(user :: Lightning.Accounts.User.t()) :: [
  Lightning.Projects.Project.t()
]

Fetches projects for a given user from the database.

Parameters

  • user: The user struct for which projects are being queried.
  • opts: Keyword list of options including :include for associations to preload and :order_by for sorting.

Returns

  • A list of projects associated with the user.

get_projects_overview(user, opts \\ [])

invite_collaborators(project, collaborators, inviter)

list_project_admin_emails(id)

@spec list_project_admin_emails(Ecto.UUID.t()) :: [String.t(), ...] | []

Lists emails of users with :owner or :admin roles in the project

list_project_credentials(project)

@spec list_project_credentials(project :: Lightning.Projects.Project.t()) :: [
  Lightning.Projects.ProjectCredential.t()
]

list_project_files(project, opts \\ [])

list_projects()

Returns the list of projects.

Examples

iex> list_projects()
[%Project{}, ...]

list_projects_having_history_retention()

@spec list_projects_having_history_retention() ::
  [] | [Lightning.Projects.Project.t(), ...]

Lists all projects that have history retention

list_workflows(project)

member_of?(project, user)

perform(job)

Perform, when called with %{"type" => "purge_deleted"} will find projects that are ready for permanent deletion and purge them.

project_credentials_query(project)

project_dataclips_query(project)

project_jobs_query(project)

project_run_step_query(project)

project_runs_query(project)

project_steps_query(project)

project_triggers_query(project)

project_user_role_query(user, project)

@spec project_user_role_query(
  user :: Lightning.Accounts.User.t(),
  project :: Lightning.Projects.Project.t()
) :: Ecto.Queryable.t()

project_users_query(project)

@spec project_users_query(atom() | %{:id => any(), optional(any()) => any()}) ::
  Ecto.Query.t()

project_workflows_query(project)

project_workorders_query(project)

projects_for_user_query(user)

@spec projects_for_user_query(user :: Lightning.Accounts.User.t()) ::
  Ecto.Queryable.t()

Builds a query to retrieve projects associated with a user.

Parameters

  • user: The user struct for which projects are being queried.
  • opts: Keyword list of options including :include for associations to preload and :order_by for sorting.

Returns

  • An Ecto queryable struct to fetch projects.

save_dataclips?(id)

Should input or output dataclips be saved for runs in this project?

schedule_project_deletion(project)

Given a project, this function sets a scheduled deletion date based on the PURGE_DELETED_AFTER_DAYS environment variable. If no ENV is set, this date defaults to NOW but the automatic project purge cronjob will never run. (Note that subsequent logins will be blocked for projects pending deletion.)

scheduled_project_deletion_changes(multi, list)

select_first_project_for_user(user)

@spec select_first_project_for_user(user :: Lightning.Accounts.User.t()) ::
  Lightning.Projects.Project.t() | nil

subscribe()

See Lightning.Projects.Events.subscribe/0.

update_project(project, attrs, user \\ nil)

Updates a project.

Examples

iex> update_project(project, %{field: new_value})
{:ok, %Project{}}

iex> update_project(project, %{field: bad_value})
{:error, %Ecto.Changeset{}}

update_project_user(project_user, attrs)

Updates a project user.

Examples

iex> update_project_user(project_user, %{field: new_value})
{:ok, %ProjectUser{}}

iex> update_project_user(projectUser, %{field: bad_value})
{:error, %Ecto.Changeset{}}

update_project_with_users(project, attrs, notify_users \\ true)

@spec update_project_with_users(Lightning.Projects.Project.t(), map(), boolean()) ::
  {:ok, Lightning.Projects.Project.t()} | {:error, Ecto.Changeset.t()}

validate_for_deletion(project, attrs)

Returns an %Ecto.Changeset{} for changing the project scheduled_deletion.

Examples

iex> validate_for_deletion(project)
%Ecto.Changeset{data: %Project{}}