diff --git a/lib/learning_phoenix/user.ex b/lib/learning_phoenix/user.ex new file mode 100644 index 0000000..9fc347b --- /dev/null +++ b/lib/learning_phoenix/user.ex @@ -0,0 +1,31 @@ +defmodule LearningPhoenix.User do + use Ecto.Schema + import Ecto.Changeset + + schema "users" do + field :name, :string + field :email, :string + field :password, :string + + timestamps(type: :utc_datetime) + end + + @doc false + def changeset(user, attrs) do + user + |> cast(attrs, [:name, :email, :password]) + |> validate_required([:name, :email, :password]) + |> validate_length(:name, min: 2) + |> validate_length(:name, max: 30) + |> valid_email(:email) + end + + def valid_email(changeset, field) do + value = get_field(changeset, field) + if value =~ "@" do + changeset + else + add_error(changeset, field, "invalid email") + end + end +end diff --git a/priv/repo/migrations/20250812135200_create_users.exs b/priv/repo/migrations/20250812135200_create_users.exs new file mode 100644 index 0000000..2851a56 --- /dev/null +++ b/priv/repo/migrations/20250812135200_create_users.exs @@ -0,0 +1,13 @@ +defmodule LearningPhoenix.Repo.Migrations.CreateUsers do + use Ecto.Migration + + def change do + create table(:users) do + add :name, :string + add :email, :string + add :password, :string + + timestamps(type: :utc_datetime) + end + end +end