diff --git a/priv/repo/add_default_tasks_to_projects.exs b/priv/repo/add_default_tasks_to_projects.exs new file mode 100644 index 000000000..9d0178786 --- /dev/null +++ b/priv/repo/add_default_tasks_to_projects.exs @@ -0,0 +1,45 @@ +defmodule CodeCorps.Repo.Seeds.AddDefaultTasksToProjects do + import Ecto.Changeset + import Ecto.Query + + alias CodeCorps.Project + alias CodeCorps.Repo + alias CodeCorps.Task + alias CodeCorps.TaskList + + def migrate_existing() do + Project + |> preload(:task_lists) + |> Repo.all() + |> Enum.each(&handle_project_migration/1) + end + + defp handle_project_migration(project) do + cond do + project.task_lists != [] -> + IO.puts "Task lists already exist for #{project.title}, skipping migration." + true -> + IO.puts "Generating default task lists for #{project.title}." + + {:ok, project} = Project.changeset(project, %{}) + |> put_assoc(:task_lists, TaskList.default_task_lists()) + |> Repo.update + + add_existing_tasks_to_inbox(project, hd(project.task_lists)) + end + end + + defp add_existing_tasks_to_inbox(project, task_list) do + Task + |> CodeCorps.Helpers.Query.project_filter(%{ project_id: project.id }) + |> Repo.all() + |> Enum.each(&assign_task_to_inbox(&1, task_list)) + end + + defp assign_task_to_inbox(task, task_list) do + Task.changeset(task, %{ task_list_id: task_list.id }) + |> Repo.update() + end +end + +CodeCorps.Repo.Seeds.AddDefaultTasksToProjects.migrate_existing() diff --git a/priv/repo/migrations/20161209192504_create_task_list.exs b/priv/repo/migrations/20161209192504_create_task_list.exs index fa2d70fdf..c8a31cecc 100644 --- a/priv/repo/migrations/20161209192504_create_task_list.exs +++ b/priv/repo/migrations/20161209192504_create_task_list.exs @@ -1,12 +1,5 @@ defmodule CodeCorps.Repo.Migrations.CreateTaskList do use Ecto.Migration - import Ecto.Changeset - import Ecto.Query - - alias CodeCorps.Project - alias CodeCorps.Repo - alias CodeCorps.Task - alias CodeCorps.TaskList def change do create table(:task_lists) do @@ -23,44 +16,5 @@ defmodule CodeCorps.Repo.Migrations.CreateTaskList do add :task_list_id, references(:task_lists, on_delete: :nothing) add :order, :integer end - - flush - - Application.ensure_all_started :timex - migrate_existing() - end - - def migrate_existing() do - Project - |> preload(:task_lists) - |> Repo.all() - |> Enum.each(&handle_project_migration/1) - end - - defp handle_project_migration(project) do - cond do - project.task_lists != [] -> - IO.puts "Task lists already exist for #{project.title}, skipping migration." - true -> - IO.puts "Generating default task lists for #{project.title}." - - {:ok, project} = Project.changeset(project, %{}) - |> put_assoc(:task_lists, TaskList.default_task_lists()) - |> Repo.update - - add_existing_tasks_to_inbox(project, hd(project.task_lists)) - end - end - - defp add_existing_tasks_to_inbox(project, task_list) do - Task - |> CodeCorps.Helpers.Query.project_filter(%{ project_id: project.id }) - |> Repo.all() - |> Enum.each(&assign_task_to_inbox(&1, task_list)) - end - - defp assign_task_to_inbox(task, task_list) do - Task.changeset(task, %{ task_list_id: task_list.id }) - |> Repo.update() end end diff --git a/priv/repo/migrations/20170106013143_add_editable_to_task_lists.exs b/priv/repo/migrations/20170106013143_add_editable_to_task_lists.exs index f5a7a69e8..764b3b445 100644 --- a/priv/repo/migrations/20170106013143_add_editable_to_task_lists.exs +++ b/priv/repo/migrations/20170106013143_add_editable_to_task_lists.exs @@ -9,12 +9,6 @@ defmodule CodeCorps.Repo.Migrations.AddEditableToTaskLists do alter table(:task_lists) do add :inbox, :boolean, default: false end - - flush - - TaskList - |> where([task_list], task_list.name == "Inbox") - |> Repo.update_all(set: [inbox: true]) end def down do diff --git a/priv/repo/structure.sql b/priv/repo/structure.sql index 79a604de9..800f2fffb 100644 --- a/priv/repo/structure.sql +++ b/priv/repo/structure.sql @@ -2,8 +2,8 @@ -- PostgreSQL database dump -- --- Dumped from database version 9.5.1 --- Dumped by pg_dump version 9.5.1 +-- Dumped from database version 9.5.4 +-- Dumped by pg_dump version 9.5.4 SET statement_timeout = 0; SET lock_timeout = 0; diff --git a/web/models/task_list.ex b/web/models/task_list.ex index 087f69cb7..3e81f04e5 100644 --- a/web/models/task_list.ex +++ b/web/models/task_list.ex @@ -35,7 +35,7 @@ defmodule CodeCorps.TaskList do name: "Done", position: 4 } - ] |> Enum.map(fn (params) -> changeset(%TaskList{}, params) end) + ] |> Enum.map(fn (params) -> create_changeset(%TaskList{}, params) end) end @doc """ @@ -47,4 +47,11 @@ defmodule CodeCorps.TaskList do |> validate_required([:name, :position]) |> set_order(:position, :order, :project_id) end + + def create_changeset(struct, params) do + struct + |> cast(params, [:inbox]) + |> changeset(params) + |> validate_required([:inbox]) + end end