From 58c46012037563fcd10cbc090f4b0b7f39bd980c Mon Sep 17 00:00:00 2001 From: Joao P Dubas Date: Sat, 26 Jun 2021 17:23:27 +0000 Subject: [PATCH] [day-04] add exercise schema So a training is a collection of exercises that have a description and a protocol to be followed. --- lib/wabanex/exercise.ex | 30 +++++++++++++++++++ lib/wabanex/training.ex | 3 ++ .../20210624003645_create_exercises_table.exs | 15 ++++++++++ 3 files changed, 48 insertions(+) create mode 100644 lib/wabanex/exercise.ex create mode 100644 priv/repo/migrations/20210624003645_create_exercises_table.exs diff --git a/lib/wabanex/exercise.ex b/lib/wabanex/exercise.ex new file mode 100644 index 0000000..f131ed7 --- /dev/null +++ b/lib/wabanex/exercise.ex @@ -0,0 +1,30 @@ +defmodule Wabanex.Exercise do + use Ecto.Schema + + import Ecto.Changeset + + alias Wabanex.Training + + @primary_key {:id, :binary_id, autogenerate: true} + @foreign_key_type :binary_id + + @fields [:name, :video_url, :protocol_description, :repetitions, :training_id] + @required_fields [:name, :protocol_description, :repetitions] + + schema "exercises" do + field :name, :string + field :video_url, :string + field :protocol_description, :string + field :repetitions, :string + + belongs_to :training, Training + + timestamps() + end + + def changeset(%__MODULE__{} = struct, params) do + struct + |> cast(params, @fields) + |> validate_required(@required_fields) + end +end diff --git a/lib/wabanex/training.ex b/lib/wabanex/training.ex index e2fee55..fd8bca2 100644 --- a/lib/wabanex/training.ex +++ b/lib/wabanex/training.ex @@ -17,6 +17,8 @@ defmodule Wabanex.Training do belongs_to :user, User + has_many :exercises, Exercise + timestamps() end @@ -24,5 +26,6 @@ defmodule Wabanex.Training do %__MODULE__{} |> cast(params, @fields) |> validate_required(@required_fields) + |> cast_assoc(:exercises) end end diff --git a/priv/repo/migrations/20210624003645_create_exercises_table.exs b/priv/repo/migrations/20210624003645_create_exercises_table.exs new file mode 100644 index 0000000..973519b --- /dev/null +++ b/priv/repo/migrations/20210624003645_create_exercises_table.exs @@ -0,0 +1,15 @@ +defmodule Wabanex.Repo.Migrations.CreateExercisesTable do + use Ecto.Migration + + def change do + create table(:exercises) do + add :name, :string, null: false + add :video_url, :string + add :protocol_description, :string, null: false + add :repetitions, :string, null: false + add :training_id, references(:trainings), null: false + + timestamps() + end + end +end