From ea5616addf7ebcf788040e87082c5792cd20b349 Mon Sep 17 00:00:00 2001 From: Joao P Dubas Date: Sat, 26 Jun 2021 17:21:29 +0000 Subject: [PATCH] [day-04] add training schema With this we can represent a traning program for a user. --- lib/wabanex/training.ex | 28 +++++++++++++++++++ lib/wabanex/trainings/create.ex | 9 ++++++ lib/wabanex/user.ex | 4 +++ .../20210624003633_create_trainings_table.exs | 13 +++++++++ 4 files changed, 54 insertions(+) create mode 100644 lib/wabanex/training.ex create mode 100644 lib/wabanex/trainings/create.ex create mode 100644 priv/repo/migrations/20210624003633_create_trainings_table.exs diff --git a/lib/wabanex/training.ex b/lib/wabanex/training.ex new file mode 100644 index 0000000..e2fee55 --- /dev/null +++ b/lib/wabanex/training.ex @@ -0,0 +1,28 @@ +defmodule Wabanex.Training do + use Ecto.Schema + + import Ecto.Changeset + + alias Wabanex.{Exercise, User} + + @primary_key {:id, :binary_id, autogenerate: true} + @foreign_key_type :binary_id + + @fields [:start_date, :end_date, :user_id] + @required_fields [:start_date, :user_id] + + schema "trainings" do + field :start_date, :date + field :end_date, :date + + belongs_to :user, User + + timestamps() + end + + def changeset(params) do + %__MODULE__{} + |> cast(params, @fields) + |> validate_required(@required_fields) + end +end diff --git a/lib/wabanex/trainings/create.ex b/lib/wabanex/trainings/create.ex new file mode 100644 index 0000000..e3be003 --- /dev/null +++ b/lib/wabanex/trainings/create.ex @@ -0,0 +1,9 @@ +defmodule Wabanex.Trainings.Create do + alias Wabanex.{Training, Repo} + + def call(params) do + params + |> Training.changeset() + |> Repo.insert() + end +end diff --git a/lib/wabanex/user.ex b/lib/wabanex/user.ex index 562c2b1..c93e2ff 100644 --- a/lib/wabanex/user.ex +++ b/lib/wabanex/user.ex @@ -3,6 +3,8 @@ defmodule Wabanex.User do import Ecto.Changeset + alias Wabanex.Training + @primary_key {:id, :binary_id, autogenerate: true} @fields ~w(name email password)a @@ -12,6 +14,8 @@ defmodule Wabanex.User do field :email, :string field :password, :string + has_many :trainings, Training + timestamps() end diff --git a/priv/repo/migrations/20210624003633_create_trainings_table.exs b/priv/repo/migrations/20210624003633_create_trainings_table.exs new file mode 100644 index 0000000..37976cb --- /dev/null +++ b/priv/repo/migrations/20210624003633_create_trainings_table.exs @@ -0,0 +1,13 @@ +defmodule Wabanex.Repo.Migrations.CreateTrainingsTable do + use Ecto.Migration + + def change do + create table(:trainings) do + add :start_date, :date, null: false + add :end_date, :date + add :user_id, references(:users), null: false + + timestamps() + end + end +end