Skip to content
This repository has been archived by the owner on Jan 27, 2021. It is now read-only.

Commit

Permalink
add email delivery state for users
Browse files Browse the repository at this point in the history
  • Loading branch information
NikitaNaumenko committed Sep 12, 2019
1 parent 314edf6 commit 7ffc4ab
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 2 deletions.
1 change: 1 addition & 0 deletions services/app/.iex.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ import Ecto.Query
alias HexletBasics.Repo
alias HexletBasics.Language
alias HexletBasics.User
alias HexletBasics.UserManager
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
defmodule HexletBasics.StateMachines.User.EmailDeliveryStateMachine do
use Machinery,
field: :email_delivery_state,
states: ["enabled", "disabled"],
transitions: %{
"enabled" => "disabled",
"disabled" => "enabled"
}
end
5 changes: 5 additions & 0 deletions services/app/lib/hexlet_basics/user.ex
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ defmodule HexletBasics.User do
field(:facebook_uid, :string)
field(:nickname, :string)
field(:state, :string, default: "initial")
field(:email_delivery_state, :string, default: "enabled")
field(:encrypted_password, :string)
field(:confirmation_token, :string)
field(:reset_password_token, :string)
Expand All @@ -39,6 +40,10 @@ defmodule HexletBasics.User do
user |> cast(attrs, [:state])
end

def email_delivery_state_changeset(%User{} = user, attrs \\ %{}) do
user |> cast(attrs, [:email_delivery_state])
end

def locale_changeset(%User{} = user, attrs \\ %{}) do
user |> cast(attrs, [:locale])
end
Expand Down
21 changes: 20 additions & 1 deletion services/app/lib/hexlet_basics/user_manager.ex
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
defmodule HexletBasics.UserManager do
alias Bcrypt
alias HexletBasics.{User, User.Account, StateMachines.UserStateMachine}
alias HexletBasics.{User, User.Account}
alias HexletBasics.StateMachines.{UserStateMachine, User.EmailDeliveryStateMachine}
import Ecto.Query, warn: false
alias HexletBasics.Repo

Expand Down Expand Up @@ -75,6 +76,24 @@ defmodule HexletBasics.UserManager do
|> Repo.insert()
end

def disable_delivery!(user) do
{:ok, %User{email_delivery_state: state}} =
Machinery.transition_to(user, EmailDeliveryStateMachine, "disabled")

user
|> User.email_delivery_state_changeset(%{email_delivery_state: state})
|> Repo.update!()
end

def enable_delivery!(user) do
{:ok, %User{email_delivery_state: state}} =
Machinery.transition_to(user, EmailDeliveryStateMachine, "enabled")

user
|> User.email_delivery_state_changeset(%{email_delivery_state: state})
|> Repo.update!()
end

defp activate_user!(user) do
{:ok, %User{state: state}} =
Machinery.transition_to(user, UserStateMachine, "active")
Expand Down
2 changes: 1 addition & 1 deletion services/app/lib/hexlet_basics_web/router.ex
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ defmodule HexletBasicsWeb.Router do
scope "/api/webhooks", HexletBasicsWeb do
pipe_through(:api_for_webhooks)

post("sparkpost/process", Api.Webhooks.SparkpostController, :process)
post("/sparkpost/process", Api.Webhooks.SparkpostController, :process)
end

scope "/", HexletBasicsWeb do
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
defmodule HexletBasics.Repo.Migrations.AddEmailDeliveryStateToUser do
use Ecto.Migration

def change do
alter table(:users) do
add :email_delivery_state, :string
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
defmodule HexletBasics.Repo.Migrations.MigrateEmailDelivieryStateForUser do
use Ecto.Migration

def change do
HexletBasics.Repo.update_all(HexletBasics.User, set: [email_delivery_state: "enabled"])
end
end

0 comments on commit 7ffc4ab

Please sign in to comment.