diff --git a/friends/lib/friends/accounts.ex b/friends/lib/friends/accounts.ex index e0046ad..9465ef0 100644 --- a/friends/lib/friends/accounts.ex +++ b/friends/lib/friends/accounts.ex @@ -96,13 +96,19 @@ defmodule Friends.Accounts do """ def assign_profile(%User{} = user) do case user.email |> Friends.Friend.get_by_email do - nil -> nil + nil -> + nil friend -> - friend + new_friend = friend |> Friends.Friend.changeset(%{ - user_id: user.id - }) + user_id: user.id}) |> Friends.Repo.update!() + |> Friends.Friend.load_user + + %{ + friend: new_friend, + user: new_friend.user |> Friends.Accounts.User.load_profile + } end end diff --git a/friends/lib/friends/friend.ex b/friends/lib/friends/friend.ex index d8f40df..138828d 100644 --- a/friends/lib/friends/friend.ex +++ b/friends/lib/friends/friend.ex @@ -56,7 +56,7 @@ defmodule Friends.Friend do end def new(params \\ %{}) do - %Friend{id: "new"} + %Friend{id: :new} |> struct(params) end @@ -100,19 +100,23 @@ defmodule Friends.Friend do } end + def commit(friend) do + friend + |> @repo.insert! + |> load_user + end + def create_or_update(params) do case params.id do :new -> - friend = create(params) - friend - |> @repo.insert! - |> load_user + params + |> create() + |> commit() _number -> - friend = update(params) - friend - |> @repo.insert! - |> load_user - end + params + |> update() + |> commit() + end end def get_relationships(friend) do @@ -148,9 +152,20 @@ defmodule Friends.Friend do end end + def assign_user(%Friend{} = friend) do + case friend.email |> Friends.Accounts.get_user_by_email do + nil -> + nil + user -> + user |> Friends.Accounts.assign_profile + end + end + def load_user(%Friends.Friend{user: %Ecto.Association.NotLoaded{}} = model) do model |> @repo.preload(:user) end + def load_user(%Friends.Friend{} = friend), do: friend + end diff --git a/friends/lib/friends_web/controllers/page_controller.ex b/friends/lib/friends_web/controllers/page_controller.ex index c0ec44d..d24f1da 100644 --- a/friends/lib/friends_web/controllers/page_controller.ex +++ b/friends/lib/friends_web/controllers/page_controller.ex @@ -7,10 +7,16 @@ defmodule FriendsWeb.PageController do def index(conn, _params) do new_friend = Friend.new() |> Friend.changeset() - conn - |> assign(:new_friend, new_friend) - |> assign(:all_friends, Friend.all()) - |> assign(:users, User |> Repo.all()) - |> render("index.html") + if(conn|> get_session(:linked)) do + # If logged in and linked, redirect to friend_path :index + conn |> redirect(to: FriendsWeb.Router.Helpers.friend_path(conn, :index)) + else + # Otherwise, show the landing page + conn + |> assign(:new_friend, new_friend) + |> assign(:all_friends, Friend.all()) + |> assign(:users, User |> Repo.all()) + |> render("index.html") + end end end diff --git a/friends/lib/friends_web/controllers/user_auth.ex b/friends/lib/friends_web/controllers/user_auth.ex index 2e332cb..3965abb 100644 --- a/friends/lib/friends_web/controllers/user_auth.ex +++ b/friends/lib/friends_web/controllers/user_auth.ex @@ -138,10 +138,11 @@ defmodule FriendsWeb.UserAuth do case profile do nil -> # No profile linked - conn |> create_or_link_profile(current_user) + conn + |> create_or_link_profile(current_user) _profile -> # Profile already linked - conn + conn |> put_session(:linked, true) end else # Not logged in @@ -158,8 +159,12 @@ defmodule FriendsWeb.UserAuth do |> halt() # Or make a new one profile -> - user |> Friends.Accounts.assign_profile + user + |> Friends.Accounts.assign_profile + conn + |> put_session(:linked, true) + end end diff --git a/friends/lib/friends_web/templates/user_registration/new.html.heex b/friends/lib/friends_web/templates/user_registration/new.html.heex index bd79fcd..b92b033 100644 --- a/friends/lib/friends_web/templates/user_registration/new.html.heex +++ b/friends/lib/friends_web/templates/user_registration/new.html.heex @@ -3,7 +3,7 @@ <.form let={f} for={@changeset} action={Routes.user_registration_path(@conn, :create)}> <%= if @changeset.action do %>
-

Oops, something went wrong! Please check the errors below.

+ Oops, something went wrong! Please check the errors below.
<% end %>