Skip to content

Commit 49eb0b5

Browse files
landongrindheimbegedin
authored andcommitted
Remove JaResource for StripeConnectSubscriptions (#1041)
1 parent 4ff94a2 commit 49eb0b5

4 files changed

Lines changed: 36 additions & 26 deletions

File tree

lib/code_corps/policy/policy.ex

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ defmodule CodeCorps.Policy do
5454
do: Policy.StripeConnectPlan.show?(current_user, stripe_connect_plan)
5555
defp can?(%User{} = current_user, :create, %StripeConnectPlan{}, %{} = params),
5656
do: Policy.StripeConnectPlan.create?(current_user, params)
57+
defp can?(%User{} = current_user, :show, %StripeConnectSubscription{} = stripe_connect_subscription, %{}),
58+
do: Policy.StripeConnectSubscription.show?(current_user, stripe_connect_subscription)
59+
defp can?(%User{} = current_user, :create, %StripeConnectSubscription{}, %{} = params),
60+
do: Policy.StripeConnectSubscription.create?(current_user, params)
5761
defp can?(%User{} = current_user, :create, %Skill{}, %{}), do: Policy.Skill.create?(current_user)
5862
defp can?(%User{} = current_user, :show, %StripePlatformCard{} = stripe_platform_card, %{}),
5963
do: Policy.StripePlatformCard.show?(current_user, stripe_platform_card)
@@ -106,8 +110,5 @@ defmodule CodeCorps.Policy do
106110
def can?(%User{} = user, :delete, %ProjectGithubRepo{} = project_github_repo), do: Policy.ProjectGithubRepo.delete?(user, project_github_repo)
107111

108112
def can?(%User{} = user, :create, Role), do: Policy.Role.create?(user)
109-
110-
def can?(%User{} = user, :show, %StripeConnectSubscription{} = stripe_connect_subscription), do: Policy.StripeConnectSubscription.show?(user, stripe_connect_subscription)
111-
def can?(%User{} = user, :create, %Changeset{ data: %StripeConnectSubscription{}} = changeset), do: Policy.StripeConnectSubscription.create?(user, changeset)
112113
end
113114
end

lib/code_corps/policy/stripe_connect_subscription.ex

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
defmodule CodeCorps.Policy.StripeConnectSubscription do
2-
alias CodeCorps.StripeConnectSubscription
3-
alias CodeCorps.User
4-
alias Ecto.Changeset
2+
alias CodeCorps.{StripeConnectSubscription, User}
53

6-
def create?(user, subscription), do: user |> owns?(subscription)
4+
@spec create?(User.t, map) :: boolean
5+
def create?(user, params), do: user |> owns?(params)
6+
7+
@spec show?(User.t, StripeConnectSubscription.t) :: boolean
78
def show?(user, subscription), do: user |> owns?(subscription)
89

9-
defp owns?(%User{id: current_user_id}, %Changeset{changes: %{user_id: user_id}}) do
10+
defp owns?(%User{id: current_user_id}, %StripeConnectSubscription{user_id: user_id}) do
1011
current_user_id == user_id
1112
end
12-
defp owns?(%User{id: current_user_id}, %StripeConnectSubscription{user_id: user_id}) do
13+
defp owns?(%User{id: current_user_id}, %{"user_id" => user_id}) do
1314
current_user_id == user_id
1415
end
1516
defp owns?(_, _), do: false
Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,28 @@
11
defmodule CodeCorpsWeb.StripeConnectSubscriptionController do
22
use CodeCorpsWeb, :controller
3-
use JaResource
43

5-
alias CodeCorps.StripeConnectSubscription
4+
alias CodeCorps.{StripeConnectSubscription, User}
65
alias CodeCorps.StripeService.StripeConnectSubscriptionService
76

8-
plug :load_and_authorize_resource, model: StripeConnectSubscription, only: [:show], preload: [:user]
9-
plug :load_and_authorize_changeset, model: StripeConnectSubscription, only: [:create]
7+
action_fallback CodeCorpsWeb.FallbackController
8+
plug CodeCorpsWeb.Plug.DataToAttributes
9+
plug CodeCorpsWeb.Plug.IdsToIntegers
1010

11-
plug JaResource
12-
13-
@spec model :: module
14-
def model, do: CodeCorps.StripeConnectSubscription
11+
@spec show(Conn.t, map) :: Conn.t
12+
def show(%Conn{} = conn, %{"id" => id} = params) do
13+
with %User{} = current_user <- conn |> Guardian.Plug.current_resource,
14+
%StripeConnectSubscription{} = subscription <- StripeConnectSubscription |> Repo.get(id),
15+
{:ok, :authorized} <- current_user |> Policy.authorize(:show, subscription, params) do
16+
conn |> render("show.json-api", data: subscription)
17+
end
18+
end
1519

16-
def handle_create(_conn, attributes) do
17-
attributes |> StripeConnectSubscriptionService.find_or_create
20+
@spec create(Plug.Conn.t, map) :: Conn.t
21+
def create(%Conn{} = conn, %{} = params) do
22+
with %User{} = current_user <- conn |> Guardian.Plug.current_resource,
23+
{:ok, :authorized} <- current_user |> Policy.authorize(:create, %StripeConnectSubscription{}, params),
24+
{:ok, %StripeConnectSubscription{} = subscription} <- StripeConnectSubscriptionService.find_or_create(params) do
25+
conn |> put_status(:created) |> render("show.json-api", data: subscription)
26+
end
1827
end
1928
end

test/lib/code_corps/policy/stripe_connect_subscription_test.exs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,22 @@ defmodule CodeCorps.Policy.StripeConnectSubscriptionTest do
22
use CodeCorps.PolicyCase
33

44
import CodeCorps.Policy.StripeConnectSubscription, only: [create?: 2, show?: 2]
5-
import CodeCorps.StripeConnectSubscription, only: [create_changeset: 2]
6-
7-
alias CodeCorps.StripeConnectSubscription
85

96
describe "create?" do
107
test "returns true if user is creating their own record" do
118
user = insert(:user)
12-
changeset = %StripeConnectSubscription{} |> create_changeset(%{user_id: user.id})
9+
stripe_connect_subscription = insert(:stripe_connect_subscription, user: user)
10+
params = %{"id" => stripe_connect_subscription.id, "user_id" => user.id}
1311

14-
assert create?(user, changeset)
12+
assert create?(user, params)
1513
end
1614

1715
test "returns false if user is creating someone else's record" do
1816
user = build(:user)
19-
changeset = %StripeConnectSubscription{} |> create_changeset(%{user_id: -1})
17+
stripe_connect_subscription = insert(:stripe_connect_subscription)
18+
params = %{"id" => stripe_connect_subscription.id, "user_id" => -1}
2019

21-
refute create?(user, changeset)
20+
refute create?(user, params)
2221
end
2322
end
2423

0 commit comments

Comments
 (0)