# `Rivet.Ident.Phone`
[🔗](https://github.com/srevenant/rivet-ident/blob/main/lib/ident/phone/model.ex#L1)

# `ecto_p_result`

```elixir
@type ecto_p_result() :: {:ok | :error, Ecto.Changeset.t()}
```

# `id`

```elixir
@type id() :: Ecto.UUID.t()
```

# `model_p_result`

```elixir
@type model_p_result() :: {:ok, Rivet.Ident.Phone.t()}
```

# `one_error`

```elixir
@type one_error() :: {:error, atom() | map()}
```

# `t`

```elixir
@type t() :: %Rivet.Ident.Phone{
  __meta__: Ecto.Schema.Metadata.t(),
  id: binary() | nil,
  inserted_at: DateTime.t() | nil,
  number: String.t() | nil,
  primary: boolean() | nil,
  updated_at: DateTime.t() | nil,
  user: Ecto.Schema.belongs_to(Rivet.Ident.User.t()) | nil,
  user_id: binary() | nil,
  verified: boolean() | nil
}
```

# `aggregate`

# `all`

```elixir
@spec all(keyword() | Ecto.Query.t(), list()) ::
  {:error, ecto_p_result()} | {:ok, [Rivet.Ident.Phone.t()]}
```

# `all!`

```elixir
@spec all!(keyword() | Ecto.Query.t(), list()) :: [Rivet.Ident.Phone.t()]
```

# `associate`

# `build`

# `change_post`

change_post for side effects; should return the item

Note: BE VERY CAREFUL on large impact effects. This can quickly become
a performance bottleneck.

# `change_prep`

change_prep alters the params only, and may only return {:ok, params}

# `change_validate`

change_validate is only run for changing existing records

# `changeset`

# `count!`

# `count!`

# `count_by_inserted!`

# `count_by_inserted!`

# `count_by_updated!`

# `count_by_updated!`

# `create`

```elixir
@spec create(map()) :: model_p_result() | ecto_p_result()
```

# `create_post`

create_post for side effects; should return the item

Note: BE VERY CAREFUL on large impact effects. This can quickly become
a performance bottleneck.

# `create_prep`

create_prep alters the params only, and may only return {:ok, params}

# `create_validate`

create_validate is only run for creating new records

# `delete`

```elixir
@spec delete(Rivet.Ident.Phone.t()) :: model_p_result() | ecto_p_result()
```

# `delete_all`

# `delete_all_ids`

# `drop_replace`

```elixir
@spec drop_replace(map(), Keyword.t()) :: model_p_result() | ecto_p_result()
```

# `exists?`

```elixir
@spec exists?(claims_or_query :: keyword() | term()) :: true | false
```

# `full_table_scan`

# `insert`

# `latest`

# `latest!`

# `one`

```elixir
@spec one(id() | keyword() | Ecto.Query.t(), preload :: list()) ::
  {:ok, Rivet.Ident.Phone.t()} | one_error()
```

# `one!`

```elixir
@spec one!(id() | keyword() | Ecto.Query.t(), preload :: list()) ::
  nil | Rivet.Ident.Phone.t()
```

# `preload`

```elixir
@spec preload(Rivet.Ident.Phone.t(), preloads :: term(), opts :: Keyword.t()) ::
  model_p_result() | ecto_p_result()
```

# `preload!`

```elixir
@spec preload!(Rivet.Ident.Phone.t(), preloads :: term(), opts :: Keyword.t()) ::
  Rivet.Ident.Phone.t()
```

# `reload`

# `replace`

```elixir
@spec replace(map(), Keyword.t()) :: model_p_result() | ecto_p_result()
```

# `replace_fill`

```elixir
@spec replace_fill(map(), Keyword.t()) :: model_p_result() | ecto_p_result()
```

Similar to replace, but it doesn't remove existing values if the attrs has nil

# `stream`

# `stream_all!`

# `touch`

Update our updated_at but only if it hasn't changed within a minute
(less load)

# `unload`

# `unload`

# `update`

```elixir
@spec update(Rivet.Ident.Phone.t(), map() | list()) ::
  model_p_result() | ecto_p_result()
```

# `update!`

# `update_all`

# `update_fill`

```elixir
@spec update_fill(Rivet.Ident.Phone.t(), attrs :: map()) ::
  model_p_result() | ecto_p_result()
```

# `upsert`

# `validate`

# `validate_post`

a hook if you just want to extend validate

---

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