View Source Schema Provider
The Schema Provider
module is designed to simplify the process of creating RESTful CRUD routes for Ecto schemas in a Plug-based Elixir application. It automatically generates routes for listing, showing, creating, updating, and deleting resources, and also allows for custom route definitions.
Installation
To use Provider
in your project, add it as a dependency in your mix.exs
:
defp deps do
[
{:schema_provider, "~> 0.0.1"}
]
end
Then, run:
mix deps.get
Configuration
You need to configure the Ecto Repo that Provider
will use in your config/config.exs
file:
import Config
config :schema_provider, repo: MyApp.Repo
Usage
Defining a Schema
To use the Provider
module, your schema module must implement the Provider.Schema
behavior, which requires defining a changeset/2
function.
defmodule MyApp.Schema.User do
use Ecto.Schema
use Provider.Schema
import Ecto.Changeset
schema "users" do
field :name, :string
field :email, :string
timestamps()
end
@impl true
def changeset(user, attrs) do
user
|> cast(attrs, [:name, :email])
|> validate_required([:name, :email])
end
end
Using the mount
Macro
The mount/2
macro in the Provider
module generates RESTful CRUD routes for a specified schema. It takes the following options:
:path
- The base path where the routes will be mounted.:schema
- The Ecto schema module for which the routes are being generated.:functions
- (Optional) A keyword list of custom handler functions for specific routes.
Example
defmodule MyApp.Router do
use Plug.Router
use Provider
plug :match
plug :dispatch
mount "/users", schema: MyApp.Schema.User do
get "/custom/endpoint" do
send_resp(conn, 200, "Custom endpoint")
end
end
match _ do
send_resp(conn, 404, "Not Found")
end
end
This will generate the following routes:
GET /users
- Lists all users.GET /users/:id
- Shows a specific user.POST /users
- Creates a new user.PUT /users/:id
- Updates an existing user.DELETE /users/:id
- Deletes a specific user.
You can also define custom routes inside the do
block.
License
This project is licensed under the MIT License.