Create schemas for JSON API endpoints

This commit is contained in:
Pim Kunis 2021-06-26 22:02:18 +02:00
parent 1ec18163c1
commit 7c73c2c424
11 changed files with 125 additions and 105 deletions

View file

@ -0,0 +1,38 @@
defmodule MatrixServerWeb.API.Register do
use Ecto.Schema
import Ecto.Changeset
import MatrixServerWeb.Plug.Error
alias __MODULE__
alias Ecto.Changeset
embedded_schema do
field :device_id, :string
field :initial_device_display_name, :string
field :password, :string
field :username, :string
field :inhibit_login, :boolean, default: false
end
def changeset(params) do
%Register{}
|> cast(params, [
:device_id,
:initial_device_display_name,
:password,
:username,
:inhibit_login
])
|> validate_required([:password, :username])
end
def handle_error(conn, cs) do
put_error(conn, get_register_error(cs))
end
defp get_register_error(%Changeset{errors: [error | _]}), do: get_register_error(error)
defp get_register_error({:localpart, {_, [{:constraint, :unique} | _]}}), do: :user_in_use
defp get_register_error({:localpart, {_, [{:validation, _} | _]}}), do: :invalid_username
defp get_register_error(_), do: :bad_json
end