# `Aludel.Projects`
[🔗](https://github.com/ccarvalho-eng/aludel/blob/main/lib/aludel/projects.ex#L1)

Context for managing projects that organize prompts and test suites.

# `change_project`

```elixir
@spec change_project(Aludel.Projects.Project.t(), map()) :: Ecto.Changeset.t()
```

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

# `create_project`

```elixir
@spec create_project(map()) ::
  {:ok, Aludel.Projects.Project.t()} | {:error, Ecto.Changeset.t()}
```

Creates a project.

# `delete_project`

```elixir
@spec delete_project(Aludel.Projects.Project.t()) ::
  {:ok, Aludel.Projects.Project.t()} | {:error, Ecto.Changeset.t()}
```

Deletes a project.

# `get_project!`

```elixir
@spec get_project!(binary()) :: Aludel.Projects.Project.t()
```

Gets a single project.

Raises `Ecto.NoResultsError` if the Project does not exist.

# `list_projects`

```elixir
@spec list_projects(keyword()) :: [Aludel.Projects.Project.t()]
```

Returns the list of projects, optionally filtered by type.

Projects are ordered alphabetically by name.

# `update_project`

```elixir
@spec update_project(Aludel.Projects.Project.t(), map()) ::
  {:ok, Aludel.Projects.Project.t()} | {:error, Ecto.Changeset.t()}
```

Updates a project.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
