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"}
]
endThen, run:
mix deps.getConfiguration
You need to configure the Ecto Repo that Provider will use in your config/config.exs file:
import Config
config :schema_provider, repo: MyApp.RepoUsage
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
endThis 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.