From 0affc58b135a4a7173498f41a1d8db09dc524bd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Sun, 18 Aug 2024 15:42:17 +0200 Subject: [PATCH] feat: add username and display it in header --- pento/lib/pento/accounts/user.ex | 12 +++++++++++- .../lib/pento_web/components/layouts/root.html.heex | 2 +- pento/lib/pento_web/live/user_registration_live.ex | 1 + .../repo/migrations/20240818133031_add_username.exs | 11 +++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 pento/priv/repo/migrations/20240818133031_add_username.exs diff --git a/pento/lib/pento/accounts/user.ex b/pento/lib/pento/accounts/user.ex index 3b0bd4a..1d87802 100644 --- a/pento/lib/pento/accounts/user.ex +++ b/pento/lib/pento/accounts/user.ex @@ -3,6 +3,7 @@ defmodule Pento.Accounts.User do import Ecto.Changeset schema "users" do + field :username, :string field :email, :string field :password, :string, virtual: true, redact: true field :hashed_password, :string, redact: true @@ -37,9 +38,18 @@ defmodule Pento.Accounts.User do """ def registration_changeset(user, attrs, opts \\ []) do user - |> cast(attrs, [:email, :password]) + |> cast(attrs, [:email, :password, :username]) |> validate_email(opts) |> validate_password(opts) + |> validate_username() + end + + defp validate_username(changeset) do + changeset + |> validate_required([:username]) + |> validate_length(:username, min: 4, max: 20) + |> unsafe_validate_unique(:username, Pento.Repo) + |> unique_constraint(:username) end defp validate_email(changeset, opts) do diff --git a/pento/lib/pento_web/components/layouts/root.html.heex b/pento/lib/pento_web/components/layouts/root.html.heex index dc3be84..ddc5b26 100644 --- a/pento/lib/pento_web/components/layouts/root.html.heex +++ b/pento/lib/pento_web/components/layouts/root.html.heex @@ -15,7 +15,7 @@