philomena/lib/philomena_web/plugs/notification_count_plug.ex

48 lines
1.1 KiB
Elixir
Raw Permalink Normal View History

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
2019-12-02 15:55:48 +01:00
@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 = conn.assigns.current_user
conn
|> maybe_assign_notifications(user)
|> maybe_assign_conversations(user)
end
defp maybe_assign_notifications(conn, nil), do: conn
2020-01-11 05:20:19 +01:00
defp maybe_assign_notifications(conn, user) do
notifications = Notifications.count_unread_notifications(user)
Conn.assign(conn, :notification_count, notifications)
end
defp maybe_assign_conversations(conn, nil), do: conn
2020-01-11 05:20:19 +01:00
defp maybe_assign_conversations(conn, user) do
conversations = Conversations.count_unread_conversations(user)
Conn.assign(conn, :conversation_count, conversations)
end
2020-01-11 05:20:19 +01:00
end