# `Bylaw.Credo.Check.Ecto.UseMyAppSchema`
[🔗](https://github.com/ryanzidago/bylaw/blob/v0.1.0-alpha.1/lib/bylaw/credo/check/ecto/use_my_app_schema.ex#L1)

## Basics

> #### This check is disabled by default. {: .neutral}
>
> [Learn how to enable it](`e:credo:config_file.html#checks`) via `.credo.exs`.

This check has a base priority of `higher` and works with any version of Elixir.

## Explanation

`use Ecto.Schema` should not be used directly. Use your app schema module instead.

## Examples

For example:

```elixir
defmodule MyApp.Schema do
  defmacro __using__(_opts) do
    quote do
      use Ecto.Schema

      @primary_key {:id, UUIDv7, autogenerate: true}
      @foreign_key_type UUIDv7
      @timestamps_opts [type: :utc_datetime_usec]
    end
  end
end
```

Avoid:

```elixir
defmodule MyApp.User do
    use Ecto.Schema

    schema "users" do
      field :name, :string
    end
end
```

Prefer:

```elixir
defmodule MyApp.User do
    use MyApp.Schema

    schema "users" do
      field :name, :string
    end
end
```

## Notes

An app schema module, such as `MyApp.Schema`, can provide project-specific
schema defaults:
- primary key conventions
- foreign key conventions
- timestamp precision and type conventions

This check uses static AST analysis, so it favors clear source-level patterns over runtime behavior.
Since each application chooses its own schema wrapper module, files ending in
`/schema.ex` are treated as wrapper modules and are not reported.

## Options

This check has no check-specific options. Configure it with an empty option list.

## Usage

Add this check to Credo's `checks:` list in `.credo.exs`:

```elixir
%{
  configs: [
    %{
      name: "default",
      checks: [
        {Bylaw.Credo.Check.Ecto.UseMyAppSchema, []}
      ]
    }
  ]
}
```

## Check-Specific Parameters

*There are no specific parameters for this check.*

## General Parameters

Like with all checks, [general params](`e:credo:check_params.html`) can be applied.

Parameters can be configured via the [`.credo.exs` config file](`e:credo:config_file.html`).

---

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