Skip to content

Commit 0889153

Browse files
committed
Added field closed_at for Tasks and setup changeset accordingly
1 parent 72738d2 commit 0889153

File tree

4 files changed

+179
-138
lines changed

4 files changed

+179
-138
lines changed

lib/code_corps/model/task.ex

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ defmodule CodeCorps.Task do
44
import EctoOrdered
55

66
alias CodeCorps.Services.MarkdownRendererService
7+
alias Ecto.Changeset
78

89
@type t :: %__MODULE__{}
910

1011
schema "tasks" do
12+
field :closed_at, :utc_datetime
1113
field :body, :string
1214
field :markdown, :string
1315
field :number, :integer, read_after_writes: true
@@ -58,6 +60,7 @@ defmodule CodeCorps.Task do
5860
|> changeset(params)
5961
|> cast(params, [:status])
6062
|> validate_inclusion(:status, statuses())
63+
|> set_closed_at()
6164
end
6265

6366
def apply_position(changeset) do
@@ -71,4 +74,15 @@ defmodule CodeCorps.Task do
7174
defp statuses do
7275
~w{ open closed }
7376
end
77+
78+
defp set_closed_at(changeset) do
79+
case changeset do
80+
%Changeset{valid?: true, changes: %{status: "closed"}} ->
81+
put_change(changeset, :closed_at, DateTime.utc_now)
82+
%Changeset{valid?: true, changes: %{status: "open"}} ->
83+
put_change(changeset, :closed_at, nil)
84+
_ ->
85+
changeset
86+
end
87+
end
7488
end
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
defmodule CodeCorps.Repo.Migrations.AddClosedAtToTasks do
2+
use Ecto.Migration
3+
4+
def change do
5+
alter table(:tasks) do
6+
add :closed_at, :utc_datetime
7+
end
8+
end
9+
end

0 commit comments

Comments
 (0)