philomena/lib/philomena_web/plugs/notification_count_plug.ex
2020-01-10 23:20:19 -05:00

49 lines
1.1 KiB
Elixir

defmodule PhilomenaWeb.NotificationCountPlug do
@moduledoc """
This plug stores the current notification count.
## Example
plug PhilomenaWeb.NotificationCountPlug
"""
alias Plug.Conn
alias Philomena.Conversations
alias Philomena.Notifications
@doc false
@spec init(any()) :: any()
def init(opts), do: opts
@doc false
@spec call(Plug.Conn.t()) :: Plug.Conn.t()
def call(conn), do: call(conn, nil)
@doc false
@spec call(Plug.Conn.t(), any()) :: Plug.Conn.t()
def call(conn, _opts) do
user = Pow.Plug.current_user(conn)
conn
|> maybe_assign_notifications(user)
|> maybe_assign_conversations(user)
end
defp maybe_assign_notifications(conn, nil), do: conn
defp maybe_assign_notifications(conn, user) do
notifications = Notifications.count_unread_notifications(user)
conn
|> Conn.assign(:notification_count, notifications)
end
defp maybe_assign_conversations(conn, nil), do: conn
defp maybe_assign_conversations(conn, user) do
conversations = Conversations.count_unread_conversations(user)
conn
|> Conn.assign(:conversation_count, conversations)
end
end